Gemini Vision API × Google Apps Script で名刺情報をスプレッドシートに自動登録する
SECTION 17 — プロジェクト概要
解決する課題
名刺はもらったその場では整理できず、後でまとめて入力する作業が発生。手動入力はミスが多く、時間もかかる。
Googleフォームの画像アップロード機能を利用
GASが自動的に画像をGeminiに送信しテキスト抽出
構造化されたデータが即座にシートへ書き込まれる
SECTION 17 — アーキテクチャ
フォーム送信
画像ファイルはGoogleドライブに自動保存される。GASはファイルIDを取得して処理開始。
GASの役割
onFormSubmitトリガーで自動起動。画像をBase64エンコードしてGemini APIへ送信する。
データ保存
Geminiから返ってきたJSONを解析し、指定シートの末尾行に追記する。
SECTION 17 — フォーム設計
画像アップロードフォームの作成手順
forms.google.com から空白のフォームを作成する
「短文テキスト」形式で送信者を識別するフィールドを追加
質問タイプ「ファイルのアップロード」を選択。許可するファイル形式を「画像」に限定する
「回答」タブ > スプレッドシートアイコンから連携先を設定
フォーム設計のポイント
SECTION 17 — GAS実装
onFormSubmitトリガーの設定とイベントオブジェクトの扱い方
トリガーの設定方法
GASエディタの「トリガー」アイコンをクリック
「トリガーを追加」> イベントの種類:「フォーム送信時」
実行する関数: onFormSubmit を選択して保存
SECTION 17 — API連携
名刺画像をBase64に変換してGeminiへ送信するコード
Vertex AI認証(GCPプロジェクト経由)
Vertex AI 経由ではScriptApp.getOAuthToken()で実行ユーザーのOAuthトークンを取得。そのユーザーにGCPプロジェクトの「Vertex AI ユーザー」IAMロールが付与されていれば認証が通る。
SECTION 17 — プロンプト設計
JSON出力を強制する構造化プロンプト
効果的なプロンプト設計の原則
抽出データの構造化・保存・重複管理
SECTION 17 — データ処理
GeminiのレスポンスをJSONとしてパースし、配列に変換する
スプレッドシートの列構成
| 列 | 項目 | 説明 |
|---|---|---|
| A | 登録日時 | 処理実行日時 |
| B | 会社名 | company |
| C | 氏名 | name |
| D | 役職 | title |
| E | 電話 | phone |
| F | メール | |
| G | 住所 | address |
SECTION 17 — データ保存
構造化データをシートの末尾行に追記するコード
appendRow の利点
SECTION 17 — データ品質
メールアドレスをキーにした重複判定ロジック
重複時の対応パターン
パターン1 スキップ
既存データを優先し、新しいデータを無視する
パターン2 上書き
最新の情報を優先し、既存行を更新する
パターン3 別シートに移動
重複を「要確認」シートに移して手動判断させる
SECTION 17 — 堅牢性
発生しやすいエラーと対処法
Geminiが空のJSONや不完全なデータを返す。全フィールドが空の場合、エラーシートに記録してフォーム送信者にメール通知する。
Geminiが想定外のフォーマットで返した場合。try-catchでキャッチし、生テキストを保存してログに記録する。
タイムアウトやレート制限。Utilities.sleep()を使って指数バックオフで最大3回リトライする。
CRM連携・バッチ処理によるさらなる活用
SECTION 17 — 応用
フォローアップメール
名刺取得直後に自動でお礼メールを送信。Geminiで文面を個人化する。
Googleカレンダー連携
名刺登録後1週間でフォローアップのリマインダーをカレンダーに自動追加する。
Chatwork/Slack通知
新しい名刺が登録されたらチームのチャットに通知。即座に営業担当者へ共有できる。
SECTION 17 — 応用
バッチ処理が有効な場面
実際に手を動かして名刺OCRアプリを構築しよう
SECTION 17 — ハンズオン
タイトルを「名刺登録フォーム」に設定する
許可するファイル形式: 「画像」のみ / 最大ファイルサイズ: 10MB
「回答」タブ > スプレッドシートアイコン > 「新しいスプレッドシートを作成」
手元の名刺を撮影して送信。スプレッドシートに回答が記録されることを確認する
SECTION 17 — ハンズオン
スプレッドシートのApps Scriptに以下を貼り付けて実装する
「拡張機能」>「Apps Script」でエディタを開く
配布のサンプルコードを全てコピーしてCtrl+Sで保存
コード冒頭のPROJECT_IDを自社のGCPプロジェクトIDに書き換える
トリガーアイコン > 「トリガーを追加」> フォーム送信時 > onFormSubmit
SECTION 17 — ハンズオン
テスト手順
照明を確保して斜めにならないように撮影。ピントが合っているか確認する。
作成したフォームのURLをスマホで開いて画像をアップロード送信する。
「名刺データ」シートに1〜2分以内にデータが追加されることを確認する。
エラーが出た場合はApps Scriptの「実行数」ログでエラー内容を確認する。
チェックリスト
SECTION 17 — まとめ
スマホ撮影→フォーム→GAS→Gemini API→スプレッドシートの一連のフローを設計・実装する方法を理解した。
画像をBase64エンコードしてAPIに送信し、JSON形式でOCR結果を取得するプロンプト設計を習得した。
エラーハンドリング・重複チェック・APIキーの安全な管理など、本番運用に必要な要素を組み込む方法を学んだ。
名刺管理OCRアプリは「業務自動化の入門として最適」なプロジェクト。Gemini Vision APIを使えば、従来は人手で行っていたデータ入力作業を完全自動化できる。
応用・発展のアイデア
名刺管理OCRアプリの構築・実装・テストが完了しました