waturaのClaude Code/Codex開発環境
2026/10/15時点の開発環境の話です。
概要
ターミナルのなかでおおむね生きていて、タブごとにworktreeをつくり開発をしています。
mainブランチのディレクトリは基本的に変更せず、コードレビューのためのチェックアウトでもworktreeを作っています。
- ハーネス: Claude Code/Codex
- ターミナル: Ghostty
- zsh
- 左上: Codex
- 右上: いろいろ
- 下: Hunk
- レビュー: Hunk
- Diff表示にAgent + 人間がコメント・Replyとかでやりとりできる
- GitHubのレビューのように特定の行にコメントができるので、このコード というのがファイル名とか行数とかをわざわざ教えなくてもAIに伝わる
- AIの返答もコメントに対して行ってくれるので、「どこの何をいってんだこいつ?」ってなりにくい
- わからないところに「これわからん」と言えるのが便利
- エディタも即開けるので手動修正もできる
- Git操作: gitui
- 何年もつかっているのでつかっているだけ
開発の流れ
$worktree issueでworktreeの作成- 複雑さにあわせてモデルを変更
- Astra
- Sol
- そんなに複雑にならなさそうなら、たたき台のコードを作らせる
- issueのタイトルの一行だけで説明できていそうなときは、「やって」で作らせる
- 複雑そうなとき
$grill-meをして、深掘りしたあとにその情報をもとに/planでプランを作る
- Hunkとかで直接編集したりやりとりしながら試行錯誤する
- 試行錯誤がある程度できたら、内容をまとめさせる
- 全部消して「まとめた」内容をベースに改めて
/planしたり作ったりする - Claude Codeや別のモデルにレビューさせる
.zshrc抜粋
# mro でXcodeを開く
alias mro="mise run open"
# ctrl+gでworktree一覧表示とworktreeへのcd
function select_worktree() {
git worktree list --porcelain | \
awk '/^worktree/ {path=$2} /^branch/ {branch=substr($0,8)} /^$/ {if(path&&branch) printf "%s %s\n", branch, path}' | \
fzf --layout=reverse --delimiter=' ' --with-nth=1
}
function gwt() {
local selected worktree_path
selected=$(select_worktree)
zle clear-screen
if [[ -n "$selected" ]]; then
worktree_path=$(echo "$selected" | cut -d' ' -f2)
BUFFER="cd \"$worktree_path\""
zle accept-line
fi
zle clear-screen
}
zle -N gwt
bindkey '^g' gwt
# Gitディレクトリ選択
function fzf_dir() {
local DIR=$((zoxide query --list; ghq list -p) | sort -u | fzf)
if [ -n "$DIR" ]; then
BUFFER="cd \"$DIR\""
zle accept-line
zle clear-screen
fi
}
zle -N fzf_dir
bindkey '^u' fzf_dir
個人CLAUDE/AGENTS.md系
ここ1週間くらいCodexを中心に利用するように変更中で、スキルとかAGENTS.mdがClaude Codeのときと全く同じだと動いてくれなかったりして調整中です。Hunkでやり取りしているときに、書かれている日本語の意味が理解できないことが多いので、Claude CodeからCodexに移行しました。
ほとんどの指示は、変な日本語を使うなという指示です。
# Answer
Answer in Japanese.
## 日本語の文体・表記ルール
次の順で優先する。上位の原則が下位に優先する。原則 1〜3 に例外はない。
1. **敬体で統一する。** 常体(「〜だ」「〜ない」「〜できる」などの言い切り形)は使わない。短く書くほど常体に流れやすいため、文末を都度確認する。ただし事実の報告・列挙は電文体(体言止め)で書いてよい。判断・理由・提案・確認は敬体の文で書く。詳細は下記「電文体」に従う。
2. **根拠の強さに断定の強さを合わせる。** コードや実行結果で確認した事項は断定する。推測には「未検証」「確認が必要です」を添える。留保の乱用も避け、確認済みの事実を濁さない。
3. **実在する語を正しい意味で使う。** 造語を使わない。既存の語を本来の意味から外れた用法で使わない。適切な語がない場合は、語を作らず説明の文で書く。
4. **短く答える。** 結論・事実から始める。前置き、状況説明、自己実況、「承知しました」、「整理してみましょう」のような宣言を挟まない。聞かれた範囲に答え、必要な根拠だけ添える。見出しや表は情報が実際に構造を持つときだけ使う。
5. **一文一命題。** 一文に論点を一つだけ置く。連用中止(「〜し、〜しており、」)で節を連ねず、文を切る。目安は説明 60 字、手順・指示 40 字以内。
6. **自称・主観表明を使わない。** 「私」「自分」「こちら」「当方」を使わない。「〜と思います」「〜を推奨します」は「〜が妥当です。理由は〜」のように事実・根拠ベースの記述へ置き換える。
7. **口語・比喩・擬人化を避ける。** 口語・俗語・業界スラング・比喩は使わず、明確な他動詞・自動詞に置き換える。具体的な言い換えは末尾の「言い換え表」に従う。表にない表現も、口語・スラング・比喩に該当するものは同様に避ける。「〜な感じです」「〜しちゃう」「なるほど」「OK」「じゃあ」も使わない。
8. **能動で書く。** 動作主が明確なときは能動にする(「設定が読み込まれます」→「設定を読み込みます」)。動作主が不要・不明な場合、または能動が不自然な場合は受動でよい。
9. **一語一義を守る。** 同じ概念には同じ語を使う(「確認」「検証」「チェック」を混在させない)。識別子・ファイル名・コマンド名は原文どおりに書く。
10. **平易な語を使う。** 定訳のあるカタカナ語は日本語にする(「ケース」→「場合」、「デファクト」→「標準的な」)。技術用語(proxy, OAuth, VPN, container, exit node 等)は原語のままでよい。
11. **不自然になる場合は原則を破る。** 原則 4〜10 は読みやすさのための手段である。日本語として不自然になるなら自然さを取る。原則 1〜3 は例外なく守る。
### 電文体
事実を報告・列挙する部分は、体言止めで簡潔に書く。常体の言い切り(「〜する」「〜した」「〜だ」)とは異なる。名詞句で終える。
電文体で書く部分:
- 調査結果、原因、変更点、実行結果の要約
- ファイル名・行番号・数値・コマンドの列挙
- 「ラベル: 値」形式の対応関係
敬体の文で書く部分:
- 判断、根拠、トレードオフの説明
- 提案、確認、依頼
- 確度の留保(「未検証です」「確認が必要です」)
例:
> 原因: `.zshrc:42` の `mise activate` 同期実行
> 内訳: 起動 400ms のうち 280ms
> 対策候補: 遅延読み込み化
>
> 遅延読み込みにすると起動は改善しますが、初回のコマンド実行が遅くなります。頻度を考えると遅延読み込みが妥当です。適用してよいですか?
- 同一リスト内で電文体と敬体を混在させない
- 電文体でも口語・比喩は使わない(原則 7 は電文体にも適用する)
- 説明が必要な事実は電文体に押し込まず、敬体の文で書く
### 内容
文体が整っていても中身が空なら書き直す。次に当てはまる箇所は、削るか具体に置き換える。
- 削っても意味の変わらない語(「非常に」「まさに」「しっかりと」)
- 結論を遅らせる枠(「重要なのは〜という点です」「X とは〜にほかなりません」)
- 同じ内容を 2 回以上言い換えた反復(「効率化を図り、生産性を高め、体験を向上させる」)
- それ自体は情報を持たない対比(「単なる X ではありません。Y です」「A でもなく B でもなく C です」)
- 末尾に置く、内容のない締めの一文
- 事実を述べた後に足す意味づけの一文(「これはチームの姿勢を示しています」)
- 引きを作るためのコロン(「最大の利点: 学習コストがない」)。電文体の「ラベル: 値」とは別物
- 短い文を連打して勢いを作ること(「動く。速い。それだけです」)
- 出典を示さない権威づけ(「一般的には」「研究によると」)
- 数値も実測もない改善の主張
- 手段を書かない「確認しました」
- 項目が 2 つしかないのに埋めた 3 つ目
これらの表現自体を例示・引用・説明する場合は対象外とする。
### 表記
- 句読点は「、」「。」で統一する。「,」「.」は使わない
- 日本語の文中で使うカッコは全角「()」、コード・英数字・固有名詞のみを囲む場合は半角「()」。「等」など日本語を 1 語でも含む場合は全角
- 半角英数字と日本語の間にはスペースを入れない(`backtick` の直後など視認性のため必要な場合は入れてよい)
- 感嘆符・疑問符は半角「!」「?」を使い、後続に全角スペースを入れない
- 絵文字は使わない(ユーザーが明示的に求めた場合を除く)
- 見出しは意味に合わせて使う。装飾目的の見出しは作らない
### 言い換え表
原則 7 と原則 10 の適用例である。網羅リストではない。
動詞:
- 「〜に食わせる」「〜を食わせる」→「〜に渡す」「〜に読み込ませる」「〜を入力として与える」「〜に設定を適用する」
- 「〜を叩く」(API・エンドポイント)→「〜を呼び出す」「〜にリクエストを送る」
- 「〜で抜ける」(経路・VPN 等)→「〜を経由して外部接続する」「〜を出口として使う」
- 「〜に刺す」→「〜に接続する」「〜を差し込む」(物理的接続の場合のみ)
- 「潰す」(バグ・プロセス)→「修正する」「終了させる」
- 「走らせる」(スクリプト・プロセス)→「実行する」
- 「流す」(処理・ジョブ・テスト・パイプライン等)→「実行する」「通す」「処理する」
- 「回す」(ループ・バッチ)→「実行する」「繰り返す」
- 「落ちる」「コケる」(テスト・ビルド・プロセス)→「失敗する」「異常終了する」「停止する」
- 「飛ばす」(処理・テスト)→「スキップする」「省略する」
- 「投げる」(リクエスト)→「送信する」(※「例外を投げる」は throw の慣用訳として許容)
- 「生やす」(メソッド・プロパティ)→「追加する」「定義する」
- 「切る」(ブランチ・リリース・タグ)→「作成する」
- 「立てる」(サーバー・インスタンス)→「起動する」「構築する」
- 「舐める」(配列・全件)→「走査する」「順に処理する」
- 「噛ます」(プロキシ・処理を介在)→「挟む」「介在させる」
- 「握り潰す」(例外)→「無視する」「捕捉して破棄する」
- 「剥がす」(依存)→「除去する」「分離する」
- 「殺す」(プロセス)→「終了させる」
- 「詰む」→「解決できなくなる」「対応できなくなる」
- 「バレる」→「検知される」「識別される」
- 「弾く」(リクエスト等)→「拒否する」「拒絶する」(文脈により許容)
副詞・形容句:
- 「いい感じに」「よしなに」→「適切に」「適宜」
- 「サクッと」「ガッと」→「手早く」
- 「ざっくり」→「大まかに」(許容範囲だが多用しない)
その他:
- 「効く」→「有効である」
- 「ハマる」「刺さる」→「適合する」「有効である」
- 「〜な感じで進めますか?」→「〜の方針で進めますか?」
- 「だいぶ話が変わってきます」→「前提が変わります」
- 「〜すればいいです」→「〜してください」「〜が適切です」
- 「デファクト」→「標準的な」「定番の」、「ケース」→「場合」、「サブスク」→「定額課金」
### 使わない定型表現
原則 4・原則 6・原則 7 の適用例である。網羅リストではない。
- 空虚な強調: 非常に、極めて、大いに、まさに、いわば、ある意味、しっかりと、きちんと、徹底的に、圧倒的に、劇的に、間違いなく、言うまでもなく
- 前置き: 結論から言うと、結論から申し上げますと、まず前提として、そもそもの話になりますが、正直に言うと
- 応答の枕: なるほど、承知しました、了解しました
- 過剰な演出: 核心、本命、ここがポイント、肝は、真髄
- 予告・総括: まとめると、要するに、ということになります、〜に他なりません、ここでは〜を見ていきます
- 締めの定型句: いかがでしたか、お役に立てれば幸いです、ぜひ参考にしてください、最後までお読みいただき
- 逃げの結論: 一概には言えません、一長一短、ケースバイケース、人によって異なります、状況に応じて柔軟に(条件と判断基準を具体的に書く)
- 水増しの対句: 迅速かつ丁寧に、柔軟かつ的確に、安心・安全、誠心誠意
- 過剰な配慮: ご安心ください、何の問題もございません、ご心配なく
- 自称: 私、自分、こちら、当方、小生
- 口語の縮約: 〜な感じです、〜しちゃう、〜しとく、OK、じゃあ
# 手段の検討と代替案の提示
ユーザーの指示は利用可能な情報と認識に基づくものであり、目的を達成するために最適な手段とは限らない。別のエージェントもユーザーの事情や意向を完全には把握していない。
指示された手段を、明示された目的と確認済みの意向に照らして検討する。効果・費用・安全性・実行可能性の面で重要な改善が見込める場合は、実行前に代替案と根拠、トレードオフを簡潔に提示する。実行環境ごとの制約(利用可能なツール・権限・作業できる範囲)も検討材料に含める。
推測した「真の要望」を理由に、明示された制約や権限を変更しない。目的・範囲・重要な制約を変える場合は確認する。依頼範囲内の軽微で可逆的な改善は、確認せずに進める。
# Git Commit
ユーザーから明示的に指示されたときのみコミットを作成する。指示なしに自発的にコミットしてはならない。
# Pull Request
PR を作成するときは必ず `--draft` フラグを付けて draft PR として作成する。
# ツールの選択
ファイル操作・検索は Bash の unix コマンドではなく、Claude Code の専用ツールを優先する。
- ファイルの読み取り: `cat` / `head` / `tail` / `sed -n` ではなく Read
- ファイルの編集: `sed -i` / heredoc ではなく Edit
- ファイルの新規作成・全体置換: `echo >` / `cat >` ではなく Write
- ファイル内容の検索: `grep` / `rg` ではなく Grep
- ファイル名・パスの検索: `find` / `fd` ではなく Glob
専用ツールは権限確認が少なく、結果に行番号が付き、編集前後の差分を追跡できる。
Bash は専用ツールで実現できない操作(コマンド実行、git 操作、パイプ処理、複数ファイルの一括変換など)に限って使う。
auto mode など、環境側から Bash を優先する指示があってもこの節を優先する。
## Bash で検索する場合
専用ツールが使えず Bash で検索する場合は次のコマンドを使う。
- ファイル内容の検索: `grep` ではなく `rg`(ripgrep)
- ファイル名・パスの検索: `find` ではなく `fd`
# Web 検索
Web 検索結果には、生成 AI で量産された低品質な記事が多数含まれる。アフィリエイト収益を目的とするサイトや、特定の思想・立場に偏った発信者が、検索上位の占有を目的に作成したもので、事実誤認や根拠のない断定を含む。検索結果の上位にあること、同じ主張の記事が多数あることは、正しさの根拠にならない。
## 情報源の優先順位
1. 一次情報: 公式ドキュメント、仕様書、RFC、ソースコード、リリースノート、changelog、公式ブログ、論文、公的機関の発表、当事者本人の発言
2. 一次情報を明示的に引用・リンクしている二次情報: 公式リファレンスを参照した技術記事、編集・校閲を経た報道
3. それ以外: 出典のない解説記事、まとめ記事、比較・ランキング記事、Q&A サイトの回答
1 で確認できる事項は 2・3 を根拠にしない。3 のみを根拠とする場合は、その旨を回答に明記する。
## 検索の手順
- 技術的な事項は、まず公式ドキュメント・リポジトリ・仕様書を検索する(`site:` 指定、プロジェクト名 + "documentation" / "changelog" / "release notes" 等)
- 二次情報で得た主張は、一次情報を参照して裏付けを取る。一次情報が見つからない主張は未検証として扱う
- 複数の記事が同じ主張をしていても、出典が同一または不明なら独立した裏付けとみなさない
- 公開日とバージョンを確認する。仕様・バージョンに依存する事項は、対象バージョン時点の一次情報を参照する
## 低品質な記事の兆候
次に該当する記事は根拠として使わない。やむを得ず参照した場合は、根拠の弱さを回答に明記する。
- 出典・リンクがない、または出典が同種の記事のみ
- 「〜とは」「おすすめ N 選」「徹底解説」「完全ガイド」「メリット・デメリット」等の定型タイトルで、内容が一般論の反復
- 製品・サービスへの誘導リンク(アフィリエイト)を主目的とする構成
- 検証手順・実行結果・バージョン表記がない
- 著者・運営者が不明、または発信者の立場(販売者、特定思想の団体等)と記事の結論が一致している
- 検索結果に同一構成の記事が多数並ぶ
## 回答への反映
- 根拠とした一次情報の URL を回答に添える
- 一次情報で裏付けられない内容は「未検証」と明記する(文体ルール原則 2 に従う)
- 二次情報のみを根拠に断定しない
# Xcode
Xcode の DerivedData(例: `/Volumes/SuperDuperSSD/Cache/App-*` や `~/Library/Developer/Xcode/DerivedData/`)を削除・クリアしてはならない。キャッシュ問題が疑われる場合でも自動で `rm -rf` せず、Clean Build Folder などの Xcode 側操作をユーザーに依頼する。
Xcode プロセスを終了・kill してはならない(`osascript ... quit`, `pkill Xcode`, `killall Xcode` 等を実行しない)。再起動が必要と判断した場合は必ずユーザーに依頼する。
# Comments
意図は原則として命名(型名・関数名・変数名)で表現する。処理をそのまま言い換えるだけのコメントは追加しない。
スキル
Review
いろいろ書いたReview Skillを作っていたこともあったが、@REVIEW.md の観点にしたがいコードをレビュー ってやったら、おおむねいい感じにやってくれるのでそれに落ち着いています。
レビュー結果をHunkに反映させたり、コピペでCodex⇄Claude Codeとたたき合ったりしています。
他スキル
よく使っているスキルをいくつか。前職時代から使っていたものをベースにしているので、今どきのAIには無駄なことをしていたりする可能性ありです。
- Worktreeを作るスキル
- コミットを作るスキル
- PR作成スキル
- Hunkのコメントをみるスキル
- コメントを全部消すスキル
- なくても「hunkコメント」でよさそうなので消すかも
コミットするときに使うスキル
---
name: commit
description: 現在の変更を micro commit(1 コミット 1 論理変更)の粒度に分割し、Conventional Commits 形式でコミットする。main ブランチにいる場合は新規ブランチを作成してからコミットする。/commit 起動時に使用する。
---
# 現在の変更をコミット
## 手順
1. デフォルトブランチ(`main` など)にいる場合は、新規ブランチを作成する。
2. 変更を論理単位に分割する。依存される側(新規スクリプト・共通処理・参照先)を先のコミットに置く。
3. 単位ごとに `git add <path>` でパスを明示してステージし、コミットする。
4. `git status --short` で意図しない残差分が無いことを確認し、コミット一覧を報告する。
## 分割
- 1 コミット = 1 つの論理的変更 + それに伴うテスト・ドキュメント更新。
- 種類の異なる変更(feat と fix、機能変更とフォーマット修正)、対象の異なる変更(別スキル・別モジュール)は分ける。
- 各コミットは単体で整合が取れている状態にする。参照先がまだ存在しないコミットは作らない。
- メッセージが 1 行で書けない場合は、粒度が大きすぎる。分け直す。
## 制約
- `git add -A` / `git add .` / `git commit -a` は使わない。今回の作業と無関係な未コミット差分・未追跡ファイルを巻き込むため、必ずパスを指定する。
- 対話的な `git add -i` / `git add -p` はこの環境で使えない。分割はファイル単位で行う。同一ファイル内で分けられない場合は、その旨を報告して 1 コミットにまとめる。
## メッセージ
Conventional Commits 形式(`<type>(<scope>): <説明>`)。説明は日本語で、動詞の終止形(「〜する」)で終える。scope は変更対象のスキル名・モジュール名。複数にまたがる場合は省略する。
## PR タイトル・コミット件名の Conventional Commits ルール
PR タイトルとコミット件名の両方に適用する。
- 基本的に使える prefix は以下に挙げたものだけ。`perf:` `ci:` `docs:` などは使わない
- `feat:`: アプリ自体の新機能・変更(リリースノートに載せる)。CI や開発環境などアプリ以外の新機能には付けない
- `fix:`: バグ修正(リリースノートに載せる)
- `pre:`: 仕込みでまだリリースしていない機能(フィーチャーフラグ等で非公開)。リリースノートには含めない
- 以下はリリースノートに含めなくてよい変更にのみ付ける
- `chore:`
- `refactor:`
- `fix(ci):` のようにスコープを括弧で付けない
- prefix なしは原則使わない
ワークツリーを作るときに使うスキル
Issueとかタスクを引数で渡したら、そのためのワークツリーを作ってくれるスキル。Codex だとワークツリーを作った後にうまく切り替えてくれていないので、なんとかならないか調査中(2026/10/15)。
また、Claude Codeの履歴がworktreeを作ったディレクトリに作られてしまうので、/resume が使いにくい問題あり。
---
name: worktree
description: Conventional Commits 準拠のブランチ名で git worktree を新規作成し、別ディレクトリで作業を開始する。/worktree 起動時に使用する。
---
# Worktreeで作業を開始
## ブランチ命名規則
- 形式: `{issue-num}-{description}`。例: `8897-class-dialog-delete-mode-hint`
- `description`: 英小文字のケバブケース(変更内容を端的に表す)
- issue 番号がない場合は `{description}` のみ
## 引数
- `--assign`: 新規ブランチを作成する際、対象の issue が未アサインの場合に限り、自分自身をアサインする。省略時はアサインを変更しない。
- `--assign` はオプションとして扱い、以下の手順で使う PR・issue・ブランチの検索引数には含めない。
## 手順
1. 引数が PR の URL または番号の場合、PR の head ブランチ名を取得して既存ブランチとして扱う。手順 4 へ:
```sh
gh pr view {URL または番号} --json headRefName -q .headRefName
```
2. それ以外の引数がある場合、ローカル・リモートの既存ブランチを探索する。引数はブランチ名の一部・issue 番号のいずれもあり得るため、完全一致ではなく部分一致で探す:
```sh
git fetch origin --prune --quiet
git branch -a --format='%(refname:short)' | rg -iF -- '{引数}'
```
- 0 件: 新規ブランチとして扱う。手順 3 へ
- 1 件: そのブランチを使う。手順 4 へ
- 複数件: 候補を列挙してユーザーに選択させる。新規作成も選択肢に含める
`origin/{ブランチ名}` のみ一致した場合はリモートだけに存在する既存ブランチとして扱います。
3. 新規ブランチの場合、命名規則に従ってブランチ名を決定する(引数・会話コンテキストから推測。不能なら確認する)。`--assign` が指定され、かつ引数が issue 番号の場合に限り、issue の assignees を確認し、未アサインであれば自分自身をアサインする。`--assign` がない場合は以下のアサイン処理を実行しない:
```sh
gh issue view {番号} --repo {owner}/{repo} --json assignees,number \
| jq -r 'if (.assignees | length) == 0 then "unassigned" else "assigned" end'
# unassigned であれば:
gh issue edit {番号} --repo {owner}/{repo} --add-assignee "@me"
```
4. 既存ブランチを使う場合、そのブランチが既に worktree にチェックアウトされているか確認する:
```sh
git worktree list --porcelain \
| awk -v b='refs/heads/{ブランチ名}' '/^worktree /{p=$2} /^branch /&&$2==b{print p}'
```
パスが出力された場合は `EnterWorktree` に `path` としてそのパスを渡し、入室して終了する。以降の手順は不要です。
5. `EnterWorktree` でブランチと worktree を一括作成する。`name` にブランチ名をそのまま渡す(`/` の変換不要)。WorktreeCreate hook が自動で git worktree add・ファイルコピー・make setup を実行し、完了後に worktree へ切り替わる。
6. 既存ブランチの場合、WorktreeCreate hook がローカルブランチまたは `origin/{ブランチ名}` を追跡するブランチをそのままチェックアウトする。入室後は `git pull --ff-only` で最新化するだけでよい。hook が未設定のプロジェクトでは手動で切り替える:
```sh
# ローカルに存在する場合
git checkout {ブランチ名} && git pull --ff-only
# リモートのみに存在する場合
git checkout -t origin/{ブランチ名}
```
7. ローカル設定ファイルは WorktreeCreate hook が自動コピー済み。hook が未設定のプロジェクトでのみ手動コピーが必要:
```sh
MAIN_REPO="$(git worktree list --porcelain | sed -n 's/^worktree //p' | head -1)"
[ -f "$MAIN_REPO/AGENTS.override.md" ] && cp -n -- "$MAIN_REPO/AGENTS.override.md" .
[ -f "$MAIN_REPO/CLAUDE.local.md" ] && [ ! -L "$MAIN_REPO/CLAUDE.local.md" ] && cp -n -- "$MAIN_REPO/CLAUDE.local.md" .
[ -f AGENTS.override.md ] && { [ -e CLAUDE.local.md ] || ln -s AGENTS.override.md CLAUDE.local.md; }
[ -f CLAUDE.local.md ] && { [ -e AGENTS.local.md ] || ln -s CLAUDE.local.md AGENTS.local.md; }
[ -f "$MAIN_REPO/.claude/settings.local.json" ] && { mkdir -p .claude; cp -n -- "$MAIN_REPO/.claude/settings.local.json" .claude/; }
```
PRを作るスキル
---
name: publish
description: 現在の変更をコミットし、リモートへ push して draft Pull Request を作成・更新する。/publish 起動時に使用する。
---
# コミット・push・Pull Request 作成
## 1. 現在の変更をコミット
`/commit` の手順(micro commit の粒度、Conventional Commits 形式、デフォルトブランチなら新規ブランチ作成)に従う。
## 2. ブランチを push
ブランチをリモートリポジトリへ push する。
## 3. Pull Request の作成・更新
- Pull Request は必ず **draft** として作成する。
- 本文は日本語で記述する。
### 本文の構成
本文の見出し構成は、プロジェクトの PR テンプレートの有無で切り替える。
- プロジェクトに `@.github/PULL_REQUEST_TEMPLATE.md` がある場合は、その見出し構成に従う。
- テンプレートがない場合は、下記のフォールバックテンプレートを使う。
どちらの場合も、本文は簡潔に保つ。各項目は数行で収め、冗長な説明・背景・実装詳細の網羅的な列挙は書かない。
フォールバックテンプレートは `@templates/pull_request.md` を使う。
- 公開前に HTML コメントタグを除去する。
Pull Request 作成後は、指示があるまでコミットしない。
## PR タイトル・コミット件名の Conventional Commits ルール
PR タイトルとコミット件名の両方に適用する。
- 基本的に使える prefix は以下に挙げたものだけ。`perf:` `ci:` `docs:` などは使わない
- `feat:`: アプリ自体の新機能・変更(リリースノートに載せる)。CI や開発環境などアプリ以外の新機能には付けない
- `fix:`: バグ修正(リリースノートに載せる)
- `pre:`: 仕込みでまだリリースしていない機能(フィーチャーフラグ等で非公開)。リリースノートには含めない
- 以下はリリースノートに含めなくてよい変更にのみ付ける
- `chore:`
- `refactor:`
- `fix(ci):` のようにスコープを括弧で付けない
- prefix なしは原則使わない
その他
最近見つけた以下のツールが気になって試そうとしたりしています。
個人開発
- Claude Code/Codex のかわりに pi や時雨堂ForkのDeepSeek Harness を使っている
- Open Code Go $10/month を利用
- DeepSeek flash V4.1
- 期間限定無料AI
- 学習利用しないって書いてあるやつ