[わ]

waturaのClaude Code/Codex開発環境

2026/10/15時点の開発環境の話です。

概要

ターミナルのなかでおおむね生きていて、タブごとにworktreeをつくり開発をしています。

mainブランチのディレクトリは基本的に変更せず、コードレビューのためのチェックアウトでもworktreeを作っています。

開発の流れ

.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には無駄なことをしていたりする可能性ありです。

コミットするときに使うスキル

---
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 なしは原則使わない

その他

最近見つけた以下のツールが気になって試そうとしたりしています。

個人開発