技術ブログ

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

/ 初心者向け

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

GASとGmailで請求書を自動送信!手間いらずの業務効率化

請求書の発行・送付作業、毎月大変ですよね?

「もっと効率化したい」「ミスを減らしたい」

そんな悩みを解決するのが、Google Apps Script(GAS)とGmailの連携です。

GASを使えば、ExcelやGoogle スプレッドシートに保存された請求情報を元に、自動で請求書を作成し、Gmailで顧客に送信することができます。今回は、この便利な自動化の方法を、初心者の方にも分かりやすく解説していきます。

なぜGASとGmailなのか?

GASは、Google Workspace(Gmail, スプレッドシート, ドキュメントなど)を連携・自動化するためのJavaScriptベースのスクリプト言語です。特別なソフトウェアのインストールは不要で、ブラウザ上で開発・実行できます。

Gmailとの連携は、GASの得意とするところ。

  • 手軽に始められる: Googleアカウントがあればすぐに利用可能
  • コストがかからない: 基本的な機能は無料
  • 柔軟なカスタマイズ: 業務フローに合わせて自由に自動化

これらのメリットから、GASとGmailの組み合わせは、請求書自動送信に最適な選択肢と言えるでしょう。

請求書自動送信の全体像

大まかな流れは以下のようになります。

1. 請求データを用意する: Google スプレッドシートなどに顧客情報、請求金額、請求日などをリスト化します。

2. 請求書テンプレートを作成する: Google ドキュメントやスプレッドシートで、請求書のひな形を作成します。

3. GASでスクリプトを作成する: スプレッドシートからデータを取得し、テンプレートに反映させ、PDF化してGmailで送信する処理を記述します。

4. スクリプトを実行する: 定期実行トリガーを設定して、自動で処理が実行されるようにします。

準備するもの

  • Googleアカウント: Gmail、Google ドキュメント、Google スプレッドシートが利用できるもの。
  • 請求データ: Google スプレッドシートなどで管理された、請求対象となる顧客情報、金額、品目などのリスト。
  • 請求書テンプレート: Google ドキュメントなどで作成した、請求書のひな形。

実践!GASで請求書を自動送信するコード例

ここでは、Google スプレッドシートに保存されたデータを元に、請求書PDFを作成し、Gmailで送信する基本的なスクリプト例をご紹介します。

1. Google スプレッドシートの準備

以下のようなシートを作成し、請求データを入力しておきます。

| 顧客名 | メールアドレス | 金額 | 請求日 | 支払期日 | 請求書番号 |

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

| 株式会社A | a@example.com | 10,000 | 2023/10/26 | 2023/11/25 | INV001 |

| 株式会社B | b@example.com | 20,000 | 2023/10/26 | 2023/11/25 | INV002 |

2. 請求書テンプレートの準備

Google ドキュメントで、以下のような請求書テンプレートを作成します。

請求書

発行日: <<請求日>>

宛先:
<<顧客名>> 様

件名: 〇〇サービスのご請求

拝啓

平素は格別のご高配を賜り、厚く御礼申し上げます。

さて、この度は下記の通りご請求申し上げます。

記

請求金額: <<金額>> 円

支払期日: <<支払期日>>

請求書番号: <<請求書番号>>

敬具


--------------------
[あなたの会社名]
[あなたの住所]
[あなたの連絡先]

<<請求日>> のような箇所は、GASで置換するためのプレースホルダーです。

3. GASスクリプトの作成

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

