「請求書発行、また月末か」といううんざり感

Web制作会社で働いていると、毎月末に地味に時間を取られる作業がある。クライアントへの請求書発行だ。

うちの会社は経理担当が別にいるわけではなく、案件を担当したディレクターやエンジニアが自分の担当クライアント分の請求書を作って経理に回す運用になっている。案件数が増えるほど、月末の1〜2時間がまるまるこの作業に消える。

**「これ、ChatGPTにコードを書かせれば自動化できるのでは」**と思ったのが今回の発端だ。非エンジニアの同僚からも「あの請求書、毎月同じことやってますよね」と言われていたので、自分が実験台になって、Google Apps Script(GAS)とChatGPTで自動化を試してみた。

結論から言うと、「コードを書くこと」自体はChatGPTに任せて何の問題もなかった。ただし、「金額が正しいかの最終確認」だけは、結局自分の目でやるしかなかった。この記事では、その線引きがどこにあったのかを、実際に使ったプロンプトと失敗例つきで共有する。

正直「コード書くのが面倒」というより「毎回同じミスをしていないか確認するのが面倒」だったんですよね……

やったこと:スプレッドシート→PDF→Gmail送信を自動化する

手順1: 請求データをスプレッドシートに集約する

まず、クライアント名・請求月・項目・金額・税率をまとめたGoogleスプレッドシートを1枚用意した。もともとExcelで管理していたものをそのまま移しただけなので、ここに特別な作業はない。

手順2: ChatGPTにGASのコードを書かせる

ChatGPT(GPT-5.6)に投げたプロンプトは、実際にはこのくらいシンプルなものだった。

「Googleスプレッドシートの各行(クライアント名・請求月・項目・単価・数量・税率)を読み込んで、Googleドキュメントの請求書テンプレートに差し込み、PDF化してGoogleドライブの指定フォルダに保存するGoogle Apps Scriptを書いてください。テンプレートの差し込み箇所は{{client_name}}のような形式にしてください」

これに対してChatGPTは、DocumentAppでテンプレートをコピーしてreplaceText()で差し込み、Drive.Files.exportでPDF化するコードを一発で返してきた。実行してみると、その場でちゃんと動いた。「請求書のPDFが自動でできる」という体験自体は、驚くほどあっさり実現した。

手順3: Gmail送信までトリガーで自動化する

さらに「生成したPDFを、スプレッドシートに書かれたクライアントの担当者メールアドレス宛に、指定の件名・本文で送ってほしい」と頼むと、GmailApp.sendEmail()を使った送信コードも追加で書いてくれた。時間主導型トリガー(毎月25日の朝9時に実行、など)の設定方法も、ChatGPTがスクリーンショット付きの手順で説明してくれたので、非エンジニアの同僚でも迷わず設定できるレベルだった。

ここまでは正直「もっと早くやればよかった」と思うくらいスムーズでした

つまずいたのは「金額」まわりだけだった

自動化して2ヶ月ほど運用してみて、実際にヒヤリとした場面が3つあった。いずれもコードのバグではなく、「そもそも何を計算させたいか」の指示が曖昧だったことが原因だった。

1つ目は消費税の端数処理。何も指定せずに書かせると、ChatGPTは税込金額の端数を四捨五入で計算するコードを書いた。しかし、うちの会社は請求書ごとに切り捨てで運用しているクライアントが一部あり、そのクライアント分だけ金額が1〜2円ズレるという事態が起きた。「端数処理は四捨五入・切り捨て・切り上げのどれか」を最初に明示しないと、AIは”一般的な”計算方法を選ぶということを、このとき初めて実感した。

**2つ目は単価改定の反映漏れ。**契約更新でクライアントの月額単価が変わったのに、スプレッドシートの過去行をコピーして新しい行を作ったため、旧単価のまま請求書が生成されかけた。これはコードの問題ではなく、単純な入力ミスだが、自動化すると「あれ、金額おかしくない?」と気づくタイミングそのものが減るという副作用があると分かった。手作業のときは金額を手入力する過程で自然と目が止まっていたのが、自動化するとその「目が止まる瞬間」ごと消えてしまう。

**3つ目は解約済みクライアントへの誤送信リスク。**スプレッドシートの行を削除し忘れていた解約済みクライアントに、あわや請求書を送りかけたことがあった。自動化する対象が「お金が動く業務」である以上、実行前に人間が一度は目視する工程を残すことは、効率化よりも優先すべきだと痛感した。

この経験から、今はPDF生成とドラフト作成まではGASに任せるが、Gmail送信ボタンを押す最終確認は必ず人間が行う運用に落ち着いている。全自動にしなかったのは、便利さより「誤送信したときの信用の失い方」の方が重く見えたからだ。

「AIに任せていい部分」と「人が確認すべき部分」の境界線

今回の経験から見えた線引きは、次のようになる。

  • 金額が固定契約(毎月同額)のクライアント → 自動化してよい。金額が変わらない前提が崩れない限りリスクは低い
  • 金額が変動する契約(工数精算・従量課金)のクライアント → 自動生成はするが、送信前に必ず金額を目視確認する
  • 契約変更・解約の直後1〜2ヶ月 → 一時的に自動化フローから外し、手動で対応する
  • 消費税・端数処理のルール → 自動化に着手する前に、必ず社内ルールを言語化してからAIに指示する

つまり、「作業の手順を自動化すること」と「金額の正しさを保証すること」は別の話であり、後者は結局のところ人間が担うしかない、というのが今回の結論だ。

まとめ:これから請求書自動化を試す人へのチェックリスト

  • 端数処理(四捨五入/切り捨て/切り上げ)のルールを、コードを書かせる前に文章で確定させる
  • 「PDF生成」と「送信」は分離し、送信の最終判断だけは人が行う工程を残す
  • 契約変更・解約があった月は、自動化フローから一時的に外して手動確認する
  • スプレッドシートの行削除・単価更新は、自動化後こそ二重チェックの仕組みを別途用意する
  • 「動くコードがすぐ書けること」と「業務として安全に運用できること」は別の基準で評価する

請求書発行のような「お金が動く定型業務」は、AIによる自動化の効果が一番出やすい領域であると同時に、ミスの代償も大きい領域だ。だからこそ、任せる部分と人が握っておく部分を、最初にはっきり決めておくことが自動化を長続きさせるコツだと感じている。