B-Teck!

お仕事からゲームまで幅広く

機能追加とリファクタを分けて考えるようにしたら、変更の意図が説明しやすくなった

普段コードを触っていると、ここ直したいなぁと思う瞬間がある。

その直感にまかせて、機能追加のついでに大きめのリファクタをやってしまったことがある。
いざPRを出そうとしたとき、「このPRは何をしているのか」をうまく説明できなかった。
機能の追加なのか構造の整理なのかが、自分の中でも曖昧になっていた。

機能追加とリファクタを同じPRに入れると、レビュアーは「この変更は何のためにあるのか」を読み解きながら見ることになる。
不具合の原因を切り分けにくくなるし、revertもしづらくなる。

変更を分けて、1つの理由で説明できるようにした

この経験から、変更には2種類あることを意識するようになった。

  • 振る舞いの変更
    外から見た動作が変わるもの。機能を追加するとか、バグを修正するとか
  • 構造の変更
    動作を変えずにコードを整理するもの。クラスを分割するとか、依存関係を整えるとか

この2つは変更理由が違う。
なので、人に見せる前には「この変更は、1つの理由で説明できるか」「このPRは○○のためのPRです」と一文で説明できるかどうかを見直すようになった。

なぜ今これをやるのかを書くようにした

ただ、変更の意図が1つに絞れていても、それだけではレビュアーに渡せる情報が足りないなと感じるようにもなった。

  • 「なぜ今この変更をするのか」
  • 「他の方法ではなくなぜこのアプローチを選んだのか」

が書かれていないと、レビュアーは同じ問いをゼロから考えることになる。
別の設計案はないか、このタイミングでやる必要があるのかを一から探索する。
その探索は、PRを出した自分がすでにやったものと重複する。

だからPRには変更の理由に加えて、検討して選ばなかった選択肢とその理由も書くようにした。
レビュアーの検討コストはゼロにはならないけど、同じことを探索するコストは減らせる。
書く過程でなぜこっちにしたんだっけを自分でも問い直すことになるので、判断が甘かった部分に気づくこともある。
後から変更するときの手がかりにもなる。

あるべき姿を先に決めてから、分割を考える

また、実装を始める前にあるべき姿を考えるようになった。

以前、リファクタをしていたら途中で別の箇所の問題が気になって、ついでに直しておこうと混ぜて実装を進めたことがある。
その際、「これはもともとやろうとしていたことに寄与するのか」「今これをやる理由はあったのか」という指摘をもらった。
改善する行為自体はプラスだとしても、その時の自分は「なぜ今これをやるのか」が説明できなかった。

ゴールが決まっていないと、途中で気になったものを拾い続けてしまう。
あるべき姿を先に決めておけば今回のスコープ外と判断できる。
今は変更に取り掛かる前にゴールを先に決めて、そこから逆算して問題をどう分割するかを考えるようにしている。

「この変更は何のためか」を自分で言えるようになった

変更を分けるようになってから変わったのは、「変更の目的を自分で説明できるかどうか」を意識するようになったことだと思う。
以前はついでにやるか後回しのどちらかで、どちらも変更の意図やタイミングがあいまいなまま進んでいた。

分けて考えるようになってから、「これは構造の変更として別でやる」と判断できるようになった。
「この変更は何のためか」の観点を持つことで、一つ一つの変更に対してちゃんと目を向けられるようになったと思う。

ObsidianとClaude Codeで「貯める→整理する→書く」が回るようになった

前回の記事では、情報をObsidianに集約する仕組みを作った話を書いた。今回はその続きで、集まった情報をClaude Codeでどう整理・活用しているかを書く。

情報は集まるが、活かしきれていなかった

日々のWebClipやThinoでの記録はできるようになったけど、それを見返して整理して気づきを言語化するプロセスがどうしても後回しになっていた。過去にObsidianを使い始めたときも同じ壁で詰まっていて、このまとめ作業をどうにかしたかった。

Claude CodeのSkillsで解決した

この問題をClaude CodeのSkills(旧称:Slash Commands)で解決した。Vaultにはいくつかのスキルを用意していて、大きく「貯める」「整理する」「書く」の3つの役割に分かれている。

