非エンジニアが Claude Code で社内サービスを作り、社内配信するまで / 2026-08-21
前提: 非エンジニアは GitHub アカウントを持たない。したがって Codespaces は使わない
使う道具: Claude デスクトップアプリの Cowork と Claude Code
対になる資料: claude-code-internal-app-workflow.md(プランA / Codespaces 版)
プランB はプランA より安い。代わりに、エンジニアの手作業がわずかに増え、 利用者の Mac が壊れたら作業が消えるリスクを自分で管理する必要が出ます(§6・§7)。
| プランA(Codespaces) | プランB(ローカル) | |
|---|---|---|
| 利用者の GitHub アカウント | 必要 | 不要(Deploy key で push) |
| 開発場所 | Codespace(使い捨てできる) | 利用者の Mac(使い捨てできない) |
| 端末セットアップ | ゼロ | エンジニアが30分/人 |
| 開発の入口 | ブラウザ | デスクトップの「◯◯を開く」をダブルクリック |
| スキルの配布 | 社内マーケットプレイス | リポジトリに同梱(.claude/skills/) |
| 配信結果の確認 | gh run watch | Chatwork 通知(gh が使えないため) |
| 本番公開の申請 | 利用者が PR を作る | 利用者は申請書を作る → エンジニアが PR を作る |
| バックアップ | 不要(クラウド上) | 毎日18時の自動保存が必須 |
| 退職時の環境回収 | 組織が遠隔で削除 | 端末返却の運用に載せる(遠隔削除できない) |
| ガードレール | 標準 | 強化(sudo / 作業フォルダ外 / reset --hard を禁止) |
| Cloudflare の鍵の置き場所 | GitHub Actions のみ | 同じ(GitHub Actions のみ) |
| 月額 | $50〜80 | $13 + Claude シート |
仕様書の作り方、Cloudflare の構成、Access による社内限定、承認は「エンジニアが PR をマージする行為」という一点、 4層のガードレールという考え方。この4つは両プラン共通です。
work ブランチを分けるのか毎日の自動保存が staging に直接入ると、未完成のコードが試用環境に出てしまいます。
work は「push しても何も起きないブランチ」なので、安心して自動保存できます。
| 置き場所 | 何を置くか |
|---|---|
| GitHub Actions Secrets | CLOUDFLARE_API_TOKEN / CLOUDFLARE_ACCOUNT_ID / CHATWORK_API_TOKEN |
利用者の Mac(~/.ssh/) | リポジトリ1本分の Deploy key のみ(push しかできない) |
| 利用者の Mac(その他) | Cloudflare の鍵は無し |
GitHub アカウントに紐づかず、リポジトリ1本だけに書き込める鍵です。 利用者はアカウントを作る必要がなく、他のリポジトリには一切触れません。 端末交換・退職のときはその Deploy key を削除するだけで書き込みが止まります。
推測ではなく、道具の仕様として決まっています。Cowork がお客様の Mac のフォルダを触るときのシェルには、次の制約があります。
npm ci / npm install が必ず失敗するnpm run dev のような常駐プロセスを立ち上げられないnode_modules の入れ替えで詰まるしたがって Cowork は「文字を読み書きする工程」に限って使えます。
| 工程 | Cowork | Claude Code |
|---|---|---|
仕様書をつくる(/service-spec) | ○ | ○ |
| 開発する・画面を確認する | × | ○ |
保存・配信(/service-save /service-ship) | × | ○ |
| 困りごとの記録(記録の作成のみ) | △ | ○ |
| 社内向けの案内文・マニュアルをつくる | ○ | ○ |
同梱の /service-spec には、いまどちらの道具で動いているかを判定する手順を入れてあります。
Cowork だと分かったら、仕様書を書き終えた時点で止まり
「ここから先はデスクトップの『◯◯を開く』から進めてください」と案内します。
同じフォルダを見るので、仕様書はそのまま引き継がれます。
入口を2つにすると「どっちでやるんでしたっけ」が必ず問い合わせになります。 全工程を Claude Code に寄せてください。Cowork は、仕様だけ先に考えたい人や、 開発には関わらない人(部門長が仕様をレビューする、など)のための補助入口と位置づけます。
cf-internal-app-starter に、キットの template/ を上書き適用(詳細は template/APPLY-B.md)all_workers + all_preview_workers)プランA では社内マーケットプレイス(synon/claude-plugins)から配っていましたが、
その取得には GitHub へのアクセスが要ります。利用者はアカウントを持たないため、
アプリのリポジトリに直接置く方式に変えました。
.claude/skills/<名前>/SKILL.md はそのリポジトリを開いた Claude Code が自動認識します。
代償として、スキルを直したら各リポジトリに配り直す必要があります。
利用者の Mac に向かって作業します。事前に入れておくもの:
xcode-select --install # git
# Node.js v22 以上(https://nodejs.org の pkg か Homebrew)
curl -fsSL https://claude.ai/install.sh | bash # Claude Code
claude # 初回ログイン(本人の Claude アカウント)
そのうえで:
APP=<アプリ名> USER_NAME="<氏名>" USER_MAIL=<社内メール> bash scripts/setup-mac.sh
途中で公開鍵が表示されるので、GitHub の Settings → Deploy keys → Add deploy key("Allow write access" にチェック) に登録して Enter。
完了すると、利用者のデスクトップに 「<アプリ名>を開く.command」 ができます。
ダブルクリックすると START-HERE.md が表示され、そのまま Claude が起動します。
利用者がターミナルを意識する場面はここだけです。
cd ~/社内サービス/<アプリ名> && git push origin work:main
! [remote rejected] ... (protected branch hook declined) で拒否されれば正常。
通ってしまった場合は branch protection の設定を見直してください。
Deploy key が保護をすり抜けていないかは、資料の記述ではなく自分の目で確かめる価値があります。
デスクトップの「◯◯を開く」をダブルクリック → /service-spec。
質問に答えるだけで docs/SPEC.md ができます。設計方針はプランA と同一です。
/service-ship の合格判定になる)Claude が「画面が1枚立ち上がって動くところまで」を作ります。確認はブラウザで http://localhost:5173
(Codespaces のような PORTS タブは不要)。
区切りがついたら必ず /service-save。スキル側からも自動的に促します
(機能を1つ作り終えたとき、30分以上保存していないとき、大きな変更に入る前)。
プランA と同じ。試用環境の URL を開き、Access のログイン画面 → @synon.co.jp でログイン →
/cdn-cgi/access/get-identity で groups を確認 → Zero Trust のシート消費を確認。
Step 3 と同じ。docs/SPEC.md を更新しながら1機能ずつ。
/service-ship で自動チェックが走ります。1つでも落ちたら配信しません。
| # | 内容 |
|---|---|
| 0 | いま作業フォルダの中にいるか (プランB で追加) |
| 1〜3 | 型チェック / テスト / ビルド |
| 4 | 秘密の値の混入検査 |
| 5 | 保護ファイル(wrangler.jsonc .github/ .claude/ scripts/ access.ts)の変更検査 |
| 6 | 既存マイグレーションの改変検査 |
| 7 | ローカル DB のマイグレーション適用 |
| 8 | 全 API が requireAccess 配下にあるか |
| 9 | ログに個人情報が出ていないか |
| 10 | ここで初めて保存する(落ちたものを保存しない) |
全部通ると work へ保存 → work:staging へ push → GitHub Actions が試用環境へ →
Chatwork に結果が流れます。
利用者は GitHub の画面を見られず、gh コマンドも使えません。通知が無いと、配信が失敗したときに
利用者が待ちぼうけになり、「反映されないんですけど」という問い合わせがエンジニアに来ます。
成功時は試用環境の URL、失敗時は [toall] 付きでエンジニアに飛ぶようにしてあります。
本番公開は、利用者が docs/releases/<日付>-<名前>.md という申請書を作り、
エンジニアへ送る連絡文が画面に表示されます。エンジニアは:
staging ブランチにある)staging → main の PR を作る
gh pr create --base main --head staging --title "<日本語1行>" \
--body-file <(git show staging:docs/releases/<ファイル名>)この PR 作成の1工程だけが、プランA より増える手間です(1回2分)。
壊れた環境を捨てられません。Codespace なら「おかしくなったら作り直す」で済みました。
利用者の Mac は作り直せません。rm -rf を1回間違えれば実害が出ます。
| 層 | プランA | プランB での変更 |
|---|---|---|
| 1. Claude の権限 | deploy / main push / 保護ファイルを deny | 左記+ sudo 禁止、rm -rf 禁止、git reset --hard / git clean / git checkout . 禁止、~/.ssh ~/Library ~/.aws の読み書き禁止、作業フォルダ外への書き込み禁止 |
| 2. フック | push 前に型チェック+テスト | 左記+ 作業フォルダ外の操作・sudo・破壊的な git 操作をコマンド実行前に止める(settings.json の deny と二重に) |
| 3. GitHub | branch protection + CI 検査 | 同じ。加えて Deploy key を端末単位で発行し、退職時はそれを消すだけで止められる |
| 4. Cloudflare | アカウント単位 Access | 同じ(最重要。新規 Worker が自動で社内限定になる) |
guard.sh は実測で確認済み✓ npm run dev → 通す
✓ git push origin work → 通す(保存は面倒にしない)
✓ sudo rm -rf / → 止める
✓ rm -rf node_modules → 止める
✓ git reset --hard HEAD~3 → 止める
✓ cat ~/.ssh/id_rsa → 止める
✓ npx wrangler d1 execute DB --remote → 止める
✓ git push origin work:main → 止める
✓ git push origin work:staging → 型チェックとテストを通してから通す
work への保存(/service-save)は検証なしで通します。
保存を面倒にすると保存しなくなり、それが最大のリスクだからです。
検証をかけるのは「試用環境に出すとき」だけにしています。
Codespaces にはクラウド側の保管がありましたが、プランB では利用者の Mac が唯一の保管場所です。 PC の故障・紛失・初期化で作業が消えます。三重に手当てします。
/service-save — 利用者が自分で保存する。合図は1つだけなので覚えやすいscripts/autosave.sh が work ブランチへ push する。
work は何も起きないブランチなので、未完成のコードが試用環境に出ることはないSTART-HERE.md にも「保存しないと、この PC が壊れたときに作業が消えます」と明記しています。
| リスク | プランA | プランB | 備え |
|---|---|---|---|
| 作業が消える | 低 | 高 | 3段構えの保存(§6) |
| 環境が壊れて直せない | 低 | 中 | 権限とフックを強化(§5)。最悪はセットアップをやり直す(30分) |
| 退職者の手元にソースが残る | 低 | 高 | 端末返却・初期化の運用に載せる。Deploy key の削除で書き込みは止まるが、既にある複製は消せない |
| 端末ごとに環境が違って動かない | なし | 中 | setup-mac.sh で手順を固定。Node は v22 以上を必須チェック |
社内ネットワーク・プロキシで npm ci が失敗 | なし | 中 | Step 1 のセットアップ時に必ず1回通しておく(そこで出れば当日に潰せる) |
| 本番公開でエンジニアが詰まる | 中 | 中 | 承認者を最低2名。試用環境は承認不要なので業務は止まらない |
| Zero Trust の50シート枯渇 | 中 | 中 | 退職者のシート回収を運用に組み込む(既存の移行案件と同じ課題) |
| D1 が10個上限に当たる | 中 | 中 | Workers Paid($5/月)へ。Free 前提で稟議を通さない |
「退職者の手元にソースが残る」は技術で解けません。 端末の返却・初期化を人事の退職手続きに紐づけてください。 機微な業務データを扱うサービスをこの方式で作る場合は、事前に情シスで判断が要ります。
| 項目 | 金額 | 備考 |
|---|---|---|
| Cloudflare Workers Paid | $5/月 | アカウント全体で1本。全アプリ共通。D1 10個上限と CPU 10ms の回避に必須 |
| GitHub Team | $4/user/月 × エンジニア人数のみ | プライベートリポジトリの branch protection に必要。利用者はアカウント不要=課金されない |
| GitHub Codespaces | $0 | 使わない |
| GitHub Actions | 無料枠内 | Team は月3,000分。社内アプリ数本なら使い切らない |
| Claude シート | 既存 | Pro / Max / Team のいずれかが利用者ごとに必要 |
エンジニア2名なら月 $13(Cloudflare $5 + GitHub Team $8)+ Claude シート。 プランA($50〜80)より 月$40〜70 安くなります。
代わりに増えるエンジニアの手作業は、端末セットアップ 30分 × 人数(1回だけ)と、 本番公開のたびの PR 作成 2分。利用者5名なら初回2.5時間、リリースが月4回でも8分/月です。 十分に元は取れます。
プランA と同じ考え方です。
| 週 | やること | 判断ポイント |
|---|---|---|
| 1週目 | Step 0 + エンジニア自身の Mac で setup-mac.sh を通しで実行 | Deploy key で main に push できないことを実測。Access の JWT ヘッダ問題もここで潰す |
| 2週目 | 意欲の高い1名の Mac をセットアップし、仕様書まで作ってもらう | セットアップの実所要時間を測る。npm ci がネットワークで詰まらないか |
| 3〜4週目 | 同じ1名が機能拡張と本番公開まで通す | Chatwork 通知が期待どおり届くか。PR 作成の手間が許容範囲か |
| 5週目以降 | 部署内へ展開 | テンプレートの改善が落ち着いてから量産に入る |
撤退・見直しの基準: 2週目のセットアップが30分で終わらない、または npm ci が
社内ネットワークで通らない場合、端末ごとの差異が大きすぎます。展開せず、プランA(Codespaces)に戻すか、
共用の開発端末を1台立てる方式を検討してください。
synon-claude-code-kit-planb.zip
template/
├── APPLY-B.md ★ 適用手順はここから
├── START-HERE.md 利用者が最初に読む案内
├── CLAUDE.md.append.md CLAUDE.md への追記内容(非エンジニア前提・実機の注意)
├── .claude/
│ ├── settings.json 権限(sudo・作業フォルダ外・破壊的 git を deny)
│ ├── hooks/guard.sh コマンド実行前に止める(動作テスト済み)
│ └── skills/
│ ├── service-spec/ 仕様書づくり(Cowork 判定つき)
│ ├── service-save/ 作業の保存 ← プランB で新設
│ ├── service-ship/ 試用環境への配信・本番申請
│ └── service-fix/ 困りごとの自己診断(ローカル特有の症状を追加)
├── scripts/
│ ├── setup-mac.sh 利用者の Mac のセットアップ(エンジニアが実行)
│ └── autosave.sh 毎日18時の自動保存
├── .github/workflows/deploy.yml CI/CD + Chatwork 通知
└── docs/SPEC.md 仕様書のひな型
main に push できないこと。
branch protection が Deploy key にも効くはずですが、設定の組み合わせ次第で例外があり得ます。
Step 1 の直後に必ず実測してください(手順は §4 Step 1)。Cf-Access-Jwt-Assertion ヘッダが付与されるか。
プランA と同じ最優先の宿題。Step 0 で潰す。npm ci が通るか。Step 1 で必ず1回通す。claude setup-token(1年有効)を使う場合の運用も含めて、1台目で確認する。wrangler d1 migrations apply の --remote 要否(プランA と同じ)。