はじめに
農業補助金の申請、書類の山と手入力にうんざりしていませんか? 貴重な時間を煩雑な作業に奪われ、本来注力すべき業務が進まない…そんな課題を抱える農業DX担当者の方へ。本記事では、Google SheetsとGAS(Google Apps Script)を活用し、申請書類を簡単にデータ化できる「農業補助金OCR」の自作手順を徹底解説します。プログラミング不要、誰でも導入可能な方法で、申請業務を劇的に効率化しませんか?
なぜGoogle Sheets + GASが最適?
農業現場におけるDX推進において、コストと手軽さは重要な要素です。高価な専用OCRソフトを導入するまでもないけれど、手作業での入力は非効率だと感じている担当者の方にとって、Google SheetsとGASの組み合わせは非常に有効な選択肢となります。Google Sheetsは多くの企業で導入済みであり、追加コストがほとんどかかりません。また、GASはその拡張機能として、OCR APIとの連携やデータ処理の自動化を比較的容易に実現できます。例えば、無料または低価格で利用できるOCR APIを活用すれば、スマートフォンで撮影した申請書類の画像をGoogle Sheetsに自動でテキストデータとして取り込むことが可能です。これにより、転記ミスを防ぎ、大幅な時間短縮に繋がります。さらに、GASのプログラミングも、基本的な知識があればカスタマイズも容易であり、自社の申請フォーマットに合わせた柔軟な対応が可能です。
「農業補助金OCR」自作の全手順
実際に「農業補助金OCR」をGoogle SheetsとGASで自作する手順を具体的に解説します。
GCP プロジェクト作成・Cloud Vision API 有効化
- Google Cloud Console(https://console.cloud.google.com/ )にアクセスし、新規プロジェクトを作成。
- 左メニュー → 「API とサービス」→「ライブラリ」→ “Cloud Vision API” を検索して有効化。
- 同じく「認証情報」→「認証情報を作成」→「API キー」を作成。後で使うのでコピーしておく。※無料枠:月間 1,000 件のテキスト検出が無料です。
API キー取得
- 上記の手順で発行した API キーを控えておく(以降
<YOUR_API_KEY>
に置き換え)。
Google スプレッドシート準備
- Google Drive 上で新規スプレッドシートを作成。
- シート名を以下のように変更:
Config
… API キーなど定数を保持OCR_Input
… 画像 URL やファイル ID を入力OCR_Output
… 抽出テキストを出力
Config
シートの A1 にAPI_KEY
、B1 に先ほどの<YOUR_API_KEY>
を入力。
Apps Script プロジェクト作成
- スプレッドシート上部メニュー「拡張機能」→「Apps Script」を開く。
- デフォルトで開く
Code.gs
を以下のように置き換え。
/**
* Code.gs
*/
// 設定を読み込むユーティリティ
function getApiKey() {
return SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('Config')
.getRange('B1').getValue();
}
// Web アプリ:GET で HTML フォームを返す
function doGet() {
return HtmlService.createTemplateFromFile('Index')
.evaluate()
.setTitle('農業補助金OCR');
}
// Web アプリ:POST で画像を受け取り OCR 実行 → 結果を書き込む
function doPost(e) {
try {
// フォームから渡された base64 画像データ
const dataUrl = e.parameter.imageData;
const base64 = dataUrl.replace(/^data:image\/\w+;base64,/, '');
const bytes = Utilities.base64Decode(base64);
const apiKey = getApiKey();
// Vision API 呼び出し
const payload = JSON.stringify({
requests: [{
image: { content: Utilities.base64Encode(bytes) },
features: [{ type: 'TEXT_DETECTION' }]
}]
});
const url = 'https://vision.googleapis.com/v1/images:annotate?key=' + apiKey;
const response = UrlFetchApp.fetch(url, {
method: 'post',
contentType: 'application/json',
payload: payload
});
const result = JSON.parse(response.getContentText());
const text = result.responses[0].fullTextAnnotation?.text || '(認識なし)';
// 結果をシートに書き込む
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('OCR_Output');
sheet.appendRow([new Date(), text]);
// 結果を HTML に返す
return ContentService.createTextOutput(text);
} catch (err) {
return ContentService.createTextOutput('Error: ' + err.message);
}
}
HTML フォーム作成
- スクリプト左ペインの「+」→「HTML」を選択し、ファイル名を
Index
に。 - 以下を貼り付け。
<!-- Index.html -->
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<style>
body { font-family: sans-serif; padding: 1em; }
input, button { margin-top: .5em; }
</style>
</head>
<body>
<h3>農業補助金OCR</h3>
<p>申請書類の写真をアップロードしてください。</p>
<input type="file" id="fileInput" accept="image/*"><br>
<button onclick="upload()">OCR 実行</button>
<pre id="result"></pre>
<script>
function upload() {
const file = document.getElementById('fileInput').files[0];
if (!file) { alert('画像を選択してください'); return; }
const reader = new FileReader();
reader.onload = () => {
google.script.run
.withSuccessHandler(text => {
document.getElementById('result').textContent = text;
})
.doPost({parameter:{imageData: reader.result}});
};
reader.readAsDataURL(file);
}
</script>
</body>
</html>
ウェブアプリとしてデプロイ
- Apps Script の右上「デプロイ」→「新しいデプロイ」→種類:ウェブアプリ。
- 「実行するユーザー」:自分、「アクセスできるユーザー」:自分のみ or 組織内。
- デプロイ後に出る URL を控え、ブラウザで開いて動作確認。
動作確認・運用
- フォームで画像をアップロード → OCR 結果が画面に表示され、
OCR_Output
シートにタイムスタンプ付きで追記される。 - バッチ処理:複数ファイルを一括で処理したい場合は、
OCR_Input
シートに Drive 上の画像ファイル ID を列挙し、以下のような関数を追加してタイマー トリガーで定期実行。
/**
* 一括 OCR 実行サンプル
*/
function batchOcrFromSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const inSheet = ss.getSheetByName('OCR_Input');
const outSheet = ss.getSheetByName('OCR_Output');
const apiKey = getApiKey();
const rows = inSheet.getDataRange().getValues();
rows.forEach((row, i) => {
if (i === 0) return; // ヘッダー行スキップ
const fileId = row[0];
if (!fileId) return;
try {
// Drive から画像取得
const blob = DriveApp.getFileById(fileId).getBlob();
const base64 = Utilities.base64Encode(blob.getBytes());
const payload = JSON.stringify({
requests: [{
image: { content: base64 },
features: [{ type: 'TEXT_DETECTION' }]
}]
});
const url = 'https://vision.googleapis.com/v1/images:annotate?key=' + apiKey;
const resp = UrlFetchApp.fetch(url, {
method: 'post',
contentType: 'application/json',
payload: payload
});
const text = JSON.parse(resp.getContentText())
.responses[0].fullTextAnnotation?.text || '';
outSheet.appendRow([new Date(), fileId, text]);
// 処理済みマーク
inSheet.getRange(i+1, 2).setValue('OK');
} catch (e) {
inSheet.getRange(i+1, 2).setValue('Error');
}
});
}
- 「トリガー」→「batchOcrFromSheet」を毎日/毎時間実行する設定を追加すれば自動化完了。
以上の手順とコード例をベースにすれば、プログラミング初心者でも Google Sheets+GAS を使った「農業補助金OCR」を自作・運用できます。
導入効果とさらなる活用
Google Sheets + GASで作る「農業補助金OCR」を導入することで、申請業務における入力時間を大幅に削減し、人的ミスを減らすことができます。例えば、ある農業法人では、これまで複数人で数日を要していた補助金申請書の作成が、このシステム導入によって数時間で完了するようになったという事例があります。これにより、担当者はより戦略的な業務に集中できるようになり、生産性向上に貢献します。さらに、OCRでデータ化した情報は、他のGoogle Workspaceツールとの連携も容易です。例えば、取得したデータをGoogle Formsと連携させて申請内容の確認フローを構築したり、Google Data Studioで申請状況を可視化したりすることも可能です。また、過去の申請データを蓄積・分析することで、今後の補助金申請戦略の策定に役立てることもできます。将来的には、AI技術と組み合わせることで、申請書類の自動仕分けや必要項目の自動抽出など、さらなる高度な活用も期待できます。
まとめ
本記事では、Google SheetsとGASを活用した「農業補助金OCR」の自作手順を解説しました。導入コストを抑えつつ、煩雑な申請業務を効率化し、人的ミスを削減できます。このシステムを活用することで、農業DXを推進し、より戦略的な業務に注力できる未来が拓けます。
コメント