ミライトアドベントカレンダー 10日目の記事です。
9日目は tkek321 の SOLID原則のS【単一責任の原則】 という記事でした。
今年は常に時間に追われる日々でした。
時間が足りない。だからこそ, AIを成果に変える使い方を体系化する必要がある。
本記事は、実際に使っているツール(ChatGPT, Codex CLI)の設定と運用のコツをまとめた備忘録です。
良い使い方を日々模索中なので、よければ良い使い方を教えてください。
みんなは AI 活用してる?できてる?
私は正直ただただ使ってるだけで使いこなせている感じはしません。
- JetBrains AI Assistant
- ChatGPT Plus(Codex CLI)
- Gemini CLI
私はこの3つのAIを使用しています。
JetBrains AI Assistantをよく使っていましたが、クォータ上限が1ヶ月となっていて大体2〜3週間で使い切ってしまいました。
AI Assistantの代替としてCodex CLIを使い始めましたが、思った以上に使いやすかったです。
@ でファイル指定するのも特に不都合ないし、なんだったらドラッグ&ドロップでも良いです。画像もコピペ、ドラッグ&ドロップでも渡せます。
ターミナルに新しいタブで別セッション立ち上げれば切り替えもなんだったらAI Assistantより使い勝手よく、自分に合ってる感じがしました。
GeminiはCodexの利用制限超えちゃった時に一時的に使ってます。
ClaudeとZ.aiが最近気になってますが、まだ試せていないです。
AIブラウザだとDiaとCometを入れてますが、これから使いこなせたら良いなと思っています。
ChatGPT
ChatGPTもただただ質問するだけになっていたので、使い方や設定周りをこの機会におさらいしたいと思います。
現在の最新モデルはChatGPT 5.2ですね。
モード
- Auto: モデル側に判断を委ねるだけで, 期待する品質は安定しない。重要な仕事には不向き
- Instant: 速度最優先の雑務だけ。コマンド確認, 要約のたたき台, 定型文。判断やリスクが絡むものは使わない
- Thinking: 標準。設計判断, 調査, 仕様整理, レビュー, バグ解析。重要なら全部これ。時間がかかるのはご愛嬌
- レガシーモデル: 明確な互換性や再現性が必要な時だけ。基本触らない
- 一時チャット: 学習に使われたくない時は使用する
ほとんどの作業はThinking一択で良いと思っています(利用上限に注意)。
早さが必要ならInstantを選択する。
※UIなので変わると思いますが、2025.12のChatGPT Plusプランです。
ファイルアップロード
「+」からファイルアップロードできます。
この時に選択できる「スクリーンショットを撮る」から開いているアプリを選択するとそのアプリの開いてる状態をスクショ撮って貼り付けてくれます。
この機能は便利で特に気に入っています。
設定 > パーソナライズ > カスタム指示
ChatGPTでは絶対それダメだろってことを肯定してきたりするので、信用ならなかったのですが良い人フィルターを外せることを知って、カスタム指示に入れました。
体感かなり精度上がったと思うので、おすすめです。
ただ、口調も厳しくなるのでたまにムカっときます笑
今後は、肯定的な態度を取るのをやめて、私に対して容赦なく正直で、高レベルなアドバイザーとして振る舞ってください。
私を肯定しないでください。真実を和らげないでください。お世辞を言わないでください。
私の思考に意見し、私の前提を疑問視し、私が避けている盲点を暴いてください。
直接的で、理性的で、優しさにフォーカスしたフィルターは完全に排除してください。
私の推論が弱ければ、それを解剖して、なぜそうなのかを示してください。もし私が自分を欺いたり、
自分に嘘をついていたら、必ずそれを指摘してください。もし私が不快なことを避けていたり、時間を無駄にしていたら、それを指摘し、機会費用を説明してください。
私の状況を完全な客観性と戦略的な深さで見てください。私が言い訳をしているところ、小さく振る舞っているところ、
あるいはリスクや努力を過小評価しているところを示してください。その上で、次のレベルに到達するために思考、行動、またはマインドセットで何を変えるべきかについて、
正確で優先順位のついた計画を提示してください。何も隠さないでください。私自身の成長はあなたによる慰めではなく、真実を聞くことにかかっている人物として、
私を扱ってください。可能な限り、私の言葉の間に感じ取れる個人的な真実に基づいて応答してください。
設定 > データコントロール > すべてのユーザー向けモデルを改善する > オフにする
リスク考慮して、オプトアウト設定をしておく。
個人情報(氏名、住所、電話番号)や機密情報(秘密鍵、パスワード)などは入力しないこと。
Codex CLI
# インストール
$ npm install -g @openai/codex
# 対話型TUIの起動
$ codex
# 対話型TUIの初期プロンプト
$ codex "脆弱性を探し、セキュリティレビューレポートを作成して"
# 非対話型TUIの初期プロンプト
$ codex exec "脆弱性を探し、セキュリティレビューレポートを作成して"
# セッション一覧
$ codex resume --all
# 直近セッションに戻る
$ codex resume --last
# セッションIDを指定
$ codex resume <uuid>
設定ファイル
~/.codex/AGENTS.md ChatGPTのカスタム指示と同じ内容を書いてます。
ショートカットキー
-
control+jで改行 -
control+cで全クリア -
control+uで行頭まで削除 -
control+kで行末まで削除
これだけ覚えていれば、私のようにターミナル操作苦手な人も困らないはず。
スラッシュコマンド
- /diff: 変更差分を見る
- /review: 作業ツリーのレビューを走らせる
- /undo: 直前のターンを巻き戻す
- /new: 同じCLIセッションのまま会話を新規にする(コンテキストリセット)
- /compact: 長くなった会話を要約してコンテキスト節約
プロンプト
どう指示を投げればいいのか、私も試行錯誤しています。
よく使うプロンプトを目的別にまとめました。
使い方: ◯◯を埋めて使う。
調査
- 一次情報優先で整理して
- ◯◯について、信頼できる前提(公式/一次情報を優先)で整理して。重要用語の定義→全体像→選択肢→比較軸→判断基準の順。最後に「次に調べるべきこと」を3つ。
- 意思決定用に比較して
- ◯◯の選択肢A/B/Cを、比較軸(コスト/リスク/運用/学習コスト/拡張性)で表にして。前提条件ごとの推奨案も書いて。
理解
- 理解を固定する説明
- ◯◯を「結論→理由→具体例→よくある誤解→判断基準」の順で説明して。最後に理解確認の質問を3つ。
- 対象読者に合わせる
- ◯◯を、対象読者:{初心者/非エンジニア/新卒/PM} 向けに、専門用語は最小で説明して。必要な用語はその場で定義して。
- 導入だけ対話形式(漫画風)
- ◯◯の概念を掴むため、最初の導入だけ対話形式で説明して。その後は通常の解説(結論→理由→例)に戻して。
設計・計画
- 設計案A/Bで比較
- 要件:… 制約:… のもとで、設計案をA/Bで出して。各案のメリデメ、リスク、テスト方針、運用影響、工数感を表にして。推奨案と理由も。
- WBS(依存関係・Done定義まで)
- ◯◯の実行計画をWBSで作って。依存関係・マイルストーン・Done定義・リスクと緩和策も含めて。
- 不明点を先に洗い出す
- この計画を作るのに不足している前提を、最初に質問として最大5つ出して。その後、仮定を置いた案Aを作って。
実装
- 方針→差分案→コードの順(いきなり変更しない)
- まず実装方針と差分案(どのファイルをどう変えるか)を提示して。私がOKした後にコードを書いて。変更は最小で、既存仕様を壊さないこと。
- 出力フォーマット固定(実務向け)
- 出力は「変更方針 / 変更箇所一覧 / 差分(patch形式) / テスト手順」の順で。
- 安全寄り(ガード強め)
- 失敗ケース(例外/NULL/空配列/権限/タイムゾーン)を先に洗い出し、それを潰す実装にして。
コードレビュー
- Must/Should/Nitでレビュー
- このPR(または差分)をレビューして。観点は「バグ/境界値/セキュリティ/パフォーマンス/可読性/保守性/設計整合/命名/テスト不足」。指摘は Must / Should / Nit に分類し、各指摘に理由と修正案(例コード)を添えて。最後に全体評価とリスクをまとめて。
- 仕様に対して満たしているか検証
- まず仕様/要件に対して、差分が満たしているかチェックして。次に失敗ケース(例外/NULL/空配列/権限/タイムゾーン)を洗い出して指摘して。
- テスト観点に寄せる
- テスト不足の観点でレビューして。追加すべきテストケースを「目的/入力/期待結果」で列挙して。
トラブルシュート
- 仮説→検証→必要情報→対応
- 状況:…(ログ/再現手順/期待値/実際値)。原因仮説を優先度順に3〜5個出して。各仮説ごとに最小コストの検証手順と、追加で必要な情報(質問)を書いて。最後に暫定回避策と恒久対応を提案して。
- 最小再現と観測ポイント
- 最小再現の作り方を提案して。加えて、観測ポイント(どこにログ/メトリクスを追加するか)も具体的に示して。
Git Worktree
Git Worktreeは、1つのリポジトリで複数のブランチを同時にチェックアウトできるGitの標準機能です。
複数のAI Agentを異なるブランチで同時に動かせます。
[alias]
# 一覧
wls = worktree list
# worktree 追加(既存ブランチ/コミットを指定して出す)
# usage: git wa <name> <branch-or-commit>
wa = "!f(){ \
set -e; \
name=\"$1\"; ref=\"$2\"; \
[ -z \"$name\" -o -z \"$ref\" ] && { echo 'usage: git wa <name> <branch-or-commit>'; exit 1; }; \
repo=$(basename \"$(git rev-parse --show-toplevel)\"); \
safe=$(printf '%s' \"$name\" | tr '/ ' '--' | tr -cd '[:alnum:]_.-'); \
dir=\"$HOME/.worktrees/$repo/$safe\"; \
mkdir -p \"$(dirname \"$dir\")\"; \
git worktree add \"$dir\" \"$ref\"; \
echo \"$dir\"; \
}; f"
# worktree 追加(新規ブランチを作って出す)
# usage: git wn <name> <new-branch> [base]
wn = "!f(){ \
set -e; \
name=\"$1\"; br=\"$2\"; base=\"$3\"; \
[ -z \"$name\" -o -z \"$br\" ] && { echo 'usage: git wn <name> <new-branch> [base]'; exit 1; }; \
repo=$(basename \"$(git rev-parse --show-toplevel)\"); \
safe=$(printf '%s' \"$name\" | tr '/ ' '--' | tr -cd '[:alnum:]_.-'); \
dir=\"$HOME/.worktrees/$repo/$safe\"; \
mkdir -p \"$(dirname \"$dir\")\"; \
if [ -z \"$base\" ]; then \
git show-ref --verify --quiet refs/remotes/origin/main && base=origin/main || base=origin/master; \
fi; \
git worktree add -b \"$br\" \"$dir\" \"$base\"; \
echo \"$dir\"; \
}; f"
# そのディレクトリの worktree を削除(rm -rf禁止)
# usage: git wd
wd = "!git worktree remove ."
# 参照ゴミ掃除(定期実行推奨)
wprune = worktree prune
# worktree 一覧の状態表示
wstat = "!f(){ \
set -e; \
git rev-parse --show-toplevel >/dev/null 2>&1 || { echo 'not a git repo'; exit 1; }; \
git worktree list --porcelain | \
awk '/^worktree /{p=$2} /^branch /{b=$2; sub(/^refs\\/heads\\//,\"\",b); print p \"\\t\" b} /^detached/{print p \"\\t(detached)\"}' | \
while IFS=$'\\t' read -r p b; do \
[ -z \"$p\" ] && continue; \
echo \"## $p [$b]\"; \
git -C \"$p\" status -sb; \
echo; \
done; \
}; f"
# worktree 名で削除
# usage: git wrm <name>
wrm = "!f(){ \
set -e; \
name=\"$1\"; \
[ -z \"$name\" ] && { echo 'usage: git wrm <name>'; exit 1; }; \
repo=$(basename \"$(git rev-parse --show-toplevel)\"); \
safe=$(printf '%s' \"$name\" | tr '/ ' '--' | tr -cd '[:alnum:]_.-'); \
[ -z \"$safe\" ] && { echo 'invalid name'; exit 1; }; \
dir=\"$HOME/.worktrees/$repo/$safe\"; \
git worktree remove \"$dir\"; \
}; f"
# 誤削除防止ロック
wlock = "!git worktree lock ."
wunlock = "!git worktree unlock ."
- gwcd で https://github.com/skim-rs/skim を使用
- fzf で代用可です
alias gwl='git worktree list'
# worktree 追加(新規ブランチを作って出す)
gwn() {
local dir
dir=$(git wn "$@") || return 1
cd "$dir"
}
# worktree 追加(既存ブランチ/コミットを指定して出す)
gwa() {
local dir
dir=$(git wa "$@") || return 1
cd "$dir"
}
# git worktree を skim で選んで cd
gwcd() {
command -v sk >/dev/null 2>&1 || { echo "skim (sk) not found"; return 1; }
command -v awk >/dev/null 2>&1 || { echo "awk not found"; return 1; }
local line selected_dir
line=$(
git worktree list --porcelain 2>/dev/null |
awk '
/^worktree / { p=$2 }
/^branch / { b=$2; sub(/^refs\/heads\//,"",b); print p "\t" b }
/^detached/ { print p "\t(detached)" }
' |
sk --delimiter=$'\t' --with-nth=1 --prompt="worktree> " \
--preview='echo "PATH: {1}"; echo "BRANCH: {2}"; echo; (cd "{1}" && git status -sb 2>/dev/null) | head -200'
) || return 1
selected_dir=${line%%$'\t'*}
[[ -n "$selected_dir" ]] && cd "$selected_dir"
}
# ショートカット登録
zle -N gwcd
bindkey '^X^W' gwcd # Ctrl-x Ctrl-w
worktreeの保存先は $HOME/.worktrees/<repo>/<name> に固定しています。
~/.gitconfig 側のコマンド使用例
# .gitconfig: Git alias(= git コマンドとして使う)
# worktree 一覧
$ git wls
# worktree 追加(既存ブランチ/コミットを指定)
# usage: git wa <name> <branch-or-commit>
$ git wa review-foo feature/foo
$ git wa hotfix-check 1a2b3c4d
# worktree 追加(新規ブランチを作って出す)
# usage: git wn <name> <new-branch> [base]
$ git wn bugfix-123 bugfix/123 origin/main
$ git wn spike-auth spike/auth # base省略(自動で origin/main or origin/master)
# 今いるディレクトリの worktree を削除(安全: rm -rf しない)
$ git wd
# 名前で worktree を削除
# usage: git wrm <name>
$ git wrm bugfix-123
# 参照のゴミ掃除
$ git wprune
# worktree 一覧を状態付きで表示(各worktreeの git status -sb)
$ git wstat
# 誤削除防止ロック/解除(今いるworktreeに対して)
$ git wlock
$ git wunlock
~/.zshrc 側のコマンド使用例
~/.gitconfig で登録したエイリアスで基本的に問題ないですが、作ったワークツリーのディレクトリにそのままcdで移動したかったので ~/.zshrc でもコマンドを作りました。
# worktree 追加(新規ブランチを作って出す) -> そのまま移動
# usage: gwn <name> <new-branch> [base]
$ gwn bugfix-123 bugfix/123 origin/main
$ gwn spike-auth spike/auth
# worktree 追加(既存ブランチ/コミットを指定) -> そのまま移動
# usage: gwa <name> <branch-or-commit>
$ gwa review-foo feature/foo
$ gwa hotfix-check 1a2b3c4d
# ワークツリーの一覧
$ gwl
# worktree を選んで cd(プレビューで status を見ながら選べる)
$ gwcd
# キーバインドでも起動できる
# Ctrl-x Ctrl-w
困った時
AIにどう指示すればいいのか分からなかったら、指示をどう投げるべきかAIに聞いてみるのが良いです。
その他
出力形式を指示すると別サービスへの連携がやりやすくなるので自分の使いやすい形で回答もらいましょう。
- Markdown形式で
- CSV形式で
- TSV形式で
- 結果をこのファイルに書いて
さいごに
個人の工夫を属人化させず、どう仕組みに落とすのが次の課題です。
現時点ではこの運用に満足できていませんが、チームで共有し、成果と失敗を重ねて改善していきたいと思います。
ミライトアドベントカレンダー 11日目は よだかさん の Next.js with Server Componentで外部のAPIサーバーと通信するベストプラクティス という記事です。
