Tel: 090-3718-2803

営業時間:10:00~23:00
(年中無休)

メニュー

GAS×OpenAI:スプレッドシート文章を一括校正|行政書士事務所HANAWAくんと学ぶAI活用実践ラボ第4回

HANAWA行政書士事務所の朝。記録用スプレッドシートが増え、文章の整え直しが負担になっていた。

サトウ所長:「手作業の校正を減らしなさい。GAS×OpenAIで自動化すれば、品質と時間を両立できる。」

HANAWAくん:「UrlFetchApp※でOpenAI API※の/v1/responses※を呼び、列ごとに整える仕組みを作ります。」

サトウ所長:「焦点は、GASからAPIを呼び出してスプレッドシートを自動校正できる形にすることだ。」

あなたも相棒として同じ操作を実行し、成功条件を満たす体験を積む段取りとなる。

目次

  1. GAS×OpenAIの調べ方と基本理解

  2. GAS×OpenAIの方法:スプレッドシート一括校正の手順

  3. GAS×OpenAIの注意点:レート・エラー・実行時間とセキュリティ

  4. GAS×OpenAIの活用事例と応用:省力化の広げ方


GAS×OpenAIは、定型文や連絡文の校正を自動処理に置き換える実務的な選択となります。行政書士事務所の記録や顧客対応メモは量が多く、人の目だけに頼ると時間と品質の両面で限界が出ます。今回の焦点は、GAS※からOpenAI API※を呼び出し、スプレッドシートの文章を一括で文章整形※できる仕組みを構築することです。/v1/responses※とUrlFetchApp※を使い、PropertiesService※でキーを安全に扱う形にまとめます。


GAS×OpenAIの調べ方と基本理解
学習目標:GAS×OpenAI連携の全体像と主要機能の役割を把握する。
Point:最短で効果を出すために、/v1/responsesを軸に設計すると管理が単純化します。
Reason:/v1/responsesは出力形式が統一され、文章整形や校正のような単発処理に適合します。UrlFetchAppはHTTP送信の要で、PropertiesServiceは秘密情報の保管に適します。
Example:スプレッドシートの列Aを読み、OpenAI APIに投げ、列Bへ整形後テキストを返す流れを定義します。
Point:この流れを覚えると、以降の応用(要約・翻訳・分類)も同じ骨組みで展開できます。

UrlFetchAppの役割と/v1/responsesの使い分け
UrlFetchApp※は外部のHTTP APIにアクセスするためのGAS標準の仕組みです。/v1/responses※は2024年以降の統一出力形式に対応し、inputに文字列または配列を渡せます。gpt-4.1-mini※を指定すればコストと品質のバランスがとれます。校正はプロンプト一文で十分に機能します。

PropertiesServiceの基礎とセキュリティ
PropertiesService※はスクリプト固有の設定を保存する場所です。APIキーをScriptPropertiesに保存し、コード内へ直書きしない設計が安全です。スクリプト共有時でも値は自動公開されず、管理権限のみが編集できます。チーム運用では編集権限を限定し、キーの更新手順を所内手順書に残すと運用が安定します。

GAS×OpenAIの方法:スプレッドシート一括校正の手順
学習目標:スプレッドシートの文章を一括で校正し、成功条件を自分で確認できるようにする。
Point:操作を二段階に分けるとつまずきが減ります。「API呼び出し関数」と「シート全体処理」です。
Reason:関数単体の動作を先に確定し、次に範囲処理へ広げると原因切り分けが容易です。
Example:proofreadText関数で1文を校正し、autoProofreadSheetで列A→列Bへ一括反映します。
Point:段階分割により、実務でも安心してスケールできます。

文章整形の設計と省力化の効果
文章整形は「誤字の修正」「読点の整理」「敬体の統一」の三点で効果が出ます。プロンプトでは「自然な日本語へ校正」と明記し、余計な意図変換を避けます。自動処理に切り替えると、1件数十秒の手作業が列単位の数十秒に短縮され、合計時間が大きく省力化します。GUI代替としては、シートのテキストをChatGPTに貼り付けて校正も可能ですが、毎回の手移しが発生します。

