仏教アビダンマの四相分析をClaude Code / Codex CLIのSkillにした
上座部アビダンマの四相分析(lakkhaṇa / rasa / paccupaṭṭhāna / padaṭṭhāna)を Claude Code skills / Codex CLI skills として実装した。古典的な認識分析の枠組みを AI コーディングエージェントの Skill 設計に移植する試み。
はじめに
上座部アビダンマの 四相分析(lakkhaṇa/rasa/paccupaṭṭhāna/padaṭṭhāna)を、Claude Code skills / Codex CLI skills 向けの Skill として実装した。
リポジトリはこちら: seiei-sogen/lakkhanadi-catukka-analyzer
これは、任意の対象を次の 4 つの観点で日本語に整理する Skill だ。
- それを他から見分ける特徴は何か
- それは何をするか
- 経験者にとってどう現れるか
- それを直前で支えている条件は何か
対象は、仏教用語に限らない。感情、文章、技術概念、現象、ソフトウェア設計上の概念にも使える。
たとえば「焦り」「キャッシュミス」「React の useEffect」「SolidJS の createEffect」のような対象を、4 つの観点に分けて観察的に言語化できる。
この記事で紹介するのは、単なる仏教ネタではない。
古典的な認識分析の枠組みを、AI コーディングエージェントの Skill 設計に移植する試みだ。
AI エージェントに必要なのは、賢いプロンプトだけではない。 「対象をどう切るか」という分析の型も、Skill として持たせることができる。
この記事では、次の順で紹介する。
- 四相分析とは何か
- このリポジトリで何ができるか
- Claude Code / Codex CLI 向けにどう設計したか
- React
useEffect/ SolidJScreateEffectを分析するとどうなるか - どんな人に試してほしいか
四相分析とは何か
四相分析は、上座部仏教のアビダンマで使われる分析枠組みのひとつだ。
ここでは、仏教教義として厳密に論じるのではなく、概念や現象を整理するための分析フレームとして扱う。
このリポジトリでは、4 つの語を次のように扱っている。
| パーリ語 | 英訳 | 現代語 | 観点 |
|---|---|---|---|
| lakkhaṇa(ラッカーナ) | characteristic | 特相・特徴 | それを他から見分ける本質的なしるしは何か |
| rasa(ラサ) | function | 作用・機能 | それは何をするか、何のはたらきを持つか |
| paccupaṭṭhāna(パチュパッターナ) | manifestation | 現れ方・現前 | 経験者にとってそれはどう現れるか |
| padaṭṭhāna(パダッターナ) | proximate cause | 近因・近接原因 | それを直前で支えている近い条件は何か |
ざっくり言えば、こういうことだ。
| 観点 | ざっくりした意味 |
|---|---|
| lakkhaṇa | 見分け方 |
| rasa | はたらき |
| paccupaṭṭhāna | 体験としての立ち上がり方 |
| padaṭṭhāna | いまそれを支えている近い条件 |
この枠組みのおもしろいところは、対象を一語でラベリングして終わらせない点にある。
たとえば「焦り」と言っても、それだけでは粗い。
- 焦りは、何によって焦りだと見分けられるのか
- 焦りは、心や行動に何をするのか
- 焦りは、身体感覚や世界の見え方としてどう現れるのか
- 焦りは、どんな近い条件によって生じているのか
このように、同じ対象を 4 つの角度から見る。 すると、「焦っている」という雑な自己理解が、少しだけ観察可能な形にほどける。
この Skill は、その分析フレームを AI エージェントから呼び出せるようにしたものだ。
作ったもの
作ったリポジトリは lakkhanadi-catukka-analyzer(ラッカーナディ チャトゥッカ アナライザー) という。
もともとは、自分用に ChatGPT の GPTs として運用していた四相分析プロンプトがあった。 それを、Claude Code skills と Codex CLI skills の両方で動く形に移植・再設計した。
Skill 本体は次にある。
skills/lakkhanadi-catukka/SKILL.md
この SKILL.md に、役割、処理フロー、出力テンプレート、安全性の扱い、長さモード、Pali 表記正規化などを入れている。
特徴は、かなり素朴だ。
- Markdown プロンプト主体
- 外部ツール呼び出しに依存しない
- Claude Code skills / Codex CLI skills の両方に配置できる
- 明示的に呼ばれたときだけ起動する
- 仏教古典として断定できない対象は「応用」として扱う
「古典の分析フレームを、AI エージェントが使える小さな道具にする」ことを狙っている。
この Skill でできること
この Skill は、任意の対象を四相分析の形で Markdown 出力する。
出力構造は固定している。
- 対象の言い換え
- 要約表
- 詳説 4 セクション
- 特相
- 作用
- 現れ方
- 近因
- 一言でまとめると
ポイントは、短い出力でも 4 項目の構造を崩さないことだ。
「短く」と言われた場合でも、要約表の 4 行は維持する。 文章量は減らしても、分析の骨格は落とさない。
対応プラットフォーム
Claude Code skills と Codex CLI skills の両方に、同じ SKILL.md を配置できるようにしている。
| プラットフォーム | 配置パス | 暗黙呼び出し抑止 |
|---|---|---|
| Claude Code skills | ~/.claude/skills/lakkhanadi-catukka/ または .claude/skills/lakkhanadi-catukka/ | disable-model-invocation: true |
| Codex CLI skills | ~/.agents/skills/lakkhanadi-catukka/ または .agents/skills/lakkhanadi-catukka/ | agents/openai.yaml の policy.allow_implicit_invocation: false |
この Skill では、暗黙起動を抑止することを重視している。
普通にコーディング相談をしているときに、突然「四相分析」が始まると困る。
だから、ユーザーが明示的に lakkhanadi-catukka や「四相分析」と指定したときだけ起動する設計にしている。
配置方法
クローンしたうえで、シンボリックリンクで配置する想定だ。
Claude Code skills の場合
# 個人スコープ
ln -s "$(pwd)/skills/lakkhanadi-catukka" ~/.claude/skills/lakkhanadi-catukka
# プロジェクトスコープ
mkdir -p .claude/skills
ln -s "$(pwd)/skills/lakkhanadi-catukka" .claude/skills/lakkhanadi-catukka
Codex CLI skills の場合
# 個人スコープ
mkdir -p ~/.agents/skills
ln -s "$(pwd)/skills/lakkhanadi-catukka" ~/.agents/skills/lakkhanadi-catukka
# プロジェクトスコープ
mkdir -p .agents/skills
ln -s "$(pwd)/skills/lakkhanadi-catukka" .agents/skills/lakkhanadi-catukka
使い方
明示的に呼び出す。
lakkhanadi-catukka で pathavī-dhātu を分析して
四相分析を実行して: 嫉妬
lakkhaṇa rasa paccupaṭṭhāna padaṭṭhāna で焦りを分析
技術概念にも使える。
/lakkhanadi-catukka ReactのuseEffectを四相分析して。
/lakkhanadi-catukka SolidJSのcreateEffectを四相分析して。
要するに、コーディング作業の流れに不意に割り込まない Skill として設計している。
出力長モード
入力中の長さシグナルから、出力長を自動で切り替える。
| 入力例 | モード | 各詳説の文数 |
|---|---|---|
| 「忙しいので短く嫉妬を四相分析して」 | short | 1〜2 文、または詳説省略 |
| 「嫉妬を四相分析して」 | normal | 3〜5 文 |
| 「詳しく、納得感ある感じで嫉妬を四相分析して」 | detailed | 5〜8 文 |
ここで大事なのは、長さと構造を分けていることだ。
短くしても、四相の構造は残す。 詳しくしても、見出しや表の構造は崩さない。
設計上のポイント
1. 明示呼び出しのみ
一番大事にしたのは、勝手に起動しないことだ。
この Skill は、普段のコーディング作業に常時混ざってほしいものではない。 必要なときにだけ、分析フレームとして呼び出せればよい。
そのため、Claude Code 側では disable-model-invocation: true を使い、Codex CLI 側では agents/openai.yaml で policy.allow_implicit_invocation: false を設定している。
つまり、次の三層で暗黙起動を抑えている。
- Skill のメタデータ
- ホスト側の設定
- プロンプト本文の指示
2. ツール非依存
この Skill は、外部ツールや API 呼び出しに依存しない。
理由は単純だ。 四相分析そのものは、LLM の言語処理だけで成立するからだ。
3. Pali 表記正規化を二重に持つ
パーリ語の入力は表記揺れが起きやすい。
このリポジトリでは、正規化ルールを 2 箇所に持っている。
skills/lakkhanadi-catukka/SKILL.mdの Pali 表記正規化テーブルskills/lakkhanadi-catukka/scripts/normalize.rsの Rust 補助スクリプト
プロンプトだけで終わらせず、しかし過剰にツール化もしない。 その中間を狙った。
4. 古典と応用を混ぜない
この Skill では、対象を大きく 2 種類に分ける。
canonical: 仏教古典に直接の記述がある対象applied: 現代心理、技術概念、日常的な現象などへの応用
応用トピックの場合は、冒頭に次のようなマーカーを付ける。
四相分析の枠組みを応用すると、…
たとえば useEffect を四相分析するのは面白い。
しかし、それを「仏教古典にそう書いてある」と見せてはいけない。
5. 安全性: 拒否ではなく、観察的に捉え直す
医療、法律、宗教、他者評価のような入力には注意が必要だ。
この Skill では、入力を次のカテゴリに分ける。
medicallegalreligiousothers-evalnormal
該当する場合は、冒頭に警告ブロックを置く。 そのうえで、対象を「観察可能な現象」として捉え直してから分析する。
ここで狙っているのは、拒否と断定のあいだにある第三の道だ。
断定しない。だが、観察は助ける。
6. LLM-as-judge で品質を見る
skills/lakkhanadi-catukka/tests/judge/SKILL_JUDGE.md には、Skill 出力を評価するための judge プロンプトを置いている。
判定は 8 観点で、pass / fail / n/a を返す形にしている。
React useEffect を四相分析するとどうなるか
技術概念に使うと、この記事の狙いが伝わりやすい。
たとえば、React の useEffect を四相分析すると、次のような出力になる。
要約表は、たとえば次のようになる。
| 項目 | パーリ語 | 要約 |
|---|---|---|
| 特相 | lakkhaṇa | レンダリング結果の確定後に、依存配列の差分に応じて副作用処理を発火させる仕組み。 |
| 作用 | rasa | コミット後のタイミングで副作用を実行し、cleanup 関数で前回の副作用を巻き戻すことで、外部世界との状態同期を成し遂げる。 |
| 現れ方 | paccupaṭṭhāna | 「依存配列に何を入れるか」を考える慎重さや、StrictMode の二重実行に戸惑う感覚として現れる。 |
| 近因 | padaṭṭhāna | 宣言的 UI、関数コンポーネント、依存配列 linter、cleanup、StrictMode といった近接条件に支えられる。 |
ここで面白いのは、useEffect を単に「副作用を書く場所」として説明していないことだ。
技術概念を「仕様」だけでなく「経験される現象」として見る。 ここに、四相分析を Skill 化する面白さがある。
SolidJS createEffect を四相分析するとどうなるか
SolidJS の createEffect も同じように分析できる。
要約表は次のような形だ。
| 項目 | パーリ語 | 要約 |
|---|---|---|
| 特相 | lakkhaṇa | 関数本体の実行中に参照された Signal を自動的に依存として追跡し、それらの変化で再実行されること。 |
| 作用 | rasa | Signal グラフ上にリアクティブノードとして登録され、依存変化時にエフェクト本体を再実行して外部状態と Signal を同期させる。 |
| 現れ方 | paccupaṭṭhāna | 「依存配列を書かなくていい」軽さや、コンポーネントが一度しか実行されない世界観への馴染みとして現れる。 |
| 近因 | padaṭṭhāna | fine-grained reactivity、Signal を第一級にした設計、自動依存追跡、onCleanup、コンパイル時 JSX 変換といった近接条件に支えられる。 |
React useEffect と並べると、違いが見えやすい。
React useEffect では、依存配列を書く慎重さが前面に出る。
SolidJS createEffect では、実行中に参照された Signal が自動追跡される軽さが前面に出る。
つまり、四相分析を使うと、単なる機能比較ではなく、次のような差分を見られる。
- 何がその API をその API たらしめているのか
- それは何を成し遂げるのか
- 開発者にとってどう感じられるのか
- どんな設計上の条件によって支えられているのか
使ってみてほしい場面
感情や状態を言語化したいとき
「焦り」「嫉妬」「集中」「燃え尽き」のような言葉は、名前だけならすぐ出る。 しかし、実際にそれが自分の中でどう働いているかを書くのは難しい。
四相分析を使うと、次のように分けて見られる。
- 何によってそれと見分けられるか
- それは心身に何をしているか
- 体験としてどう現れているか
- どんな近い条件に支えられているか
これは、診断や断定ではなく、観察の補助になる。
技術概念を現象として捉え直したいとき
技術概念にも使える。
たとえば、次のような対象だ。
- キャッシュミス
- リトライストーム
- フィーチャーフラグの腐敗
- useEffect
- createEffect
- 型エラー
- デプロイ不安
Skill 設計のサンプルとして読みたいとき
このリポジトリは、AI コーディングエージェント向け Skill 設計のサンプルとしても読める。
入っている要素は、たとえば次のようなものだ。
- 明示呼び出しのみ
- 暗黙起動の抑止
- ツール非依存
- 出力テンプレートの固定
- 長さモードの自動切替
- Pali 表記正規化
- 古典と応用の切り分け
- 安全性カテゴリと観察的な捉え直し
- LLM-as-judge による品質評価
向いていない用途
逆に、次の用途には向いていない。
- 仏教教義の正統性を判定する
- 精神科的な診断をする
- 法的アドバイスをする
- 宗教的権威として断定する
- 他者を評価・断罪する
この Skill は、断定のための道具ではない。 観察のための道具だ。
まとめ
lakkhanadi-catukka-analyzer は、上座部アビダンマの四相分析を Claude Code skills / Codex CLI skills 向けの Skill として実装したものだ。
個人的に面白いと思っているのは、仏教用語そのものよりも、古典的な分析の型を AI エージェントの Skill として移植できるという点だ。
AI エージェントに渡せるのは、コマンドや手順だけではない。 世界の切り方も渡せる。