例今回の架空案件
ご相談内容を、そのまま自動化の要件に翻訳するところから始めます。
| ご相談者 | 雑貨の小売業(従業員6名・IT担当なし) |
|---|---|
| 現在の作業 | 毎朝、取引先3社から届くメールのCSVを開き、Excelに貼り付けて商品コードごとに集計。結果を店長へメールで報告している。 |
| 所要時間 | 毎日およそ35分(月あたり約12時間) |
| 環境 | Google Workspace(スプレッドシート・Gmail) |
| ご要望 | 朝出社したら、集計が終わっている状態にしたい |
01仕様書(着手前にご確認いただきます)
開発に入る前に、この1枚で認識を合わせます。ここでズレを潰すため、完成後の「思っていたのと違う」が起きません。
| 目的 | 毎朝の集計・報告作業をゼロにする |
|---|---|
| 起動タイミング | 毎朝7:00に自動実行(時刻は変更可能) |
| 処理の流れ |
1. Gmailから前日22時以降の対象メールを検索 2. 添付CSVを取得し、文字コードを判定して読み込み 3. 商品コード単位で数量・金額を合計 4. スプレッドシートの当日シートに書き出し 5. 集計結果を本文にしたメールを店長へ送信 |
| 異常時の動作 | メールが1通も届いていない、またはCSVの列構成が想定と違う場合は、処理を中断し「なぜ止まったか」を管理者へ通知する(誤った数字を報告しないことを最優先とする) |
| 対象外 | 取引先3社以外のフォーマット、手書き伝票の読み取り |
ここが重要です
「異常時にどう振る舞うか」を先に決めておかないと、自動化は数字を静かに間違えます。当方は必ず「止めて知らせる」設計にします。
02ツール本体(Google Apps Script)
実際に納品するコードの一部です。コメントを日本語で残すため、将来ほかの方が引き継ぐこともできます。
/** * 毎朝7時に自動実行される集計処理 * 取引先3社のCSVを取り込み、商品コード単位で集計して報告メールを送る */ function dailyAggregate() { const cfg = getConfig_(); // 設定シートから読み込む const files = fetchCsvFromGmail_(cfg); // 1. 添付CSVを取得 // メールが届いていなければ、集計せずに管理者へ通知して終了 if (files.length === 0) { notifyAdmin_('CSVが1件も見つかりませんでした', cfg); return; } const rows = []; for (const f of files) { const parsed = parseCsv_(f); // 2. 文字コードを判定して読込 if (!validateColumns_(parsed, cfg)) { // 列構成が想定と違えば中断 notifyAdmin_(`列構成が想定と異なります: ${f.getName()}`, cfg); return; } rows.push(...parsed); } const summary = sumByProductCode_(rows); // 3. 商品コード単位で集計 writeToSheet_(summary, cfg); // 4. 当日シートへ書き出し sendReportMail_(summary, cfg); // 5. 店長へ報告メール }
設定はコードの外に置きます
取引先の差出人アドレス、送信先、実行時刻などは「設定シート」側にあります。取引先が増えても、シートに1行足すだけで対応できます。
03テスト実行の証跡納品前に必ず実施
「動くはずです」ではなく「動いた記録」をお渡しします。正常系だけでなく、わざと異常を起こした試験も行います。
[2026-08-09 07:00:02] dailyAggregate 開始
[2026-08-09 07:00:03] Gmail検索: 対象メール 3件 を検出
[2026-08-09 07:00:05] CSV読込: 甲社_0809.csv (412行 / UTF-8)
[2026-08-09 07:00:06] CSV読込: 乙社_0809.csv (218行 / Shift_JIS)
[2026-08-09 07:00:07] CSV読込: 丙社_0809.csv (95行 / UTF-8)
[2026-08-09 07:00:07] 列構成チェック: 3件すべて OK
[2026-08-09 07:00:09] 集計完了: 商品コード 147種 / 合計 725行
[2026-08-09 07:00:11] シート書込: 「集計_2026-08-09」を作成
[2026-08-09 07:00:12] 報告メール送信: tencho@example.com
[2026-08-09 07:00:12] 正常終了(所要 10.4秒)
異常系テスト(わざとエラーを起こして確認)
[試験2] CSVの列名を1つ変更して実行
[2026-08-09 07:12:04] 列構成チェック: NG("数量" 列が見つかりません)
[2026-08-09 07:12:04] 集計を中断し、管理者へ通知メールを送信
[2026-08-09 07:12:05] シートへの書き込みなし(誤った数字を残さない)
[試験3] メールが1通も届いていない状態で実行
[2026-08-09 07:20:01] Gmail検索: 対象メール 0件
[2026-08-09 07:20:01] 「CSVが届いていません」と管理者へ通知して終了
この2つの試験によって、「気づかないうちに間違った数字が報告される」事態を防げていることを確認できます。
04操作手順書(非エンジニアの方向け)
専門用語を使わず、実際の画面に沿って書きます。納品後にご自身で調整できる状態までお渡しします。
目次(実際の納品物は画像付きPDF・全8ページ)
- この仕組みが毎朝やっていること(図解1枚)
- 実行時刻を変えたいとき(設定シートの書き換え手順)
- 取引先が増えたとき(1行追加するだけの手順)
- 報告メールの宛先を変えたいとき
- 「エラー通知」が届いたときの確認手順
- しばらく止めたいとき、再開したいとき
- 過去の集計結果を見返す方法
- 困ったときの連絡先と、対応範囲
納品後2週間は無償対応
初期不良として無償で対応します。「思ったように動かない」も遠慮なくご連絡ください。
結この案件での変化
数値は本サンプルの前提条件(毎日35分の作業)から算出した架空の試算です。実際の効果はご依頼内容により異なります。
導入前
35分 / 日
毎朝の手作業。月あたり約12時間。担当者が休むと集計が止まる。
導入後
0分 / 日
出社時には完了済み。担当者不在でも動き、異常時のみ通知が届く。