Claude Code × GAS(Google Apps Script)で新入社員オンボーディングを自動化してみた
こんにちは、株式会社DriveXの三浦です。
私がバックオフィス業務を引き継いだ時、前任者からの引き継ぎ資料を見て、手作業の多さに愕然としました。新入社員のオンボーディングだけでも、これだけのタスクを手作業で行っていたのです。
・メールアドレス発行(Google Workspace)
・Office365のライセンス購入・台帳管理
・雇用契約書の作成 → PDF化 → クラウドサインで送付
・社会保険・雇用保険の手続き(社労士にメール)
・給与計算依頼(社労士にメール)
・Google Workspaceアカウント作成
・Notion招待 + 従業員名簿登録
・Slack招待 + 紹介投稿
・マネーフォワード勤怠の登録・招待
・名刺作成(Figma)→ 発注(ラクスル)
・PC台帳管理(Notion)
・McAfeeインストール
・全社共有カレンダーに誕生日・入社記念日を登録
毎回これを手作業でやっていては、抜け漏れのリスクと常に隣り合わせです。何より、バックオフィスに加えて広報も兼任している私にとって、この「作業」に追われているうちは、本来もっと力を入れたい「広報業務」に割く時間が全くなくなってしまうのです。「これは絶対に自動化して、自分のリソースを空けなければ…!」そう決意した私が、AIアシスタント「Claude Code」をフル活用して、新入社員の受け入れ業務を完全自動化した泥臭くも痛快な開発ストーリーをお届けします。
なぜGAS(Google Apps Script)にしたのか
自動化を決意した私が最初に目をつけたのは、ノーコード / ローコードツールとして最近人気の「n8n」でした。実際に設計図を作り、一部のワークフローも組んでみました。

しかし、いざ実装を進めていく中で、ふと手が止まりました。「ノーコードでラクになるはずなのに、複雑な連携設定や、新しいツールの運用管理という『新たな業務』が増えていないか…?」と。広報業務の時間を作るために自動化しているのに、これでは本末転倒です。そこで一度立ち止まり、本当にn8nが自社にとって最適解なのか、冷静に比較検討してみたのです。すると、以下の事実が浮かび上がってきました。