function sendInvoices() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("請求データ"); // 請求データシート名に合わせて変更
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();

  // ヘッダー行をスキップ
  for (var i = 1; i < values.length; i++) {
    var row = values[i];
    var customerName = row[0];
    var email = row[1];
    var amount = row[2];
    var invoiceDate = Utilities.formatDate(row[3], "JST", "yyyy/MM/dd");
    var dueDate = Utilities.formatDate(row[4], "JST", "yyyy/MM/dd");
    var invoiceNumber = row[5];

    // 請求書テンプレートのID
    var templateDocId = "YOUR_TEMPLATE_DOCUMENT_ID"; // ここにテンプレートのドキュメントIDを入力
    var templateFile = DriveApp.getFileById(templateDocId);
    var copiedFile = templateFile.makeCopy();
    var doc = DocumentApp.openById(copiedFile.getId());
    var body = doc.getBody();

    // テンプレートのプレースホルダーを置換
    body.replaceText("<<顧客名>>", customerName);
    body.replaceText("<<金額>>", amount);
    body.replaceText("<<請求日>>", invoiceDate);
    body.replaceText("<<支払期日>>", dueDate);
    body.replaceText("<<請求書番号>>", invoiceNumber);

    doc.saveAndClose();

    // PDFとしてエクスポート
    var pdfBlob = copiedFile.getAs('application/pdf');
    pdfBlob.setName(invoiceNumber + "_請求書.pdf");

    // Gmailで送信
    GmailApp.sendEmail(email, 
                       "【" + customerName + "】" + "請求書のご送付(" + invoiceDate + ")", 
                       "\n" + customerName + " 様\n\nいつもお世話になっております。\n\n" + 
                       "〇〇サービスのご請求書を添付いたしましたのでご確認ください。\n\n" + 
                       "お支払い期日は " + dueDate + " です。\n\n" + 
                       "よろしくお願いいたします。\n\n" + 
                       "---\n" + 
                       "[あなたの会社名]\n" + 
                       "[あなたの連絡先]",
                       {attachments: [pdfBlob]});

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

    Logger.log(customerName + " 様へ請求書を送信しました。");
  }
}

コード解説

  • SpreadsheetApp.getActiveSpreadsheet(): 現在開いているスプレッドシートを取得します。
  • getSheetByName("請求データ"): 特定の名前のシートを取得します。
  • getDataRange().getValues(): シートの全データを配列として取得します。
  • DriveApp.getFileById(templateDocId): Google ドキュメントのテンプレートファイルを取得します。
  • templateFile.makeCopy(): テンプレートファイルをコピーします。
  • DocumentApp.openById(copiedFile.getId()).getBody().replaceText(...): コピーしたドキュメントのプレースホルダーを実際のデータで置換します。
  • copiedFile.getAs('application/pdf'): ドキュメントをPDF形式で取得します。
  • GmailApp.sendEmail(...): Gmailでメールを送信します。件名、本文、添付ファイルを指定できます。
  • copiedFile.setTrashed(true): 不要になったコピーファイルをゴミ箱に移動します(自動削除)。

※注意点

  • YOUR_TEMPLATE_DOCUMENT_ID の部分は、ご自身の請求書テンプレートのGoogle ドキュメントIDに置き換えてください。ドキュメントIDは、URLの /d//edit の間の文字列です。
  • 「請求データ」シートの名前も、ご自身のシート名に合わせて変更してください。
  • 初めてGASからGmailやDriveの機能を使う場合、権限の承認を求められることがあります。画面の指示に従って承認してください。

4. スクリプトの実行とトリガー設定

スクリプトエディタの上部にある「実行」ボタン(▶︎)をクリックして、スクリプトが正常に動作するか確認します。

定期的に自動実行させたい場合は、左側の時計アイコン(トリガー)をクリックし、「トリガーを追加」から設定します。

  • 実行する関数: sendInvoices を選択。
  • 実行するデプロイ: 「ヘッド」を選択。
  • イベントのソース: 「時間主導型」を選択。
  • 時刻ベースのトリガーの種類: 「毎日のタイマー」や「月次タイマー」などを選択し、実行したい時間や曜日を設定します。

さらに高度な機能

今回ご紹介した内容は基本的なものですが、GASを使えばさらに多くの自動化が可能です。

  • 請求書番号の自動採番: スプレッドシート上で管理し、連番を自動で付与。
  • ステータス管理: 送信済みの請求書にフラグを立てるなど。
  • エラーハンドリング: 送信エラーが発生した場合の通知機能。
  • PDFへの直接出力: ドキュメントを介さず、スプレッドシートのデータを直接PDF化。

まとめ

GASとGmailを連携させることで、請求書の発行・送付作業を劇的に効率化できます。今回ご紹介したコード例を参考に、ぜひご自身の業務に合わせた自動化に挑戦してみてください。最初は戸惑うこともあるかもしれませんが、GASは非常に強力で柔軟なツールです。試行錯誤しながら、より快適な業務環境を構築していきましょう!

GAS自動化の導入相談

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

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