ADR-0035 効果の入れ物を作用の列に一本化する
| 状態 | accepted |
| 決定日 | 2026-08-29 |
| 区分 | アーキテクチャ |
| 置き換え元 | ADR-0009 |
背景
ADR-0009 は、効果の入れ物を決めた。効果は PageEffect という単一のスロットに収まり、深さだけが2段階ある — 通常の効果はデータ上で効果 Resource を並べるだけ、ルールを曲げる効果だけがサブクラスを1本持つ。
その後 ADR-0030 が、入れ物の中身を「状態変数への作用の列」として定義した。ADR-0030 は執筆時点で「ADR-0009 は置き換えられていない」と判断している。 入れ物と中身は別の決定であり、両立すると見たためである。
その判断のあと、2つのことが起きた。
1. 作用の文法が、想定より広く書けることが分かった。 ADR-0030 は演算に「抑制」(刻の更新を行わせない)と「代入」「領域への追加」を含めており、ADR-0009 が「サブクラスを書く場面」として挙げていたルールを曲げる効果の多くが、データだけで書ける。 ADR-0030 自身が「サブクラスを書く場面は減る」と観測している。
2. 効果の集合に名前を付けないことにした。 打撃・遠射・加護・手繰り・裁断といった通称は、ADR-0030 で「よく使う組み合わせに付いた通称」へ格下げされていたが、そもそも何が「よく使う組み合わせ」なのかは、プレイ体験を確かめるまで決められない。 分類が要るようになってから付ければよい。
この2つ目が、入れ物の議論に効く。名前が無いものは、クラス名にもできない。 StrikeEffect のような型名は、格下げされたはずの語彙をコードの側で復活させ、そこから逆流して仕様の語彙になる。
結果として、ADR-0009 の「2段階の深さ」は上の段(サブクラス)が例外的にしか使われず、下の段(データで並べる)が作用の列そのものになった。 2段階という構造を維持する理由が残っていない。
決定
面が持つのは作用の列だけである。効果という単位の入れ物を設けない。
- 効果の単位は作用である。 ADR-0030 の6項(対象変数・演算・基準値・値の寿命・発動タイミング・繰り返し範囲)を持つデータであり、型ではない
- 「効果1つ = Resource 1つ / クラス1つ」という対応を作らない。 打点が2発あるページは敵HPへの作用を2つ並べるのであって、2つの効果クラスを持つのではない
- よく使う作用の組み合わせに名前を付けない。 分類が必要になった時点で付ける。それはプレイ体験を確かめてからでないと決められない
- 文法で表現できない振る舞いが出てきたときだけ、コードを書く。 これは既定ではなく例外であり、書くたびに「なぜ文法で書けないのか」を残す
ADR-0009 の逃げ道そのものは残す。 消したのは「2段階を既定の構造として設計する」ことであって、「文法の外へ出る手段」ではない。
却下した案
| 案 | 却下理由 |
|---|---|
ADR-0009 を accepted のまま残し、入れ物と中身が共存すると整理する | 〜Effect という型の単位が残る限り、効果に名前が要る。格下げしたはずの語彙が型名として復活し、そこから仕様へ逆流する |
ADR-0009 の状態を superseded にし、置き換え先を ADR-0030 にする | ADR-0030 の本文が「ADR-0009 は置き換えられていない」と明記している。 ADR は不変なのでその記述は直せず、置き換え先が置き換えを否定している状態になる。読み手が必ずつまずく |
| 逃げ道(文法の外へ出る手段)も同時に落とし、作用の列だけに限定する | 実装は単純になるが、「これだけは書けない」が出た時点でもう一本 ADR が要る。いま分かっていないことのために選択肢を捨てる理由がない |
| 効果の通称を残したまま、型の単位だけ変える | 名前があれば必ず型かカテゴリに使われる。使わないと決めた語彙は、置いておくと使われる |
影響
〜Effectは既定の命名ではなくなった。 例外的に書くクラスにだけ付く(コーディング規約)- 効果の集合を指す通称が設計ドキュメントから消えた。 打撃・遠射・加護・手繰り・繰越・貯歩・増歩・回帰・加筆・裁断が該当する。仕様は「何をする作用か」で書く
- ADR-0010 の「効果 Resource 合成」は、作用の列を
.tresに持つことを指すようになった。.tresを正とする決定そのものは変わらない - データの契約 の「恒久アビリティと古物商が効果の合成を持つようになったらページ効果と同じ方式へ移す」という条件が、作用の列へ移すという意味になった
- ADR-0030 の「サブクラスを書く場面は減る」という観測が、既定と例外の関係として確定した。 減るのではなく、例外になった
- プレイテストの前に効果を分類しないことが、明示的な制約になった。 カテゴリを付けたくなったら、それは新しい決定として記録する