自動処理の流れと具体手順(ハンズオン①:API呼び出し)
1.手順概要(目的を1文で)
GASからOpenAI APIを呼び出し、1つの文章を校正します。
2.操作ステップ

  1. スプレッドシートで「拡張機能」→「Apps Script」を開く。

  2. プロジェクト設定でScriptPropertiesにOPENAI_API_KEYを登録。

  3. コードエディタに下記関数を貼り保存。

  4. エディタ上で関数を選び実行し、初回権限を承認。

  5. Loggerで返却を確認。
    3.コード例(20行以内・コメント付き)

// 1文を校正する関数(再送とログ付き) 
function proofreadText(text) { 
const apiKey = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY'); // キー取得 
if (!apiKey) throw new Error('APIキー未設定'); // 事前確認 
const url = 'https://api.openai.com/v1/responses'; // /v1/responses 
const payload = { model: 'gpt-4.1-mini', input: '次の文章を自然な日本語に校正してください: ' + text }; // シンプル入力 
const opt = { method: 'post', contentType: 'application/json', 
headers: { Authorization: 'Bearer ' + apiKey }, payload: JSON.stringify(payload), muteHttpExceptions: true }; 
for (let i = 0; i < 2; i++) { // 最大2回再送 
try { 
const res = UrlFetchApp.fetch(url, opt); // UrlFetchApp呼び出し 
if (res.getResponseCode() === 429) { Utilities.sleep(2000); continue; } // レート回避 
const json = JSON.parse(res.getContentText()); // JSON解析 
ogger.log(json); // 動作確認ログ 
return json.output[0].content[0].text; // /v1/responsesの出力 
} catch (e) { Logger.log('error:' + e); Utilities.sleep(2000); } // 待機して再試行 
} throw new Error('校正失敗'); // 最終エラー 
} 

4.動作確認ポイント(成功条件を具体化)
スクリプトエディタで proofreadText('本日 申請書を送付しました。') を実行し、Loggerに自然な日本語へ整形された文が表示されれば成功です。
5.応用ヒント(+1行)
inputを配列にして指示文と制約を分離すると、表現の安定性が高まります。

自動処理の流れと具体手順(ハンズオン②:シート一括処理)
1.手順概要(目的を1文で)
列Aの文章を一括で校正し、列Bへ結果を書き戻します。
2.操作ステップ

  1. シート名を「校正」にし、A1に「原文」、B1に「校正後」を設定。

  2. A2以降に文章を入力。空行は残しても構いません。

  3. 下記の関数を追加し保存。

  4. 関数を実行し初回権限を承認。

  5. 列Bに結果が並ぶことを確認。
    3.コード例(20行以内・コメント付き)

// 範囲を一括で校正してB列へ反映 
function autoProofreadSheet() { 
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('校正'); // 対象シート 
const values = sheet.getRange('A2:A').getValues(); // A列全体 
const src = values.filter(r => r[0] !== ''); // 空行を除外 
const out = []; // 出力配列 
for (let i = 0; i < src.length; i++) { 
const text = String(src[i][0]); // 文字列化 
out.push([proofreadText(text)]); // 1件ずつ校正 
Utilities.sleep(2000); // 2秒間隔でレート制御 
if ((i + 1) % 20 === 0) SpreadsheetApp.flush(); // バッチ反映 
} 
if (out.length > 0) sheet.getRange(2, 2, out.length, 1).setValues(out); // B列へ書き込み 
} 

4.動作確認ポイント(成功条件を具体化)
A2〜の文章に対し、B2〜へ校正後テキストがすべて出力され、文法と語調が統一されていれば成功です。
5.応用ヒント(+1行)
定期実行トリガーを使い、前日分のみを処理するロジックで費用を抑制できます。