貯める:情報をVaultに取り込む

コマンド 用途
/process-webclips WebClipを読み取り、DailyNoteに要約を追記
/korean-study 韓国語学習プランを提示・記録
/workout 今日のワークアウトプランを提示・記録
/work-log セッションの作業内容をDailyNoteに記録

DailyNoteを基点にしつつ、WebClipや個人的なもの(言語学習や運動など)も記録するようにしている。WebClipは一度読んでそのままになったり、内容を忘れてしまったりがあったので、要約がDailyNoteに自動で追記されるようにした。

整理する:記録から意味を見出す

コマンド 用途
/daily-review 今日の記録を整理してDailyNoteにふりかえりを書く
/weekly-review 週のWebClip・日次ログを横断分析し、つながりを可視化
/monthly-review 月次の傾向分析。先月との比較、Zettelkasten健全性チェック
/zettel-health-check 孤立したZettelkastenノートの発見と改善提案
/link-zettel Zettelkastenのリンクを確認・追加

日次・週次・月次の区切りでふりかえり用のSkillを用意していて、それぞれの期間でやったこと、課題・反省、次へのヒントを返してくれる。自分だと主観や感情が入りがちなところを、記録ベースで客観的にまとめてくれるのが助かっている。

週次ふりかえりが特に気に入っていて、「今週読んだ記事から今はこういう分野への関心が強そう」みたいな気づきを出してくれる。バラバラに読んでいた記事が一つの問いに収束していたりするのが可視化されると、何をZettelkastenにすべきかも見えやすくなった。

Zettelkastenの整理も週次・月次のふりかえりに組み込んでいる。週次では、その週のDailyNoteからトピックを抽出してノート化の候補を提案してくれるので、内容を確認して取り込むかどうかを判断する、という流れ。月次では孤立したノートが増えすぎていないかをチェックして、共通テーマのあるものにはindexを作ったり、相互リンクを張ったりする提案が出てくる。

書く:アウトプットにつなげる

週次・月次ふりかえりの中でブログネタの提案もしてくれる。自分の思考・読んだもの・日々の気づきを横断して「こういう角度で書けそう」という候補を出してくれるので、ネタ切れになりにくい。提案された候補をブログネタ用のメモに蓄積して、書けそうなものから執筆に入る。このブログ記事もそのサイクルから生まれた。

Claudeに任せつつ、判断は自分で

以前は記録が残るだけで止まっていたのが、Claudeが間に入ることでアウトプットまでつながるようになった。整理の手間をClaudeに委ねることで、自分は「書く」という一番楽しい部分に集中できる。

ただ、全部をClaudeに丸投げしているわけではない。Zettelkastenの整理はClaudeが担う一方で、自分は毎日1つずつ、過去のノートを読み返している。「この内容はまだ自分にとって意味があるか」「書いた当時と今で考えが変わっていないか」を確かめる作業で、違和感があればノートを更新したり削除したりする。

AIに整理を任せると効率は上がるけど、ノートが"自分のもの"でなくなるリスクもある。この定点チェックはその歯止めになっている。

おわりに

共通しているのは「Obsidianに積み上げた文脈をClaudeが参照できる」という構造で、記録が蓄積されるほど提案や分析の精度が上がっていく。

やることはシンプルで、スキルを定義して記録のフォーマットをある程度揃えておくだけ。その土台があれば、ClaudeとObsidianの組み合わせは思っていた以上のことをやってくれる。気づいたら生活のいろんな場面に染み出していた。

日常の学びや感じたことをObsidianに集約している

以前は調べたこととか、学んだこと、やってみたことみたいなメモが、NotionとかGoogleKeepとか、ローカルのテキストファイルとか、色んなところに散らばって保管されていた。

Obsidianも何回か試していたんだけど、手動で丁寧に整理したり整備したり、というところを定着させきれずに数年使ってはやめて、ということを何回か繰り返していた。
けど、最近はAI系のサービスの成長がすごいので、ルールさえ決めてしまえば丸投げできるぞ、ということに気づいた。
そんな感じで過去に挫折したObsidianの運用に再チャレンジしている。

ということで今回は自分がどうやって運用・整理してるかを書き出してみようと思う。

