技術ブログ

GASとGmailで請求書を自動送信!初心者向け解説

/ 初心者向け

GASとGmailで請求書を自動送信!初心者向け解説

GASとGmailで請求書を自動送信!効率化を実現しましょう

ビジネスにおいて、請求書の発行と送付は避けて通れない業務です。しかし、一件一件手作業で行うのは時間と手間がかかり、ミスも発生しやすくなります。そこで今回は、Google Apps Script(GAS)とGmailを連携させて、請求書を自動送信する方法をご紹介します。GAS初心者の方でも理解できるよう、丁寧に解説していきますので、ぜひ最後までご覧ください。

1. Google Apps Script (GAS) とは?

GASは、Googleが提供するJavaScriptベースのクラウドスクリプト言語です。Gmail、Googleスプレッドシート、Googleドキュメントなど、Google Workspaceの様々なサービスと連携し、業務の自動化や効率化を実現できます。

2. 請求書自動送信の全体像

今回作成するスクリプトでは、以下の流れで請求書を自動送信します。

1. Googleスプレッドシートに請求書情報を入力: 請求先情報、請求金額、発行日などをスプレッドシートにまとめます。

2. GASがスプレッドシートの情報を読み取る: スプレッドシートに新しい行が追加されたり、特定の条件を満たした場合にGASが反応します。

3. 請求書PDFを生成(または既存のPDFを参照): スプレッドプレッドシートの情報を元に、請求書PDFを作成します。今回は、GASでPDFを生成するのではなく、事前に用意した請求書テンプレートにデータを差し込む、もしくはスプレッドシート自体をPDFとして保存するイメージで進めます。

4. Gmailで請求書を添付して送信: 生成された請求書PDFを添付し、指定されたメールアドレスに自動送信します。

3. 事前準備

  • Googleアカウント: Gmailを利用するため、Googleアカウントが必要です。
  • Googleスプレッドシート: 請求書情報を管理するためのスプレッドシートを用意します。最低限、以下の列があると便利です。
  • 請求先会社名
  • 担当者名
  • メールアドレス
  • 請求金額
  • 請求書番号
  • 発行日
  • 送信済みフラグ (例: "未送信", "送信済")
  • 請求書テンプレート(任意): もし、GASで動的に請求書PDFを生成したい場合は、別途テンプレートを用意する必要があります。今回は、シンプルにするために、スプレッドシートから直接PDF化する、もしくは簡単なテキストメールで代用するケースを想定します。

4. GASスクリプトの作成

Googleスプレッドシートを開き、「拡張機能」>「Apps Script」を選択してスクリプトエディタを開きます。

4.1. スプレッドシートのデータを読み取る

まず、スプレッドシートのデータを取得する関数を作成します。

function sendInvoices() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues();

  // ヘッダー行をスキップ
  for (let i = 1; i < values.length; i++) {
    const row = values[i];
    const recipientName = row[0]; // 請求先会社名
    const contactPerson = row[1]; // 担当者名
    const emailAddress = row[2]; // メールアドレス
    const invoiceAmount = row[3]; // 請求金額
    const invoiceNumber = row[4]; // 請求書番号
    const issueDate = row[5]; // 発行日
    const sentStatus = row[6]; // 送信済みフラグ

    // まだ送信されていない請求書のみ処理
    if (sentStatus === "未送信") {
      // ここにメール送信処理を記述
    }
  }
}

4.2. Gmailでメールを送信する

次に、取得したデータを使ってGmailでメールを送信する処理を追加します。今回は、スプレッドシートの情報を元に簡単なメール本文を作成し、PDFは別途添付する(または、スプレッドシートをPDF化して添付する)と仮定します。

注意: GASで請求書PDFを動的に生成するには、より複雑なコードが必要になります。ここでは、スプレッドシートをPDFとして保存し、それを添付する方法を例に挙げます。

function sendInvoices() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues();

  // ヘッダー行をスキップ
  for (let i = 1; i < values.length; i++) {
    const row = values[i];
    const recipientName = row[0];
    const contactPerson = row[1];
    const emailAddress = row[2];
    const invoiceAmount = row[3];
    const invoiceNumber = row[4];
    const issueDate = row[5];
    const sentStatus = row[6];

    if (sentStatus === "未送信") {
      // 請求書PDFを生成(スプレッドシートをPDF化)
      const pdf = generateInvoicePdf(ss.getId(), sheet.getIndex());

      // メール件名と本文
      const subject = `${issueDate} 請求書発行のお知らせ(請求書番号: ${invoiceNumber})`;
      const body = `${recipientName} 様

${contactPerson} 様

いつもお世話になっております。

下記のとおり、請求書を発行いたしましたので、ご確認ください。

請求金額: ${invoiceAmount}円
請求書番号: ${invoiceNumber}
発行日: ${issueDate}

添付ファイルをご確認ください。

よろしくお願いいたします。

[あなたの会社名]`;

      // Gmailでメール送信
      GmailApp.sendEmail(emailAddress, subject, body, {
        attachments: [pdf]
      });

      // 送信済みにステータスを更新
      sheet.getRange(i + 1, 7).setValue("送信済");
      Logger.log(`請求書 ${invoiceNumber} を ${emailAddress} へ送信しました。`);
    }
  }
}

// スプレッドシートをPDFとして取得する関数
function generateInvoicePdf(spreadsheetId, sheetIndex) {
  const url = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/export?format=pdf&gid=${sheetIndex - 1}&portrait=true&fitw=true`;
  const token = ScriptApp.getOAuthToken();
  const response = UrlFetchApp.fetch(url, {
    headers: {
      'Authorization': 'Bearer ' + token
    }
  });
  return response.getBlob().setName(`invoice_${invoiceNumber}.pdf`);
}

補足: generateInvoicePdf 関数は、スプレッドシートの指定したシートをPDFとして取得するものです。sheetIndex - 1 は、gid の値が0から始まるためです。また、PDFファイル名に請求書番号を含めるようにしています。

4.3. トリガーの設定

このスクリプトを定期的に実行したり、特定のイベントで実行したりするために「トリガー」を設定します。スクリプトエディタの左側にある時計アイコンをクリックし、「トリガーを追加」を選択します。

  • 実行する関数を選択: sendInvoices
  • 実行するデプロイを選択: Head
  • イベントのソースを選択: 「時間主導型」を選択し、実行頻度(例: 毎日午前9時)を設定するのが一般的です。

5. 実行と確認

トリガーを設定したら、手動で一度実行して動作を確認しましょう。スクリプトエディタの再生ボタン(▶)をクリックし、実行します。初回実行時には、スクリプトがGoogleアカウントにアクセスするための承認を求められますので、内容を確認して承認してください。

実行後、Gmailの「送信済み」フォルダでメールが送信されているか、スプレッドシートの「送信済みフラグ」が「送信済」に更新されているかを確認します。

6. まとめ

今回は、GASとGmailを使って請求書を自動送信する方法を解説しました。このスクリプトを応用することで、さまざまな定型業務を自動化し、業務効率を大幅に向上させることができます。ぜひ、ご自身の業務に合わせてカスタマイズしてみてください。

GAS自動化の導入相談

請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。

請求書自動生成ツールを見る / SNS自動投稿ツールを見る