Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions docs/presentations/2026-10-17-skill-plugin-development/notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
台本はページに載せる要素を持たないため、各ページの図・表・箇条書きは読み上げから起こした。読み上げの文をそのまま
ページに写さず、縮めても載せない。ページには 1 つのメッセージと、それを支える短い句(体言止め)・表・流れ・数値だけを置く。
聞き手は NDF を知らないため、内部の語(ゲート・フェーズ・conductor など)は聞き手に通じる語へ言い換えるか、ページの中で
一言で説明する。Skill 名(`/ndf:xxx`)はリードか箱の見出しに置き、何をするものかを必ず添える。事例のプロジェクトは種類で
一言で説明する。スキル名(`/ndf:xxx`)はリードか箱の見出しに置き、何をするものかを必ず添える。事例のプロジェクトは種類で
呼び、名前は出さない。

表の番号は台本の番号で、章扉(「章立て」の節)は数えない。
Expand All @@ -21,7 +21,7 @@
| 2 | 同じ指摘を、何度もしていませんか | 繰り返す 3 つの指摘を吹き出しで並べ、「セッションが切れると忘れる」を注意の地で示す | 台本 2 |
| 3 | CLAUDE.md への追記では足りない | 4 つの壁(コンテキスト・強制力・手順・ポータビリティ)を 2 × 2 の区画で示す | 台本 3 |
| 4 | スキルとプラグイン | スキル(作る単位・手順書)とプラグイン(配る単位・スキル・スクリプト・hook・サブエージェントをまとめる)の 2 区画、公式ドキュメント(Anthropic・OpenAI・Agent Skills の規格)へのリンク、4 つのランタイムの並び | 台本 4、Claude Code と Codex の公式ドキュメント |
| 5 | NDF: 自分のやり方をプラグインに | リリース 102 回・Skill 48 個・ランタイム 4 つ・導入 10 リポジトリの数値と、リポジトリの URL | 台本 5(2026-10-17 の実測) |
| 5 | NDF: 自分のやり方をプラグインに | リリース 102 回・スキル 48 個・ランタイム 4 つ・導入 10 リポジトリの数値と、リポジトリの URL | 台本 5(2026-10-17 の実測) |
| 6 | Issue の束を渡せば、並列に進む | マイルストーン → グループ → スプリント(グループごとに並列)→ リリースの図と、2 回の承認(設計・本番リリース)。直前のリリースの例は注 | 台本 6 |
| 7 | 変更の大きさで、踏む工程を変える | `/ndf:development-workflow` が変更を分ける 5 つのモードの表と、light と standard の工程の違い | 台本 7、`development-workflow` の `references/workflow-modes.md` |
| 8 | 機能追加は、この流れで 1 周 | standard モードの工程を設計・実装・リリースの 3 行に並べ、承認 1・2 を注意の地で示す | 台本 8 |
Expand All @@ -31,7 +31,7 @@
| 12 | 3 層のエージェントで止めない | conductor(指揮役)・supervisor(監督役)・worker(作業役)を斜めに下げて並べた図と、再開とセッションの切り替えの 2 区画 | 台本 12 |
| 13 | 迷ったら MVV で判断する | Mission・Vision・Value の 3 区画と Value の例 2 つ、必ず人が承認する操作 | 台本 13、`.ndf/` のプロジェクト MVV |
| 14 | 「完了」も「無い」も証拠で | AI の言葉 2 つと、それぞれを受け止める `/ndf:quality-gates`・`/ndf:investigation-rules` の対応 | 台本 14 |
| 15 | やるべきことを整理し続ける | 導入したプロジェクトの Issue の一覧を現状に保つ 3 つの Skill の流れと、何の数かを添えた棚卸しの数値 2 つ(56%・49 件) | 台本 15(棚卸しの記録と 2026-10-17 の調査) |
| 15 | やるべきことを整理し続ける | 導入したプロジェクトの Issue の一覧を現状に保つ 3 つのスキルの流れと、何の数かを添えた棚卸しの数値 2 つ(56%・49 件) | 台本 15(棚卸しの記録と 2026-10-17 の調査) |
| 16 | そのほかの特徴的な機能 | estimate・release・hook の、何をするかと要点の表 | 台本 16 |
| 17 | 事例: ほかのプロジェクトでも動く | 4 つのプロジェクトの種類と結果の表。インフラの注記(社内ツールの移行と重なる)を表の中に残す | 台本 17、事例の材料(インフラ・業務システム・機械学習と価格推定) |
| 18 | 事例から分かった 2 つのこと | 詰まりが次の版で直る例(17 件の Issue と 3 つの前提の違い)と、プロジェクトごとに足したルールの表 | 台本 18、事例の材料 |
Expand All @@ -55,7 +55,7 @@

