今回取り組んだ内容
AIのガードレールについて調べてみた
clodeの機能について諸々
なぜやろうと思ったか
cloude codeのskillsがどうとかCLAUDE.mdについての話題をtwitterで見る機会が多くて興味湧いたのと、企業との面接でskillsとかガードレール引いてますか?って質問された際に
概念は知ってるけど実際ガードレールってなんだ?CLAUDE.mdで開発の進め方書いてるけどこれはガードレールなのか?
てなことを思ったので調べてみました
学んだこと
そもそもガードレールとはなんぞや?
「AIの利用において想定外の動作やリスクを防ぐための仕組みや制御手段」
らしいです
例としてenv読み込む、ディレクトリ構成勝手に変える、パッケージ追加しまくる、勝手にcomitする、DBのスキーマ変える等etc...
これらの対策というわけですね。
確かに意識してなかったけど怖えな...
実際に変更する手順
settings.jsonで設定できるらしく、ホームディレクトリ内の~/.claude/settings.jsonをいじればいいらしいですね。
てなわけで以下のガードレールを追加してみました。
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./**/.env)",
"Read(./**/.env.*)",
"Read(./secrets/**)",
"Read(./credentials/**)",
"Read(./**/*secret*)",
"Read(./**/*credential*)",
"Bash(rm -rf:*)",
"Bash(rm -fr:*)",
"Bash(git clean:*)",
"Bash(git push:*)",
"Bash(git push --force:*)",
"Bash(git push -f:*)",
"Bash(npm run deploy:*)",
"Bash(yarn deploy:*)",
"Bash(pnpm deploy:*)",
"Bash(vercel --prod:*)",
"Bash(firebase deploy:*)",
"Bash(supabase db push:*)",
"Bash(prisma migrate reset:*)",
"Bash(npx prisma migrate reset:*)",
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(scp:*)",
"Bash(rsync:*)",
"Bash(gh gist create:*)"
],
"ask": [
"Bash(npm install:*)",
"Bash(yarn add:*)",
"Bash(pnpm add:*)",
"Bash(git commit:*)",
"Bash(git add .:*)",
"Bash(npm run build:*)"
],
"allow": [
"Bash(npm test)",
"Bash(npm run test:*)",
"Bash(npm run lint)",
"Bash(npm run typecheck)",
"Bash(git status)",
"Bash(git diff:*)",
"Bash(git log:*)"
]
}
}
jsonファイルの解説
権限ルールとしてallow,ask,denyがあり、それぞれの意味としてallowが実行してよい,aksが実行前に確認する、denyが実行させないという意味です。
ツール識別子の意味としてBashがコマンド実行,
Readが読むって意味ですね。ほかにも識別子はありますが蛇足なので省略します。
例として以下のコードの場合./.のenvを読ませないという意味になります。
"deny": [
"Read(./.env)"
]
よくお世話になっているコマンドが沢山だぁ
これでcloudeにガードレールが敷けました。
ですがこれでは制限が増えただけで損した気分なのでskillsを使ってみます
Skillsとはなんぞや?
Skillsとは特定の作業をうまくやるための追加手順書です。
ガードレールは危険操作を止めるものですがSkillsは作業の質を上げるものって感じですね
Skillでenv触らないでねって命令すればsettings.jsonいらなくね?って思ったのですがSkillは手順書であって、処理を確実に止めるならsettings.jsonの方が良いらしいですね。
今私に欲しいskillは勉強用と作業前確認用なのでコードを書いてもらいました。
作成したスキルは/nameの様に呼び出せるので楽でいいっすね
CLOUDE.mdは常時読み込みが入るのですが、skillは呼び出ししたタイミングでしか呼び出されないようなので常に確認が入るといった面倒なことはないようです
skillの導入方法
~/.claude/skills/
learning-gate/
SKILL.md
safe-planning/
SKILL.md
以下のディレクトリにフォルダとmdを作成してmdの中にしてほしいことを書くだけですね。
勉強用のskillには以下の様に書きました
---
name: learning-gate
description: 初学者がコードや技術概念を理解しながら進めるためのSkill。新しい概念・重要な変更・エラー修正に入る前に、説明と理解確認を行う。
---
# Learning Gate Skill
## 目的
このSkillは、初学者が理解しないまま作業が進むことを防ぐために使います。
Claudeは、コード変更や技術説明を進める前に、必要な前提知識を確認し、ユーザーが理解できる粒度で説明してください。
## 基本ルール
- いきなり実装に入らない
- 新しい概念が出たら、まず短く説明する
- 専門用語は、コード例や身近な例で説明する
- ユーザーが理解していない可能性がある場合、次に進まない
- 長い説明を一気に出さず、段階的に説明する
- ユーザーが「分かった」「次へ」「続けて」などと言ったら次の段階へ進む
- ユーザーが疑問を出したら、元の作業よりも理解補助を優先する
## 進め方
1. 今から扱う内容を1〜2文で説明する
2. 重要な用語を最大3つまで出す
3. それぞれを初学者向けに説明する
4. 小さいコード例が必要なら出す
5. 最後に理解確認をする
6. 理解確認後に次の作業へ進む
## コード変更時のルール
コードを変更する前に、必ず以下を説明してください。
- どのファイルを変更するか
- なぜその変更が必要か
- 変更すると何が変わるか
- 壊れる可能性がある箇所
- 確認方法
## 禁止する進め方
- 説明なしで大量にコードを書き換える
- ユーザーが理解していない用語を放置する
- 「とりあえず直しました」で終わる
- テストが通る理由を説明しない
- エラー原因を説明せずに修正だけ行う
余談
my-skill/
├── SKILL.md # 必須: 指示とメタデータ
├── scripts/ # 任意: 自動化スクリプト
├── references/ # 任意: 参考資料
└── assets/ # 任意: テンプレート等
上記の構成にして自動化スクリプトを書くことでcloudeをぶん回して開発することも出来そう。
参考にした記事
感想
個人開発でのガードレールはあまり必要ないと感じましたが、チーム開発などでのトラブルを減らす点ではかなりいいと思いました。
勉強用のskillを導入したので効率的に勉強したいと思います。
acceptEditsモードでclodeぶん回すときのためにもガードレール敷いておきたいよね
来週やりたいこと
cloude自動化してぶん回す
そのためのワークフローを書きたいと思う。