「あの承認メール、どこ行った?」「紙の稟議書がまた溜まってる…」——社内SEとして働いていると、こうした申請業務の混乱に巻き込まれることが本当によくあります。
こんな状況、心当たりはありませんか?
- メールで申請したのに承認者が見落としていて、1週間以上放置されていた
- 紙の稟議書を誰かのデスクに置いたまま行方不明になった
- 誰がどの申請を承認したのか、後から追跡できない
自分も最初は、高価なワークフローシステムを導入しないと自動化は無理だと思っていました。しかし、実際にはGoogle Workspace環境があれば、追加費用0円で強力なGAS承認フローを自作できます。それがGoogle Apps Script(GAS)を使った自動化です。
この記事では、実務ですぐに使えるテンプレートを交えながら、ノーコードに近い感覚で承認フローを構築する手順を解説します。
社内SEがGASで承認フローを自動化するメリット
先に結論です。GASで承認フローを自作するメリットは大きく分けて3つあります。
| メリット | 詳細 |
|---|---|
| コスト0円 | Google Workspaceの契約範囲内であれば追加費用は一切かかりません。 |
| 高いカスタマイズ性 | 会社のルールに合わせて、承認ルートや通知方法を自由に変更できます。 |
| 迅速な導入 | 外部システムの導入申請や稟議は不要です。最短1日でプロトタイプを稼働させられます。 |
手作業による申請書の印刷・手渡し・押印・保管といった一連の作業がすべてデジタルに置き換わり、業務時間を月間で10時間以上削減できるケースも珍しくありません。
GAS承認フローで自動化できる業務例
GASを使えば、社内のあらゆる申請・承認業務を自動化の対象にできます。
稟議書・経費申請
- 自動化内容: 申請内容をフォームから入力すると、自動で上長にメール通知が飛びます。承認者はメール内のリンクをクリックするだけで承認・却下が完了します。
- 効果: 申請状況がスプレッドシートで一覧化され、「誰のところで止まっているか」が一目瞭然になります。
休暇・出張申請
- 自動化内容: 休暇申請が承認されると、自動で共有カレンダーに予定が登録されます。
- 効果: 申請者と管理部門双方の転記作業が不要になり、記入ミスもなくなります。
その他、社内申請全般
- 備品購入申請
- IT機器の利用申請
- アカウント発行・権限変更依頼
- 入退室記録の申請
これらの業務は、基本的に同じ仕組みで自動化できます。
関連記事:社内SEが自動化すべき業務10選|現場で使える具体例と実装手順
放置されたアカウント管理が引き起こした実際の事例
少し話が逸れるようですが、申請・承認フローの整備がいかに重要か、実感した話をひとつ紹介します。
以前、退職者のアカウント削除を「メール申請→IT部門が手動で対応」という運用にしていた会社で、承認メールが埋もれて削除処理が漏れ、退職者がVPNにアクセスできる状態が数ヶ月続いていたというケースを聞いたことがあります。申請フローが属人的なメール管理になっていると、こういったセキュリティ上のリスクが静かに積み上がっていきます。「うちはまだ大丈夫」と思っていても、仕組みがなければ同じことは十分起こりえます。
GAS承認フローの基本的な設計ステップ
実際に構築する前に、全体の流れを4つのステップで整理します。
ステップ1:承認フローの要件定義
- 誰が: 申請者
- 誰に: 承認者(例:直属の上長)
- 何を: 申請内容(例:経費、休暇)
- どうなったら: 承認 or 却下
- 通知は: 申請時・承認時・却下時にメールで通知する
この5点を最初に明確にしておくことが、手戻りを防ぐ最大のポイントです。自分の経験上、ここを曖昧にしたまま作り始めると、後から「やっぱり二次承認も必要で」と仕様が膨らんで大変なことになります。
ステップ2:スプレッドシートの設計
申請データを管理するデータベースとして、スプレッドシートを準備します。最低限、以下の列を用意しましょう。
- タイムスタンプ
- 申請者メールアドレス
- 申請内容
- 金額(経費申請の場合)
- ステータス(例:申請中、承認、却下)
- 承認者コメント
- 処理日時
ステップ3:GASスクリプトの作成
Googleフォームからの申請をトリガーにして、承認依頼メールの送信やステータスの更新を行うスクリプトを作成します。複雑なロジックは不要で、基本的なメール送信とセルの値の書き換え処理が中心です。
コーディングに詰まったときは、AIに手伝ってもらうのも一つの選択肢です。
関連記事:ChatGPTでVBAを自動生成する方法|社内SE向け実践テンプレート10選とエラー対処
ステップ4:トリガーと通知の設定
「フォームが送信されたとき」にスクリプトが自動で実行されるようにトリガーを設定します。これにより、人の手を介さずに24時間365日、申請プロセスが自動で動き出します。
【実践】GASで申請・承認フローを構築する方法(テンプレート公開)
ここからは、具体的な手順とコピペで使えるスクリプトテンプレートを解説します。今回は「経費申請フロー」を例にします。
ステップ1:スプレッドシートとGoogleフォームの準備
- 新しいGoogleスプレッドシートを作成します。
- シート名を「申請一覧」に変更し、ヘッダー行に以下の項目を設定します。
A列: タイムスタンプ, B列: 申請者, C列: 申請項目, D列: 金額, E列: 備考, F列: ステータス, G列: 承認リンク
- メニューから
ツール>フォームを作成を選択し、スプレッドシートに連携したフォームを作成します。 - フォームには「申請項目」「金額」「備考」などの質問項目を設定します。
ステップ2:GASスクリプトの実装
- スプレッドシートのメニューから
拡張機能>Apps Scriptを開きます。 - 既存のコードをすべて削除し、以下のスクリプトを貼り付けます。
// 承認者のメールアドレスを設定
const APPROVER_EMAIL = "approver@example.com";
// スプレッドシートのIDを設定(URLの /d/ と /edit の間の文字列)
const SPREADSHEET_ID = "YOUR_SPREADSHEET_ID";
// シート名を設定
const SHEET_NAME = "申請一覧";
/**
* Webアプリとして動作させるためのdoGet関数
* 承認・却下リンクがクリックされたときに実行されます
*/
function doGet(e) {
const params = e.parameter;
const action = params.action;
const row = params.row;
const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME);
if (action === "approve") {
sheet.getRange(row, 6).setValue("承認済み"); // F列にステータスを書き込む
return ContentService.createTextOutput("承認処理が完了しました。");
} else if (action === "reject") {
sheet.getRange(row, 6).setValue("却下"); // F列にステータスを書き込む
return ContentService.createTextOutput("却下処理が完了しました。");
}
return ContentService.createTextOutput("不正なアクセスです。");
}
/**
* フォーム送信時に実行される関数
* トリガーで「フォーム送信時」に設定してください
*/
function onFormSubmit(e) {
const sheet = e.source.getSheetByName(SHEET_NAME);
const lastRow = sheet.getLastRow();
// WebアプリのURLを取得(初回デプロイ後に正しいURLが取得されます)
const webAppUrl = ScriptApp.getService().getUrl();
const approveUrl = webAppUrl + "?action=approve&row=" + lastRow;
const rejectUrl = webAppUrl + "?action=reject&row=" + lastRow;
// 承認・却下リンクをG列に書き込む
const approveLink = `=HYPERLINK("${approveUrl}", "承認する")`;
const rejectLink = `=HYPERLINK("${rejectUrl}", "却下する")`;
sheet.getRange(lastRow, 7).setFormula(`${approveLink} & " / " & ${rejectLink}`);
// フォームの回答を取得(フォームの質問項目名に合わせて変更してください)
const applicant = e.namedValues['メールアドレス'][0];
const item = e.namedValues['申請項目'][0];
const amount = e.namedValues['金額'][0];
// 承認者へのメール本文を組み立てる
const subject = "【要承認】経費申請のお知らせ";
const body = `
以下の経費申請がありました。内容を確認し、承認または却下をしてください。
申請者:${applicant}
申請項目:${item}
金額:${amount}円
▼ 承認する
${approveUrl}
▼ 却下する
${rejectUrl}
`;
MailApp.sendEmail(APPROVER_EMAIL, subject, body);
// ステータスを「申請中」に更新(F列)
sheet.getRange(lastRow, 6).setValue("申請中");
}
⚠️ よくある落とし穴:
YOUR_SPREADSHEET_IDの部分を、実際のURL(.../d/と/editの間にある文字列)に書き換えるのを忘れないでください。また、e.namedValues['メールアドレス']などの項目名は、実際のフォームの質問文と完全に一致させる必要があります。
ステップ3:トリガーとデプロイの設定
- トリガー設定:
- スクリプトエディタの左側にある時計アイコン(トリガー)をクリックします。
+ トリガーを追加をクリックします。- 実行する関数を
onFormSubmitに設定します。 - イベントの種類を
フォーム送信時に設定し、保存します。(初回はGoogleアカウントの承認が必要です)
- Webアプリとしてデプロイ:
- 画面右上の
デプロイ>新しいデプロイをクリックします。 - 種類で
ウェブアプリを選択します。 アクセスできるユーザーを全員に設定し、デプロイをクリックします。- 表示されたWebアプリのURLをコピーし、スクリプト内の
webAppUrlとして正しく取得できているか確認してから再度デプロイします。
これで、フォームから申請が送信されると、承認者に承認・却下リンク付きのメールが自動で飛ぶようになります。
実際に使ってみた結果
- かかった時間: 初期設定に約2時間(フォーム・スプレッドシート・GASの設定含む)。2回目以降は1時間以内で構築できます。
- 削減できた時間: 経費申請1件あたり平均30分かかっていた確認・転記作業が、ほぼ0分に。月20件の申請があれば、月10時間以上の削減になります(環境によって異なります)。
- 詰まったポイント: フォームの質問名とスクリプトの
e.namedValuesの文字列が微妙にずれていてエラーになったことがありました。全角スペースや句読点の違いが原因だったので、コピペで合わせるのが確実です。 - 正直な感想: 最初のデプロイ手順が少し独特で戸惑いましたが、一度動かしてしまえばあとはほぼメンテナンスフリーです。費用がかからない割に実用性が高く、社内への説明もしやすいのが個人的には一番助かっています。
結論(社内SEならこう使う)
まず経費申請か休暇申請の1種類だけをGASで自動化し、「これ便利でしょ」と現場に見せてから横展開するのが、現実的に一番うまくいく進め方です。
承認フローをさらに高度化するヒント
基本形ができたら、さらに業務に合わせてカスタマイズしていきましょう。
複数段階承認や条件分岐の設定
- 実装方法: スプレッドシートに「一次承認者」「二次承認者」の列を追加します。一次承認が完了したら、次に二次承認者へメールを送信するロジックをGASに追加します。
- 例: 申請金額が5万円以上の場合のみ、二次承認(部長承認)が必要になるといった条件分岐も、
if文で実装できます。
SlackやChatworkとの連携
メールだけでなく、チャットツールに通知を送ることも可能です。各ツールのAPIを利用して、GASからメッセージを送信します。
- Slack:
Incoming Webhooksを利用します。 - Chatwork:
Chatwork APIを利用します。
メールよりも気づきやすいため、承認依頼の見逃し防止にも効果があります。
GAS承認フロー導入時の注意点とQ&A
手軽な反面、いくつか注意すべき点があります。
スクリプト管理とメンテナンス
- 誰が管理するか: スクリプトは個人のGoogleアカウントに紐づきます。担当者の異動や退職で突然動かなくなるリスクを避けるため、共用のIT部門アカウントで作成・管理することを強く推奨します。
- 仕様変更への対応: 承認ルートの変更などがあった場合はスクリプトの修正が必要です。簡単な変更履歴をコード内にコメントで残しておくと、後任者も対応しやすくなります。
⚠️ よくある落とし穴:個人のアカウントでトリガーを設定すると、その人が退職した瞬間にすべての自動化が停止します。必ず共有アカウントやグループアカウントで管理してください。
セキュリティとアクセス権限
- スプレッドシートの権限: 申請データが格納されるスプレッドシートは、閲覧権限を承認者や関係者のみに限定してください。
- Webアプリのアクセス権: デプロイ時にアクセス権限を「全員」に設定しますが、URLは長く推測困難な文字列のためURLを知っている人しかアクセスできません。ただし、より厳密なセキュリティが求められる場合は、アクセスできるユーザーをドメイン内に限定する設定も検討してください。
まとめ:GAS承認フローで社内の申請業務を一気に整理する
GAS承認フローの自動化は、社内SEが最小限のコストと時間で大きな成果を出せる、現実的な手段のひとつです。
- 小さく始める: まずはシンプルな一段階承認から構築します。
- テンプレートを活用: ゼロから書かず、本記事のテンプレートを土台にカスタマイズします。
- 管理者を明確にする: 属人化を避けるため、必ず共有アカウントで運用します。
この仕組みを応用すれば、経費申請だけでなく、社内のあらゆるペーパーワークを整理できます。Power Automateのようなツールも強力ですが、Google Workspace環境がメインであれば、GASは最も手軽で確実な選択肢のひとつです。
関連記事:Power Automateで業務自動化する方法|社内SEがすぐ使える実践フロー5選
関連記事:VBAとPower Automateの違い|社内SEはどちらを使うべきか【結論あり】