## 尺

`node slides/lib/script-time.js script.md --limit 35` の出力(350 字/分)。合計 4,957 字・14 分 10 秒で、
`node slides/lib/script-time.js script.md --limit 35` の出力(350 字/分)。合計 4,943 字・14 分 07 秒で、
持ち時間(30〜35 分)に収まる。似たページを 2 組まとめた(まとめる前の台本の 10・11 ページと 12・13 ページ)。

| # | 見出し | 字数 | 尺(秒) | 配分(秒) |
Expand All @@ -64,9 +64,9 @@
| 2 | AI に同じことを何度も言っていませんか | 142 | 24.3 | — |
| 3 | CLAUDE.md への追記だけでは足りない理由 | 160 | 27.4 | — |
| 4 | スキルとプラグイン | 261 | 44.7 | — |
| 5 | NDF: 1 人の開発スタイルをプラグインにした | 130 | 22.3 | — |
| 5 | NDF: 1 人の開発スタイルをプラグインにした | 128 | 21.9 | — |
| 6 | NDF の全体像: マイルストーンを渡せば、スプリントとして並列に進む | 316 | 54.2 | — |
| 7 | /ndf:development-workflow — 変更の種類でワークフローを切り替える | 283 | 48.5 | — |
| 7 | /ndf:development-workflow — 変更の種類でワークフローを切り替える | 281 | 48.2 | — |
| 8 | standard モードの全体の流れ | 277 | 47.5 | — |
| 9 | 実績のある開発技法を、AI が守れる形で組み込む — DDD・テストファースト・アジャイル | 381 | 65.3 | — |
| 10 | /ndf:requirements-design・/ndf:design・/ndf:document-restructuring — コードより先に文書を書き、読み手の順に並べる | 222 | 38.1 | — |
Expand All @@ -79,12 +79,12 @@
| 17 | 事例: 他のプロジェクトでも動く | 328 | 56.2 | — |
| 18 | 事例から分かったこと: 詰まったところが次のバージョンに、ルールはプロジェクトごとに違う | 244 | 41.8 | — |
| 19 | だから「フォークして自分用に」 | 225 | 38.6 | — |
| 20 | 始め方と育て方 | 314 | 53.8 | — |
| 21 | まとめ: 明日からの 3 ステップ | 177 | 30.3 | — |
| 合計 | 21 ページ(350 字/分) | 4957 | 849.7(14分10秒) | — |
| 20 | 始め方と育て方 | 308 | 52.8 | — |
| 21 | まとめ: 明日からの 3 ステップ | 173 | 29.7 | — |
| 合計 | 21 ページ(350 字/分) | 4943 | 847.4(14分07秒) | — |

## ページに収まらない読み上げの扱い

読み上げはスピーカーノートに全文が入る。ページには読み上げの要点だけを置き、例(6 ページの直前のリリース、
15 ページの「放っておくと…」)は注へ回した。ページの見出しは台本の見出しと別に、そのページの結論を短く書いた
(目安 20 字以内)。Skill を紹介するページ(7・10・11・14・15)は、Skill 名と何をするものかをリードか箱の見出しに置いた。
(目安 20 字以内)。スキルを紹介するページ(7・10・11・14・15)は、スキル名と何をするものかをリードか箱の見出しに置いた。
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
| パート | ページ | 問い |
| --- | --- | --- |
| 1. 課題 | 1〜4 | AI に同じことを何度も言っていないか。なぜ CLAUDE.md への追記では足りないのか |
| 2. NDF の機能 | 5〜16 | 自分のやり方をプラグインにすると何ができるのか(ワークフロー全体・組み込んだ開発技法・主な Skill) |
| 2. NDF の機能 | 5〜16 | 自分のやり方をプラグインにすると何ができるのか(ワークフロー全体・組み込んだ開発技法・主なスキル) |
| 3. 事例 | 17〜18 | 他のプロジェクトでも動くのか |
| 4. 転換と実践 | 19〜20 | なぜフォークして自分用にするのか。どう始めて、どう育てるか |
| 5. まとめ | 21 | 明日から何をするか |
Expand All @@ -37,15 +37,15 @@