何を記録しているか

  • Web記事: Obsidian Web Clipperでワンクリックしてinboxに保存
  • 日中のログ: Thinoプラグインでやったこと、気づき、感想などを記録
  • 調べ物メモ: 調べ物をするときにノートを作成して情報源や要点をまとめる
  • 読書メモ: Kindleのハイライトの同期や読書メモの記録

Web記事のClipやThinoはPC・モバイルのいずれからも行えるようにしている
Git経由でObsidianをPC/モバイル同期した - B-Teck!
Obsidian Web ClipperでPC/Androidから記事をClipするようにした - B-Teck!

ディレクトリの構成

ファイルとして保存するものは00_Inboxへ、その日の出来事や気づきはDailyNoteへ。Inboxに入ったものは定期的に整理して適切なフォルダに移動する。

フォルダの構成はこんな感じ。

vault/
├── 00_Inbox/        # 一時置き場
│   ├── webclips/    # クリップした記事
│   ├── quick-notes/ # とっさのメモ
│   └── research/    # 調べ物メモ
├── 10_Zettelkasten/ # 記事や体験から抽出した知識・原則
├── 20_Projects/     # 期限付きの作業
├── 30_Areas/        # 継続的にウォッチしている領域
├── 40_Resources/    # 処理済みの参考資料
├── 50_Daily/        # デイリーノート
├── 60_Weekly/       # 週次ふりかえり
└── 70_Monthly/      # 月次ふりかえり
フォルダ 役割
00_Inbox 一時置き場。定期的に整理して各フォルダへ移動する
10_Zettelkasten 記事や体験から抽出した知識・原則のメモ
20_Projects 期限付きの作業(個人開発の調査・検討など)
30_Areas 継続的にウォッチしている領域(キャリア、語学、技術など)
40_Resources 処理済みの参考資料。WebClipや調べ物ログのアーカイブ
50_Daily デイリーノート
60_Weekly 週次ふりかえり
70_Monthly 月次ふりかえり

ProjectsとAreasの判断基準は「完了があるかどうか」。期限や完了が定義できるものはProjects、継続的に更新されるものはAreasに入れる。

記事執筆時点での実際の運用フローを見たい方はこちらを参照。

ふりかえり

DailyNoteにはその日のWebClipやThinoのログが蓄積されていて、それらを参照しながら日次・週次・月次の3段階でふりかえりを行う。

  • デイリー:その日のWebClipとログを確認・整理
  • 週次:今週のWebClipや記事のつながり、気づきを掘り下げる。発見した知識や原則はZettelkasten化する(後述)
  • 月次:先月との比較、興味の変化、知識の蓄積を俯瞰する

Zettelkasten化

Zettelkastenは記事や体験から抽出した知識・原則を蓄積していく手法。WebClipや調べ物から「再利用できる知識・原則」を抽出して10_Zettelkasten/に保存する。何でもZettelkastenにするわけではなく、「別の文脈でも使えそうな考え方」だと思ったものだけ抽出する。

例えばチームの信頼構築について書いた記事を読んだとき、記事の内容をそのまま保存するんじゃなくて、「信頼は小さな約束の積み重ねで生まれる」みたいな原則として抽出するイメージ。

興味関心ごとにカテゴリディレクトリを切って、ノート同士をリンクでつないでいくと、同じテーマの知識が自然にネットワークになっていく。

使っているプラグイン

プラグイン 用途
Dataview クエリでノートを集計・表示
Templater テンプレート機能の拡張
Periodic Notes Daily/Weekly/Monthlyノートの管理
Calendar カレンダーUI
Kindle Highlights Kindleハイライトの自動同期
Thino (Memos) 日中のクイックログ記録
Outliner リスト操作の強化
Git 自動pull/push(PC)

最初は色々試したけど、今はこの構成に落ち着いた。

おわりに

過去に何度か挫折した運用が今回続いているのは、ルールを決めて仕組み化できたのが大きい。仕組み化すると面倒な部分をAIに任せて省力化できるので継続しやすくなるし、記録が蓄積されて知識がつながっていくのが見えてくる。情報管理に困ってる人は、まず入口を一つにするだけでも変わると思う。