seiei-sogen. dev
ブログ一覧へ戻る

仏教アビダンマの四相分析をClaude Code / Codex CLIのSkillにした

上座部アビダンマの四相分析(lakkhaṇa / rasa / paccupaṭṭhāna / padaṭṭhāna)を Claude Code skills / Codex CLI skills として実装した。古典的な認識分析の枠組みを AI コーディングエージェントの Skill 設計に移植する試み。

seiei-sogen
seiei-sogen

はじめに

上座部アビダンマの 四相分析(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 / SolidJS createEffect を分析するとどうなるか
  • どんな人に試してほしいか

四相分析とは何か

四相分析は、上座部仏教のアビダンマで使われる分析枠組みのひとつだ。

ここでは、仏教教義として厳密に論じるのではなく、概念や現象を整理するための分析フレームとして扱う。

このリポジトリでは、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 出力する。

出力構造は固定している。

  1. 対象の言い換え
  2. 要約表
  3. 詳説 4 セクション
    • 特相
    • 作用
    • 現れ方
    • 近因
  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.yamlpolicy.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 として設計している。

出力長モード

入力中の長さシグナルから、出力長を自動で切り替える。

入力例モード各詳説の文数
「忙しいので短く嫉妬を四相分析して」short1〜2 文、または詳説省略
「嫉妬を四相分析して」normal3〜5 文
詳しく、納得感ある感じで嫉妬を四相分析して」detailed5〜8 文

ここで大事なのは、長さと構造を分けていることだ。

短くしても、四相の構造は残す。 詳しくしても、見出しや表の構造は崩さない。

設計上のポイント

1. 明示呼び出しのみ

一番大事にしたのは、勝手に起動しないことだ。

この Skill は、普段のコーディング作業に常時混ざってほしいものではない。 必要なときにだけ、分析フレームとして呼び出せればよい。

そのため、Claude Code 側では disable-model-invocation: true を使い、Codex CLI 側では agents/openai.yamlpolicy.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 では、入力を次のカテゴリに分ける。

  • medical
  • legal
  • religious
  • others-eval
  • normal

該当する場合は、冒頭に警告ブロックを置く。 そのうえで、対象を「観察可能な現象」として捉え直してから分析する。

ここで狙っているのは、拒否と断定のあいだにある第三の道だ。

断定しない。だが、観察は助ける。

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 を自動的に依存として追跡し、それらの変化で再実行されること。
作用rasaSignal グラフ上にリアクティブノードとして登録され、依存変化時にエフェクト本体を再実行して外部状態と Signal を同期させる。
現れ方paccupaṭṭhāna「依存配列を書かなくていい」軽さや、コンポーネントが一度しか実行されない世界観への馴染みとして現れる。
近因padaṭṭhānafine-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 エージェントに渡せるのは、コマンドや手順だけではない。 世界の切り方も渡せる。

リポジトリ: seiei-sogen/lakkhanadi-catukka-analyzer