## 5. NDF: 1 人の開発スタイルをプラグインにした

> NDF は、私の開発スタイルをプラグインにしたものです。GitHub で公開しています。2026 年 4 月に開発を始め、半年で 102 回リリース。Skill は 48 個、4 つのランタイムに対応し、自分以外の 10 のリポジトリにも導入されています。ほぼ 1 人と AI で開発しました。
> NDF は、私の開発スタイルをプラグインにしたものです。GitHub で公開しています。2026 年 4 月に開発を始め、半年で 102 回リリース。スキルは 48 個、4 つのランタイムに対応し、自分以外の 10 のリポジトリにも導入されています。ほぼ 1 人と AI で開発しました。

## 6. NDF の全体像: マイルストーンを渡せば、スプリントとして並列に進む

> 実際の使い方は、Issue を 1 つずつ渡すのではなく、マイルストーン単位でまとめて渡します。AI が触る場所と依存関係から Issue をグループに分け、スプリントとして並列に、要件定義・設計・実装・レビュー・テスト・リリースまで進めます。例えば直前のリリースでは、致命的な Issue 18 件を 2 つのスプリントに分け、1 つのスプリントの中では 3 つのグループの設計と実装を並列に進めました。人が判断するのは 2 か所だけ。ゲート 1 は設計の承認(スプリントの設計 PR をまとめて 1 回)、ゲート 2 は本番リリースの承認(開発版で確かめた後に 1 回)です。どちらの承認にも、決めたこと・未検証の点・判断の根拠がそろって届くので、問い直さずに 1 回で決められます。

## 7. /ndf:development-workflow — 変更の種類でワークフローを切り替える

> 最初に動くのが development-workflow です。すべての変更にフルのワークフローを課すと遅くなるので、まず変更を 5 つのモードに分類します。light は文言や設定などの局所的な変更、operation はコードを変えずに外部の状態を変える作業、standard は機能追加やバグ修正、legacy-refactor はテストの薄いコードのリファクタリング、documentation は提案書や報告書などのビジネス文書です。モードごとに通る Skill が表で決まっていて、light なら実装してレビューするだけ、standard なら要件定義から振り返りまで通ります。
> 最初に動くのが development-workflow です。すべての変更にフルのワークフローを課すと遅くなるので、まず変更を 5 つのモードに分類します。light は文言や設定などの局所的な変更、operation はコードを変えずに外部の状態を変える作業、standard は機能追加やバグ修正、legacy-refactor はテストの薄いコードのリファクタリング、documentation は提案書や報告書などのビジネス文書です。モードごとに通るスキルが表で決まっていて、light なら実装してレビューするだけ、standard なら要件定義から振り返りまで通ります。

## 8. standard モードの全体の流れ

Expand Down Expand Up @@ -97,8 +97,8 @@

## 20. 始め方と育て方

> 始め方は 3 ステップです。まずフォークして、プラグイン名とマーケットプレイス名を自分のものに変え、自分のリポジトリからインストールします。次に削ります。配布する Skill はマニフェストで決まるので、使わない Skill は外すだけ。どれを残すかはセッションのログから呼び出し回数を計測して決めます。最後に育てます。同じ指摘を 2 回したら、手順なら Skill、決まった処理ならスクリプト、必ず守らせたいなら hook にします。気をつける点は、description を増やしすぎないこと(すべてのセッションで読み込まれる)、思いつきは experimental に置いて効いたものだけ本体に移すこと、開発版を自分で使ってから正式版にすることです。
> 始め方は 3 ステップです。まずフォークして、プラグイン名とマーケットプレイス名を自分のものに変え、自分のリポジトリからインストールします。次に削ります。配布するスキルはマニフェストで決まるので、使わないスキルは外すだけ。どれを残すかはセッションのログから呼び出し回数を計測して決めます。最後に育てます。同じ指摘を 2 回したら、手順ならスキル、決まった処理ならスクリプト、必ず守らせたいなら hook にします。気をつける点は、description を増やしすぎないこと(すべてのセッションで読み込まれる)、思いつきは experimental に置いて効いたものだけ本体に移すこと、開発版を自分で使ってから正式版にすることです。

