技術ブログ

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

/ 初心者向け

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

GASとGmailで請求書を自動送信!手間を省いて業務効率アップ

経理担当者やフリーランスの皆さん、日々の請求書発行業務に追われていませんか?毎回手作業で請求書を作成し、メールで送信するのは時間も労力もかかりますよね。

そこで今回は、Google Apps Script(GAS)とGmailを連携させて、請求書を自動送信する方法をご紹介します!

GASは、Google Workspaceの各サービスを自動化できるJavaScriptベースのスクリプト言語です。プログラミング経験がなくても、少しの学習で様々な業務を自動化できます。Gmailとの連携も非常に簡単なので、初心者の方でも取り組みやすいテーマです。

この記事で学べること

  • Google Apps Script(GAS)の基本的な使い方
  • スプレッドシートから請求書データを取得する方法
  • GASでGmailを操作し、メールを自動送信する方法
  • 請求書PDFを添付して送信する方法
  • 具体的なスクリプト例と解説

準備するもの

1. Googleアカウント: Gmailを利用するため必須です。

2. Googleスプレッドシート: 請求書データ(顧客名、請求金額、件名など)を管理します。

3. Googleドキュメント: 請求書のテンプレートを作成します。

ステップ1:請求書データをスプレッドシートで管理する

まずは、請求書に必要な情報をGoogleスプレッドシートで管理しましょう。以下のような列構成が考えられます。

  • 顧客名
  • メールアドレス
  • 請求金額
  • 請求日
  • 支払期日
  • ステータス(例: "未送信", "送信済")

例:

| 顧客名 | メールアドレス | 請求金額 | 請求日 | 支払期日 | ステータス |

| ------ | -------------- | -------- | -------- | -------- | ---------- |

| 株式会社〇〇 | example@example.com | 100,000 | 2023/10/27 | 2023/11/26 | 未送信 |

| △△商店 | sample@sample.com | 50,000 | 2023/10/27 | 2023/11/26 | 未送信 |

ステップ2:請求書テンプレートをGoogleドキュメントで作成する

請求書のひな形をGoogleドキュメントで作成します。GASからこのテンプレートをコピーし、スプレッドシートのデータを埋め込んで請求書PDFを生成します。

テンプレートには、後ほどGASで差し込みたい項目にプレースホルダーを設定しておきましょう。例えば、{{顧客名}}{{請求金額}} のように、二重括弧で囲むと分かりやすいです。

ステップ3:GASで請求書を自動生成・送信するスクリプトを作成する

いよいよGASの出番です。Googleドライブで右クリックから「新規」→「その他」→「Google Apps Script」を選択して、新しいスクリプトエディタを開きましょう。

以下のスクリプトは、スプレッドシートのデータを取得し、ドキュメントテンプレートをコピーして請求書PDFを生成し、Gmailで送信する基本的な例です。

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 customerName = row[0];
    const emailAddress = row[1];
    const amount = row[2];
    const invoiceDate = new Date(row[3]);
    const dueDate = new Date(row[4]);
    const status = row[5];

    // ステータスが「未送信」の場合のみ処理を行う
    if (status === "未送信") {
      // ドキュメントテンプレートのIDを指定
      const templateId = "YOUR_TEMPLATE_ID"; // ここにテンプレートのドキュメントIDを入力
      const templateFile = DriveApp.getFileById(templateId);
      const copiedFile = templateFile.makeCopy();
      const doc = DocumentApp.openById(copiedFile.getId());
      const body = doc.getBody();

      // プレースホルダーをスプレッドシートのデータで置換
      body.replaceText("{{顧客名}}", customerName);
      body.replaceText("{{請求金額}}", amount.toLocaleString() + "円");
      body.replaceText("{{請求日}}", Utilities.formatDate(invoiceDate, "JST", "yyyy/MM/dd"));
      body.replaceText("{{支払期日}}", Utilities.formatDate(dueDate, "JST", "yyyy/MM/dd"));

      // PDFとして保存
      const pdfBlob = doc.getAs('application/pdf');
      pdfBlob.setName("請求書_" + customerName + ".pdf");
      
      // メール送信
      const subject = "【請求書】" + customerName + "様";
      const bodyText = "いつもお世話になっております。\n" +
                     customerName + "様\n" +
                     "\n" +
                     "〇〇株式会社です。\n" +
                     "\n" +
                     "下記、請求書をお送りいたします。ご確認よろしくお願いいたします。\n" +
                     "\n" +
                     "添付ファイルをご確認ください。\n" +
                     "\n" +
                     "よろしくお願いいたします。";

      GmailApp.sendEmail(emailAddress,
                         subject,
                         bodyText,
                         { attachments: [pdfBlob] });

      // ステータスを「送信済」に更新
      sheet.getRange(i + 1, 6).setValue("送信済");

      // 作成したドキュメントを削除(任意)
      DriveApp.getFileById(copiedFile.getId()).setTrashed(true);
    }
  }
}

コードの解説:

  • SpreadsheetApp.getActiveSpreadsheet(): 現在アクティブなスプレッドシートを取得します。
  • sheet.getDataRange().getValues(): スプレッドシートの全データを配列として取得します。
  • templateId = "YOUR_TEMPLATE_ID";: ここには、作成した請求書テンプレートのGoogleドキュメントのIDを入力してください。ドキュメントのURLの末尾にある長い文字列です。
  • templateFile.makeCopy(): テンプレートファイルをコピーします。
  • body.replaceText(): コピーしたドキュメント内のプレースホルダーをスプレッドシートのデータで置き換えます。
  • doc.getAs('application/pdf'): ドキュメントをPDF形式で取得します。
  • GmailApp.sendEmail(): Gmailを操作してメールを送信します。attachments オプションでPDFファイルを添付できます。
  • sheet.getRange(i + 1, 6).setValue("送信済");: 処理が完了した行のステータスを更新します。

ステップ4:スクリプトを定期実行する

作成したスクリプトは、手動で実行することもできますが、トリガーを設定して自動実行するのが便利です。

スクリプトエディタの左側にある時計アイコン(トリガー)をクリックし、「トリガーを追加」ボタンを押します。

  • 実行する関数を選択: sendInvoices を選択します。
  • 実行するデプロイを選択: Head を選択します。
  • イベントのソースを選択: 「時間主導型」を選択します。
  • 時間の間隔を選択: 「毎日」「週次」など、希望する実行間隔を設定します。

これにより、設定した時間に自動で請求書が送信されるようになります。

まとめ

Google Apps ScriptとGmailを組み合わせることで、請求書発行業務を大幅に自動化できます。今回の記事では、基本的な流れとスクリプト例をご紹介しましたが、さらに応用することで、以下のようなことも実現可能です。

  • 領収書発行
  • 督促状の自動送信
  • 顧客ごとのカスタマイズメール作成

ぜひ、ご自身の業務に合わせてGASを活用し、効率化を図ってみてください!

もし、スクリプトの作成やデバッグで詰まった場合は、お気軽にコメントでご質問ください。

GAS自動化の導入相談

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

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