こんにちは!研究開発部の李です。
今回は、プログラミング開発経験がほぼゼロ(※学生時代にC++/SQLの学習経験がある程度で長年のブランクあり)の状態から、Google Apps Script (GAS) と Gemini を活用してキッティング作業後の判定・報告書作成ツールを開発し、作業工数を97%カットした取り組みについてご紹介します。
AI時代における「非エンジニア・初心者がAIを壁打ち相手(シニアエンジニア)としてツールを開発するアプローチ」として参考になれば幸いです。
背景と課題
業務の急増とエンジニアを圧迫する単純作業
サービス運用において、機器の受注から発送までのキッティング業務は必要不可欠です。これまで1サイトあたりにかかっていた作業時間と内訳は以下の通りでした。
- キッティング作業本体: 1〜2時間
- ログ解析・判定および報告書作成: 1時間
- 発送準備等: 0.5時間
- 合計工数: 約3.5時間 / 1案件
今後、年間案件数が急増することが見込まれており、このままだとエンジニアの貴重な時間が単純作業に奪われてしまうという大きな課題に直面しました。
ミスが許されない重要性
単純作業とはいえ、キッティング作業や報告書作成は非常に重要です。万が一ログの確認不足や判定ミスがあり、蓄電所等の設備が停止するような事態になれば、1日あたり数十万〜数百万円規模の損害につながるリスクがあります。
「もっと簡単な方法があるはずだ。手作業を自動化し、この時間をより価値ある創造的な作業に充てたい」
そう思い立ち、ツールの自動化開発を決意しました。
開発者のバックグラウンドとアプローチ
開発前のスキルセット
- 学生時代: C++ / SQL の学習経験(※ただし長年のブランクあり)
- CS実務経験(7年+): ログ調査や原因究明などの技術的トラブルシューティング
- Web: 既存テンプレート内でのHTML/CSS修正程度
- 保有資格: ITパスポート
── 総じて、ゼロからプログラミングでツールを開発するスキルはほぼ無い状態でした。
Gemini:24時間隣にいるシニアエンジニア
開発にあたり、生成AIである Gemini に相談することから始めました。