GAS×OpenAIの注意点:レート・エラー・実行時間とセキュリティ
学習目標:安定稼働のための制約と対策を具体的に理解する。
Point:レート制限とGASの実行時間制限を前提に設計すると故障が減ります。
Reason:429やタイムアウトは設計不足が原因となり、分割処理と待機を入れると安定します。セキュリティはPropertiesServiceが基本です。
Example:Utilities.sleepで間隔を空け、20件ごとにflushし、6分上限を超える前に分割します。ScriptPropertiesにキーを置き、権限管理を限定します。
Point:この基本を守ると、データ件数が増えても運用が崩れません。

UrlFetchAppのタイムアウトとバッチ化
GASは1回の実行が最大約6分で終了となります。長い文章や件数が多いと時間を使い切ります。範囲を分割し、1実行あたり50〜100件程度に抑え、Utilities.sleepで2〜3秒の待機を入れます。UrlFetchApp※のレスポンスが遅い場合はmuteHttpExceptionsを使い内容をログへ残すと切り分けが容易となります。

エラーハンドリングと429対応
429は短時間の連続呼び出しが原因です。再送前に2秒以上の待機で改善します。サーバー障害時は指数的待機の採用が有効です。レスポンス本文をLoggerへ残し、result.output配列の存在を常に確認します。異常時は「校正失敗」と明示して次の行へ進めると、全体停止を避けられます。

GAS×OpenAIの活用事例と応用:省力化の広げ方
学習目標:一括校正の基盤を他業務へ展開する道筋を理解する。
Point:同じ骨組みで「要約」「分類」「抽出」へ拡張できます。
Reason:/v1/responsesの入力を差し替えるだけで、文章整形から多用途に展開できます。
Example:校正結果をSlackへ通知し、所内の確認スレッドに自動投稿すれば、確認の見落としを防げます。次回はGAS→Slack通知を扱い、Webhookでの自動処理を完成させます。
Point:一度作った基盤を再利用して、省力化の範囲を段階的に広げます。

省力化の通知設計と自動処理
省力化は「誰が確認したか」を残す設計まで含めて成立します。校正後のB列にタイムスタンプ列を追加し、Slack通知時にURLと行番号を付けると確認が素早く進みます。通知は重要度に応じて束ね、1回の通知にまとめると受け手の負担が軽くなります。

PropertiesServiceを活かした環境分離
本番と検証でAPIキーやシートIDを分けると安全です。ScriptPropertiesにENVを持たせ、ENVごとのキー・対象シート名を切り替えます。誤送信や誤上書きを予防し、人的エラーによる手戻りを抑えます。


まとめ

今回の焦点は「GASからOpenAI APIを呼び出し、スプレッドシートの文書を自動校正できる仕組みを構築する」ことでした。/v1/responsesを用いると出力取得が単純となり、UrlFetchAppでの呼び出しとPropertiesServiceでのキー管理により、安全で再利用しやすい構成となります。レート制限には2〜3秒の待機、GASの約6分上限には分割とバッチ化で対抗し、エラー時のログ出力で原因を明確化します。次回はGAS→Slack通知で、校正結果の共有を自動化し、所内の確認フローまで省力化を延長します。


所長コメント

本稿で、GAS×OpenAIの一括校正を安全に動かす基礎が整った。/v1/responses、UrlFetchApp、PropertiesServiceを軸に、待機・分割・再送で安定性を確保できた。次回はSlack通知をつなぎ、校正完了を即共有する導線を完成させる。


※GAS:Google Apps Scriptの略。Googleサービスの操作や連携を自動化する仕組み。
※OpenAI API:ChatGPTなどの言語モデルにアクセスするためのAPI。
※UrlFetchApp:GASで外部のHTTPリクエストを送るための標準機能。
※/v1/responses:統一出力形式に対応したOpenAI APIの推奨エンドポイント。
※PropertiesService:スクリプトやユーザー単位で設定値を安全に保存する機能。
※gpt-4.1-mini:/v1/responses対応のモデル。品質とコストのバランスが取りやすい。
※文章整形:誤字修正、語調統一、読みやすさの向上を目的とした表現の整え。
※自動処理:人手の反復作業をスクリプトで置き換える運用。
※省力化:作業時間や確認コストを減らすための仕組み化。


AIに関するご相談はコチラ

HANAWA行政書士事務所メインページ

AIナレッジメインページ