## 21. まとめ: 明日からの 3 ステップ

> AI に自分のやり方を教えるのは 1 回でよい。プラグインにして、フォークして育ててください。明日からの 3 ステップは、1. ai-plugins をフォークして自分の名前でインストールする、2. 使わない Skill を外す、3. 同じ指摘を 2 回したら Skill にする。リポジトリは github.com/devbasex/ai-plugins です。ありがとうございました。
> AI に自分のやり方を教えるのは 1 回でよい。プラグインにして、フォークして育ててください。明日からの 3 ステップは、1. ai-plugins をフォークして自分の名前でインストールする、2. 使わないスキルを外す、3. 同じ指摘を 2 回したらスキルにする。リポジトリは github.com/devbasex/ai-plugins です。ありがとうございました。
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ run(__dirname, { script: SCRIPT, title: "独自プラグイン開発の薦め",
["Claude Code: Skills", "https://code.claude.com/docs/ja/skills"],
["プラグインマーケットプレイス", "https://code.claude.com/docs/ja/plugin-marketplaces"],
["Agent Skills の紹介(Engineering Blog)", "https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills"],
["公式 Skill の例(anthropics/skills)", "https://github.com/anthropics/skills"],
["公式スキルの例(anthropics/skills)", "https://github.com/anthropics/skills"],
["OpenAI(Codex)"],
["Codex: Skills", "https://developers.openai.com/codex/skills"],
["Codex: Plugins", "https://developers.openai.com/codex/plugins"],
Expand All @@ -139,7 +139,7 @@ run(__dirname, { script: SCRIPT, title: "独自プラグイン開発の薦め",
s = d.page("NDF: 自分のやり方をプラグインに", "GitHub で公開。ほぼ 1 人と AI で開発");
[
["102", "回", "リリース(半年)"],
["48", "個", "Skill"],
["48", "個", "スキル"],
["4", "つ", "ランタイム"],
["10", "リポジトリ", "自分以外へ導入"],
].forEach((r, i) => {
Expand Down Expand Up @@ -368,14 +368,14 @@ run(__dirname, { script: SCRIPT, title: "独自プラグイン開発の薦め",
s = d.page("始め方と育て方", "フォークする → 削る → 育てる");
[
["1. フォークする", ["名前を自分のものに", "自分のリポジトリから導入"]],
["2. 削る", ["使わない Skill は外す", "残すかは呼び出し回数で"]],
["3. 育てる", ["同じ指摘を 2 回したら形に", "手順 → Skill", "決まった処理 → スクリプト", "必ず守らせる → hook"]],
["2. 削る", ["使わないスキルは外す", "残すかは呼び出し回数で"]],
["3. 育てる", ["同じ指摘を 2 回したら形に", "手順 → スキル", "決まった処理 → スクリプト", "必ず守らせる → hook"]],
].forEach((r, i) => {
const c = cols(3)[i];
card(d, s, c.x, 1.42, c.w, 1.9, r[0], bullets(r[1], 13.5), "accentSoft", { headSize: 14 });
});
d.callout(s, 3.5, 1.04, "caution", "気をつける点", bullets([
"description(Skill の説明文)は最小限",
"description(スキルの説明文)は最小限",
"思いつきは experimental で試す",
"開発版を使ってから正式版に",
], 10.5));
Expand All @@ -384,8 +384,8 @@ run(__dirname, { script: SCRIPT, title: "独自プラグイン開発の薦め",
s = d.page("まとめ: 明日からの 3 ステップ", "教えるのは 1 回。プラグインにして、フォークして育てる");
[
["1", "ai-plugins をフォークして\n自分の名前でインストール"],
["2", "使わない Skill を外す"],
["3", "同じ指摘を 2 回したら\nSkill にする"],
["2", "使わないスキルを外す"],
["3", "同じ指摘を 2 回したら\nスキルにする"],
].forEach((r, i) => {
const c = cols(3)[i];
d.box(s, c.x, 1.5, c.w, 2.0, "panel1", false);
Expand Down
Loading