単に「コードを書いて」と頼むだけではなく、以下のような技術的なディスカッション(壁打ち)を行いました。
- 「なぜこのエラーが発生するのか?」
- 「GASでテキストファイルを処理する際の最適データ保持形式は?」
- 「実行時間制限(6分)を回避するための設計はどうすべきか?」
AIを24時間隣にいるシニアエンジニアに見立てて議論を重ねることで、開発開始からわずか3時間でプロトタイプを実現することができました。
GASによるキッティング自動化ツールの仕組み
なぜ Google Apps Script (GAS) なのか?
- Google Workspaceサービス(Drive, Docs, Sheets等)との連携が容易
- クラウドベースで環境構築が不要(ブラウザだけで開発完結)
- JavaScriptベースのため構造が理解しやすい
全体フロー
- キッティング時に出力されたログファイルをGoogle Driveの指定「監視フォルダ」に配置
- GASのトリガーが定期実行され、ログを読み込んで解析・判定を実施
- 判定結果をもとに、Google Document形式の「報告書」を自動生成(2分で完了)
乗り越えた6つの技術的障壁と解決策
開発を進める中で直面した6つの問題と、Geminiとの壁打ちによって導き出した解決策です。
① ファイル形式の選択(パースの安定化)
- 課題: 生のテキストファイル(.txt)の直接パースが不安定。
- 解決策: ドキュメントへ変換のうえ DocumentApp で制御する方式へ転換。
② 正規表現の罠
- 課題: ログ内の特定フォーマット(例: ###TEST)の抽出失敗。
- 解決策: 正規表現パターンを何度もデバッグし、正確なマッチングロジックを確立。
③ 無限生成の防止
- 課題: トリガーの設定ミスにより、同一の報告書が無限に生成されるバグが発生。
- 解決策: 処理済みドキュメントやデータに対してフラグ管理(ステータス付与)を行い二重処理を防止。
④ 表(テーブル)のサイズ制御
- 課題: Google Document上に自動生成された表の列幅が崩れ、見た目が崩れる。
- 解決策: setColumnWidth メソッドを活用し、列幅を動的に調整する制御を実装。
🔥 エンジニア視点で特に重要だった2つの対策
⑤ トリガー競合と排他制御(LockService)
- 課題: 2分間隔でフォルダ監視を行う際、ログ解析が長引くと次のトリガーが起動し、同一ファイルを二重書き換えしてしまうリスク(競合)。
- 解決策: GASの LockService を利用した排他制御を導入。
const lock = LockService.getScriptLock();
if (lock.tryLock(10000)) { // 10秒間ロック取得を試みる
try {
// ログ解析 & 報告書生成処理
} finally {
lock.releaseLock();
}
} else {
Logger.log("前回の処理が実行中のためスキップします");
}
前の処理が安全に終了するまで次の実行をブロックすることで、データの不整合を防止しました。
⑥ GASの「6分制限の壁」とバッチ処理(差分処理)設計
- 課題: GAS(無料枠)には「1回の実行上限が6分」という強い制約があります。今後テスト項目(TEST 1〜25からTEST 47へ)や対象機器を拡張すると、6分の壁を超えてスクリプトが途中で強制終了する懸念がありました。
- 解決策: 1回の実行で全件処理するのではなく、処理済みの行にタイムスタンプやフラグを立ててスキップする「差分処理(バッチ処理)構造」へのシフトを設計・導入しました。
導入効果
ツール導入後、圧倒的な業務効率化と精度向上を実現しました。
| 項目 | 導入前 | 導入後 |
|---|---|---|
| 判定・報告書作成工数 | 60分 | 2分 (約97%カット) |
| 全工程の処理時間 | ログ確認に張り付き | 監視フォルダ配置から2分で完了 |
| 品質・精度 | 手作業による見落としリスクあり | GASによる一貫したロジックで誤判定ゼロ |
これまで1時間かかっていた報告書作成が、ログをフォルダに入れるだけでわずか1分(全体処理2分)で完了するようになり、年間数百時間のエンジニア工数を削減できる見込みとなりました。
現在の運用と今後の課題(人による確認とAIの継続学習)
ツール導入により作業時間は劇的に短縮されましたが、実業務における「安全性」を最優先するため、運用面で以下の点を大切にしています。
1. 「目視確認」による安全性の担保(5分程度のダブルチェック)
自動化ツールによって判定と報告書生成が瞬時に完了するようになったものの、装置が確実にエラーなく動作することを確認するため、念のための「保険」として最終的には人間の目による確認を行っています。
ただし、ゼロからログを解析していた以前と比べると作業環境は大幅に改善されており、現在の人による確認作業はわずか5分以内で完了できるようになりました。
2. 社内ノウハウの学習による精度向上と工数削減
今後は、社内に蓄積されたノウハウや判定ナレッジをAIに継続して学習(ファインチューニングやRAG等)させていく予定です。これによりツールの判定精度をさらに高め、将来的に人による確認作業の負担を最小限に抑えていくことを目指しています。
おわりに:AI時代における「使いどころ」と人間とのバランス
今回の取り組みを通して強く感じたのは、「AIという存在とどのように共存し、適切なバランスを保つか」 を学び続ける重要性です。
ただAIを導入してすべてを任せるのではなく、
- 「どのプロセスでAIを活用(自動化)すべきか」
- 「どの部分を人間が最終確認・判断すべきか」
を見極め、境界線を正しく引き続けることが最も重要な課題だと考えています。
「コーディング経験がほぼゼロ」の状態であっても、GeminiのようなAIを単なるツールではなく「技術的な壁打ち相手」として活用することで、安全性を考慮した実用的な仕組みを短用期間で構築することができました。
これからもAIとの最適な役割分担を探求しながら、より価値のある業務へとチャレンジを続けていきます。
後記:実は「Vibe Coding」なんて言葉も知らなかった話
この記事を書くにあたって知ったのですが、最近 「Vibe Coding(バイブコーディング)」 という手法が話題になっていますよね。AIと対話しながら、ノリとフィーリング(Vibe)でコードを組み上げていく開発スタイルのことです。実はこのツールを作った当時、私は「Vibe Coding」という言葉すら知りませんでした(笑)。
ただシンプルに、「AIってすごいし何でも知ってるんだから、『こういうツール作って!』ってお願いしたらサクッと作ってくれるでしょ!」 という、ある意味無知ゆえの(?)強い信頼とノリだけでGeminiに話しかけ始めました。
プログラミングの構文もよくわからないまま、「こういう機能がほしい」「エラーが出た!なんで?」「もっとこうして」とGeminiにひたすら壁打ちを続けた結果……気がつけば、知らず知らずのうちにVibe Codingを完全実践してツールを完成させていたのです。
言葉や手法の理論を事前に知らなくても、「AIならきっと作れるはず」という好奇心と一歩踏み出す行動力さえあれば、プログラミング未経験でもここまで出来てしまう。今振り返っても、とても面白くエキサイティングな体験でした。