AI DEEP LIVE
Claude Code × GAS を
「仕事」にする
動くまでの作り方と、人の業務へ載せる前の確認
kimura
WHO
GASで業務システムを作って、
会社に納品しています
エンジニアではありません。
GASと、その周りだけでやっています。
作ったものを配ったり、noteに書いたりもしています。
TODAY
「AIでGASが書ける」は、
もう知っている前提で話します
今日は、その先。
書いたものを、人の業務に載せるところ。
退勤の打刻が、
止まりました。
夕方6時 / 35人ぶん / 復旧まで1時間 ── 原因は、自分が書いたコードではありませんでした
MAP
今日やること
依頼を、そのまま渡す
仕様書なしの1文から
出す直前に確認する
ここで止まります
止まった箇所を直す
Claude Code に投げる
もう1回確認して出す
それでやっと納品
全部消えたときに、最後に何が残るか。
01
まず、依頼を
そのまま渡します
依頼の1文を、そのまま渡すところから
REQUEST
依頼は、これだけ
記録がスプレッドシートに残るようにしてほしい。
仕様書はありません。実際こう来ます。
この粗さのまま、こちらで2つだけ決めて渡します。
※ 実際に納品しているものとは別物で、これは事前に作ってある簡単なものです。
PROMPT
投げるのは、この3行
工場の出退勤を記録するGASのWebアプリを作ってください。 タブレットに置いて、名前をボタンで選んで「出勤」「退勤」を押すだけの画面に。 記録はスプレッドシートに、日付・氏名・区分・時刻の4列で残してください。
依頼に無かったことを、2つだけ足しています。
名前はボタンで選ぶ/記録する列は4つで固定。
どちらも、あとで集計する人が困らないためです。
HOW TO ASK
頼むときに、
こちらが決めていること
01
どこに何を書くか
シート名と列の並びは自分で決める。言わないと勝手に列が増える。
02
入力は選ばせる
打たせると表記がぶれる。集計する側が困る。
03
差し替えるものは先頭へ
宛先とID。差し替え漏れが、いちばん事故になる。
逆に、色もボタンの位置も何も言っていません。
動きました
PROMPT 2
依頼は、ここから増えます
同じアプリに、事務所のPCで開く管理画面を足してください。 URLの末尾に ?view=admin を付けたときだけ出す形に。 上に「いま出勤中」「本日の出勤者数」の2つの数字を出して、 一覧には出勤時刻・退勤時刻・勤務時間を並べてください。
打刻は押した人を記録できます。
でも「押し忘れた人」は分かりません。
事務所の画面
?view=admin ── 同じアプリの、もう1つの顔
画面が2つになりました。
ただ、このままでは
渡せません。
02
渡す前に、
何を確認しているか
動いたものを、そのまま渡せるか
WHY NOT
いまは、自分のテスト用に
繋がっています
いまの状態
自分の環境を向いている
記録先は検証用のスプレッドシート。
自分が試すための、空のシートです。
お客さんに渡すには、本番のシートに差し替えないといけません。
差し替えを間違えると
本番に混ざる
テストで押した打刻が、本物の勤怠に混ざる。
逆に本番を向けたままテストを押すと、実在の社員の勤務時間が1件増える。給与の計算に乗る。
「気をつければいい」では、
漏れます。
自分が、漏らしました。
TOOL
やっている確認を、
そのままスキルにしました
スキル=Claude Code に渡す手順書。ファイルを1つ置くと、一言で呼べるようになります。
これまでは毎回、手でやっていました。
ただ急いでいるときほど飛ばすので、正直、無理がありました。
作ったばかりなので、これから自分の仕事にも入れていくところです。
出す直前のつもりで、
走らせます
「本番に出す前に確認して」── 読み取り専用。何も変更しません
RESULT
止まりました。赤が6つ
[PASS] TARGET_ENVIRONMENT: 本番反映用の設定です。 [PASS] RELEASE_ACK: 本番反映の明示確認があります。 [PASS] PRODUCTION_SCRIPT_ID: 本番scriptIdが設定されています。 [PASS] TEST_SCRIPT_ID: 検証用scriptIdが設定されています。 [PASS] SCRIPT_ID_SEPARATION: 本番と検証のscriptIdは分かれています。 [PASS] DEPLOYMENT_ID: 本番deploymentIdが設定されています。 [PASS] ROLLBACK_VERSION: ロールバック先はversion 1 です。 - [STOP] CLASP_SCRIPT_ID: .clasp.json が検証用scriptIdを指しています。 [PASS] REQUIRED_FILE: 必須ファイルを確認しました: .clasp.json [PASS] REQUIRED_FILE: 必須ファイルを確認しました: appsscript.json - [STOP] MANUAL_CHECK: 手動確認が未完了です: scriptPropertiesConfirmed - [STOP] MANUAL_CHECK: 手動確認が未完了です: triggersConfirmed - [STOP] MANUAL_CHECK: 手動確認が未完了です: backupCreated - [STOP] MANUAL_CHECK: 手動確認が未完了です: productionWindowApproved [PASS] SOURCE_FILES: 4ファイルを走査します。 - [STOP] TEST_DATA_REFERENCE: 検証用Spreadsheet IDが残っています: コード.gs [PASS] PRODUCTION_DATA_REFERENCE: 本番用Spreadsheet IDをソース内で確認しました。 [WARNING] GIT: Gitリポジトリではないため、未コミット変更を確認できません。 SUMMARY PASS=11 WARNING=1 STOP=6
3 KINDS
赤の中身は、3種類あります
1件
コードの問題
検証用のスプレッドシートIDが残っている。
中身を直せば消える。
1件
接続先の設定
.clasp.json が検証用を指している。
コードではなくどっちに送るかの話。
4件
人にしか分からない
設定は入っているか。トリガーは動いているか。バックアップは取ったか。
いま本番に出していい時間か。
3つ目は、コードを読んでも分かりません。
03
直して、
また確認する
ここからライブです
PROMPT
Claude Code に投げる文
STOP になっているものを直してください。
同じ画面で走らせたので、どのSTOPかは言わなくても伝わります。
ファイル名も行も、こちらが調べ直さなくていい。
PROGRESS
赤が減っていきます
6
走らせた直後
4
機械が直した
1回頼んで、消えたのは2つだけです。
残りの4つは、頼んでも消えません。
HUMAN
ここから先は、
機械には分かりません
手元のチェック表に、自分で印を付けます。付けるまで、確認は通りません。
設定
本番の値が入っていますか
バックアップ
取りましたか
トリガー
確認しましたか
いまの時間
出していい時間ですか
チェックを入れるまで、先に進めない。そこが仕掛けです。急いでいるときほど、こういうのを飛ばすので。
0
残ったのは、全部、人が決めることでした
作るのに10分かからなかったものを、
出すのに、これだけやっています。
作るところより、
こっちが「仕事」です。
NOT COVERED
ゼロになっても、見ていないもの
権限
誰が開けるか
現場のタブレットはログインなしで開ける設定。同じ設定で全員の勤務時間が見える画面を出したら事故。ログアウトして自分で開いて確かめる。
データ
中に何が入っているか
どのシートを向いているかは見る。中身は見ていない。テストで入れた行は自分で消す。
失敗
失敗したときの見え方
打刻が失敗したとき、押した人の画面に何も出ないともう1回押される。押した分だけ打刻が増える。
既存業務
紙のタイムカードをいつ止めるか
両方やる期間を作るのか。これはこちらが決めることではない。
04
なぜ、こんな面倒なことを
しているのか
ここからはツールが無くても持ち帰れる話です
RISK
怖いのは「間違えたこと」より
「戻せないこと」
データも動いているので、時間が経つほど戻せなくなります。
SCOPE
追加要望は、断るんじゃなくて
「区切る」
納品が近づくと、ほぼ必ず「ついでにこれもできない?」が来ます。
断ると角が立つし、受けると終わらない。
そのあと、次の分として見積もります。
先に「今回はここまで」を紙にしておく。画面の一覧と、やることリストで足ります。
それがあるだけで、追加要望の話が「交渉」から「確認」に変わります。
AFTER
作ってからの方が、長い
途中で必ず「直してほしい」が来ます。
コードはこちらで直します。
反映は向こうに押してもらいます。
LINKS