メインコンテンツまでスキップ

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 の「サブクラスを書く場面は減る」という観測が、既定と例外の関係として確定した。 減るのではなく、例外になった
  • プレイテストの前に効果を分類しないことが、明示的な制約になった。 カテゴリを付けたくなったら、それは新しい決定として記録する