GASとVision AIで手書き日報の情報をスプレッドシートに自動記述する(1)

おはようございます!マネジメントオフィスいまむらの今村敦剛です。

手書きの日報から情報を自動で読み取り、データ化してくれたらすごく便利だと思いません?これをGoogle Apps Script (GAS) と Google Cloud Vision AI を連携させて実現してみました。

全体の流れと設計思想

この自動化システムは、大まかに言って、以下の3ステップで動作します。

1. 準備と指示

基本的に、Google Cloud Platform(GCP)を使います。

Google Driveから指定されたPDFファイルを取得し、Google Cloud Storageという「一時保管庫」にアップロードします。そして、Vision AIに「このファイルを読んでください」と依頼を出す感じですね。

2. OCR処理 (Cloud Vision AI)

Cloud Vision AIとは、Google Cloudで利用できる画像認識ツールです。ここでは指示されたPDFファイルを読み取り、その中に書かれている文字や数字をテキストデータに変換する処理をします。処理結果は、再び「一時保管庫」にJSON形式のレポートとして保存されます。

3. データ整形と記録 (GAS)

ここからはGoogle Apps Scriptの出番です。Vision AIが作成したJSON形式のレポートを読み取り、正規表現(文字のパターン認識)を使って必要な情報を抜き出します。最後に、その情報をGoogleスプレッドシートの指定された行に書き込みます。

では、この流れにそって実現方法を解説しましょう。

Google Cloud Platform (GCP) の準備

全ての土台となるのがGCPですね。ここでの設定ミスが、解決困難なエラーの最大の原因となります。必ず新しいプロジェクトで、手順通りに設定してください。

まずGoogle Cloudのコンソール画面にアクセスします。

① 新しいGCPプロジェクトを作成する

ここでは既存のプロジェクトを流用して設定するのは避けたほうがよいです。過去の設定が干渉して正しく動作しない可能性があります。必ず新しいGCPプロジェクトで始めてください。

② 請求先アカウントをリンクする

Vision AIのような高度なAPIは、たとえ無料枠(月1,000回まで)の範囲で利用する場合でも、不正利用防止のために有効な請求先アカウントの登録が必須のようです。これが設定されていないと、APIはリクエストを処理できず、認証エラーを返す可能性があります。

「請求」メニューから、作成したプロジェクトに請求先アカウントをリンクしてください。

③ 必要なAPIを3つ有効化する

プロジェクトで利用する3つのサービス(API)を「有効」にします。それぞれのAPIは以下の役割を担います。

  • Cloud Vision API: OCR処理を行う本体。
  • Google Drive API: GASがあなたのGoogle Driveにアクセスするために必要。これが有効でないと、GASからファイルを取得する段階でサーバーエラーが起きることがあります
  • Cloud Storage API: GASとVision AIがファイルを安全に受け渡しする「一時保管庫」を利用するために必要。

④ 新しいAPIキーを作成する

これは、GASがVision AIに「私は正当な利用者です」と示すための、シンプルなパスワードのようなものです。

  • 「APIとサービス」>「認証情報」から作成し、安全な場所にコピーしておきます。
  • なお、APIキーをGASに直接書き込むハードコーディングではなく、より安全な「スクリプトプロパティ」に保存することが推奨されます。

⑤ 新しいGoogle Cloud Storage (GCS) バケットを作成する

OCR処理のための一時的なファイル置き場です。「Cloud Storage」>「バケット」から作成します。名前はもちろん一意にしておいてくださいね。

⑥ Vision AIにGCSへのアクセス権を付与する【最重要】

Vision AIというツールに、あなたのGCSバケットへのアクセス権を設定します。

まずはVision AIのIDを探します。「IAMと管理」>「IAM」ページで、「Google 提供のロール付与を含める」をオンにし、…gcp-sa-vision.iam.gserviceaccount.com という形式のIDを探してコピーします。これがVision AIの公式IDです。見つからない場合は暫定的に”allUsers”でアクセス権を設定する方法もある。

ただし、ぼくが実施したときは、allUsersでないとアクセス権が設定できませんでした。これはセキュリティ上問題があるので、残課題ですね。

次に、GCSバケットの「権限」設定で、コピーしたIDに対し、以下の2つの役割(ロール)を与えます。

  • ストレージ オブジェクト閲覧者: バケット内のPDFを読み取るための権限。
  • ストレージ オブジェクト作成者: OCR結果のJSONファイルを書き込むための権限。

GASとスプレッドシートの最終設定

Google Cloudの設定ができたら、次はデータの保存先であるスプレッドシートと、GASの設定です。

① スプレッドシートとDriveの準備

Google Driveには、読み込みたい手書き日報をPDF化したファイルを置くフォルダを作成し、そのフォルダIDをURLからコピーしておきます。

続いてGoogleスプレッドシートを作成します。これは結果を書き込むシートになるのですが、1行目に見出し(日付, 担当者など)を付けておきましょう。

② GASプロジェクトとGCPプロジェクトを連携させる

作成したスプレッドシートの「拡張機能」からApps Scriptを開きます。ここで「プロジェクトの設定」を開き、「Google Cloud Platform(GCP)プロジェクト」の欄に、GCPプロジェクト番号を設定します。これにより、このGASがどのGCPプロジェクトに紐づけることができます。

③ マニフェストファイルで権限を要求する【重要】

appsscript.jsonの設定も必要です。「プロジェクトの設定」で「appsscript.jsonマニフェスト ファイルをエディタで表示する」のチェックをオンにしてください。

そして以下の権限(スコープ)を設定します。


{
"timeZone": "Asia/Tokyo",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/devstorage.read_write"
]
}

明日はGASのcode.gs作成を解説します。

この記事を書いた人
代表取締役 今村 敦剛

中小企業診断士/審査員(ISO9001, 14001, 45001)/日本心理学会認定心理士