投稿日:2026/7/28
更新日:2026/7/28

雑な入力(Slack の貼り付け、調査中の独り言、業務コードの断片、AI との会話ログなど)を、
Obsidian Vault 技術/ 配下の読み物として成立する Markdown 記事に変換し、
一般化 → 執筆 → コミット → ドラフト PR までを一気通貫で行う。
ユーザーが投げてきたテキスト/ファイルを読み、次を自分で判断する(ユーザーに聞き返さない)。
技術/ 配下の既存ディレクトリから選ぶls 技術/
既存カテゴリ(例): Rails / TypeScript / Next.js / Prisma / DB / OAuth / Ruby /Claude / obsidian / アーキテクチャ / その他 / Instructions
... で内部リンクする)。ls 技術/<カテゴリ>/
grep -rl "<キーワード>" 技術/
入力に含まれる業務固有の情報を洗い出し、置換表を作ってからユーザーに提示する。
| 種類 | 例(元) | 置換後の方針 |
|---|---|---|
| モデル/テーブル名 | TraineeContentProgress |
User / Order / Article / Tag など一般名詞 |
| カラム名 | trainee_curriculum_id |
user_id / status / published_at など |
| プロダクト名・会社名・サービス名 | 実プロダクト名 | 記事から消す。必要なら「あるサービス」 |
| 業務ドメイン語 | 「受講者」「カリキュラム進捗」 | 一般的な題材へ翻訳(後述) |
| 人名・アカウント名 | 実在の担当者名 | あおい/ひかる/つばさ など中立的な名前 |
| URL・ホスト・接続情報 | 社内 URL、DB ホスト、バケット名 | https://example.com、example-bucket |
| ID・トークン・キー | 実 ID、APIキー | 削除するか xxxxx |
| ファイルパス | app/services/manager/... |
一般的な構成に均す(app/services/...) |
| 画面名・ロール名 | manager / trainee / system_admin |
admin / user など汎用ロール |
構造さえ同じなら題材は何でもよい。登場人物 2〜3 人・レコード 3 件程度の最小の題材に落とす。
users × orders(1対多、注文0件の人がいる)articles × tags(多対多)/articles × commentsbooks × authors × reviewsproducts × orders × order_items(金額・在庫の集計向き)projects × tasks × assignees(ステータス遷移向き)元のドメインと同じカーディナリティ・同じ制約を持つものを選ぶこと(1対多を多対多に変えない)。
記事を書き終えた後、次を実行して業務語が残っていないか必ず確認する。
# 記事内の英数字識別子を洗い出し、一般的でないものが残っていないか目視確認
grep -oE '[A-Za-z_][A-Za-z0-9_]{3,}' "技術/<カテゴリ>/<ファイル名>.md" | sort -u
ユーザーに置換表を提示し、合意を得てから Step 3 へ進む。
提示形式:
以下の置換で一般化します。
- TraineeContentProgress → UserLessonProgress(「受講者の教材進捗」→「ユーザーのレッスン進捗」)
- 受講者 / カリキュラム → ユーザー / コース
- 社内URL → 記載しない
Vault の既存記事に揃える。きれいな読み物より「未来の自分が最短で思い出せること」を優先する。
# <タイトル:内容がそのまま分かる日本語>
<リード 1〜3行。何の話か、なぜ書いたか。ここで結論の匂わせまでやる>
## 結論
- <箇条書き 2〜4行で先に答えを書く>
---
## <本題1:最小の具体例から入る>
<表・コード・図>
---
## <本題2:仕組み/なぜそうなるか>
---
## <比較・使い分け>
| | A | B |
| :--- | :--- | :--- |
---
## ハマりどころ
---
## 参考
- [記事タイトル](URL)
- 関連: 既存ノート名
ruby / ts / ```sql)を必ず付ける。--- を使う。>)で強調する。ノート名(拡張子なし・ファイル名のみ)。外部は [表示テキスト](URL)。図で説明した方が早い箇所には必ず Mermaid を入れる。 目安は 1 記事あたり 1〜2 個。
| 説明したいもの | 使う図 |
|---|---|
| 処理の順序・登場人物間のやり取り | sequenceDiagram |
| 分岐・データの流れ・レイヤー構成 | flowchart TD / flowchart LR |
| 状態遷移(ステータス列の話) | stateDiagram-v2 |
| テーブル間のリレーション | erDiagram |
| クラス・型の継承関係 | classDiagram |
Obsidian で崩れないための記法上の注意:
<br/>。生の改行は入れない。() [] : , を含めるときはダブルクォートで囲む → A["users(ユーザー)"]User, DB など)。A -->|説明| B。erDiagram
users ||--o{ orders : "1人が複数注文"
users {
int id
string name
}
orders {
int id
int user_id
string item
}
書いた Mermaid は必ず自分で構文を読み直す(括弧の閉じ忘れ、--> の綴り、participant の別名記法)。
技術/<カテゴリ>/<タイトル>.md検索メソッドの使い分け(findUnique・findFirst・OrThrow).mdJOINとGROUP BYを3人のユーザーで理解する.mdjoin.md / メモ.md/ はファイル名に使わない。作成後、Step 2 のセルフチェック(grep -oE ...)を実行する。
git branch --show-current
git status --short
main の場合は、必ず作業ブランチを切る。git switch -c claude/<英小文字のトピック名>
claude/* ブランチ上(worktree 含む)ならそのまま使う。vault backup: ... という obsidian-git の自動コミットが混ざっていないか git log --oneline -5 で確認する。clean-commits スキル)を案内する。記事ファイルだけをステージする(git add -A は使わない。Vault の他ノートの編集が巻き込まれる)。
git add "技術/<カテゴリ>/<ファイル名>.md"
git status --short
コミットメッセージ(Conventional Commits・日本語):
docs(<カテゴリ>): <記事の内容を表す要約>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
<カテゴリ> はディレクトリ名に合わせる(Rails / TypeScript / Next.js / DB など)。docs: にする。例:
docs(Rails): JOIN と GROUP BY を3人のユーザーで理解する記事を追加docs(TypeScript): NonEmptyArray<T> = [T, ...T[]] の解説記事を追加git push -u origin <ブランチ名>
PR 本文をファイルに書き出してから gh に渡す(改行崩れ防止)。
gh pr create --draft --base main \
--title "docs(<カテゴリ>): <コミットと同じ要約>" \
--body-file <本文ファイルパス>
必ず --draft を付ける。 本文フォーマット:
## 概要
`技術/<カテゴリ>/<ファイル名>.md` を追加しました。
<記事が何を説明しているかを2〜3行>
## 内容
- <strong><見出し1></strong> … <一行説明>
- <strong><見出し2></strong> … <一行説明>
🤖 Generated with [Claude Code](https://claude.com/claude-code)
作成後、PR の URL をユーザーに報告する。
次を簡潔に報告する。
--draft を外さない。 レビュー前に Ready にするのはユーザーの判断。git add -A / git commit -a を使わない。 Obsidian の自動バックアップ差分を巻き込む。main に直接コミット・プッシュしない。