
お好きな金額でサポートしていただけると嬉しいです!
(50円〜10,000円[税込]まで)
作成日時:2026年3月21日 21:39
更新日時:2026年5月9日 02:39
Claude Code
LLM
この記事は私がClaude Codeをプライベートで導入する際に、人力でメモしていたものをClaudeCodeでまとめ、それをさらに人力で書き直したものです(結局ほぼ書き直したのでもう人力ですw)。
Claude Code触ったことない!とりあえず触ってみたい!という方の参考になれば幸いです。
私が普段務めている会社はやっとこれから導入・・・という状況なのですが、その時役に立てばなと思って記録していたものを載せておきます。
項目 | 要件 |
|---|---|
OS | macOS 13.0+ / Ubuntu 20.04+ / Debian 10+ / Windows 10+(WSL 1・2 または Git for Windows) |
RAM | 4 GB 以上 |
ネットワーク | インターネット接続必須 |
シェル | Bash または Zsh 推奨 |
利用可能地域 |
Claude Code は以下の 3 フェーズ(コア agentic ループ)で動作します。
1. コンテキストの収集
2. アクションの実行
3. 結果の検証
また、デフォルトの組み込みツールも備えています。
なお、組み込みツールはあくまで基盤的存在であり、以下の拡張でさらに強力に利用できます。
拡張機能 | 説明 |
|---|---|
Claude の知識・ワークフローを拡張。これ毎回やってるなーとかの提携作業をSkillsとして切り出すと便利 | |
外部サービス(Notion / Figma / DB 等)と接続 | |
シェルコマンドを登録してワークフローを自動化 | |
タスクを独立したコンテキストウィンドウにオフロード | |
複数エージェントを協調して動作させることで1つのチームとして動かす、みたいなことができたりする | |
プラグインエコシステム |
その他、gh・aws・gcloudなどの外部 CLI と連携設定も可能です。
なお、2026/3/12〜 プレビューとしてauto-modeもリリースされました。権限決定を Claude が自動処理するモードで、 --dangerously-skip-permissionsより安全な代替手段とされています。
claude --enable-auto-modeで実行できます。トークン使用量・コスト・遅延がわずかに増加するのと、こちらも当たり前ですが、隔離された環境でのみ使用が推奨されています。
以下コマンドを実行。
claude --permission-mode plan.claude/settings.json){
"permissions": {
"defaultMode": "plan"
}
}デフォルトで有効になっています。Opus 4.6 では適応的推論なるものが導入されており、固定の思考トークン予算の代わりに effort level設定に基づいて思考を動的に割り当てます。
公式ドキュメントに沿ってインストール後、使いたいプロジェクトのディレクトリ内で以下を実行するだけです。
claude※仮想環境上で使いたい場合は、仮想環境に入ってから claude コマンドを実行すればOKです。
まずはこれから。
/config参考ドキュメント:
実行を許可しておきたいものはあとから追加していけばいいですが、許可したくないものの設定や、読まれなくないものなどは特に、使う前に設定しておくことをお勧めします。
参考ドキュメント:
※私が2026/3/21現在設定している settings.jsonは以下です。随時追加していってます。
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": {
"allow": [
"Read",
"Edit",
"Write",
"WebSearch",
"WebFetch(domain:support.google.com)",
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git show *)",
"Bash(git branch *)",
"Bash(git stash *)",
"Bash(git ls-files *)",
"Bash(git rev-parse *)",
"Bash(git fetch *)",
"Bash(git remote -v)",
"Bash(git tag *)",
"Bash(claude *)",
"Bash(python *)",
"Bash(node *)",
"Bash(npm run *)",
"Bash(pnpm run *)",
"Bash(npm test *)",
"Bash(pnpm test *)",
"Bash(npx *)",
"Bash(cat *)",
"Bash(ls *)",
"Bash(find *)",
"Bash(grep *)",
"Bash(head *)",
"Bash(tail *)",
"Bash(wc *)",
"Bash(mkdir *)",
"Bash(pwd)",
"Bash(which *)",
"Bash(sort *)",
"Bash(sed *)",
"Bash(awk *)",
"mcp__いろいろ",
"Bash(python3:*)",
"WebFetch(domain:qiita.com)"
],
"deny": [
"NotebookEdit",
"NotebookRead",
"Bash(git push *)",
"Bash(git commit *)",
"Bash(git merge *)",
"Bash(git rebase *)",
"Bash(git reset --hard *)",
"Bash(git clean *)",
"Bash(git add . *)",
"Bash(git add -A *)",
"Bash(git add --all *)",
"Bash(git checkout *)",
"Bash(git -C *)",
"Bash(git --git-dir *)",
"Bash(git --work-tree *)",
"Bash(echo *)",
"Bash(bash -c *)",
"Bash(cd *)",
"Bash(rm -rf *)",
"Bash(rm -r *)",
"Bash(sudo *)",
"Bash(dd *)",
"Bash(mkfs *)",
"Bash(chmod -R 777 *)",
"Bash(nc * | bash)",
"Bash(ncat * | bash)",
"Bash(telnet * | bash)",
"Bash(curl * | bash)",
"Bash(curl * | sh)",
"Bash(wget * | bash)",
"Bash(wget * | sh)",
"Bash(pip *)",
"Bash(wrangler deploy *)",
"Bash(wrangler pages *)",
"Bash(npx wrangler deploy *)",
"Bash(npx wrangler pages *)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(./config/credentials.json)",
"Read(**/*.pem)",
"Read(**/*.key)"
],
"ask": [
"Bash(git checkout *)",
"Bash(git switch *)",
"Bash(npm install *)",
"Bash(pnpm install *)",
"Bash(npm ci *)",
"Bash(pnpm ci *)"
],
"disableBypassPermissionsMode": "disable"
},
"env": {
"EDITOR": "code --wait",
"VISUAL": "code --wait"
},
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false,
"filesystem": {
"denyRead": ["~/.aws/credentials", "~/.ssh"]
},
"network": {
"allowedDomains": [
"github.com",
"*.githubusercontent.com",
"*.npmjs.org",
"registry.yarnpkg.com",
"pypi.org"
]
}
},
"enableAllProjectMcpServers": false,
"language": "Japanese",
"alwaysThinkingEnabled": false,
"autoUpdatesChannel": "latest",
"remoteControlAtStartup": true,
"voiceEnabled": true,
"statusLine": {
"type": "command",
"command": "python ~/.claude/statusline.py"
}
}※上記のうち、statusLineの表示の設定は逆瀬川ちゃんさんの記事を参考にさせていただきました!便利なのでぜひ。
完全なリストはCLI リファレンスをご参照ください。
コマンド | 機能 | 補足・例 |
|---|---|---|
| インタラクティブモードを開始 | |
| 1回限りのタスクを実行 |
|
| 1回限りのクエリを実行して終了 |
|
| 前の会話を再開 |
|
| MCPサーバーの追加 | |
| 終了 |
ショートカット | 機能 |
|---|---|
| 利用可能なキーボードショートカットを表示 |
| スラッシュコマンドを表示。
など |
| 権限モード切替 |
| 途中停止(コンテキストは保持) |
| 以前の状態に巻き戻し |
| 設定したIDEを開く(後述) |
ここまでが基本です。
すべては到底書ききれないので、私が普段使ってる中で便利だなーと思っているものをいくつかピックアップしてご紹介します。
セッション間で Claude に記憶させたい情報を記述するファイル。LLM に生成させると品質低下するとの論文もあったりするので、今のところ手動で記述してます。
ここについては冒頭にご紹介したみのるんさんの記事をご参照ください。とってもわかりやすくまとめてくれています。
.claude/skills/<skill-name>/SKILL.md に配置することで /skill-name として呼び出せるようになります。
私はお恥ずかしながら、まだ自作したことはありません。
勉強会などでお話伺うと、こういうのをスキル化すれば便利よ、みたいなのをよくお聞きするので、これ毎回やってるよね、というのが見つかったら自分でぜひ作ってみてください。
https://code.claude.com/docs/ja/skills
自作したものでないやつは、定期的にアップデートかけましょう。
以下でアップデートできます。
npx skills update
(追記)# ghを導入している方は以下
gh skill update --all/keybindingsでカスタムキーバインド定義~/.claude/keybindings.json に設定が追加されて、カスタムキーバインドを定義できます。~/.claude/keybindings.jsonと~/.claude/settings.jsonのenvセクションに以下を設定すると、VSCodeが開きます。もちろん設定によって他のものも設定可。~/.claude/keybindings.json
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+g": "chat:externalEditor"
}
}
]
}~/.claude/settings.json
{
"env": {
"EDITOR": "code --wait",
"VISUAL": "code --wait"
}
}.claude/settings.jsonに以下を設定。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write \"$CLAUDE_PROJECT_DIR/$(jq -r '.tool_input.file_path' -)\" || true"
}
]
}
]
}
}PostToolUseフックだけでなく、他にもあります。
イベント | タイミング | 主な用途 |
|---|---|---|
PreToolUse | ツール実行前 | 危険コマンド禁止・権限チェック |
PostToolUse | ツール実行後(成功時) | 自動整形・lint・ログ |
PostToolUseFailure | ツール実行後(失敗時) | エラー通知・リカバリ |
Stop | エージェントが一区切りした時 | 最終コミット・CI トリガー |
以下で質問できます。話の本筋をずらしたくない時にでも。
/btw <question>コミットメッセージ考えるの面倒だな・・・長すぎず、的確に・・・。これが使えます。文章下手な私にはぴったり。
※2026/3/28 01:08修正:うまくコミットメッセージが生成しきらないケースがあったため、修正しました。
#!/bin/sh
# prepare-commit-msg hook: Claude Code でコミットメッセージを自動生成する
#
# 動作条件:
# - コミットメッセージが空のとき(通常の git commit)
# - -m オプション付き / --amend / merge コミットのときはスキップ
COMMIT_MSG_FILE="$1"
COMMIT_SOURCE="$2"
# -m, --amend, merge, squash など既にメッセージがある場合はスキップ
if [ -n "$COMMIT_SOURCE" ]; then
exit 0
fi
# staged の diff が空ならスキップ
if [ -z "$(git diff --cached --name-only)" ]; then
exit 0
fi
# claude コマンドが存在しない場合はスキップ
if ! command -v claude >/dev/null 2>&1; then
exit 0
fi
echo "[Claude] コミットメッセージを生成中..." >&2
# 一時ファイルにdiffとプロンプトを書き込む
TMPFILE=$(mktemp)
trap 'rm -f "$TMPFILE"' EXIT
cat > "$TMPFILE" << 'PROMPT_EOF'
以下のgit diffを分析して、コミットメッセージを厳密に1行だけ出力してください。
ルール:
- 出力は必ず「<prefix>: <内容>」の形式1行のみ
- prefixはfeat/fix/docs/style/refactor/perf/test/choreのいずれか
- 内容は日本語の短文
- 説明文・前置き・改行・記号装飾は一切禁止
例: feat: ユーザー認証機能を追加
diff:
PROMPT_EOF
git diff --cached >> "$TMPFILE"
MSG=$(claude --no-session-persistence --model claude-haiku-4-5-20251001 --print < "$TMPFILE" 2>/dev/null)
if [ -n "$MSG" ]; then
FIRST_LINE=$(echo "$MSG" | head -n 1)
echo "$FIRST_LINE" > "$COMMIT_MSG_FILE"
echo "[Claude] メッセージを設定しました: $FIRST_LINE" >&2
fichmod +x ~/.git-hooks/prepare-commit-msg[core]
hooksPath = ~/.git-hooksこれで以下のように使えます。
コマンド | 実行内容 |
|---|---|
| Claude がメッセージを自動生成。エディタで確認・編集してコミット |
| フックをスキップしていつも通り使えます。指定メッセージでコミット |
| Claude Code の |
Proプラン以上で利用可。順次展開中とのことでしたが、先日私のところにもきました!便利。
/voiceで利用できます。
スマホ通知までは私はやってませんが、ここの話はぬこぬこさんの記事をご参照ください。
デフォルトで、remote-contorolを有効にしておいて、PCつけっぱにしておけば、外出しても外からスマホで操作できてかなり便利です。
スマホすら手放して(ポッケに入れて)、Bluetoothイヤホンのみで操作したくてちょっと遊んでみたりもしました。ゴミが増えたけど、楽しかったです笑
remote-contorolでQRコード表示などが行えます。
ほんとここ1、2年で環境が激変しましたね。。
こういう新しい技術もしっかり使いこなせるようになって、新しい仕事のあり方、仕方を身に着けていきたいと思います。
ということで、来週末、お勉強に行ってきます!ご参加される方よろしくお願いいたします!
(非公開イベントって書いてたので一応掲載控えました)
HTNCode
おーたに