弊社の業務基盤は完全にGoogle Workspaceに集約されています。
それなら、わざわざ外部ツールを使わなくても「GAS(Google Apps Script)」で組む方が圧倒的にシンプルで、低コストです。そして何より、作った後の「保守(メンテナンス)」が圧倒的にラクだということに気づいたのです。
外部ツール(n8nなど)を使って自動化をすると、「外部連携の認証(パスポート)が切れて突然システムが止まる」「ツールのアップデートで今まで動いていた設定が壊れる」といったトラブルがつきものです。
しかし、Google純正のGASならそういった心配がありません。
認証切れがない: 最初からGoogleの敷地内で動くため、パスポートの期限切れで突然止まるエラーが起きません。
管理がゼロ: 面倒なサーバー管理やバージョン管理は、すべて裏側でGoogleがやってくれます。
AIですぐ直せる: 万が一エラーが起きても、GASはテキスト(文字)で書かれているため、エラー画面をそのままAIにコピペすれば一瞬で解決策を教えてくれます。
広報とバックオフィスを兼任している身として、「昨日まで動いていたのに突然エラーで止まり、復旧作業に時間を取られる」といった事態は絶対に避けたいところです。一度作ればほぼ放置で安定して動き続けてくれるGASは、まさに理想の環境でした。
とはいえ、私自身はGASのコードをゼロからスラスラ書けるわけではなく、本来であれば使い慣れたn8nで組む方が得意です。それでも、自社の保守運用を優先して「あえてGASを選ぶ」という決断ができたのは、AIアシスタント「Claude Code」の存在があったからです。「自分の得意なツール(n8n)に業務を合わせるのではなく、自社に最適な環境(GAS)を選び、足りないプログラミングスキルはAIにカバーしてもらう」そう方針を定めて、本丸の自動化に挑むことになりました。
開発環境:Claude Code × clasp
今回の自動化における最大のポイントは、システムを動かすための命令書(コード)を、AIアシスタントの「Claude Code」にほぼ全部書かせたことです。通常、GASを設定する際は、Googleの専用画面を開いて直接コードを入力したり、AIに書いてもらったコードを何度も「コピー&ペースト」したりする手間がかかります。
しかし今回は、「clasp(クラスプ)」というGoogle公式の便利なツールを活用しました。これを使うと、自分のパソコンの中にあるファイルを、一括でGoogleのシステムに直接送信(アップロード)することができます。
つまり、「AIに自分のパソコンの中へ直接コードを書かせ、人間は『一括送信!』の合図を出すだけでそのままGoogleに反映させる」という仕組みです。人間が面倒なコピペ作業をする必要が一切ない、まさに夢のようなスマートな開発フローが実現したのです。
💡claspセットアップ手順
Claude Codeの指示に従い、PCの「ターミナル」(Windowsの場合はコマンドプロンプトなど)を開き、以下のコマンドを順に入力してセットアップを進めました。
(※注:事前にNode.jsのインストールや作業用フォルダの作成などが必要ですが、長くなるためここでは割愛します。)
# 1. claspをインストール
npm install -g @google/clasp
# 2. Googleアカウントでログイン(ブラウザが開く)
clasp login
# 3. GASプロジェクトを作成(既存スプレッドシートに紐づけ)
clasp create --parentId [対象のスプレッドシートのID] --title "新入社員オンボーディング自動化"clasp create を実行すると以下のエラーが表示されました。
User has not enabled the Apps Script API. Enable it by visiting
https://script.google.com/home/usersettings then retry.これは「Google Apps Script APIが無効になっている」というエラーです。記載されているURLにアクセスし、設定スイッチを「オン」にする必要があります。初見だと少し戸惑うポイントなので注意が必要です。
💡プロジェクト構成もAIにお任せ
機能ごとにファイルを分割し、保守性の高い構成を作りました。
これもClaude Codeに頼んだ結果です。
back_office_gas/
├── .clasp.json # clasp設定(スクリプトID、rootDir等)
├── appsscript.json # GASマニフェスト(タイムゾーン、OAuthスコープ)
└── src/
├── appsscript.json # clasp用コピー
├── config.gs # 設定値の一元管理(APIキー、ID等)
├── main.gs # トリガー+データ整形+メイン制御
├── setup.gs # 初回セットアップ用関数
├── slack.gs # Slack通知(完了サマリー+手動リマインド)
├── calendar.gs # Googleカレンダー連携(誕生日・入社記念日)
├── calendar_invite.gs # DriveX定例カレンダー招待
├── email.gs # 社労士メール下書き
├── google_workspace.gs # GWSアカウント作成(カタカナ→ローマ字変換)
├── drive_permission.gs # Googleドライブ権限付与
├── test_email.gs # 社労士メールのテスト
├── test_google_workspace.gs # GWSアカウントのテスト(42ケース)
├── test_calendar_invite.gs # カレンダー招待のテスト
└── test_drive_permission.gs # ドライブ権限のテスト普通にGASを作ると1つのファイルにごちゃ混ぜになって後から大変になってしまいますが、今回はAIとclaspという仕組みを使ったおかげで、最初から綺麗に整理整頓されたプロ仕様のフォルダ構成が作れました。
実装の流れ
⭐Step 1: n8nからGASへの移植
まずは、これまで使っていたn8nの設計図(JSONという形式のテキストデータ、約230行)をClaude Codeにそのまま読み込ませました。「これをGAS用に作り直して!」の一言だけで、AIは以下の面倒な作業をすべて完璧にこなしてくれました。
起動スイッチ(トリガー)の自動設定: どのシートを監視すればいいかを正確に抽出。
項目名の翻訳: スプレッドシートの日本語の項目名(16項目)を、システムが扱いやすい英語のラベルに自動変換。
通知の再現: Slackへ送る通知メッセージの見た目を、旧システムと全く同じように再現。
驚いたのは、単にコードを書き換えるだけでなく、作業に入る前に「既存のn8nを動かしたままだと二重処理になるため、事前に停止を推奨します」と、運用上のリスクまで先回りして指摘してくれたことです。
実際に生成されたGASのコードは以下のようになりました。
// フォーム送信時のトリガー(起動スイッチ)関数
function onFormSubmit(e) {
const row = e.range.getRow();
const sheet = SpreadsheetApp.openById(CONFIG.SPREADSHEET_ID)
.getSheetByName(CONFIG.SHEET_NAME);
const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
const values = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
// ヘッダーと値をマッピングしてオブジェクトにする
const rawData = {};
headers.forEach((header, i) => { rawData[header] = values[i]; });
// データ整形(従業員カルテの作成)
const employee = formatEmployeeData(rawData);
// 各処理を順次実行(1つ失敗しても他は続行)
const results = {};
try {
results.slackNotification = notifyFormReceived(employee);
} catch (err) {
results.slackNotification = { error: err.message };
}
// ...以降、カレンダー登録、メール送信等が続く
}一見すると複雑なコードですが、やっていることはとてもシンプルで理にかなっています。これは例えるなら、「優秀な受付担当者」です。スプレッドシートに新しい回答が入ると、自動的に質問と回答をセットにして「従業員カルテ」を作成してくれます。そして何より素晴らしいのが、後半の try-catch という記述による「安全装置」です。通常の自動化システムは、「Slack通知」でエラーが起きるとそこでシステム全体がフリーズしてしまい、その後の「カレンダー登録」なども全てストップしてしまいます。しかしこのコードは、「もし一つの処理が失敗しても、エラーの記録だけ残して次の処理に進む」という設計になっています。AIが自らこの堅牢な設計(絶対に止まらない仕組み)を組んでくれたことには、本当に驚かされました。
⭐Step 2: Slack通知の実装と動作確認
AIが生成したコードをclasp pushでGASにコードを反映し、GASエディタから APIキー登録(setupScriptProperties)と フォーム送信にプログラムを動かすトリガー設定(setupTrigger)の初期設定を行いました。 初回実行時には「このアプリはGoogleで確認されていません」という警告画面が表示されます。初見だと少し驚くかもしれませんが、これは自作のプログラムを実行する際に必ず出る標準的な確認画面です。「詳細 → 安全でないページに移動」から進めて問題ありません。
いざGoogle Formからテスト送信!……しかし、Slackに通知が来ません。実行ログを見ると channel_not_found エラー。ここからSlack APIの3つの罠にハマりました。
罠1:チャンネル名に「#」は不要
Slack上では「#バックオフィス」と表示されますが、システムに指示を出す際、設定値に「#」を含めると別物として扱われエラーになります。
罠2:プライベートチャンネルにはBotの招待が必要
AI(Bot)も一人の新入社員(ユーザー)として扱われます。そのため、鍵付きのプライベートチャンネルには自動でアクセスできません。Slackのチャット欄で /invite @BackOffice と入力し、システムを明示的に招待する必要がありました。
罠3:設定画面のメニューが日英混在
Slackの開発者向け設定画面は日本語と英語が入り乱れています。「権限(スコープ)」を設定するメニューが「OAuth」という英語項目の中に隠れているなど、UIの分かりにくさにも苦戦しました。
これらのエラー原因も、Claude Codeのサポートを得ながら一つずつ解消していきました。最後に、機械的な文字列になっていた日付の表記を人間が読みやすい形式に調整し、無事に想定通りのレイアウトでSlack通知を受け取ることができました。
⭐Step 3: Googleカレンダーに誕生日・入社記念日を自動登録
次に実装したのは、「フォームに入力された際、全社共有カレンダーへ新入社員の誕生日と入社記念日を『毎年繰り返しの終日イベント』として自動登録する」という機能です。
function registerToCalendar(employee) {
const calendar = CalendarApp.getCalendarById(CONFIG.SHARED_CALENDAR_ID);
const recurrence = CalendarApp.newRecurrence().addYearlyRule();
// 誕生日(毎年繰り返し)
calendar.createAllDayEventSeries('🎂 ' + employee.fullName + ' 誕生日', birthdayDate, recurrence);
// 入社記念日(毎年繰り返し)
calendar.createAllDayEventSeries('🎉 ' + employee.fullName + ' 入社記念日', joinDate, recurrence);
}
コード自体は数行で済むシンプルなものですが、いざ動かしてみると、Google Workspaceならではの権限や仕様に関する「4つの壁」に直面することになりました。
壁1:実行権限の不足(Action not allowed)
GASの自動化プログラムは「設定した人」のアカウント権限を使って動きます。私のアカウントには全社共有カレンダーの「予定の変更」権限がなかったため、プログラムがカレンダーに書き込めず弾かれてしまいました。
壁2:設定画面の複雑さ(UI迷子)
権限をもらうために管理者に依頼しようとしましたが、Googleカレンダーの共有設定は階層が深く複雑で、該当する権限付与メニューを案内するのにも一苦労しました。
壁3:管理者の代行設定による制約
「権限を持つ管理者に、プログラムの起動スイッチ(トリガー)を代わりに設定してもらえばいいのでは?」と考えましたが、今回のように複数のファイルに分割されたプロ仕様の構成だと、別のアカウントから上手く実行できないという制約がありました。結局、私自身のアカウントにカレンダーの編集権限を付与してもらうのが最短ルートでした。
壁4:繰り返し予定の作成仕様
プログラム上で「とりあえず単発の予定を作ってから、後で毎年繰り返しの設定に変更する」という手順を踏むとエラーになります。AIの助言に従い、最初から「繰り返し予定の作成に特化した専用の指示(createAllDayEventSeries)」を使うことで解決しました。
⭐Step 4: 社労士への給与計算依頼メール(TDD)
次は、社労士へ送る「入社手続き・給与計算の依頼メール」の自動作成です。 ここではミスが絶対に許されないため、エンジニアが使う「TDD(テスト駆動開発)」という手法を取り入れました。これは、システムを作る前に「絶対に満たすべきチェックリストを先に作り、それに合格するまで修正を繰り返す」という、非常に手堅い作り方です。GASには標準のテスト機能がないため、AIに専用の「自動チェック用プログラム」を作ってもらいました。
function testBuildEmailBody() {
const employee = createTestEmployee_();
const email = buildLaborConsultantEmail(employee);
// メール本文に必要な情報がちゃんと入っているか、システムに自動チェックさせる
assert_('本文に氏名', email.body.indexOf('山田 太郎') !== -1);
assert_('本文にふりがな', email.body.indexOf('やまだ たろう') !== -1);
assert_('本文に入社日', email.body.indexOf('2026/05/01') !== -1);
assert_('本文に年収', email.body.indexOf('500万円') !== -1);
}
そして、この工程における業務面での最大のポイントは「自動送信はさせず、あえて『下書き保存』で止める」という設計にしたことです。
給与や雇用形態といった重要情報は、AIやシステムに100%任せきりにするのではなく、最終的に必ず人間の目で確認する必要があります。そのため、システムには「Gmailの下書きフォルダに準備する」ところまでを任せ、送信ボタンを押すのはバックオフィスの担当者、という安全な運用フローを構築しました。作成したテストプログラムを実行すると、以下のようにターミナルへ結果が表示されます。
=== 社労士メール テスト開始 ===
✅ 本文に氏名
✅ 本文にふりがな
✅ 本文に入社日
✅ 本文に年収
✅ 件名が空でない
✅ 件名に氏名
testBuildEmailBody: 6 passed, 0 failed
=== テスト完了 ===
すべての項目にチェックマークがつき、無事にテストをクリア!
実際にGmailを開くと、社労士宛ての完璧な依頼メールが下書きフォルダに準備されていることを確認できました。
⭐Step 5: Google Workspace アカウントの自動作成(最大の難所)
今回のプロジェクトで最大の山場となったのが、Google Workspaceのアカウント(メールアドレス)の自動発行です。 管理者用の特別なツール(Admin SDK Directory API)を操作するのですが、ここで「カタカナの名前から、メールアドレス用のローマ字を生成する」という、非常に厄介な問題に直面しました。
入社フォームからは「漢字」と「カタカナ」の名前しか送られてきません。しかし、メールアドレスは t.yamada@... のようにローマ字にする必要があります。 実は、日本語のカタカナを正確にローマ字へ変換するルールは意外と複雑です。
「ッ(促音)」が入る「ハットリ(hattori)」のように子音を重ねるルール
「ウ(長音)」を省略する「サトウ(sato)」の慣習
これら日本特有の細かい命名規則をすべて網羅した「変換辞書(関数)」を一から作り上げる必要がありました。 ここでもAI(Claude)が本領を発揮し、なんと42通りものテストパターンを自ら作成。あらゆる名前のパターンでミスが起きないことを、一瞬で証明してくれました。
✅ サトウ → sato
✅ ハットリ → hattori (促音の子音重ねに対応)
✅ ミウラ → miura
✅ タカハシ → takahashiさらに、運用上のリスクとして「同姓同名の重複」への対策も盛り込みました。 もし「鈴木一郎(i.suzuki)」さんが既に社内にいた場合、新しく入る鈴木さんには自動で「i.suzuki2」と数字を付与するロジックを実装しています。
こうして無事にアカウントが作成された後、個人の連絡先(私用メールアドレスなど)宛てに、初期パスワードを記載した「案内メール」を自動で下書き保存し、一連の工程が完了します。
⭐Step 6: カレンダー招待 + Googleドライブ権限付与(最後の落とし穴)
アカウントが無事に発行されたら、最後は社内システムへの「入館証(権限)」の付与です。発行したばかりの新しいアカウントを使って、以下の作業を自動化しました。
定例ミーティング(DriveX)のGoogleカレンダーへのゲスト追加
部署の共有ドライブへの「コンテンツ管理者」権限の付与
就業規則などが格納されたフォルダへの「閲覧」権限の付与
これらの高度な操作を行うには、Google Workspaceの「拡張サービス(Advanced Service)」という特別な機能(VIPパス)をオンにする必要があります。 しかし、ここで最後の罠が待ち受けていました。自分のパソコンから clasp push でコードを一括送信するたびに、Googleの画面上で手動でオンにしたはずの「VIPパス」の設定が、毎回リセットされて消えてしまうのです。
原因は、私のパソコン内にあったシステムの大元の設計図(appsscript.json というファイル)が「空っぽ」だったことでした。 claspは良くも悪くもパソコン内の設計図に極めて忠実です。「設計図にVIPパスのことが書かれていないなら、そんな設定は不要だ」と判断し、Google側の設定を毎回上書きして消してしまっていたのです。
AIの助言のもと、大元の設計図に以下のように「これらのVIPパスを使います」と明記することで、この問題はあっさりと解決しました。
"dependencies": {
"enabledAdvancedServices": [
{ "userSymbol": "AdminDirectory", "version": "directory_v1", "serviceId": "admin" },
{ "userSymbol": "Calendar", "version": "v3", "serviceId": "calendar" },
{ "userSymbol": "Drive", "version": "v3", "serviceId": "drive" }
]
}
こうして、最後の落とし穴も無事に乗り越え、新入社員の受け入れに必要なワークフローが全自動で動くようになりました!
おわりに
実は、今回記事で紹介した6つのステップは全体の一部にすぎません。裏側ではNotionへの自動招待や雇用契約書の自動作成など、冒頭で挙げた数多くのタスクもまとめて自動化しています。最大の成果は「圧倒的な時短と属人化からの解放」です。1人あたり30分以上かかっていた手作業が「3分」の最終確認のみになり、人為的ミスも激減。引き継ぎも極めて簡単になり、本来注力したかった別の業務にたっぷりと時間を充てられるようになりました。手作業に追われている皆さんも、ぜひAIの力を借りて、業務自動化しませんか?
【お知らせ】
弊社では、AIを活用した業務効率化や、社内のDX化を進めたい企業様向けに、実践的なAI研修をご提供しています。「何から手をつけたらいいか分からない」「自社業務への具体的な組み込み方を相談したい」という方は、ぜひお気軽にご相談ください!
お問い合わせはこちら▶https://drivex.co.jp/#contact
