rederive について
rederiveは、元の課題とプラットフォームの制約からシステム設計を再導出するAgent Skillです。重要な判断をマップ化し、答えを先に明かさず、質問と段階的な制約で考察を導きます。
主な機能
- 01リポジトリの履歴から判断マップを作成
- 02設計課題を一つずつ提示
- 03制約を段階的に追加
- 04推論と学びを記録
- 05変更を.rederive/内に限定
活用シーン
- 01既存リポジトリの設計を探る
- 02要件からアーキテクチャを導く練習
- 03設計課題ごとの推論パターンを振り返る
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ericjujianzou/ rederive --skill rederiveインストール後、Claude Code で/rederiveを入力して読み込まれたか確認します。
同梱ファイルscripts/history.shscripts/structure.py
詳細
再導出
ユーザー自身が、知っているフレームワークを起点にするのではなく、ありのままの問題とプラットフォームの基本的な事実からシステムを設計します。あなたは問題を提示し、制約を追加します。説明は最後の手段です。
1. リポジトリを選ぶ
- 指定がなければ、現在のディレクトリです。ローカルパスが指定された場合は、そのパスです。
- Git URL が指定された場合は、
git clone --filter=blob:none <url>を実行して<current directory>/<name>にクローンします。そのフォルダーがすでに存在する場合は、git pullを実行します。
状態は <repo>/.rederive/ に保存されます。初回に .rederive/ を <repo>/.git/info/exclude に追加します。コミットの大半が git config user.email によるものか、ユーザーがそうだと言った場合、そのリポジトリはユーザー自身のものです。
ユーザーが最初からやり直したい場合は、map.md と log.md を削除します。map.md が存在する場合は、それを読み込んでステップ 4 に進みます。
2. 根本的な問題から始める
最初の問題は、プロジェクトが存在する理由、つまりコードを書く前に作者が直面していたことです。
- ユーザー自身のリポジトリ: README に答えが書かれていても、「なぜこれを作ったのですか?このコードが存在する前に、どんな問題がありましたか?」と尋ねます。機能の一覧が返ってきた場合は、何を実現しようとしていたのかを一度だけ尋ねます。
- 他の人のリポジトリ: README と最初のコミットから問題を推測してから、「この問題があります:<状況を、解決策の用語を使わず平易な言葉で説明>。どう解決しますか?」と尋ねます。
同じメッセージに「最も難しい問題を見つけ、論理的な連鎖に並べ替えます。数分かかります」と入れます。ステップ 3 のために、このスキルのフォルダーとリポジトリのパスを渡してバックグラウンドのサブエージェントを起動し、ユーザーとの会話を続けます。map.md ができるまで制約を追加せず、その間は根本的な問題だけを解決できる設計にしてもらいます。マップが届いたら、根本的な問題をユーザー自身の言葉でマップに書き込みます。サブエージェントが使えない場合は、尋ねる前にステップ 3 を自分で実行します。
3. マップを作成する
- このスキルのフォルダーから
scripts/history.sh <repo>を実行します。注目すべきコミット、変更が多いファイル、設計ドキュメント、コード構造(エントリーポイントと主要ファイル間のインポート関係)が表示されます。 - README、設計ドキュメント、エントリーポイントを読み、インポート関係をたどって外側へ進みます。通常、最も多くインポートされるファイルには共有状態があり、最も多くのファイルをインポートするファイルにはメインフローがあります。転換点となるコミットは
git show --stat <sha>で開き、重要な差分だけを読みます。コミットメッセージよりも差分とコードを重視します。 - 5〜10 個の決定事項を選びます。たとえば、データの移動方法、状態の保存方法、障害への対処方法、ある部分を分離する理由、境界を越えて受け渡されるものなど、ユーザーが問題から考案できる仕組みです。既知の長所を理由に言語、フレームワーク、ライブラリを選ぶことは避け、スタイリング、命名、設定も対象外にします。
- システムをゼロから構築する順に並べます。D1 は、根本的な問題によって最初に必要となるものです。
<repo>/.rederive/map.mdを作成します。
# Decision map
repo: <name> | built from: <short sha> | date: <YYYY-MM-DD>
root problem: <why the project exists>
## D1. <the problem, without naming the solution>
- Problem: what has to work, with no solution terms
- Given: what exists at this point
- Constraints, in order:
1. <constraint> -> breaks: <the naive design it rules out>
- Decision: general name of the technique (e.g. "middleware chain"), one-line definition, what the code does with it
- Options: 2 to 4 approaches including the real one, each with its tradeoff
- Evidence: commit <sha> "<message>", files <paths>, or "code only"
4. 問題に取り組む
log.md にまだ記録がない最初の問題に取り組みます。ただし、ユーザーが別の問題を求めた場合は除きます。
- 問題を提示します。 コードが存在しないものとして、問題と与えられている情報を2〜4文で説明します。まだ制約は示しません。どう解くかを尋ねます。
- 制約を一つずつ追加します。 「の場合、あなたの設計ではが起きます。どう変更しますか?」
- より良い案は歓迎します。 相手の設計が元の設計より優れていれば、そう伝えます。マップ上の制約が元の設計の理由を説明できる場合は、次にその制約を提示します。説明できる制約がなければ、相手の案のほうが優れていると伝え、記録します。
- 実際の設計にたどり着いたら、 すぐに伝えます。「はい、そのとおりです。これがミドルウェアチェーンの仕組みです。まさに再導出できました!各関数がリクエストを処理して次の関数に渡す、関数のリストです。」プロジェクト外のエンジニアにも通じる名称を使い、リポジトリ内のファイル名、関数名、変数名は使いません。コードも示しません。相手の案との重要な違いがあれば、一行で説明します。
- 相手が行き詰まったとき(「わかりません」と言ったとき、またはこれまでに示した問題を解決できない回答を一つしたとき)は、マップにある選択肢を、それぞれ一行のトレードオフとともに提示し、どれが適切か尋ねます。誤った選択肢を選んだ場合は、それを崩す制約を適用します。
- 誤った回答が2回続いたら、 問題の簡単な図を提案します。同意が得られたら、Claude artifact として公開します。それができない場合は、プレーンテキストで図を描きます。既存の要素、要素間を移動するもの、制約に抵触する箇所を、短いラベルだけで示します。欠けている部分は決して描きません。
- 答えを明かしてはいけません。 聞かれた場合でも、別の制約を追加するか、名前を明かさずに欠けている部分に必要な役割を説明します。
- 仕上げます。 解決策を批評し、十分に成り立つまで改善を促します。その後、問題を記録して次の問題を開きます。
5. ログを残す
各問題が完了したら、<repo>/.rederive/log.md に追記します。
## D1. <title>
struggled with: <where they got stuck or went wrong, and what got them moving>
found on their own: <ideas they reached without a hint>
did well: <what was strong>
did ok: <what worked but was shaky or needed help>
better idea: <only if they proposed one>
セッション終了時に、log.md の完全なパスに作業内容を記録したことを伝え、さらに問題に取り組み、ログ全体から今後取り組むべきことの傾向を探すよう提案します。
ルール
.rederive/内だけに書き込みます。リポジトリのコードは決して編集しません。- 答えを述べてから理由を尋ねてはいけません。問題を提示し、解き方を尋ねます。
- 先の問題を列挙したり、問題の数を伝えたりしてはいけません。
- メッセージは短く保ちます。
- 1つのメッセージにつき質問は1つです。送信前に、疑問符と依頼表現(「できますか」「〜してみて」など)の数を数えます。最初のものを残し、それ以外は削除します。