一つのサービスが十年間使われているとしても、その十年間に同じ構造が保存されていたとは限らない。処理系が交換され、依存する外部サービスが入れ替わり、利用者の要求が増え、運用担当者の判断も更新される。それでも利用者が必要とする機能が継続して提供されていれば、そのサービスには持続性がある。反対に、プログラムを一行も変更しなくても、外部の認証方式が廃止されれば、利用者は従来の機能を使えなくなるかもしれない。前者では構造の変化と機能の持続が両立し、後者では構造の保存と機能の喪失が同時に生じている。構造がどれだけ変化したかという問いと、その変化の中で何が維持されたかという問いは、別々に検討する必要がある。
この区別は、サービスの同一性をどこに求めるかという、さらに根本的な問題を含んでいる。あるサービスが同じ名称を使い、同じ利用者に提供されていても、内部の構成要素はすべて交換されているかもしれない。逆に、構成要素の大半が保存されていても、利用目的が失われれば、従来と同じサービスとして扱う意味は薄れる。ここでは、物理的あるいは技術的な構成の同一性、提供される機能の同一性、利用者との関係の継続性が、それぞれ異なる基準となる。どの基準を採用するかによって、同じ状態遷移に対する評価が変わる。そのため、持続性は対象に最初から備わっている単一の属性としてではなく、何を対象として識別し、何を保存すべき性質と定めるかによって具体化される。
既稿「無常的世界をどう運用するか」は、仏教思想における無常・縁起と構造振動モデルとの間に、固定された実体よりも条件に依存する生成と持続を重視する共通の問題意識を見いだした。その一方で、仏教的な洞察と、実務上の変更を設計する操作理論との目的と検証形式を区別した[1]。この接続を考え直すと、無常の理解は、物事が時間とともに変化するという観察にとどまらない。ある状態が成立していること自体が、複数の条件と関係に依存しているという理解を含む。ある条件が維持されている間は、現象も安定しているように見える。しかし、その安定は成立条件から独立した性質ではなく、条件の組み合わせによって支えられている。
例えば、認証機能が正常に動作している状態は、認証処理のプログラムだけで成立しているわけではない。利用者の認証情報、時刻の整合性、外部の認証基盤、通信経路、アクセス権限などが、必要な条件を満たすことで成立している。プログラムが同じでも、外部の認証基盤が新しい方式へ移行し、従来の要求を受け付けなくなれば、認証機能は停止する。ここで失われたのはプログラムの構造的な同一性ではなく、プログラムと環境の間に成立していた適合関係である。この事例は、機能の成立を内部構造だけに帰属させると、障害の原因を誤って特定する可能性があることを示している。依存する条件を明らかにすることによって、構造を変更すべき場合と、環境や接続条件を修正すべき場合を区別できる。
さらに、構造を観測し、変更を決定する主体自身も、この条件依存性の中に位置づけられる。運用担当者が何を障害と判断するかは、監視指標、利用者からの報告、過去の障害経験、組織内の役割、変更権限などに依存する。ある時点では機能の不足を避けるために例外経路を増やす判断が合理的でも、運用実績によって例外経路の使用頻度と維持費用が明らかになれば、同じ担当者が削除を選択することがある。判断の反転は、必ずしも矛盾や判断能力の欠如を意味しない。対象の状態だけでなく、利用可能な情報と評価条件が更新されることで、選択すべき操作も更新される。このように考えると、構造振動モデルが記述する変化には、対象の構造だけでなく、観測と判断を通じて次の構造を形成する過程も関係している。
ただし、判断が条件に依存して成立するという事実から、あらゆる判断が等しく適切であるという結論は導かれない。例えば、処理能力を増やす操作は応答遅延を解消する可能性がある一方、構成の複雑化によって復旧時間を延ばす可能性もある。どの操作が適切かを判断するには、維持すべき機能、許容される損失、更新に必要な費用、変更を実施できる権限、観測結果の信頼性を具体的に定める必要がある。条件依存性を認めることは判断基準を放棄することではなく、判断の成立条件と適用範囲を明らかにすることにつながる。
また、何を維持すべき機能として定めるかという判断自体も、時間とともに更新される。十年前には十分だった応答性能が、利用者の増加や利用目的の拡大によって現在では不足することがある。反対に、過去の要求に応えるために設けられた機能が、現在では誰にも利用されず、維持費用だけを生じさせることもある。そのため、運用の持続性を評価するときには、過去の機能をすべて保存することと、現在必要な機能を継続して提供することを区別する必要がある。要求の更新が正当なものであれば、以前の構造や機能を削除することも、サービスの継続性を支える操作になりうる。
この問題をさらに掘り下げると、言語や指標の役割も無視できなくなる。「安定している」「同じサービスである」「改善した」という判断は、何らかの観測結果を特定の概念へまとめたものである。例えば、月間稼働率が高いサービスでも、重要な利用者だけが繰り返し障害を経験していれば、利用者全体にとって安定しているとは評価しにくい。稼働率という数値が正確であっても、その数値が表現する性質と、実際に維持したい性質が一致するとは限らない。指標が運用上の目標になると、担当者はその指標を改善する操作を選びやすくなるため、観測方法は次の状態を形成する条件にもなる。構造を記述する言葉や測定量について、その対象と限界を確認することが、更新を適切に判断するための条件となる。
無常的な世界との接続を再考するとき、構造振動モデルの数式が果たす役割は、このような関係を検討可能な単位へ分解することにある。構造、環境、観測、介入を区別し、それぞれの状態と更新を記述すれば、構造がどれだけ変化したか、変化がどの依存経路を通じて伝播したか、必要な機能が維持されたかを別々に確認できる。一方、何を望ましい状態とみなすか、どの損失を優先して防ぐか、誰が変更を正当化できるかという問題には、技術的な制御条件とともに目的や責任についての判断が必要となる。変化する世界を理解することと、その世界にどのように介入するかを決めることは、相互に接続しながらも異なる論理を持つ。
1. 無常的な世界を運用するとき、何を持続させるのか
「このシステムは同じシステムである」という判断は、通常、何らかの同一性を前提にしている。しかし、ソフトウェアの構造、実行環境、提供機能、利用者との関係は、それぞれ異なる時間尺度で変化する。ソースコードが同じこと、部品が同じこと、利用者の操作方法が同じこと、必要な機能が同じことは、別々の性質である。ある変更はコードの同一性を破りながら機能を維持し、別の変更はコードを維持しながら機能を失わせる。運用の継続性は、どの性質を保存対象として定め、どの時間範囲で評価するかに依存する。
例えば、同じ名称で十年間提供されているサービスについて、その期間の構成を調査したとする。初期の処理系はすでに廃止され、複数の外部サービスが交換され、実行環境も変更されている。それでも利用者が必要な結果を受け取れていれば、機能上の継続性は成立している。一方、十年間まったく変更されなかったプログラムが、外部の仕様変更によって実行不能になった場合、構造の保存は確認できても、機能上の継続性は失われている。この違いを説明するには、保存された部品の数ではなく、状態を成立させている関係と、その関係が必要な機能へどのようにつながっているかを調べなければならない。
受付、入力検証、処理、記録の四つの部品で構成されるサービスを考える。当初は受付から記録まで直列につながっていたが、要求数の増加に対応して処理部品だけを複数に分けたとする。変更によって部品の数と接続関係が増え、内部構造は以前より複雑になる。しかし、要求を適切に処理し、その結果を返して記録するという機能が維持され、負荷増加に対する処理能力が改善していれば、その変更は運用の継続に寄与している。構造の複雑化が機能の安定化を支える例であり、複雑さの増加そのものを悪化として評価することは適切ではない。
反対に、四つの部品と接続関係をすべて保存したまま、外部サービスが返すデータの形式だけが変更された場合を考える。新しい形式に入力検証が対応できなければ、処理部品まで要求が届かず、利用者への応答が失敗する。内部構造を対象として変更前後を比較すれば、構造差は観測されない。それでもサービスの機能は失われている。直接の原因はデータ形式の不一致であり、その背後には外部サービスの仕様と内部の検証規則との依存関係がある。内部構造の保存と運用上の安定性が一致しないのは、サービスの機能が内部構造と環境条件の組み合わせによって成立しているからである。
さらに、機能が現在維持されている場合でも、将来の変更に対応できるとは限らない。例えば、処理部品を複数に分けることで現在の負荷に対応できたとしても、新しい構成で障害箇所を特定する方法や復旧手順が整備されていなければ、障害発生時の復旧時間が延びる可能性がある。利用者から見た機能の持続性と、運用者から見た構造の更新可能性は、互いに関係しながらも別の条件を持つ。現在の性能が十分であっても、将来必要な変更を安全に実施できるかという観点からは、異なる評価が必要になる。
これらの違いを整理すると、同一性と持続性を判断するときに、保存対象、観測方法、失敗条件を分ける必要があることが分かる。
| 評価対象 | 維持される性質 | 具体例 | 評価上の制約 |
|---|---|---|---|
| 構造の同一性 | 構成要素、接続関係、属性が指定された粒度で保存される。 | プログラムと部品構成を変更せずに運用する。 | 環境条件が変化した場合、同じ構造でも従来の機能を提供できなくなる可能性がある。 |
| 機能の持続性 | 必要な入力に対して、要求された結果を継続して提供できる。 | 処理部品を分割しながら、応答性能を維持する。 | 内部の依存関係や復旧手順が複雑化しても、現在の機能評価には直ちに現れない場合がある。 |
| 環境との適合性 | 外部サービスや実行環境との間で、必要な接続条件が成立する。 | 外部の認証方式やデータ形式の更新に対応する。 | 内部構造を保存していても、外部条件との不一致によって機能が失われる。 |
| 更新可能性 | 要求や環境の変化に応じて、必要な構造変更を実施できる。 | 変更の影響範囲を確認し、必要に応じて元の状態へ復旧できる。 | 現在の機能が正常でも、変更に必要な権限、知識、手順が欠けている場合には将来の維持が困難になる。 |
| 評価基準の継続性 | 同じ評価条件の下で、状態の変化を比較できる。 | 同じ種類の要求と同じ集計方法で、変更前後のエラー率を比較する。 | 入力構成や集計方法が変化すると、構造や機能が同じでも評価値が変化する場合がある。 |
この表で示した性質は、同じ方向へ同時に改善するとは限らない。構造の単純化によって維持費用を削減できても、例外的な入力への対応能力が低下する場合がある。逆に、構造を複雑化することで未知の要求に対応できるようになっても、変更時の確認作業が増える場合がある。評価する性質ごとに望ましい状態が異なるため、構造の増減だけを共通の良否判定として使うことはできない。何を維持し、どの損失を許容するかという判断が、具体的な構造変更の方向を決める。
この関係を数理的に考えるため、時刻 \(t\) における構造を \(S_t\)、環境条件を \(C_t\) とし、必要な機能が満たされるかを評価する関数を \(L(S_t,C_t)\) とする。ここで \(L\) は、要求された性能からの逸脱や機能の不足を、定められた尺度で表した運用上の損失である。値が小さいほど望ましい状態であると定め、許容上限を \(\tau\) とすると、運用上許容できる状態は次の条件で表せる。
\[
L(S_t,C_t)\leq\tau
\]
この式は、構造が固定されていることを要求していない。異なる構造であっても、同じ環境条件の下で必要な機能を満たすなら、どちらも許容される。一方、同じ構造でも環境が変化し、損失が上限を超えれば許容範囲から外れる。先ほどの処理部品の分割例では、構造の変更によって負荷増加に対応し、損失を許容範囲内に維持できる可能性がある。外部認証方式の変更例では、構造を保存したまま環境との適合性が失われ、損失が増加する可能性がある。二つの事例が示す違いを、一つの評価形式で記述できる。
ただし、運用上の損失を一つの数値へ集約する場合には、何をどの重みで評価するかという判断が必要になる。応答性能、正確性、可用性、復旧可能性を統合した数値は便利だが、重み付けによって重大な障害が平均値の中に埋もれる可能性がある。例えば、通常の要求への応答性能が改善した結果、少数の重要な要求が失敗するようになっても、単純な平均損失では改善として集計される場合がある。維持すべき機能が複数あり、それぞれに独立した許容条件が必要なら、評価関数も複数に分けることが適切となる。何を持続させるかという判断は、評価関数の選択を通じて、実際に許容される構造の範囲を決めている。
また、現在の許容条件を満たしていることと、将来も条件を満たし続けられることには差がある。現在の構造が十分な性能を示していても、次の環境変化に対応する操作が存在しなければ、継続性は失われる可能性がある。逆に、現在の構造に余裕が少なくても、状態を正確に観測し、必要な変更を適切な時点で実施できれば、機能を維持できる場合がある。持続性は、ある時点の状態だけでなく、環境変化に応じて取りうる状態遷移と、その遷移を実現する操作にも依存する。
ここには、無常と縁起の思想との具体的な接点がある。現象が条件に依存して成立するという理解に立てば、持続性は条件から切り離された固定的な性質としてではなく、条件の連鎖の中で成立するものとして捉えられる。構造振動モデルでは、この理解に対応する対象を構造と環境に分け、それぞれの状態を観測可能な変数として定義する。そして、必要な機能を維持するために、どの構造を変更し、どの依存関係を調整し、どの操作を許容するかを具体的に検討する。哲学的な条件依存性の理解が、ここでは構造と環境の関係を調べるための視点となり、工学的な状態遷移の定義が、その視点を検証可能な問題へ接続する。
持続するサービスについて、その内部構造が同一であり続けることを要求する必要はない。しかし、構造変更が行われれば、それによって何が維持され、何が失われ、どの条件が新たに必要になったかを確認する必要がある。また、何も変更しなかった場合にも、環境の変化によって既存の成立条件が失われていないかを確認する必要がある。構造を変更した場合と変更しなかった場合の双方に、維持すべき機能についての検証が求められる。この対称性によって、変更の有無を判断の中心に置く見方から、状態の成立条件と更新可能性を中心に置く見方へ進むことができる。
2. 無常と縁起は、変化だけでなく成立条件を問う
2.1. 無常は、観測のたびに変化が起きるという測定規則とは異なる
仏教における諸行無常は、条件づけられた現象が恒常不変の実体として存続するという見方を問い直す。『増支部』の「Uppādāsutta」では、条件づけられたものは無常であり、苦であること、さらに諸法が無我であることが説かれている[2]。ここでは、条件づけられたものの無常性と苦、そして自己として捉えることの問題が結びついている。現象が変化するという認識は、その現象を永続的に所有できるもの、あるいは自己の確固たる基盤として扱うことへの問いにもつながる。無常は時間的な変化の記述であると同時に、変化するものへ恒常性を期待する認識のあり方にも関係している。
この理解を工学的なモデルへ接続する際には、時間の経過によって観測される変化と、現象が成立する条件への依存を区別する必要がある。例えば、あるプログラムを一週間実行し、毎日同じ結果が得られたとする。観測された出力は一定であり、実装も変更されていない。しかし、その出力が得られるのは、入力が適切であり、実行環境が動作し、必要な資源を利用できるという条件が満たされているからである。観測された結果が一定であることは、その結果が成立条件から独立して存在することを意味しない。条件が継続して満たされることで、同じ結果が繰り返し成立していると理解できる。
工学では、こうした状態を一定の時間間隔で観測することが多い。時刻 \(t\) の構造を \(S_t\) とすれば、構造が変化していないという観測結果は、例えば次のように記述される。
\[
S_{t+1}=S_t
\]
この式が表すのは、二つの時点でモデルに記録された構造が一致しているということである。構造に含めた要素と関係が同じであれば、式は成立する。しかし、モデルに含めなかった環境条件、部品の劣化、利用者の要求、運用担当者の知識まで同一であることは保証されない。さらに、二つの観測時点の間に構造が変更され、その後元の状態へ戻った場合にも、両端の状態だけを比較すれば同じ式が成立する。観測値の一致と、その間に何も起きなかったことは異なる命題である。
例えば、受付部品が三週間変更されていないサービスを考える。プログラムの構成、呼び出し関係、設定がすべて同じであっても、認証に用いる証明書の有効期限は三週間分だけ近づいている。利用者の構成が変われば、処理する入力の分布も変わる。担当者が交代すれば、障害に対応する知識や権限の配置も変化する。これらの条件が構造モデルの外側に置かれていれば、モデル上の構造は一定でも、サービスを成立させている条件の組み合わせは更新され続けている。証明書が失効した時点で認証に失敗するなら、その障害は直前のプログラム変更によって生じたものではなく、時間とともに変化した環境条件が許容範囲を外れたことによって生じたものである。
構造振動モデルの観点では、対象をどの粒度で表現するかが測定結果を決める。現実の構造を \(S_t\)、そこから測定可能な特徴を取り出す写像を \(\phi\) とすると、観測に用いる構造表現は次のようになる。
\[
x_t=\phi(S_t)
\]
ここで \(x_t\) は、実際の構造から選択した特徴を数値化した表現である。例えば部品間に接続が存在するかどうかだけを記録すれば、接続の追加と削除は観測できる。一方、接続を通過する要求の頻度や、接続先が応答するまでの時間は、その表現だけでは観測できない。異なる構造 \(S_a\) と \(S_b\) が同じ表現へ写される場合、\(\phi(S_a)=\phi(S_b)\) であっても、現実の構造まで同一であるとは限らない。
これは構造振動モデルで測定する変化量にも関係する。観測された構造の差を用いて振幅を計算する場合、振幅がゼロであるという結果は、その測定方法によって識別できる差がゼロであることを示す。測定対象に含まれない変化の有無については、別の観測が必要となる。したがって、振幅がゼロであることと、現実のあらゆる条件が不変であることを同一視すれば、測定量に本来備わっていない意味を与えることになる。
時間間隔の設定も結果に影響する。一秒ごとに記録した状態と、一日ごとに記録した状態では、同じシステムでも確認できる変化の種類が異なる。例えば、障害によって一時的に処理経路が切り替わり、その後元の経路へ復旧した場合、一日ごとの構造比較では変更が検出されない可能性がある。しかし、その間に利用者が受けた影響は実在する。観測された構造の一致をもって機能の継続性まで判断するには、観測期間全体にわたる機能の記録も必要となる。
こうした測定上の制約は、モデルが扱う対象を限定することで生じる。現実のすべてを一つの状態変数に収めようとすれば、何を測定し、どの結果を比較すればよいのかが不明確になる。対象の境界、記録する属性、観測の時間間隔を定めることで、モデルは具体的な変化を検証できるようになる。同時に、その定義によって捉えられる範囲も確定する。構造の変化について厳密に論じるためには、まず構造として記録したものが何であるかを明確にする必要がある。
無常の思想と数理モデルの間には、ここに重要な違いがある。無常は、条件づけられた現象に恒常的な実体性を見いだす認識を問題にする。一方、構造振動モデルは、定義された状態空間における特定の変化を記述する。数学的なモデルでは固定点が存在することも、一定期間まったく状態が変化しないことも許される。それはモデルが表現する状態遷移の性質であり、条件づけられた現象のあり方についての仏教的な命題と直接矛盾するものではない。両者を接続する意味は、あらゆる時点で変化が起きると主張することよりも、観測された安定が何によって成立しているかを問い直すことにある。
さらに、無常の理解には、変化する現象をどのように受け止めるかという実践上の問題が含まれる。変化を観測できたとしても、その変化を避けるべき損失とみなすか、許容できる更新とみなすか、必要な機能を維持するための操作とみなすかは、観測結果だけでは決まらない。例えば老朽化した部品の交換は構造の同一性を失わせるが、サービスの継続性を支える。反対に、機能を変えずに維持することが、将来の障害を増加させる場合もある。変化の存在を認識することと、その変化に対する態度や操作を選択することの間には、評価と判断の過程がある。
したがって、無常を構造の変化量へ直接置き換えるよりも、構造として観測された状態がどの条件によって成立しているのかを明らかにする方が、操作理論との接続として有効である。構造が一定である場合には、その状態を成立させる条件を調べる。構造が変化した場合には、何がその変化を引き起こし、どの機能が維持され、どの関係が失われたかを調べる。このように、観測された変化と成立条件を分けて検討するところから、縁起の問題へつながる。
2.2. 縁起は、どの条件によって何が成立するかを問う
縁起は、現象の成立を独立した実体の性質だけに帰属させる見方を問い直し、条件による生起として捉える。『相応部』SN 12.20 では、縁起の原理と、縁起によって生じた現象が区別されている。そこでは、生を条件として老いと死が生じることをはじめ、無明から諸行へ至る関係を含む十二支の条件関係が説かれ、条件によって生じたものが無常であり、消滅しうることが示されている[3]。この記述では、条件関係の原理と、その条件によって現れる現象を区別することに意味がある。現象の成立を説明する関係と、実際に成立した現象は、説明上の役割が異なる。
この区別は、構造振動モデルで状態と更新規則を分けることにも対応する。ある時点の構造 \(S_t\) は、その時点で成立している要素と関係の配置を表す。一方、次の構造を決定する更新規則は、現在の構造、環境、観測、介入がどのように作用するかを表す。ある構造が存在していることだけを記録しても、その構造がなぜ成立したのか、どの条件が変化すれば別の構造へ移行するのかは説明されない。状態の記述と、その状態を生じさせる条件の説明を区別することによって、構造の記録を変化の説明へ接続できる。
例えば、あるサービスに処理部品が存在するという事実だけでは、要求が正常に処理されることを説明できない。受付部品が要求を受け取り、入力検証が適切な形式であることを確認し、処理部品へ要求を渡し、実行結果が記録部品へ到達するという関係が必要となる。処理部品自体が正しく実装されていても、受付からの経路が切断されれば要求は届かない。記録部品が正常でも、結果を受け取る関係が失われれば記録は残らない。サービス全体の機能は、部品の個別の性質だけでなく、部品間の関係が成立していることによって実現される。
ただし、縁起の十二支を、そのまま任意のソフトウェアの依存グラフと同一視することはできない。十二支は苦の生起と消滅の理解に関わる特定の教説であり、一般的な部品間の呼び出し順序や通信経路を列挙するために定義されたものではない。工学的な依存グラフとの接点は、成立するものを孤立した要素だけから説明するのではなく、その成立条件と関係を分析するという考え方にある。この共通性によって、対象を要素の一覧として把握する見方から、関係の成立と喪失を調べる見方へ進むことができる。
ここで、条件が存在することと、その条件だけで結果が成立することを区別する必要がある。認証サービスが応答していることは、ログイン成功に必要な条件の一つかもしれない。しかし、利用者が提示した認証情報が誤っていれば、認証サービスが正常でもログインは失敗する。反対に、認証情報が正しくても、通信経路が切断されていればログインできない。ある条件が満たされていることは、ほかの必要条件まで満たされていることを保証しない。
この違いは、必要条件と十分条件によって整理できる。事象 \(F\) が成立するために条件 \(A\) が必要であるとは、\(F\) が成立する場合には必ず \(A\) も成立していることを意味する。一方、\(A\) が \(F\) の十分条件であるとは、\(A\) が成立すれば \(F\) の成立も保証されることを意味する。実際のシステムでは、単独の条件が結果の成立を保証することは限られており、複数の条件の組み合わせによって初めて機能が成立する場合が多い。
| 条件の関係 | 意味 | 認証処理の具体例 | 確認すべきこと |
|---|---|---|---|
| 必要条件 | 結果が成立するために、その条件が満たされている必要がある。 | 外部認証基盤を必ず利用する方式では、認証基盤との通信が成立している必要がある。 | その条件が失われたときに、結果が成立する別の経路が存在するかを確認する。 |
| 十分条件 | 指定された条件が成立すれば、結果の成立が保証される。 | 必要な通信、正当な認証情報、有効な設定などがすべて満たされる場合を、認証成功の条件として定義する。 | 列挙した条件だけで成功を保証できるか、追加の失敗要因が残っていないかを確認する。 |
| 共同条件 | 複数の条件が組み合わさることによって、結果が成立する。 | 認証情報の正当性、通信の成立、認証基盤の応答、設定の整合性が組み合わさって認証が成功する。 | 各条件を個別に確認するだけでなく、条件間の整合性と相互作用を調べる。 |
| 代替条件 | 異なる条件の組み合わせが、同じ結果の成立を可能にする。 | 主認証基盤が利用できない場合に、あらかじめ許可された代替認証経路へ切り替える。 | 各経路の成立条件と、切り替え時に必要な権限や安全性の制約を確認する。 |
| 時間依存条件 | 現在満たされている条件が、時間経過によって失われる可能性がある。 | 有効な証明書も、更新されなければ有効期限の経過によって利用できなくなる。 | 条件が失われる時点と、失われる前に必要な更新操作を確認する。 |
例えば、認証成功に必要な条件を、認証情報の正当性 \(A\)、通信の成立 \(B\)、認証基盤の正常動作 \(C\) とする。説明を単純化し、対象の認証処理について、この三条件の同時成立が成功を保証し、それ以外の失敗要因が存在しないと仮定すれば、認証成功 \(F\) は次のように表せる。
\[
F=A\land B\land C
\]
ここで \(\land\) は、すべての条件が同時に成立することを表す論理積である。\(A\)、\(B\)、\(C\) のどれか一つが偽であれば、\(F\) も偽となる。この単純なモデルでは、三条件はそれぞれ必要条件であり、三条件の組み合わせが十分条件となる。ただし、実際の認証処理に別の条件が存在するなら、それもモデルへ追加する必要がある。数式が正確な説明となる範囲は、条件をどれだけ適切に定義できているかによって決まる。
さらに代替認証経路 \(D\) が存在し、通信経路 \(B\) と認証基盤 \(C\) の組み合わせを代替できる場合には、成立条件を次のように拡張できる。
\[
F=A\land\bigl((B\land C)\lor D\bigr)
\]
\(\lor\) は、いずれか一方が成立すればよいことを表す論理和である。この場合、通常の認証経路が利用できなくても、正当な認証情報 \(A\) と代替経路 \(D\) が利用できれば、認証を成功させられる。ここで代替経路が同等の安全性を満たすことは、別途確認すべき条件である。代替経路を追加する操作は、構造の複雑さを増加させる一方、ある条件が失われても機能を継続できる範囲を広げる。複雑化が機能の維持に寄与する仕組みを、条件の組み合わせとして説明できる。
逆に、運用実績によって代替経路がほとんど使用されていないことが分かった場合、その経路を維持する費用や、認証方式の不一致による危険が問題になることもある。代替経路を削除すれば、構造は単純になるが、通常経路が失われた場合の選択肢も減少する。構造の単純化が適切かどうかは、代替経路が必要になる確率、障害発生時の損失、経路の維持費用、復旧に必要な時間によって判断される。条件の組み合わせを明示することで、変更によって何が失われ、何が維持されるかを具体的に比較できる。
このような条件関係は、すべて同じ種類の依存として扱えるわけではない。ある部品が別の部品を呼び出すという接続関係と、その呼び出しが結果を生じさせる因果関係は区別する必要がある。接続が存在していても、実際にはその経路が使用されていない場合がある。逆に、直接の接続を持たない二つの部品が、共通の資源を消費することで互いに影響する場合もある。例えば、独立した二つの処理系が同じ記録装置を使用していれば、一方の負荷増加によって記録装置が飽和し、もう一方の処理時間が延びる可能性がある。呼び出し関係だけを記録したグラフでは、この共通資源を介した依存を表現できない。
したがって、成立条件を分析する際には、構成要素を結ぶ関係が何を意味するのかを明確にする必要がある。処理の呼び出し、データの受け渡し、資源の共有、権限の委譲、障害の伝播は、いずれも関係として表せるが、その意味は異なる。構造振動モデルで用いるグラフのエッジも、具体的にどの関係を表すかを定めることで初めて解釈できる。呼び出し関係の追加と、共有資源への依存の追加を同じ重みで測定すれば、運用上の影響が異なる変更を同一の変化量として扱ってしまう可能性がある。構造の測定量を適切に設計するには、関係の種類と、測定結果から判断したい性質を対応させる必要がある。
時間的な条件依存性も重要である。ある操作が成立するための条件が現在すべて満たされていても、その条件が必要な時点まで維持されるとは限らない。例えば、認証用証明書の更新が必要であることを把握していても、更新に必要な承認や外部サービスへの登録が期限までに完了しなければ、認証機能は停止する。これは条件の存在だけでなく、条件を維持するための操作と、その操作を実行できる時間的な余裕が必要であることを示している。成立条件の分析は、現在の状態を説明するだけでなく、どの条件がいつ失われ、どの操作で維持できるかという運用上の判断につながる。
ただし、条件依存性を明らかにしただけで、望ましい操作が一意に決まるわけではない。認証の継続性を最優先する場合と、認証方式を単純化して維持費用を減らす場合では、採用する構造が異なりうる。さらに、代替認証経路を使用する権限が認められていなければ、その経路が技術的に利用可能でも、実際の運用では選択できない。状態を成立させる条件と、操作を許容する制度的な条件を合わせて考えることで、何が実行可能な変更であるかを判断できる。
縁起の思想が示す条件依存性と、構造振動モデルの関係表現との間には、こうした具体的な接点がある。現象を成立させる条件を問うことによって、構造の変化を個々の部品の増減だけでなく、関係の成立、維持、喪失として理解できる。さらに、ある関係を維持することが別の関係にどのような影響を及ぼすかを調べれば、局所的な変更が全体へ伝播する経路も検討できる。ただし、仏教における縁起は苦の生起と消滅の理解に関わる教説であり、工学的な依存関係のモデルは、明示された対象と目的に対して具体的な説明を与えるものである。共通するのは条件による成立を重視する視点であり、それぞれの理論が扱う目的と検証方法には違いがある。
この区別を保つことで、無常と縁起を構造振動モデルへ接続する意義が明確になる。構造が一定であるように見えるとき、その状態を支える条件を確認する。構造が変化したとき、どの条件が変化を生み、どの依存関係が更新されたかを確認する。そして、必要な機能が維持されているとき、その持続がどの条件の組み合わせによって成立しているかを確認する。これらは、変化を観測することから、変化を生じさせる構造を説明することへ進むための問いである。
ただし、どの条件を重要とみなすか、どの関係を測定対象へ含めるか、何を維持すべき機能と定めるかは、観測する主体の判断に依存する。その判断もまた、知識、経験、役割、権限、価値基準によって形成される。対象の構造と成立条件を明らかにするだけでなく、それらを認識して操作する主体の条件依存性まで含めることで、無常的な世界を運用するという問題は、より具体的な意思決定の問題となる。
3. 無我を考慮すると、判断する主体も更新過程に含まれる
3.1. 判断主体の継続性と判断内容の不変性は一致しない
システムの構造を変更するとき、何を問題とみなし、どの変更を実施するかを決める主体が存在する。開発者は実装上の制約を調べ、運用担当者は障害の発生状況を確認し、責任者は利用者への影響や変更に伴う危険を評価する。これらの判断は、同じ対象について行われていても、必ずしも一致するとは限らない。各主体が参照する情報、維持すべき機能、責任を負う範囲が異なるためである。構造の更新を理解するには、変更される対象だけでなく、変更を判断する主体がどのような条件の下で判断しているかを考える必要がある。
仏教における無我は、こうした主体のあり方を考えるうえで一つの視点を与える。無我を、主体が一切存在せず、行為や責任を誰にも帰属させられないという主張として理解すると、日常的な判断や実践の問題を説明しにくくなる。『相応部』SN 22.59 では、身体、感受、知覚、形成作用、意識という五蘊について、それらが自己であるならば自由に支配できるはずだという論証を通じて、これらを自己として捉えることが問い直されている[4]。身体や意識が現に存在し、経験が生じていることと、それらを恒常的で完全に支配可能な自己として把握することは異なる。ここで問題にされるのは、経験を構成する諸要素と、それらに対して自己という固定的な実体性を認めることの関係である。
この理解には、変化するものを観測する主体だけは変化の外側に存在しているという見方を問い直す意味がある。ある人物が物事を判断するとき、その判断には、それまでに得た知識、経験した出来事、現在の感情、利用できる情報、置かれた社会的な条件などが関係する。判断が成立する時点では、それらの条件が特定の組み合わせを形成している。しかし、同じ人物が別の経験をすれば、その後の判断も更新されうる。名前や社会的な役割によって一人の人物を継続的に識別できることと、その人物の認識や判断が不変であることは、別々の性質である。
ソフトウェアの設計を例にすると、この違いを具体的に説明できる。新しいサービスを設計する開発者が、将来どのような要求が発生するかを十分に把握できないため、例外的な入力に対応する分岐を複数追加したとする。設計時点では、必要な機能が不足する危険を小さくすることが重視されている。未知の要求に対応できない場合の損失が大きいと判断すれば、多少の複雑化を受け入れても例外経路を確保するという選択には合理的な根拠がある。ここでの判断は、将来の要求に関する不確実性と、機能不足を避けたいという評価に依存して成立している。
運用を開始すると、設計時には得られなかった情報が蓄積される。例外経路が実際に使用された回数、例外処理に起因する障害、変更時に必要となった確認作業、復旧に要した時間などが具体的に分かる。ある例外経路がほとんど使用されない一方、その経路の存在によって複数の処理が同じ状態を変更し、障害原因の特定を難しくしていると判明した場合、同じ開発者が経路の削除を支持することがある。初期には不足への備えを優先し、運用後には実際に観測された維持費用を優先するようになったのである。
この二つの判断を、単に一貫性の欠如として扱うと、判断が反転した理由を説明できなくなる。設計時には未知の要求に対する備えが利益として評価され、運用後には使用頻度の低い経路の維持費用が損失として具体化された。新しい観測情報によって将来の損失に関する推定が更新され、その結果として選択する操作が変化したと説明できる。判断した人物が同じであっても、判断を成立させる情報と評価条件が同じとは限らない。
ただし、判断が変化したことだけで、その判断が適切に更新されたと結論づけることもできない。例えば、例外経路が一定期間使用されなかったという観測結果から、その経路が不要であると直ちに判断する場合を考える。重大な障害を回避するための経路であれば、使用頻度が低いこと自体が想定どおりの運用結果である可能性もある。経路が必要になる確率が小さくても、必要になったときの損失が非常に大きければ、維持する合理性は残る。新しい情報を得たことと、その情報を適切な評価へ結びつけたことは別である。判断主体の更新を分析するには、何が観測され、そこからどのような推論が行われ、何を根拠に操作が選択されたかを区別する必要がある。
さらに、同じ時点で同じ情報を参照しても、異なる担当者が別の結論へ到達する場合がある。例えば、ある処理経路の維持費用が増加している状況で、開発担当者は実装の単純化を優先し、運用担当者は障害時の復旧可能性を優先することがある。責任者は、その経路の削除によって特定の利用者へ重大な影響が及ぶかどうかを確認する必要がある。それぞれの判断は、同じ構造に対して異なる損失を評価しているために分かれている可能性がある。
ここでは、情報の違いと評価基準の違いを分離することが重要になる。開発担当者だけが実装上の依存関係を知っているなら、運用担当者との判断の差には情報の不足が含まれる。一方、両者が同じ依存関係を理解したうえで、変更費用と障害時の損失を異なる重みで評価しているなら、判断の差は優先順位に関係する。さらに、責任者が変更を承認できる一方、担当者には承認権限がない場合、技術的な評価が一致していても、実行できる操作は異なる。判断の不一致は、知識、評価基準、権限という複数の条件から生じうる。
これらを区別せずに、判断が一致しない理由を担当者の性格や能力へ帰属させると、実際に調整すべき条件を見落とす可能性がある。情報が不足しているなら観測結果や設計資料を共有する必要がある。評価基準が異なるなら、どの損失を優先するかを明示する必要がある。権限の範囲が異なるなら、誰が変更を決定できるかを確認する必要がある。判断主体を条件に依存する存在として捉えることで、判断の違いを個人に固定的に帰属させる代わりに、判断を成立させている具体的な条件へ分析を向けられる。
もっとも、判断の条件依存性と、行為の責任をどこに帰属させるかという問題は区別される。担当者の判断が経験や組織の条件に影響されるとしても、その担当者が実施した操作と、操作に必要だった承認の有無は確認できる。例えば、運用上の制約を理解した担当者が、承認を得ずに本番環境の構造を変更した場合、判断の背景にどのような事情があっても、操作に必要な権限の条件は満たされていない。行為が条件に依存して成立するという理解は、権限の境界を消す根拠にはならない。むしろ、判断の形成過程と実際に行われた操作を分けて記録することで、何が判断の原因となり、どこに責任が生じたかを具体的に検討できる。
この違いを明確にするため、判断に関係する主な条件を整理すると、次のようになる。
| 判断の条件 | 具体例 | 判断への影響 | 確認すべき事実 |
|---|---|---|---|
| 観測情報 | 例外経路の使用回数、障害件数、復旧時間などが新たに得られる。 | 将来の障害や維持費用に関する推定が更新される。 | どの期間と条件で測定し、観測方法に変更があったかを確認する。 |
| 知識と経験 | 障害解析を経験した担当者が、特定の依存関係の危険を理解する。 | 同じ構造を見ても、問題の発生経路や変更の影響を異なる形で解釈する。 | 新たに理解した事実と、それを裏づける記録や検証結果を確認する。 |
| 評価基準 | 機能不足への備えよりも、復旧時間の短縮が優先される。 | 同じ観測情報でも、望ましい操作の選択が変化する。 | 何を維持し、どの損失を許容するかという判断基準を確認する。 |
| 役割と権限 | 開発担当者は変更を提案できるが、本番環境への適用には責任者の承認が必要となる。 | 技術的に望ましいと判断した操作でも、実施可能な範囲が制約される。 | 誰が提案し、誰が承認し、誰が実行する権限を持つかを確認する。 |
| 制度と運用規則 | 障害発生時には変更を取り消し、再実施には追加の検証を要求する。 | 担当者の判断にかかわらず、操作の順序と実施条件が定められる。 | 適用時点で有効だった規則と、実際の操作がその規則を満たしたかを確認する。 |
表に示した条件は、互いに独立して作用するとは限らない。例えば、障害を経験したことで担当者の知識が更新され、障害復旧の重要性に対する評価も変化することがある。その経験を受けて組織が運用規則を改訂すれば、同じ変更を実施するために必要な承認手続まで変わる。個人の経験、判断基準、制度が連鎖的に更新される場合、判断主体を個人の内部状態だけで説明することは難しくなる。実際の意思決定は、個人の認識と、組織が定める権限や手続との関係によって成立する。
この点で、仏教における無我と工学的な意思決定のモデルには、区別すべき部分がある。無我は自己として把握されるものの性質を問い、苦の理解と実践に関わる。一方、工学的な運用では、判断を行った人物や組織を識別し、実施された操作と責任を追跡する必要がある。人物の同一性を実務上の識別子として扱うことは、その人物の認識や選好が恒常不変であると仮定することとは異なる。判断主体を継続的に識別しながら、その判断内容や知識が更新される過程を分析することができる。
このように、無我を考慮することは、構造の変化を説明する際に、判断主体だけを固定された外部の観察者として置くことを問い直す契機となる。対象の構造が更新されると、そこから得られる経験が判断主体にも影響する。判断主体が更新されると、同じ対象に対して別の操作が選択される可能性が生じる。構造と判断の双方が時間に沿って更新されるという関係を明示することで、構造振動モデルを、対象の変化だけでなく、観測と意思決定の循環を含む枠組みとして考えることができる。
3.2. 判断状態の更新を、観測と経験の関数として記述する
判断主体の状態が時間とともに更新されることを、数理モデルとして記述してみる。ここで扱うのは、人間の意識や人格のすべてを数値へ置き換えることではなく、構造の更新に関係する認識や評価を明示的に表すことである。例えば、障害の発生確率についての推定、変更に伴う損失の評価、現在利用できる情報などを、判断状態としてまとめることができる。こうした状態を時刻ごとに記録すれば、対象がどのように変化したかに加えて、判断の根拠がどのように更新されたかを比較できる。
時刻 \(t\) における判断主体の内部状態を \(b_t\)、実施した操作を \(U_t\)、操作後に得られた観測結果を \(O_{t+1}\) とする。このとき、判断状態の更新を説明する一般的な形式として、次の式を考えられる。
\[
b_{t+1}=B(b_t,O_{t+1},U_t)
\]
ここで \(B\) は判断状態の更新規則である。左辺の \(b_{t+1}\) は、観測と経験を経た後の判断状態を表す。右辺の \(b_t\) は更新前の状態、\(O_{t+1}\) は操作後に得られた情報、\(U_t\) は実際に選択した操作である。操作を引数に含めるのは、同じ観測結果でも、何を実施した後に得られた結果なのかによって解釈が異なるためである。例えば、例外経路を削除した後に障害が増えた場合と、何も変更していないのに障害が増えた場合では、変更操作に対する評価の更新方法が異なりうる。
ただし、観測結果だけから操作の効果を確定できるわけではない。例外経路の削除後に障害件数が増加しても、同じ期間に入力の種類や利用者数が変化していれば、増加の原因を削除操作だけに帰属させることはできない。判断状態を適切に更新するためには、操作の内容だけでなく、観測時の環境条件や比較可能な過去の記録も必要になる。上の式に現れる \(O_{t+1}\) が、こうした条件を十分に反映した観測情報であるかどうかによって、更新規則の説明力が決まる。
この更新関係を具体的に考えるため、ある例外経路が必要になる確率を推定する場面を取り上げる。設計時点では、その経路が必要になる確率を \(p_t\) としている。運用後、一定の観測期間における発生状況が明らかになれば、その情報を用いて確率の推定値を更新できる。例えば、同じ条件の下で発生する事象を繰り返し観測でき、各観測結果を条件付きで独立なベルヌーイ試行とみなせると仮定する。このとき、必要な事象の発生回数を \(k\)、観測回数を \(n\) とすれば、観測頻度 \(k/n\) は発生確率を推定するための情報となる。
一方、発生頻度の低い事象では、短い観測期間で一度も発生しなかったという結果だけから、将来の発生確率がゼロであると結論づけることは適切ではない。例えば、観測回数が少ない状態で発生回数がゼロであっても、単に発生機会が少なかった可能性がある。観測回数が増えれば、発生確率に関する推定の不確実性も変化する。判断主体が更新すべきものは、観測された発生回数だけではなく、その観測結果からどの程度の確実性を持って将来を予測できるかという評価も含む。
確率的な推定を形式化する方法の一つとして、ベイズ更新を考えられる。未知の発生確率を \(p\) とし、更新前にその値について持っている確率分布を \(P(p\mid D_t)\) とする。ここで \(D_t\) は、それまでに得られた観測データである。新しい観測結果を \(D_{t+1}^{\mathrm{new}}\) としたとき、更新後の分布は次の関係によって表される。
\[
P(p\mid D_t,D_{t+1}^{\mathrm{new}})
\propto
P(D_{t+1}^{\mathrm{new}}\mid p,D_t)P(p\mid D_t)
\]
右辺の \(P(p\mid D_t)\) は更新前の推定、\(P(D_{t+1}^{\mathrm{new}}\mid p,D_t)\) は仮定した発生確率と過去のデータの下で新しい観測が得られる尤度、左辺は新しい観測を反映した推定を表す。記号 \(\propto\) は、両辺が正規化定数を除いて比例することを示す。この形式によって、判断の更新を、以前の推定をすべて捨てて新しい観測値だけを採用する操作ではなく、既存の推定と新たな証拠を結合する過程として説明できる。
例えば、長期間にわたり特定の例外経路が使用されなかった場合、その経路が必要になる確率についての推定は低下する可能性がある。しかし、発生したときの損失が極めて大きい事象であれば、経路を維持する判断が引き続き合理的となる場合がある。発生確率の推定が更新されたことと、その確率に基づく操作の選択が更新されたことは区別される。観測情報が同じでも、損失の大きさや許容できる危険が異なれば、選択する操作も異なりうる。
実際の判断状態には、発生確率の推定以外にも複数の要素が含まれる。そこで、説明のために、判断主体の状態を次のような組として表すことができる。
\[
b_t=(q_t,\lambda_t,H_t)
\]
ここで \(q_t\) は対象の状態や将来の事象についての推定、\(\lambda_t\) は複数の損失をどの程度重視するかという評価の重み、\(H_t\) は判断に利用できる履歴や情報を表す。例えば、\(q_t\) が「例外経路を必要とする要求の発生確率は低い」という推定を表していても、\(\lambda_t\) に重大障害を回避する重みが大きく設定されていれば、経路の維持が選択されうる。反対に、維持費用の重みが大きければ、同じ推定から削除を選択する可能性がある。
この分解によって、判断が変化した理由を複数の経路に分けられる。新しい観測によって \(q_t\) が更新されたのか、組織の方針変更によって \(\lambda_t\) が更新されたのか、障害経験が履歴 \(H_t\) に追加されたのかを区別できる。例えば、以前と同じ障害確率を見積もっていても、利用者への影響をより重く評価するようになれば、操作の選択が変わる。この場合、観測事実そのものが変わったのではなく、その事実に対する評価が変化したことになる。
また、判断主体の内部状態と、実際に操作を実行する権限は別の変数として記述する方が適切である。担当者がある変更を必要だと判断していても、その変更を実施する権限を持っていなければ、実際に選択できる操作は制限される。時刻 \(t\) における権限や制度上の制約を \(\mathcal R_t\) とし、判断状態と観測情報に基づく更新ポリシーを \(\pi\) とすれば、操作の選択を次のように表せる。
\[
U_t=\pi(b_t,O_t,\mathcal R_t)
\]
この式は、判断主体が持つ認識と、その時点で得られた観測結果、適用される権限や規則によって、実行する操作が決定されることを表す。さらに、許可された操作の集合を \(\mathcal U(\mathcal R_t)\) と定めれば、実際の操作には次の条件が課される。
\[
U_t\in\mathcal U(\mathcal R_t)
\]
判断主体の認識が更新されても、この制約が自動的に解除されることはない。新しい知識を得た担当者が変更の必要性を理解しても、実施には既定の承認が必要である。制度そのものを更新する場合にも、その変更を行う権限を持つ主体による別の決定が必要となる。判断の柔軟性と操作権限の厳密性は、同じシステムの中で両立する。
ここで、構造振動モデルの基本的な状態遷移と、判断状態の更新を接続できる。構造の次状態を、現在の構造 \(S_t\)、環境 \(C_t\)、観測 \(O_t\)、介入 \(U_t\) によって決定する既存の形式は、次のように表される。
\[
S_{t+1}=M(S_t,C_t,O_t,U_t)
\]
この式では、更新写像 \(M\) が、与えられた条件と操作によって次の構造を定める。一方、操作を決定する主体の判断状態は、実施した操作とその後の観測を通じて更新される。両方の関係を組み合わせると、対象の構造と判断主体が相互に影響しながら時間的に推移する過程を記述できる。
この循環を、操作の選択から判断状態の更新まで、四つの関係に分けて確認する。
最初は、現在の情報に基づいて実施する操作を選ぶ関係である。判断状態を \(b_t\)、観測情報を \(O_t\)、権限や制度上の制約を \(\mathcal R_t\) とし、操作の選択規則を \(\pi\) とする。
\[
U_t=\pi(b_t,O_t,\mathcal R_t)
\]
左辺の \(U_t\) は選択された操作を表す。例えば、例外経路の使用状況を観測した担当者が、その経路を削除すべきだと判断しても、実行するには必要な権限を満たさなければならない。規則 \(\pi\) は、判断状態と観測情報に加え、その制約を踏まえて操作を選ぶ。許可された操作の集合から選ぶという条件は、先に定義した \(U_t\in\mathcal U(\mathcal R_t)\) に対応する。
次は、選択した操作によって対象の構造が更新される関係である。現在の構造を \(S_t\)、環境を \(C_t\)、更新規則を \(M\) とする。
\[
S_{t+1}=M(S_t,C_t,O_t,U_t)
\]
左辺の \(S_{t+1}\) は更新後の構造である。例えば、操作 \(U_t\) として例外経路の削除が選ばれれば、更新規則 \(M\) は現在の構造、環境、観測情報に基づき、その経路を取り除いた次の構造を定める。操作を選ぶことと、その操作によって構造が更新されることは、ここで別の関係として表される。
三番目は、更新後の構造から新たな観測結果が得られる関係である。観測の規則を \(G\) とする。
\[
O_{t+1}=G(S_{t+1},C_{t+1})
\]
ここで \(C_{t+1}\) は更新後の環境、\(O_{t+1}\) はその環境と構造の下で得られる観測結果である。例外経路を削除した後に処理時間やエラー率を測定する場合に対応する。結果には同じ期間の入力や環境の変化も関係するため、観測された改善を直ちに削除操作の因果効果と判断することはできない。
最後は、新しい観測結果を受けて、操作を選ぶ主体の判断状態が更新される関係である。判断状態の更新規則を \(B\) とする。
\[
b_{t+1}=B(b_t,O_{t+1},U_t)
\]
左辺の \(b_{t+1}\) は更新後の判断状態である。更新規則 \(B\) は、それまでの判断状態 \(b_t\) に、実施した操作 \(U_t\) とその後の観測結果 \(O_{t+1}\) を反映する。例えば、経路の削除後に特定の入力で障害が起きたなら、その経路が果たしていた役割について担当者の評価が更新されうる。
以上の四つの関係によって、判断状態から操作が選ばれ、その操作で構造が更新され、新しい観測結果によって次の判断状態が形成される循環を記述できる。更新後の判断状態 \(b_{t+1}\) は、次の時点で操作を選ぶための条件になる。したがって、対象の構造と判断主体は、観測と介入を介して相互に影響しながら推移する。
例えば、開発担当者が例外経路を削除した結果、同じ入力条件での処理時間が短縮されたとする。その観測を得た担当者は、同種の経路についても整理する利益があると推定するかもしれない。しかし、別の経路を削除した場合に同じ結果が得られるとは限らない。依存関係や使用状況が異なれば、削除による影響も異なる。ある構造変更について得られた経験を、別の構造へ適用するには、その経験が成立した条件を比較する必要がある。判断状態の更新が適切であるかどうかは、新しい情報をどの範囲まで一般化できるかにも依存する。
さらに、判断状態そのものを直接観測できるとは限らない。担当者が例外経路の削除を提案したという事実から、発生確率の推定が低下したのか、維持費用をより重く評価するようになったのか、組織方針が変わったのかを一意に決めることはできない。異なる内部状態が同じ操作を生むことがあるためである。構造振動モデルで異なる構造が同じ観測結果を生む場合があるのと同様に、意思決定の結果だけから判断主体の内部状態を完全に復元することにも限界がある。
この制約を踏まえると、実務では判断主体の内部状態を推測するよりも、判断に使用された観測情報、提示された選択肢、採用した評価基準、承認された操作、実際の結果を記録することが有効となる。これらは、内部状態のすべてを直接表すものではないが、どの情報と規則に基づいて操作が選ばれたかを確認できる。例えば、変更前の障害件数、変更の目的、承認者、適用範囲、変更後の観測結果が保存されていれば、判断の過程と結果を具体的に検証できる。履歴の記録は、担当者個人の記憶や説明だけに依存せず、組織として判断の継続性を確保することにもつながる。
組織の判断状態が更新される場合には、個人の経験がどのように共有されるかも問題になる。ある障害を経験した担当者が依存関係の危険を理解しても、その知識が設計資料や運用手順へ反映されなければ、別の担当者が同じ条件で同様の失敗を繰り返す可能性がある。逆に、障害の原因、影響範囲、復旧操作を記録し、運用規則を適切に更新できれば、担当者が交代しても判断に必要な情報を引き継げる。個人の判断状態が変化することと、組織として一貫した運用を維持することは、情報と制度によって接続できる。
この意味で、判断主体の継続性も、個人の内部に保存された不変の知識だけによって成立するものではない。役割、権限、記録、共有された知識、承認手続などが組み合わさることによって、組織としての意思決定が継続する。担当者が交代した場合でも、必要な情報と操作条件が引き継がれていれば、同じ目的に対する判断を継続できる可能性がある。一方、担当者の名前が同じでも、必要な情報が失われたり、評価基準が不明確になったりすれば、判断の再現性は低下する。
ただし、ここまでの数理モデルは、判断主体の内部状態がどのような変数で表現できるかを仮定したものである。実際の人間の認識や選好には、経験の解釈、社会的関係、感情、暗黙の知識などが含まれ、それらを有限個の変数で完全に記述できるとは限らない。また、上の更新規則 \(B\) を観測データから一意に特定できる保証もない。同じ観測と操作に対して異なる判断更新が起こる場合、個人差や未観測の条件を追加して説明する必要がある。数式が与えるのは、判断の更新を分析するための形式であり、人間の主体性についての完全な説明ではない。
仏教における無我との接続も、この範囲で理解することができる。無我の教説から判断状態の更新式が導出されるわけではない。一方、判断する主体を、経験や条件から独立した不変の実体とみなす必要がないという点には、概念上の接点がある。工学的なモデルでは、判断主体を継続的に識別しながら、その知識、評価、選択がどのように更新されるかを調べる。仏教的な問題意識では、経験を構成する諸要素を自己として把握することが問い直される。両者は異なる目的を持ちながら、主体を固定的な存在として理解することの限界を、それぞれの方法で明らかにする。
構造振動モデルの運用において、この接続がもたらす帰結は具体的である。対象の構造が変化したとき、その原因を環境や介入に求めるだけでなく、介入を選んだ判断の条件も確認する必要がある。以前と異なる操作が選ばれた場合には、観測情報が変化したのか、損失の評価が更新されたのか、権限や制度が変更されたのかを区別する。そして、操作の結果が得られた後には、その結果が次の判断へどのように反映されるかを確認する。構造の更新と判断の更新を分けて記述することで、変更がどのような条件から生じ、その変更が後の意思決定にどのような影響を及ぼしたかを追跡できる。
対象の変化を認識する主体もまた、経験と条件によって更新される。だからこそ、判断を特定の人物の不変の性質へ帰属させるより、判断の根拠と操作の条件を明示することが、継続的な運用には重要となる。ただし、主体の更新可能性は権限や責任を曖昧にする理由にはならない。判断が変化することを認めながら、許可された操作の境界を維持し、変更の根拠と結果を検証できる状態を保つことが、条件に依存する世界で意思決定を継続するための具体的な要件となる。
4. 複雑化と単純化は、条件が更新されることで交代する合理性である
4.1. 例外の追加も削除も、異なる損失を減らす選択として理解できる
構造振動モデルの出発点には、未知への備えとして複雑化を求める圧力と、運用で観測された摩擦を減らすために単純化を求める圧力が、同じ対象に働くという観察がある。初期の既稿では、不足への恐れ、責任、注意資源の制約、使用頻度の偏りが、それぞれの判断に合理性を与えることが論じられている[5]。ここでの複雑化と単純化は、構造の良否を一方向に決める原則ではなく、何を損失とみなし、どの損失を優先して減らすかによって選択される更新方向である。同じ構造について追加と削除という反対の操作が選ばれる場合にも、それぞれの判断が成立した条件を調べることで、その理由を説明できる。
例えば、新しいサービスの設計時点では、将来どのような入力が与えられるかを十分に把握できないことがある。通常の入力については処理方法を定義できても、外部サービスの応答が遅延する場合、入力形式が一部欠けている場合、途中で通信が切断される場合など、例外的な状況に対しては発生頻度も影響範囲も不明確である。このような状況で、例外を検出して処理を切り替える経路を用意することには、未知の障害による損失を抑えるという目的がある。一方、例外経路を追加すれば、条件分岐、状態管理、試験、監視、障害解析の対象も増える。未知への備えは、同時に新たな維持費用を発生させる。
この判断を具体的に表すため、ある例外的な入力が出現する確率を \(p\)、その入力を処理できなかった場合の損失を \(L\)、例外経路を追加して維持する費用を \(c\) とする。ここでは、一定の評価期間を設定し、\(p\) をその期間に対象となる例外事象が発生する確率、\(L\) を発生した場合の損失として定義する。また、例外経路を追加すればその損失を完全に回避でき、追加による新しい障害や副作用は発生せず、費用と損失を同じ尺度で比較できると仮定する。この単純化の下では、例外経路を追加することが有利になる条件は次のように表せる。
\[
pL>c
\]
左辺の \(pL\) は、例外経路を持たない場合に想定される損失の期待値である。右辺の \(c\) は、例外経路を追加するために必要な費用である。期待される損失が追加費用を上回るなら、例外経路を設ける判断には合理的な根拠がある。逆に、損失の期待値が費用を下回るなら、その例外に対応するためだけに経路を追加することの利益は小さくなる。この比較によって、構造の複雑化が必要かどうかを、分岐の数そのものではなく、具体的な損失の削減効果から評価できる。
例えば、評価期間中に例外事象が発生する確率が \(p=0.1\)、発生した場合の損失が \(L=100\)、例外経路の追加と維持に必要な費用が \(c=6\) であるとする。単位を共通の費用尺度にそろえれば、損失の期待値は \(pL=10\) となり、追加費用の 6 を上回る。この条件では、例外経路を追加することで期待される損失を減らせる。追加によって構造が複雑になっても、その複雑化には具体的な利益が存在する。
しかし、運用開始後に十分な観測が得られ、例外事象の発生確率についての推定が \(p’=0.01\) へ更新されたとする。損失の大きさが同じで、以後の評価期間に経路を維持する費用が \(c’=6\) であれば、損失の期待値は \(p’L=1\) となる。維持費用が期待損失を上回るため、経路を削除する判断が合理的になる可能性がある。ただし、過去に支払った開発費用はすでに発生した費用であり、削除の判断では主に将来の維持費用と削除によって生じる損失を比較する。また、経路の削除や復旧に別の費用が発生する場合には、それも評価へ含める必要がある。
最初の追加と後の削除は、操作の方向だけを見ると矛盾している。しかし、設計時点では未知の例外に対応する利益が大きく、運用後には実測された使用頻度と維持費用から削除の利益が大きくなったと説明できる。判断の目的を、構造の複雑さを増減させることではなく、必要な機能を維持しながら損失を減らすこととして定めれば、更新方向が反転しても目的の一貫性は保たれる。構造振動モデルが扱う複雑化と単純化の反復は、こうした評価条件の更新によって説明できる。
ただし、先ほどの式には強い仮定が含まれている。実際の例外経路では、追加しても障害を完全に回避できるとは限らず、別の障害を誘発する可能性もある。例えば、通信障害が発生した場合に要求を再送する経路を追加すると、一時的な通信不良から復旧しやすくなる一方、再送した要求が重複して処理される危険が生じる。再送回数を増やせば、障害時に通信量が増加し、負荷の集中によって復旧がさらに遅れる場合もある。例外経路の存在が障害への備えになると同時に、新しい障害の原因となるのである。
そこで、例外経路を追加しない場合の期待損失を \(R_0\)、追加した場合に残る期待損失を \(R_1\)、追加に伴う費用を \(c\) とする。追加しない場合の総費用は \(R_0\)、追加した場合の総費用は \(R_1+c\) となるため、追加が有利になる条件は次のように表せる。
\[
R_0>R_1+c
\]
この式は、追加によって削減できる期待損失が、経路の追加と維持に必要な費用を上回ることを要求する。ここで \(R_1\) には、例外経路によって回避できなかった損失だけでなく、新たな処理経路が生み出す障害の期待損失も含める。例えば再送機能によって通信障害による損失が減少しても、重複実行や負荷集中による損失が大きければ、追加後の期待損失は必ずしも小さくならない。構造を複雑化することの合理性は、追加した機能の利益だけではなく、追加によって生じる依存関係の影響を含めて評価する必要がある。
同様に、すでに存在する経路を削除する場合には、削除後の期待損失と削除に必要な費用を比較する。現在の構造を維持した場合の期待損失を \(R_{\mathrm{keep}}\)、維持費用を \(c_{\mathrm{keep}}\)、削除後の期待損失を \(R_{\mathrm{remove}}\)、削除と必要な移行作業に伴う費用を \(c_{\mathrm{remove}}\) とすると、削除が有利になる条件は次のようになる。
\[
R_{\mathrm{remove}}+c_{\mathrm{remove}}
<
R_{\mathrm{keep}}+c_{\mathrm{keep}}
\]
これは、削除による期待損失の変化と、維持費用の削減効果を同じ評価期間で比較したものである。削除によって失われる機能を別の経路が提供できる場合には、削除後の期待損失を抑えられる可能性がある。一方、削除した経路が重大障害の際にだけ必要となるなら、使用頻度が低くても削除後の期待損失が大きくなる場合がある。経路がほとんど使用されていないという観測結果だけでは、削除による利益を確定できない。
ここには、平均的な損失と重大な損失をどのように扱うかという問題もある。例えば、通常時にはほとんど使われない復旧経路であっても、その経路が失われることで長時間のサービス停止が生じるなら、少数の重大な事象を平均費用の中だけで評価することは適切とは限らない。発生確率が小さい事象でも、損失が大きければ期待値への寄与は大きくなる。さらに、組織として許容できない障害については、期待値による比較とは別に、発生時の損失に上限を設ける必要がある。例外経路の追加と削除を判断する際には、何を期待損失として評価し、何を必ず維持すべき制約とするかを明らかにする必要がある。
これらの条件を整理すると、構造の複雑化と単純化には、それぞれ異なる利益と損失が存在する。
| 操作 | 期待される利益 | 新たに生じる費用や危険 | 判断に必要な条件 |
|---|---|---|---|
| 例外経路の追加 | 従来は処理できなかった入力や障害に対応できる。 | 分岐、状態管理、試験、監視、障害解析の負担が増える。 | 対応によって削減できる期待損失が、追加費用と新たな障害の期待損失を上回るかを確認する。 |
| 例外経路の削除 | 維持費用と確認対象が減少し、変更の影響を把握しやすくなる。 | 削除した経路で対応していた入力や障害への対応能力が失われる可能性がある。 | 削除後の期待損失と移行費用が、維持を続ける場合の総費用を下回るかを確認する。 |
| 例外経路の保持 | 現在の対応能力と復旧手段を維持できる。 | 使用頻度が低い経路にも保守と検証の費用が発生する。 | 将来の発生確率、障害時の損失、維持費用を継続して評価する。 |
| 例外経路の統合 | 重複した処理を減らし、共通の実装や監視へ集約できる。 | 統合した経路へ障害や負荷が集中し、影響範囲が広がる可能性がある。 | 重複削減の利益と、依存関係の集中による損失を比較する。 |
| 例外経路の分離 | 障害の影響範囲を限定し、独立した変更や復旧を実施しやすくなる。 | 構成要素と接続関係が増え、経路間の整合性を維持する負担が発生する。 | 障害隔離の利益と、分離による運用費用の増加を比較する。 |
この表から分かるように、構造の更新方向は、単純な追加と削除の二択に限られない。経路を統合すれば部品数を減らせる一方、障害の影響範囲が広がる可能性がある。経路を分離すれば部品数は増えるが、障害を局所化できる場合がある。部品数や接続数の増減と、障害の伝播範囲や復旧可能性は、必ずしも同じ方向へ変化しない。構造をどのように更新するかを判断するには、変更される要素の数だけでなく、変更によってどの依存関係が生じ、どの依存関係が失われるかを調べる必要がある。
さらに、同じ変更でも環境によって評価は異なる。利用者が少なく、入力の種類も限られている段階では、例外処理を共通の経路へ集約することが維持費用の削減につながる場合がある。しかし、利用者が増え、処理要求が多様化すると、一つの経路への集中が障害の波及範囲を広げる可能性がある。その時点では、経路を再び分離する判断に合理性が生じる。統合と分離の反復は、設計者が一貫した方針を持っていないために起きるとは限らない。処理量、障害時の影響、維持費用といった条件が更新されることで、以前とは異なる構造が望ましくなるのである。
ただし、ここで示した期待費用の比較は、必要な情報が適切に得られ、比較する選択肢の影響を一定の精度で推定できることを前提としている。実際の設計時点では、未知の入力の発生確率や障害時の損失を正確に求めることは難しい。運用経験が増えても、まれな重大障害の確率には大きな不確実性が残る場合がある。複雑化と単純化が交代する理由を理解するには、判断に用いられる情報が限られており、その情報自体が時間とともに更新されるという点を考慮する必要がある。
4.2. 限定合理性が、実際の運用で情報を得る必要を生む
ソフトウェアの設計時点で、将来の要求、発生しうる障害、すべての依存関係、維持費用を完全に知ることは難しい。設計者が利用できる情報には限界があり、すべての選択肢について長期的な結果を計算することにも制約がある。Simon の限定合理性に関する議論は、完全な情報と無制限の計算能力を前提とした最適化と、実際に利用可能な情報や認知能力の制約の下で行われる意思決定を区別する[6]。この観点では、設計時点で最終的な構造を完全に決めることよりも、限られた情報の下で必要な機能を確保し、その後に得られる情報によって判断を更新することが重要となる。
例えば、将来どのような入力が増えるか分からないサービスでは、複数の例外経路を残しておくことが合理的な場合がある。それらの経路は、実際に使用されるまで必要性を確定できないことがあるため、運用開始前にすべて削除する判断には危険が伴う。一方、運用によって入力の分布や障害の発生状況が観測されれば、当初は未知だった条件の一部が明らかになる。運用期間中に得られる情報は、構造の適切さを再評価するための根拠となる。
ただし、運用によって情報が得られるという事実から、時間が経てば必ず正確な判断へ到達するとは限らない。例えば、特定の例外経路が一年間使用されなかったとしても、その一年間に対象となる障害が発生する条件が存在しなかっただけかもしれない。別の環境で同じシステムを運用すれば、その経路が必要になる場合もある。観測された使用頻度は、観測期間中の入力や環境に依存する。過去の使用頻度から将来の必要性を推定するには、将来の環境が過去とどの程度共通しているかを考える必要がある。
さらに、設計者が選択した構造自体が、得られる観測情報に影響する。例外経路を設けなければ、その経路が実際に使われた回数は観測できない。逆に、例外経路を設けた場合には、どの入力がその経路へ到達したか、処理にどれだけ時間がかかったか、障害が発生したかを記録できる。しかし、例外経路が存在することによって利用者や上位の処理がその機能を前提とするようになれば、経路の使用頻度そのものが構造の影響を受ける。観測された利用状況は、変更前から存在した需要だけでなく、設計した構造によって形成された需要を含む可能性がある。
この関係は、情報を得るために構造を保持することの利益と、その構造が運用へ与える影響を区別する必要があることを示している。例えば、ある例外経路を残すことで、将来どの種類の障害が発生するかを観測できるかもしれない。しかし、経路を残すことで障害の発生条件が変わるなら、そこで得られた情報を、経路が存在しない場合にもそのまま適用することはできない。観測と介入が同じシステムの中で行われる以上、実際の運用から得られた情報を解釈する際には、観測対象がどの構造の下で動作していたかを明らかにする必要がある。
設計時点での不確実性を評価する方法として、ある例外経路が必要になる確率 \(p\) について、単一の推定値だけでなく、取りうる範囲を考えることもできる。例えば、利用可能な情報から \(p\) が \(0.01\) 以上 \(0.15\) 以下の範囲にあると推定された場合、同じ損失 \(L=100\)、維持費用 \(c=6\) であっても、期待損失 \(pL\) は 1 から 15 まで変化する。確率の推定値によって、追加や保持が有利になる場合と、削除が有利になる場合が生じる。判断が一つの推定値に強く依存しているなら、その推定値の不確実性を明らかにすることが重要となる。
特に、重大な障害がまれに発生する場合には、平均的な使用頻度だけで判断すると、その障害に備える構造の価値を過小評価する可能性がある。例えば、障害が発生したときの損失が極めて大きければ、発生確率が小さくても維持する理由が残る。一方、障害の影響が限定され、復旧が容易であるなら、同じ発生確率でも経路を削除する判断が合理的になる場合がある。限定合理性の下では、すべての条件を正確に知ることが難しいからこそ、発生確率、損失の大きさ、復旧に必要な時間を分けて記録する必要がある。
さらに、複雑化の利益は、将来の情報が得られたときに構造を変更できる余地を確保することにもある。例えば、初期段階で処理方式を一つに固定せず、複数の方式を切り替えられるようにしておけば、利用状況が明らかになった後に適切な方式を選択できる。一方、切り替え機能を持たない構造では、後から方式を変更するために大規模な改修が必要になる場合がある。初期段階で複雑な構造を持つことが、将来の変更費用を下げる可能性があるのである。
ただし、将来の変更可能性を確保するための仕組みも、維持費用を発生させる。切り替え先として用意された処理方式が長期間使用されず、試験や保守だけが続けば、柔軟性を確保するための費用が利益を上回る場合がある。さらに、切り替え機構の存在が変更の影響範囲を複雑にし、障害時の原因特定を困難にする可能性もある。将来の選択肢を保持することの価値と、選択肢を保持するための現在の費用を比較する必要がある。
この関係を時間に沿って考えると、設計時点で複雑化を選び、その後の運用で得られた情報に基づいて単純化するという流れが成立する。例えば、設計時には三種類の処理方式を切り替えられる構造を用意したが、運用実績によって一種類がほとんどの要求に対応できることが明らかになったとする。その場合、不要な方式を削除し、構造を単純化する判断が合理的になる可能性がある。ただし、残された方式が重大障害時にも必要な機能を維持できることを確認する必要がある。運用情報の蓄積によって、何を保持し、何を削除するかを具体的に選択できるようになる。
一方、単純化した後に利用者の要求が変化し、以前とは異なる処理方式が必要になる場合もある。そのときは、再び構造を複雑化する判断が合理的になる可能性がある。これは、単純化が失敗だったことを必ずしも意味しない。単純化した時点では既存の要求に対する適切な構造だったとしても、環境が変化すれば、必要な構造も変化するからである。構造の更新方向は、その時点の条件に対する適切さによって評価される。
ただし、複雑化と単純化の反復がすべて合理的な判断によって生じるとは限らない。例えば、障害が発生するたびに新しい例外経路を追加し、その後の負担が増えると一括して削除する運用では、追加と削除の判断が十分に検証されていない可能性がある。短期的な障害対応を優先して追加を繰り返せば、依存関係が複雑になり、別の障害を誘発する場合がある。その後、複雑さを減らすことだけを目的に経路を削除すれば、必要な復旧手段まで失われる可能性がある。更新方向が反復していることは、その反復が適切であることの証拠にはならない。
構造振動モデルでは、複雑化と単純化を記述するために、構造の複雑さを表す尺度 \(K(S_t)\) を考えることができる。時刻 \(t\) の構造を \(S_t\)、直前の構造を \(S_{t-1}\) とすれば、複雑さの変化を次のように表せる。
\[
\Delta K_t=K(S_t)-K(S_{t-1})
\]
この値が正であれば、定義した尺度において複雑さが増加したことを示し、負であれば減少したことを示す。ただし、\(K\) が何を複雑さとして測定するかによって、同じ構造変更に対する評価は異なりうる。部品数、接続数、依存関係の深さ、変更時の影響範囲、障害解析に必要な手順などは、それぞれ異なる性質である。例えば、部品数を減らす統合によって接続数は減少しても、一つの部品が担う責務が増え、変更時の影響範囲が広がる可能性がある。複雑さの尺度を選ぶ際には、何を説明するための測定量なのかを明確にする必要がある。
また、複雑さの変化と、構造全体の変化量も区別される。複雑さが同じ値であっても、構成要素や依存関係が大きく入れ替わる場合がある。例えば、ある例外経路を削除し、別の例外経路を追加した場合、部品数や接続数は変わらなくても、構造の内容は変化している。複雑さの増減だけを測定していると、この入れ替わりを捉えられない。構造振動モデルでは、複雑さの変化と構造そのものの変化を別々に測定する必要がある。
さらに、更新の方向が変わることと、運用上の損失が減少することも同一ではない。例外経路を削除して複雑さを減らした場合でも、障害に対する対応能力が低下すれば、運用損失は増加する可能性がある。反対に、経路を追加して複雑さが増えても、重大障害への対応が改善すれば、運用損失は減少する場合がある。構造の変化量、複雑さの変化、機能の維持という三つの性質を分離して評価することで、更新操作の結果を具体的に説明できる。
この観点から、複雑化と単純化の合理性を判断するには、少なくとも次の情報が必要となる。第一に、何を維持すべき機能とするかという目的である。第二に、想定される入力や障害の発生確率と、その影響である。第三に、追加や削除によって発生する費用と、新しい依存関係である。第四に、実際の運用から得られた観測結果と、その観測結果を適用できる条件である。第五に、変更を実施するために必要な権限と復旧手段である。これらの条件が明示されていれば、同じ構造に対して異なる時点で反対の更新操作が選ばれた場合にも、その判断の理由を比較できる。
ここで、無常と縁起の思想との接続が具体的になる。構造が一定の形で存在していても、その形が適切である理由は、環境、利用者の要求、維持費用、障害の発生条件などに依存する。条件が変化すれば、同じ構造を保持することの利益と損失も変化する。複雑化と単純化の反復は、構造そのものが固定された適切さを持つのではなく、成立条件との関係によって評価されることを示す例として理解できる。
ただし、構造振動モデルは、仏教思想から複雑化と単純化の周期を導くものではない。構造の更新方向が交代するかどうかは、具体的な環境変化、観測結果、判断主体の評価、実施可能な操作によって決まる。複雑化が続く場合もあれば、単純化が続く場合もあり、一定の構造を長期間維持する場合もある。反復が観測された場合には、その反復を生み出した条件を調べる必要がある。
また、運用によって情報が蓄積されても、判断主体がその情報を適切に利用するとは限らない。例えば、過去に重大障害を経験した担当者が、実際の発生確率よりも障害の危険を大きく評価し、過剰な例外処理を維持する場合がある。反対に、長期間障害が発生しなかったことから危険を過小評価し、必要な復旧経路を削除する場合もある。観測情報が更新されたことと、判断が適切に更新されたことは別である。構造の更新履歴を調べる際には、操作の結果だけでなく、その操作が選ばれた根拠も確認する必要がある。
このように、限定合理性の下で行われる設計と運用では、初期の判断を将来にわたって固定することも、常に新しい観測結果だけで判断することも、十分な説明にはならない。設計時点で利用できる情報に基づいて構造を選び、運用によって新しい情報を得て、その情報がどの条件で有効かを確かめながら判断を更新することが必要となる。更新方向の選択は、構造の複雑さだけでなく、判断時点で利用可能な情報と、維持すべき機能の関係によって決まる。
複雑化と単純化の反復を理解するうえで中心となるのは、構造の大きさが一定の方向へ進むかどうかではなく、どの条件の下でどの操作が合理的になるかという関係である。例外経路の追加と削除が交互に現れる場合、その背後には未知への備え、実測された使用頻度、障害時の損失、維持費用、変更可能性などの条件が存在する。それらの条件が変化すれば、適切な構造も変化する。構造振動モデルは、この変化を構造の状態遷移として記述し、その更新が必要な機能の維持に寄与したかを検証するための枠組みとなる。
5. 縁起との構造的な対応を、関係グラフと状態遷移で吟味する
5.1. 要素の同一性と関係の同一性を分ける
あるシステムが複数の部品から構成されているとき、部品が存在することと、それらの部品がどのような関係によって機能を実現しているかは、異なる情報である。例えば、受付、検証、処理、記録という四つの部品を持つサービスを考える。この四つの部品がすべて正常に動作していても、受付から検証へ要求が渡されなければ、利用者の要求は処理されない。また、処理が正常に完了しても、結果が記録部品へ届かなければ、必要な記録は残らない。システム全体の機能は、各部品の性質だけでなく、それらの部品を結ぶ関係が適切に成立していることによって実現される。
この関係を具体的に記述するため、受付を \(A\)、検証を \(B\)、処理を \(C\)、記録を \(D\) と表す。通常の処理経路が受付から検証、処理、記録へ進むなら、その関係は次のように表せる。
\[
A\rightarrow B\rightarrow C\rightarrow D
\]
この表現では、四つの部品の存在に加えて、要求や処理結果がどの順序で受け渡されるかが示されている。受付から処理へ直接進む経路が追加されれば、検証を経ずに処理が実行される可能性が生じる。一方、検証から記録へ直接進む経路が追加されれば、処理部品を通過せずに記録へ到達する可能性が生じる。どちらの場合も部品の総数は変化していないが、システムが取りうる経路は変化している。経路の追加によって実際の振る舞いが変化するかどうかは、その経路を使用する条件や、各部品の内部処理によって決まる。
例えば、検証部品 \(B\) から記録部品 \(D\) へ直接進む経路を追加したとする。この経路を、入力検証に失敗した要求について、実行処理を行わずに失敗記録だけを残すために使用するなら、障害調査に必要な情報を増やせる可能性がある。しかし、検証に成功した通常の要求まで同じ経路へ進んでしまえば、必要な処理を実行しないまま記録だけが残る危険がある。接続を一つ追加したという構造上の操作は同じでも、どの条件でその接続を使用するかによって、運用上の意味は異なる。
また、受付部品 \(A\) から処理部品 \(C\) へ直接進む経路を追加した場合には、検証を省略して処理を実行できる可能性が生じる。仮に、この経路が検証を必要としない内部処理だけに限定されていれば、処理時間を短縮できる場合がある。一方、利用者から受け取った未検証の要求がこの経路を通過できるなら、入力の正当性を確認せずに処理が実行される危険がある。経路の存在だけから、その経路が適切かどうかを判断することはできない。経路が許可される条件、経路を通過する入力、経路が実行する操作を合わせて確認する必要がある。
構造振動モデルでは、このような要素と関係の配置を、時刻 \(t\) におけるグラフとして記述する。既稿「構造振動モデルを数理モデルとして定義する」では、グラフとベクトル埋め込みを用いて構造の状態遷移を定式化している[7]。基本的な構造は次のように表される。
\[
S_t=(V_t,E_t,W_t)
\]
ここで \(V_t\) は構造を構成する要素の集合、\(E_t\) は要素間の関係の集合、\(W_t\) は関係に付与された重みである。受付、検証、処理、記録の四部品を考える場合、頂点集合は \(V_t=\{A,B,C,D\}\) となる。通常の処理経路だけが存在するなら、辺集合は \(E_t=\{(A,B),(B,C),(C,D)\}\) となる。この形式によって、どの部品が存在するかという情報と、どの部品間に関係が存在するかという情報を分けて記録できる。
ただし、同じ頂点集合と辺集合を持つグラフでも、実際のシステムが同じ動作をするとは限らない。例えば、検証部品 \(B\) が入力形式だけを確認する場合と、利用者の権限まで確認する場合では、同じ接続関係でも処理の許可条件が異なる。また、処理部品 \(C\) が要求を順番に実行する場合と、複数の要求を並列に実行する場合では、同じ接続関係でも負荷に対する応答が異なる。グラフ上の関係を適切に解釈するには、頂点と辺が何を表すかを明確にし、必要に応じて関係の属性や実行条件を追加する必要がある。
このため、構造振動モデルで最初に定めるべき事項の一つは、何を同じ要素とみなすかという識別規則である。例えば、受付部品の実装ファイル名が変更された場合でも、その責務と外部から見た機能が同じなら、機能単位のモデルでは同一の頂点として扱える。一方、実装ファイルを頂点として識別するモデルでは、ファイル名の変更やファイルの分割が構造上の変更として記録されることがある。どちらが正しいかは、構造によって何を説明したいかに依存する。
処理部品 \(C\) を二つの部品 \(C_1\) と \(C_2\) に分割する場合を考える。分割前は一つの部品が入力の解釈と結果の生成を担当していたが、分割後は \(C_1\) が入力の解釈を、\(C_2\) が結果の生成を担当するようになったとする。実装上の部品数は一つ増える。しかし、外部から見た処理機能が維持されているなら、機能単位のモデルでは一つの機能が引き続き提供されていると記述することもできる。同じ変更について、実装単位と機能単位では異なる構造差が得られる。
この違いを放置すると、測定量の意味が不明確になる。例えば、部品の分割を大きな構造変更として測定したい場合には、分割前の \(C\) と分割後の \(C_1,C_2\) の対応を明示する必要がある。一方、内部実装の分割によって利用者から見た機能がどれだけ変化したかを測定したい場合には、機能の入出力や外部との関係を比較する方が適切となる。測定対象を実装単位とするか、機能単位とするかによって、構造の変化量も、その変化量から解釈できる意味も異なる。
さらに、グラフに記録する辺の意味も固定する必要がある。部品 \(A\) が部品 \(B\) を呼び出す関係、両者が同じ記録装置を使用する関係、一方の障害が他方へ伝播する関係は、いずれも要素間の関係として表現できる。しかし、これらは同じ性質ではない。呼び出し関係が存在しても、実際にはほとんど使用されない場合がある。反対に、直接の呼び出し関係がなくても、共通資源を使用する二つの部品が互いの性能へ影響する場合がある。関係の種類を区別することで、構造変更がどのような影響を生みうるかを具体的に分析できる。
既稿「構造振動モデルの定義を測定と検証まで含めて整理する」では、要素の識別規則、観測粒度、関係の追加と削除、構造振幅、更新方向、収束、周期性、安定性を区別して整理している[8]。この整理に従えば、グラフを定義する段階で、観測する関係の種類と比較する単位を固定する必要がある。構造差を測定した後で都合のよい解釈を追加するのではなく、何を変更として数えるかをあらかじめ定めることで、異なる時点の状態を比較できる。
具体的な変更と、グラフによって観測される差を整理すると、次のようになる。
| 変更の種類 | 構造上の変化 | 運用上の影響 | 測定上の注意点 |
|---|---|---|---|
| 部品の名称変更 | 実装名は変化するが、機能上の関係は維持される場合がある。 | 名前の変更だけで実行結果が変化するとは限らない。 | 名称を識別子とする場合と、機能を識別子とする場合を区別する。 |
| 部品の分割 | 一つの頂点が複数の頂点と関係へ分かれる。 | 責務を分離できる一方、部品間の通信や状態の整合性を維持する必要が生じる。 | 分割前後の頂点対応と、比較する粒度を明示する。 |
| 部品間の接続追加 | 既存の頂点間に新しい辺が追加される。 | 新しい処理経路が利用可能になるが、検証の迂回や障害の伝播経路を生む場合がある。 | 追加された辺が実際に使用される条件を確認する。 |
| 部品間の接続削除 | 既存の辺が削除される。 | 不要な依存を減らせる一方、必要な処理経路が失われる可能性がある。 | 削除した関係が提供していた機能と代替経路の有無を確認する。 |
| 関係の強度変更 | 頂点と辺を維持したまま、辺に付与した重みが変化する。 | 通信量、処理負荷、依存度などが変化する場合がある。 | 重みが頻度、容量、影響度のどれを表すかを固定する。 |
| 外部環境の変更 | 観測対象を内部構造に限定した場合、グラフが変化しないことがある。 | 外部の認証方式やデータ形式の変更によって、従来の機能が失われる場合がある。 | 内部構造の変化と、環境条件による機能の変化を分離する。 |
同じ構造変更でも、どの関係を測定するかによって得られる値は異なる。例えば、部品の分割によって実装単位の頂点数が増えても、機能単位の頂点数は変わらない場合がある。逆に、実装上は同じ四部品を維持したまま、内部の処理順序を変更すれば、機能上の依存関係は変化する可能性がある。構造を測定するという行為には、対象をどの単位へ分解し、どの関係を保存するかという選択が含まれている。
この点は、縁起との対応を考えるうえでも重要である。縁起の思想は、現象が独立自存するのではなく、条件に依存して成立するという理解を与える。一方、関係グラフは、選択された要素と関係を数学的に記述するための表現である。どの関係をグラフへ含めるかは、観測と分析の目的に応じて決められる。したがって、グラフに表現された依存関係は、対象に関して明示的に選択された条件関係であり、現象の成立に関わるあらゆる条件を網羅したものとは限らない。
ただし、この限定はグラフ表現の有用性を損なうものではない。対象と関係を明示的に定義することで、どの条件が機能の成立に必要なのか、どの変更がどの関係を失わせるのかを具体的に検証できる。例えば、記録機能が停止した場合、記録部品そのものの障害なのか、処理部品から記録部品への接続が失われたのか、共通資源の不足によって記録処理が遅延しているのかを区別できる。現象の成立を関係から説明するという観点が、構造の測定と障害原因の分析へ接続される。
5.2. 構造振幅は変更の大きさであり、変更の価値ではない
構造をグラフとして記述できれば、異なる時点の構造を比較することが可能になる。ただし、グラフの頂点数や辺集合が異なる場合、比較するための表現を定める必要がある。構造振動モデルでは、グラフを共通のベクトル空間へ写す写像 \(\phi\) を用い、隣接する二時点の構造差を距離として測定する。これによって、構造の変化を数値化できる。
時刻 \(t\) の構造を \(S_t\)、その直前の構造を \(S_{t-1}\) とすると、構造振幅 \(A_t\) は次のように定義される。
\[
A_t=d(S_t,S_{t-1})
=\|\phi(S_t)-\phi(S_{t-1})\|_2
\]
ここで \(\phi(S_t)\) は、構造を数値ベクトルへ変換した表現である。記号 \(\|\cdot\|_2\) はユークリッドノルムを表し、二つのベクトルの各成分の差を二乗して足し合わせ、その平方根を取る。\(A_t\) は、採用した表現において構造がどれだけ変化したかを示す量である。値が大きいほど、測定対象となった構造差が大きいことを意味する。ただし、振幅そのものは、変更が機能を改善したか、障害を増やしたかという評価を含んでいない。
この定義を具体的に理解するため、四つの部品 \(A,B,C,D\) の間に存在する有向辺を、二値の隣接行列で表す。辺が存在する場合を 1、存在しない場合を 0 とし、自己ループを除くすべての頂点の組を固定した順序で並べる。四頂点の場合、自己ループを除く有向辺の候補は \(4\times3=12\) 本である。各候補の有無を一つの成分として記録すれば、構造は 12 次元の二値ベクトルになる。
例えば、通常の処理経路だけを持つ構造では、辺集合は次のようになる。
\[
E_0=\{(A,B),(B,C),(C,D)\}
\]
ここへ検証部品 \(B\) から記録部品 \(D\) へ直接進む経路を追加すると、変更後の辺集合は次のようになる。
\[
E_1=\{(A,B),(B,C),(C,D),(B,D)\}
\]
この変更では、辺 \((B,D)\) の有無を表す成分だけが 0 から 1 へ変わる。ほかの 11 成分は変化しない。したがって、ベクトルの差を二乗して足し合わせると 1 になり、構造振幅は \(A_1=1\) となる。追加した辺が一本であっても、その辺がどのような処理を可能にするかによって、運用上の影響は異なる。しかし、この二値表現の振幅は、辺が一本変化したという事実だけを測定する。
同じ辺を削除した場合にも、その成分は 1 から 0 へ変化する。二乗した差は同じく 1 になるため、振幅は 1 である。つまり、一本の追加と一本の削除は、構造振幅だけを見る限り同じ変化量となる。振幅が測定しているのは変更の大きさであり、追加か削除かという更新方向ではない。
一般に、同じ頂点集合と同じ辺候補を用いる二値グラフについて、追加または削除された辺の総数を \(D_t\) とすると、構造振幅は次のように表せる。
\[
A_t=\sqrt{D_t}
\]
これは、変更された辺の各成分について、差の二乗が 1 となるためである。変更されなかった辺では差が 0 になるため、差の二乗を足し合わせると、変更された辺の総数 \(D_t\) に一致する。その平方根がユークリッド距離となる。既稿では、このような二値の辺表現における構造振幅と、追加・削除の関係が具体的に整理されている[8]。
ここで、辺の追加数を \(a_t\)、削除数を \(r_t\) とすると、変更された辺の総数は次のようになる。
\[
D_t=a_t+r_t
\]
したがって、構造振幅は次の式で与えられる。
\[
A_t=\sqrt{a_t+r_t}
\]
一方、複雑さの尺度として辺の本数を採用する場合、追加によって辺の本数は増え、削除によって減る。複雑さを \(K(S_t)=|E_t|\) と定めれば、その変化は次のようになる。
\[
\Delta K_t=K(S_t)-K(S_{t-1})=a_t-r_t
\]
この二つの式は、構造の更新について異なる情報を表している。振幅 \(A_t\) は追加と削除を合わせた変更量を示し、\(\Delta K_t\) は採用した複雑さの尺度における増減を示す。例えば、一本の辺を削除すると同時に別の一本を追加した場合、変更された辺は二本なので \(A_t=\sqrt{2}\) となる。しかし、辺の総数は変わらないため、\(\Delta K_t=0\) となる。構造の内容は変化しているのに、複雑さの増減だけを見ると変化がなかったように見える。
具体的な更新操作を比較すると、次のようになる。
| 更新操作 | 追加数 \(a_t\) | 削除数 \(r_t\) | 構造振幅 \(A_t\) | 複雑さの変化 \(\Delta K_t\) |
|---|---|---|---|---|
| 辺を一本追加する | 1 | 0 | 1 | +1 |
| 辺を一本削除する | 0 | 1 | 1 | -1 |
| 一本削除して別の一本を追加する | 1 | 1 | \(\sqrt{2}\) | 0 |
| 辺を二本追加する | 2 | 0 | \(\sqrt{2}\) | +2 |
| 辺を二本削除する | 0 | 2 | \(\sqrt{2}\) | -2 |
| 辺を変更しない | 0 | 0 | 0 | 0 |
この表では、一本の追加と一本の削除は振幅が同じであり、二本の追加と二本の削除も振幅が同じになる。一方、一本の追加と一本の削除を同時に行った場合には、構造の内容が変化しているにもかかわらず、辺の総数は保存される。構造振幅と複雑さの変化を分けて測定することで、変更量と更新方向を区別できる。
ただし、辺の本数を複雑さの尺度として選ぶことにも制約がある。例えば、四つの部品が直列に接続された構造と、一つの部品が残り三つの部品へ直接接続された構造では、どちらも辺の本数は三本である。しかし、障害の伝播経路や変更の影響範囲は異なる。直列構造では上流の障害が下流へ影響しやすく、一つの部品へ接続が集中する構造では、中心となる部品の障害が複数の経路へ影響する可能性がある。辺の本数が同じことは、依存関係の配置が同じことを意味しない。
また、重要な依存関係を表す辺と、ほとんど使用されない辺を、同じ重みで数えることが適切とは限らない。例えば、主要な処理経路を表す辺と、障害調査のために補助的な情報を送る辺では、削除したときの影響が異なる。辺の存在だけを二値で表せば、どちらの削除も振幅は 1 となる。そこで、辺に重みを付与し、関係の強さや重要度を表す方法が考えられる。
ただし、重みが何を意味するかは明確にする必要がある。例えば、重みを呼び出し頻度として定義した場合、頻繁に使用される経路ほど大きな値になる。一方、重みを障害時の影響度として定義した場合には、使用頻度が低くても重大な障害を引き起こす経路が大きな値になる可能性がある。さらに、通信量や処理時間を重みとする場合には、測定単位も異なる。異なる性質を同じ重みとして混在させると、距離の値が何を表すかが不明確になる。
例えば、固定した辺候補のそれぞれに実数の重みを割り当て、存在しない辺の重みを 0 とする。このとき、重みを並べたベクトルのユークリッド距離を用いれば、構造振幅は次のようになる。
\[
A_t=
\sqrt{
\sum_{e\in E^\ast}
\left(w_e(t)-w_e(t-1)\right)^2
}
\]
ここで \(E^\ast\) は比較対象として固定した辺候補の集合、\(w_e(t)\) は時刻 \(t\) における辺 \(e\) の重みである。この定義では、辺の追加や削除だけでなく、既存の辺の重みの変化も構造振幅へ反映される。例えば、同じ処理経路が存在していても、その経路を通る要求の割合が増えれば、呼び出し頻度を重みとするモデルでは振幅が生じる。ただし、呼び出し頻度の変化と障害への影響は別の性質であり、重みの変化を直接的な危険性の増減として解釈することはできない。
重みを使用する場合には、比較する時点で同じ測定単位と尺度を維持する必要がある。例えば、ある時点では一秒当たりの呼び出し回数を使用し、別の時点では一分当たりの呼び出し回数を使用すれば、実際の呼び出し頻度が変化していなくても数値上は大きな差が生じる。また、構造の規模によって重みの値が大きく変わる場合には、必要に応じて正規化の方法を定義することが考えられる。構造振幅の比較可能性は、共通の表現空間を使用していることに依存する。
ここで、グラフをベクトルへ変換する写像 \(\phi\) が、構造の違いをどれだけ保存しているかという問題も生じる。異なる二つのグラフが同じベクトルへ写される場合、ベクトル間の距離は 0 となる。しかし、元のグラフが完全に同一であるとは限らない。例えば、各頂点の接続数だけを特徴として記録する場合、接続の配置が異なる二つのグラフでも同じ特徴量になる可能性がある。この場合、埋め込み空間上の距離は、元の構造に関する擬距離として理解する必要がある。
構造振幅が 0 であることは、選択した表現で差が検出されなかったことを示す。構造のすべての属性が一致したことを保証するには、比較対象とする構造の違いを写像 \(\phi\) が十分に保存している必要がある。例えば、部品間の接続関係だけを記録するモデルでは、部品内部の処理内容が変更されても振幅が 0 になる場合がある。構造の変化を正確に評価するには、何を観測するための表現なのかを、測定結果と合わせて示す必要がある。
さらに、構造振幅が小さくなることと、構造が一つの状態へ収束することも区別される。例えば、一次元の状態を次のように定義する。
\[
x_t=\log(t+1)
\]
この状態は、時間 \(t\) が増加するにつれて増え続ける。しかし、隣接する時刻の差は次のようになる。
\[
A_t=|x_t-x_{t-1}|
=\log\left(\frac{t+1}{t}\right)
\qquad (t\geq1)
\]
時間が大きくなるほど、この値は 0 に近づく。一回ごとの変化は小さくなり続けるが、状態 \(x_t\) 自体は有限の値へ収束しない。したがって、一般的な実数値の状態空間では、構造振幅が 0 に近づくという条件だけから、状態が一定の値へ収束すると結論づけることはできない。
一方、頂点集合を固定し、辺の有無だけを二値で表す有限グラフでは事情が異なる。この場合、異なる構造間の距離には正の最小値が存在する。先ほどの二値ベクトルによる定義では、辺が一本でも変化すれば振幅は少なくとも 1 になる。そのため、この有限な二値状態空間で \(A_t\) が 0 へ収束するなら、十分に時間が経過した後には振幅が常に 0 となり、構造が変化しない状態に到達する。構造振幅と収束の関係は、状態空間が有限か、連続的な値を含むかによって異なる。
また、一定の二つの構造を交互に行き来する場合には、構造の更新は繰り返されるが、状態は一つの構造へ収束しない。例えば、一本の辺を追加した構造と、その辺を削除した構造を交互に繰り返せば、毎回の構造振幅は 1 である。構造は二つの状態の間を周期的に移動している。これは状態が収束する場合とも、一方向に変化し続ける場合とも異なる。構造の振幅、更新方向、周期性、状態の収束は、それぞれ独立した観測量として扱う必要がある。
これらの区別は、構造振動モデルを単に複雑化と単純化の反復を説明する比喩としてではなく、測定可能なモデルとして使用するために必要となる。振幅が大きいという結果だけでは、構造が複雑化したのか単純化したのかは分からない。複雑さが減少したという結果だけでは、構造の変更量は分からない。振幅が減少したという結果だけでは、運用上の機能が改善したことも保証されない。それぞれの量が表す性質を分けることで、測定結果に過剰な意味を与えずに済む。
実務上の評価では、構造振幅とは別に、必要な機能が維持されているかを測定する必要がある。例えば、ある変更によって辺の追加と削除が複数発生し、構造振幅が大きくなったとしても、その変更によって応答時間が短縮され、重大障害の発生可能性が減少したなら、運用上の利益がある。一方、構造振幅が小さくても、認証を迂回する辺が一本追加されたことで重要な安全性の条件が失われる場合がある。変更の規模と、変更によって生じる損失の大きさは一致しない。
このため、構造振動モデルによって測定される変化量は、変更を記述するための基礎となる一方、変更の価値を決定するには、機能、環境、目的、許容される損失について別の評価が必要となる。構造がどれだけ変化したかを測定できるようになって初めて、その変化をどのような理由で実施し、どのような結果を得たかを独立に問える。構造の変化を測定することと、その変化が運用へ与えた影響を説明することは、異なる分析段階に属する。
5.3. 関係の存在と影響の伝播を分ける
グラフによって部品間の関係を記述できても、その関係が実際の動作にどのような影響を与えるかは、接続の有無だけでは決まらない。例えば、検証部品 \(B\) から記録部品 \(D\) へ直接進む辺が存在していても、その辺が入力検証の失敗時だけに使用されるなら、通常の要求では経路が実行されない可能性がある。反対に、普段ほとんど使用されない復旧経路が、重大障害の際には全体の状態を変更することもある。関係が存在すること、関係が使用されること、使用された関係が他の要素へ影響することは、それぞれ異なる性質である。
例えば、通常の処理が \(A\rightarrow B\rightarrow C\rightarrow D\) で行われ、検証失敗時には \(B\rightarrow D\) の経路で失敗記録だけを残すとする。この構造では、入力検証が成功した要求は処理部品 \(C\) へ進み、検証に失敗した要求は処理を実行せずに記録部品 \(D\) へ進む。構造グラフには両方の経路が存在するが、各要求で実際に使用される経路は入力の条件によって異なる。グラフに辺が存在するという事実だけでは、特定の要求がどの辺を通過したかは分からない。
この違いを確認するためには、実際の要求について、どの部品が呼び出され、どの条件分岐を通過し、どの結果が得られたかを記録する必要がある。例えば、入力検証の結果、処理部品への到達の有無、記録部品へ渡された結果、利用者へ返した応答を追跡することで、構造上の関係が実際に使用された条件を確認できる。構造グラフが取りうる経路を示すのに対して、実行履歴は特定の条件で実際に通過した経路を示す。両者を対応づけることで、関係の存在から機能の成立へ至る過程を具体的に説明できる。
ただし、実行履歴に記録された経路の使用頻度だけで、その経路の重要性を決定することも難しい。例えば、通常時には全要求の 0.1% しか通過しない例外経路であっても、その経路が重要な障害を隔離している場合には、削除によって大きな損失が生じる可能性がある。逆に、頻繁に使用されている経路でも、容易に別の経路へ切り替えられるなら、障害時の影響は限定されるかもしれない。使用頻度は経路の重要性を判断するための一つの情報であり、障害の伝播範囲や代替可能性とは別に評価する必要がある。
また、グラフに直接の接続が存在しなくても、二つの部品が互いに影響する場合がある。例えば、処理部品 \(C\) と記録部品 \(D\) が、別々の要求を処理しながら同じ記録装置を使用しているとする。処理部品が大量のデータを書き込むことで記録装置の負荷が高まれば、記録部品の処理時間も延びる可能性がある。呼び出し関係を表すグラフでは、両者の間に直接の辺が存在しなくても、共通資源を介した依存関係が成立している。この場合、障害の原因を調べるには、部品間の呼び出し関係だけでなく、共有する資源とその利用状況を確認する必要がある。
この関係を構造モデルで表すなら、共有資源を新しい頂点として追加し、各部品からその資源への依存を表す方法が考えられる。例えば、記録装置を \(R\) とし、処理部品 \(C\) と記録部品 \(D\) の両方が \(R\) を使用するなら、\((C,R)\) と \((D,R)\) という関係を追加できる。これによって、直接の呼び出しが存在しない二部品でも、同じ資源を介して影響を受ける可能性を構造として表現できる。ただし、二部品が同じ資源に依存していることだけで、実際に性能への影響が発生したと結論づけることはできない。影響が生じるには、資源の使用状況や容量制約など、さらに具体的な条件が必要となる。
このように、構造上の依存関係は、影響が伝播する可能性のある経路を示す。一方、実際に影響が伝播するかどうかは、入力、負荷、内部状態、資源の容量、実行時の制御規則などに依存する。関係の存在と影響の伝播を区別することで、グラフに表現された接続を、直ちに因果関係として解釈することを避けられる。
影響の伝播を数理的に調べるには、構造グラフとは別に、実行時の状態変化を表すモデルを考えることができる。例えば、システム内の各部品の処理量や待ち行列の長さなどをまとめた状態を \(z_t\)、外部から与えられる要求を \(u_t\)、環境条件を \(C_t\) とする。このとき、実行時の状態遷移を次のように表せる。
\[
z_{t+1}=F(z_t,u_t,C_t)
\]
この式の \(F\) は、現在の実行状態と入力、環境条件から次の実行状態を決定する規則である。構造グラフ \(S_t\) が部品と関係の配置を表すのに対して、\(z_t\) は、その構造の下で実際に動作しているシステムの状態を表す。例えば、同じ構造を持つサービスでも、入力要求が少ない場合と多い場合では待ち行列の長さや応答時間が異なる。構造が変化していなくても、実行状態は変化するのである。
さらに、関数 \(F\) が十分に滑らかであるという仮定の下では、ある基準状態の近傍において、小さな状態変化が次の状態へどのように影響するかを局所的に近似できる。基準状態からの微小な差を \(\delta z_t\) とすると、外部入力と環境条件を固定した場合、次のような近似が得られる。
\[
\delta z_{t+1}\approx J_t\delta z_t
\]
ここで \(J_t\) は、状態遷移関数 \(F\) を状態変数 \(z\) について偏微分した行列であり、基準状態において評価される。各成分は、ある状態変数の小さな変化が、別の状態変数の次時刻の値へどの程度影響するかを表す。例えば、ある処理部品の待ち行列が増加したとき、後続する部品の待ち行列がどれだけ増えるかを、モデル上で調べることができる。
この行列が表す関係は、部品間の接続関係そのものとは異なる。グラフに辺が存在していても、その経路が現在使用されていなければ、局所的な状態変化に対する影響が小さい場合がある。反対に、共有資源への依存を通じて、直接接続されていない部品間に影響が現れる可能性もある。構造グラフは関係の配置を表し、実行時の状態遷移は、その配置と現在の条件の下で生じる振る舞いを表す。両者を区別することで、構造上の接続から実行時の影響を説明するために、どのような追加条件が必要かを明確にできる。
ただし、状態遷移関数を推定する場合にも、観測された相関関係を因果関係として解釈することには注意が必要である。例えば、処理部品 \(C\) の待ち行列が増加したとき、記録部品 \(D\) の待ち行列も増加していたとする。両者が直接接続されているなら、一方の処理が他方へ影響した可能性がある。しかし、外部からの要求量が増加し、両方の部品へ同時に負荷がかかった可能性もある。二つの変数が同時に増減するという観測結果だけでは、どちらがどちらへ影響したのか、あるいは共通の外部条件が両方へ影響したのかを特定できない。
この違いを調べるには、条件をそろえた比較が必要になる。例えば、外部からの要求量と記録装置の容量を一定に保ち、処理部品 \(C\) に与える入力だけを変更したとする。その結果、記録部品 \(D\) の待ち行列が変化するなら、処理部品への入力変更が記録部品へ影響するという因果関係を検討できる。さらに、共有資源を介した影響なのか、直接の処理経路を介した影響なのかを調べるには、資源の使用状況や実行履歴を合わせて観測する必要がある。
ただし、こうした介入を実施する場合には、変更によって別の条件が同時に変化していないかを確認する必要がある。例えば、処理部品への入力を増やしたことで記録装置だけでなく通信量も増加した場合、記録部品の遅延がどの経路から生じたかを特定するには、追加の比較が必要になる。また、本番環境での介入には利用者への影響や操作権限の制約があるため、検証環境や限定した入力条件で実施できる範囲を定める必要がある。因果関係を確認するための操作も、運用上の条件に従って選択される。
このような検証を通じて、構造グラフに記録された関係と、実際の影響の伝播を対応づけることができる。ある辺を追加した後に障害率が増加した場合でも、その辺が実際に使用された要求だけで障害が増えているのか、共有資源への負荷が増えたことによって別の処理まで影響を受けているのかを区別する必要がある。辺の追加という構造変更が、どの経路を通じて機能へ影響したかを確認できれば、変更によって生じた問題の原因を具体的に説明できる。
また、ある構造変更によって複数の関係が同時に変化する場合には、個々の関係の影響を分離することが難しくなる。例えば、処理部品を二つに分割し、同時に記録方式も変更した場合、処理時間が短縮されても、その改善を部品の分割だけに帰属させることはできない。分割によって並列処理が可能になった効果と、記録方式の変更によって待ち時間が減少した効果が混在する可能性がある。構造の変更量が測定できても、その変更を構成する各操作の因果効果まで自動的に識別できるわけではない。
ここで、構造振動モデルが持つ記述と説明の役割を区別できる。構造振幅は、採用した構造表現において何がどれだけ変化したかを測定する。関係グラフは、その変化がどの要素と関係に生じたかを示す。実行時の状態遷移は、その構造の下でどのような動作が生じるかを記述する。そして、介入を伴う比較や条件を調整した観測によって、どの変更がどの結果を生じさせたかを検証する。これらは相互に接続しているが、それぞれ異なる問いに答えている。
縁起との構造的な対応を考える場合にも、この区別は意味を持つ。現象が条件に依存して成立するという理解は、ある結果を一つの要素の性質だけへ帰属させることの限界を示す。例えば、認証に失敗したという結果が得られたとき、認証処理そのものの不具合だけでなく、通信経路、外部認証基盤、設定、入力条件などを調べる必要がある。結果が成立する条件を明らかにすることで、どの関係が失われたのか、どの条件が結果の発生へ寄与したのかを具体的に調べられる。
ただし、縁起の教説が扱う条件関係と、工学的な因果モデルが扱う関係は、それぞれ異なる目的と検証方法を持つ。仏教における縁起は、苦の生起と消滅を理解するための教説として展開される。一方、工学的な構造モデルでは、対象を明示的に定義し、観測可能な状態や介入可能な操作を用いて、特定の結果が成立する条件を検証する。両者に共通するのは、現象を孤立した実体として説明する代わりに、その成立を支える条件と関係へ注意を向けるという点である。
この共通性から、構造の持続についても別の見方が得られる。ある部品が長期間同じ機能を提供している場合、その機能の持続は、部品自体の不変性だけによって成立しているとは限らない。外部の仕様変更へ対応する更新が行われ、依存する資源が維持され、障害時には適切な経路へ切り替えられることによって、同じ機能が継続している場合がある。構造の持続性は、必要な関係を維持し、条件の変化に応じて関係を更新できることによって支えられる。
一方、関係が維持されていることを構造グラフ上で確認できても、その関係が必要な機能を実現し続けることまで保証されるわけではない。例えば、受付から記録までの経路が保存されていても、外部環境の変化によって処理部品が正しい結果を生成できなくなれば、サービスの機能は失われる。構造の同一性、実行時の状態、環境との適合性、機能の維持は、それぞれ異なる条件を持つ。これらを分けて測定し、関係づけることによって、機能が成立する理由と、成立しなくなる原因を説明できる。
関係グラフと状態遷移による定式化は、縁起の教説を数学的に証明するものではない。しかし、成立条件と関係を説明の中心に置くという視点を、具体的なシステムの分析へ接続することはできる。構造振動モデルでは、要素と関係を定義することで状態を記述し、構造振幅によって変化の大きさを測定し、実行時の状態と介入結果を比較することで、変化が機能へ与えた影響を検証する。ここに、条件に依存して成立する世界を、操作可能な対象として理解するための具体的な方法がある。
ただし、この方法によって得られる結論の範囲は、モデルに含めた要素、関係、環境条件、観測方法によって決まる。例えば、ある変更が応答時間を短縮したとしても、復旧可能性や安全性に与えた影響を測定していなければ、それらの性質について改善したと結論づけることはできない。同様に、構造の変化量を精密に測定できても、その変化が望ましいかどうかは、維持すべき機能と許容される損失に照らして判断する必要がある。
構造振動モデルが提供するのは、変化する構造を数値化する手段だけではない。構造として何を識別し、どの関係を測定し、どの条件で機能が成立し、どの介入によって結果が変化したかを、分離して検討するための形式である。無常と縁起の思想が、現象の成立を固定的な実体へ帰属させる見方を問い直すのに対して、構造振動モデルは、その成立条件のうち具体的に観測・操作できる部分を定義する。両者の接続は、この役割の違いを保ちながら、変化と持続を条件と関係の中で理解することによって成立する。
6. 動的平衡を、変化する構造の持続可能性として再定義する
6.1. 動いていることと壊れていることは同義ではない
機能を提供し続けるサービスであっても、その内部では処理資源の割り当て、負荷の分散、障害からの復旧、依存関係の更新が継続して行われている。利用者から見える機能が一定であっても、それを実現する内部状態が静止しているとは限らない。例えば、要求数の増加に応じて処理資源を追加し、要求数が減少すれば余分な資源を削減するサービスでは、内部の構成が変化することによって応答性能が維持されている。構造の変更は、継続性を損なう原因になる場合もあれば、継続性を成立させるために必要な操作になる場合もある。
この違いを理解するには、構造の状態と、構造によって提供される機能を分けて考える必要がある。例えば、一つの処理部品で毎秒 100 件の要求を処理できるサービスを考える。利用者からの要求が毎秒 80 件であれば、処理能力には余裕がある。しかし、要求が毎秒 120 件へ増加すれば、同じ構造を維持している限り、処理能力を上回る要求が蓄積する。処理部品を追加して毎秒 150 件の処理能力を確保すれば、内部構造は変化するが、要求を処理し続けるための条件を回復できる。ここでは、内部構造を固定することよりも、環境に応じて構造を変更することが機能の維持に寄与している。
逆に、処理資源の追加と削減を頻繁に繰り返すと、構成変更そのものが不安定性を生む場合がある。例えば、要求数が一時的に増えたことを検出して処理部品を追加した直後に、要求数が減少したと判断して部品を削除する運用を考える。部品の起動や停止には時間がかかるため、削減した時点では以前の追加が十分に効果を発揮していない可能性がある。その状態で要求が再び増えると、処理能力が不足し、再度追加が必要になる。構造を変更できるという性質だけでは、安定した運用を保証できない。変更の判断に用いる観測方法、判断の間隔、介入が反映されるまでの時間が、機能の持続性に影響する。
このような現象を考えるとき、動的平衡という概念が役に立つ。動的平衡とは、ここでは内部状態の変化を許容しながら、必要な機能が一定の条件を満たしている状態を指す。内部の各要素が同じ値を保つことよりも、変化する要素間の関係によって全体の機能が維持されることに注目する。例えば、処理部品の数、待ち行列の長さ、実行中の要求数が変化していても、利用者が要求した処理を許容時間内に完了できれば、機能上の安定は成立している。この場合、内部状態が時間とともに変化することと、サービスが安定していることは両立する。
ただし、動的平衡という言葉だけでは、どのような変化を許容するのかを判定できない。例えば、処理待ち行列の長さが 0 件から 100 件の間で変動している場合と、0 件から 100 万件の間で変動している場合では、同じく有限の範囲に収まる動きであっても、運用上の意味は異なる。また、待ち行列の長さが周期的に増減していても、増加している時間帯に利用者の要求が大量に遅延していれば、必要な機能を満たしているとは評価できない。動きが存在すること、その動きが一定の範囲に収まること、必要な機能が維持されることは、異なる評価対象である。
非線形力学においても、状態が変化し続けることと、その運動が一定の数学的性質を持つことは分けて扱われる。Lorenz は、決定論的な方程式から生じる運動が非周期的になり、初期条件の小さな差によってその後の軌道が大きく異なりうることを示した[9]。これは、運動が決定論的な規則に従うことと、その運動が単純な周期を繰り返すことが同じではないことを示す重要な研究である。ただし、非周期的な運動が一定の領域に存在することと、外部から要求される機能を満たすことは別の問題である。物理的な状態空間における軌道の性質から、サービスの品質が保証されるわけではない。
例えば、あるシステムの内部状態が有限の範囲にとどまり続けるとしても、その範囲の中に利用者が許容できない状態が含まれていれば、運用上は問題がある。逆に、内部状態が大きく変化していても、すべての変化が許容された機能の範囲内に収まっているなら、継続的な運用は成立する。数学的な軌道の有界性と、運用上の許容性を区別することによって、動的平衡を具体的な条件として記述できる。
この違いをさらに明確にするため、待ち行列の長さを \(q_t\)、単位時間に到着する要求数を \(a_t\)、同じ時間内に処理できる最大件数を \(\mu_t\) とする。要求が失われず、処理されなかった要求が次の時点へ持ち越される単純なモデルでは、待ち行列の更新を次のように表せる。
\[
q_{t+1}=\max\{0,q_t+a_t-\mu_t\}
\]
ここで \(q_t\) は時刻 \(t\) の待ち行列、\(a_t\) は新たに到着した要求、\(\mu_t\) はその期間に処理できる件数である。関数 \(\max\) は、待ち行列が負の値にならないことを表す。例えば、毎秒 110 件の要求が到着し、毎秒 100 件しか処理できないなら、処理されなかった 10 件が毎秒蓄積する。初期状態を \(q_0=0\) とすれば、要求の到着量と処理能力が一定である間、待ち行列は次のように増加する。
\[
q_t=10t
\]
この状態では、処理部品そのものが故障しているとは限らない。部品は毎秒 100 件の要求を処理し続けている。しかし、要求の到着量が処理能力を上回るため、未処理の要求が蓄積する。構造に障害が発生していなくても、現在の環境条件に対して処理能力が不足していれば、サービスは必要な性能を維持できなくなる。動作していることと、要求された機能を満たしていることの違いが、待ち行列の増加として観測される。
ここで処理能力を毎秒 120 件へ増やしたとする。要求の到着量が毎秒 110 件のままであれば、待ち行列に蓄積していた要求を毎秒 10 件ずつ減らせる。処理資源を追加するという構造変更によって、待ち行列の増加を止め、蓄積した要求を解消できる可能性が生じる。ただし、資源の追加が実際の処理能力へ反映されるまでの時間や、資源の増強によって生じる新しい制約も考慮する必要がある。処理能力の増強を決定した時点と、その効果が得られる時点は、必ずしも一致しない。
また、待ち行列が減少していることだけで、利用者の要求を満たしていると判断することもできない。例えば、すでに大量の要求が蓄積していれば、待ち行列が減少し始めても、先に受け付けた要求が長時間待たされる可能性がある。待ち行列の増減は処理能力と要求量の関係を表すが、個々の利用者が経験する応答時間を直接表しているわけではない。利用者にとって必要な性能を評価するには、要求が受け付けられてから結果が返されるまでの時間や、処理が正常に完了した割合も観測する必要がある。
さらに、処理資源を増やせば必ず性能が改善するというわけでもない。例えば、複数の処理部品が同じ記録装置へ結果を書き込む構造では、処理部品を増やすことで記録装置への要求が集中する可能性がある。処理能力を増強したつもりでも、共有する記録装置が新しい制約となれば、全体の応答時間は改善しない場合がある。構造の変更によって一つの制約が緩和されると、別の依存関係が全体の性能を制約することがある。持続可能性を評価するには、個々の部品の能力だけでなく、部品間の関係と共有資源を含む全体の条件を確認する必要がある。
このように、内部状態の変化は、システムの機能が失われる原因にも、必要な機能を維持するための手段にもなる。構造の変化量だけを測定すれば、処理資源の追加は大きな変更として記録されるかもしれない。しかし、その変更によって処理能力の不足が解消されたなら、運用上の意味は改善である。一方、構造を変更しなくても、要求量の増加によって待ち行列が蓄積し続けるなら、運用上の機能は悪化する。構造の変化と機能の維持を別の尺度で評価することによって、動的平衡を具体的に検討できる。
ここには、無常的な世界を運用するという問題との接点がある。ある構造が長期間機能してきたとしても、それが将来の環境条件に対しても適切であるとは限らない。過去の安定は、その期間に成立していた条件の下で得られた結果である。条件が変化すれば、同じ機能を維持するために別の構造が必要になる場合がある。構造の持続を、その形の保存としてではなく、必要な機能を成立させる条件の継続として捉えることで、変化を含む安定を具体的に説明できる。
6.2. 許容集合は、運用目的を数学的に明示する
動的平衡を運用上の条件として扱うには、どの状態を許容できるかを明示する必要がある。例えば、応答時間が短いこと、処理結果が正しいこと、障害から復旧できることは、いずれもサービスにとって重要な性質である。しかし、どの程度の応答時間なら十分なのか、どの割合までの失敗を許容するのか、復旧にどれだけの時間を使えるのかは、利用目的や責任範囲によって異なる。これらを具体的な条件として定めることで、内部構造が変化している場合でも、必要な機能が維持されているかを評価できる。
ここで、構造を \(S\)、環境条件を \(C\) とし、その組み合わせによって発生する運用上の損失を \(L(S,C)\) とする。\(L\) は、例えば応答時間の目標からの逸脱、処理結果の誤り、サービスの停止、復旧に必要な時間などを、あらかじめ定めた方法で評価する関数である。値が小さいほど望ましい状態であると定め、許容できる損失の上限を \(\tau\) とすれば、環境 \(C\) において許容される構造の集合を次のように表せる。
\[
\Omega(C)=\{S\mid L(S,C)\leq\tau\}
\]
この式の \(\Omega(C)\) は、環境 \(C\) の下で必要な運用条件を満たす構造の集合である。構造が \(\Omega(C)\) に含まれるとは、その構造が現在の環境に対して定められた損失の上限を満たしていることを意味する。例えば、同じ負荷に対して単一の処理部品でも複数の処理部品でも必要な性能を満たすなら、両方の構造が許容集合に含まれる。一方、要求量が増加し、単一の処理部品では処理能力が不足するようになれば、以前は許容されていた構造が新しい環境の許容集合から外れる可能性がある。
この定義によって、構造の同一性と運用上の許容性を分けられる。同じ構造 \(S\) であっても、環境が \(C_1\) から \(C_2\) へ変化すれば、評価される損失は異なりうる。例えば、処理能力が毎秒 100 件のサービスは、毎秒 80 件の要求が到着する環境では十分な性能を示していても、毎秒 120 件の要求が到着する環境では待ち行列が増加し続ける可能性がある。構造が変化していなくても、環境との組み合わせによって許容性が変化するのである。
逆に、環境が変化したときに構造を更新し、必要な機能を維持できる場合もある。例えば、処理部品を追加することで要求の増加に対応し、応答時間を許容範囲内に保てるなら、変更前後で構造が異なっていても、両方の時点で運用上の条件を満たせる。この場合、構造の更新は、許容集合の内部にとどまるための操作として理解できる。
ただし、損失関数 \(L\) を定義する際には、評価する期間と入力の条件を明確にする必要がある。例えば、一秒以内に応答する要求の割合を 99% 以上とする目標を考える。このとき、どの要求を対象にするのか、応答時間をどこからどこまで測定するのか、どの期間の要求を集計するのかによって、同じシステムでも評価結果が異なる。測定期間が一時間であれば短時間の障害の影響が大きく現れる場合があり、一か月であれば正常な期間の要求が多数含まれることで、短時間の障害が全体の割合の中に埋もれることもある。
Google の SRE におけるサービスレベル目標は、こうした運用上の要求を測定可能な指標と目標値によって明示する実践例である[10]。例えば、応答時間、成功率、可用性などについて具体的な指標を定め、一定の評価期間における達成状況を確認する。ここでは、システムが正常かどうかを抽象的な印象だけで判断するのではなく、どの利用者のどの操作について、どの程度の品質を維持する必要があるかを定めることが重要となる。
応答時間の目標を具体的に表すため、評価期間中に観測された要求数を \(N\)、そのうち応答時間が一秒以内だった要求数を \(N_{\mathrm{ok}}\) とする。評価対象の要求が明確に定義されている場合、一秒以内に応答できた割合 \(r\) は次のように表せる。
\[
r=\frac{N_{\mathrm{ok}}}{N}
\]
目標を 99% 以上と定めるなら、許容条件は次のようになる。
\[
r\geq0.99
\]
例えば、評価期間中に 10 万件の要求があり、そのうち 9 万 9 千 500 件が一秒以内に応答したなら、\(r=0.995\) となり、目標を満たす。一方、9 万 8 千件しか目標時間内に応答できなかった場合は \(r=0.98\) となり、目標を満たさない。応答時間の目標と評価対象を明確に定めることで、内部構造が異なる二つの状態についても、同じ基準で機能の維持を比較できる。
ただし、割合だけを用いた評価には限界がある。例えば、全体の 99.5% の要求が目標時間内に処理されていても、残る 0.5% が特定の重要な操作へ集中していれば、その操作を必要とする利用者にとってサービスは十分な機能を提供できていない可能性がある。また、失敗した要求を集計対象から除外するような測定方法を採用すれば、実際にはサービスが機能していないにもかかわらず、応答時間の割合が良好に見える場合がある。指標を評価する際には、分母に何を含めるか、失敗をどのように扱うか、重要な要求を個別に評価する必要があるかを確認する必要がある。
さらに、応答時間だけでなく、処理結果の正確性や復旧可能性も維持する必要がある場合には、一つの平均的な損失へすべてをまとめるより、複数の制約を同時に課す方が適切なことがある。例えば、応答時間が十分に短くても、処理結果が誤っていれば、必要な機能を満たしたとは評価できない。反対に、結果が正しくても、利用者が許容できないほど長い時間を要するなら、運用上の問題がある。
このような場合、運用上の条件を複数の評価関数で表すことができる。応答時間に関する損失を \(L_1\)、正確性に関する損失を \(L_2\)、復旧可能性に関する損失を \(L_3\) とし、それぞれの許容上限を \(\tau_1,\tau_2,\tau_3\) とすれば、許容集合は次のように定義できる。
\[
\Omega(C)=
\left\{
S\ \middle|\
\begin{aligned}
L_1(S,C)&\leq\tau_1\\
L_2(S,C)&\leq\tau_2\\
L_3(S,C)&\leq\tau_3
\end{aligned}
\right\}
\]
この式では、三つの条件をすべて満たす構造だけが許容集合に含まれる。応答時間が改善しても正確性の条件を満たさなければ、その構造は許容されない。同様に、通常時の性能が良好でも、必要な時間内に障害から復旧できない構造は、復旧可能性の制約によって許容集合から外れる。複数の条件を個別に設定することで、一つの指標の改善が別の重大な損失を覆い隠すことを防げる。
この違いを具体的に整理すると、次のようになる。
| 評価対象 | 測定する性質 | 許容条件の例 | 条件を満たしていても残る問題 |
|---|---|---|---|
| 応答性能 | 要求を受け付けてから結果を返すまでの時間を測定する。 | 評価期間中の 99% 以上の要求が一秒以内に完了する。 | 重要な要求だけが遅延している場合、全体の割合では影響が隠れる可能性がある。 |
| 処理の正確性 | 要求に対して正しい結果が返された割合を測定する。 | 指定した入力集合に対する誤り率が許容上限以下である。 | 観測した入力集合に含まれない条件で、誤りが発生する可能性がある。 |
| 可用性 | 必要な操作を実行できる時間や要求の成功率を測定する。 | 指定した評価期間における可用性が目標値以上である。 | 短時間でも重大な影響を持つ停止が、集計上の目標に収まる場合がある。 |
| 復旧可能性 | 障害が発生してから必要な機能を回復するまでの時間を測定する。 | 対象とする障害について、定めた時間内に復旧できる。 | 想定していない障害や複数障害の同時発生では、復旧条件が成立しない場合がある。 |
| 構造の更新可能性 | 環境変化に対応する変更を、必要な時間と手続の範囲で実施できるかを確認する。 | 要求の増加や外部仕様の変更に対して、許可された操作で機能を維持できる。 | 変更に必要な時間や権限が不足すると、技術的に可能な変更でも実施できない場合がある。 |
この表の各条件は、互いに関係しているが、同じ性質ではない。例えば、処理能力を増強すれば応答性能が改善する場合がある。しかし、処理部品の追加によって状態の整合性を維持する必要が生じれば、正確性や復旧可能性に新しい制約が発生する可能性がある。現在の応答性能を改善するための変更が、別の運用条件を悪化させる場合もある。許容集合を複数の制約から構成することで、構造変更によってどの性質が維持され、どの性質が損なわれたかを分けて評価できる。
また、許容集合を定義するだけでは、その条件が将来にわたって維持されることは保証されない。例えば、現在の構造 \(S_t\) が環境 \(C_t\) において許容集合に属していても、次の時点で環境が変化すれば、同じ構造が許容集合から外れる可能性がある。さらに、構造を変更する操作が存在していても、その操作を実施するまでに必要な時間が長ければ、許容条件を満たせない期間が発生する場合がある。
ここで、ある時点での許容性と、時間を通じた持続可能性を区別する必要がある。時刻 \(t\) の構造が許容集合に属する条件は次のように表される。
\[
S_t\in\Omega(C_t)
\]
一方、指定した運用期間のすべての時点で許容条件を満たすことを要求するなら、次のような条件になる。
\[
S_t\in\Omega(C_t)
\qquad
\text{for all }t=0,1,\ldots,T
\]
後者は、各時点で環境が変化しても、必要な機能を満たす構造が維持されていることを要求する。ただし、実際のサービスでは障害による一時的な逸脱を許容する場合もある。その場合には、許容集合から外れる時間、逸脱の程度、復旧までの時間を別の条件として定める必要がある。すべての時点で制約を満たすことと、指定期間の一定割合で制約を満たすことは、異なる運用目標である。
また、構造を変更する途中の状態にも注意が必要である。例えば、単一の処理部品から複数の処理部品へ移行する場合、変更前と変更後の構造がどちらも許容集合に属していても、移行中に一時的な停止や性能低下が発生する可能性がある。更新前後の二時点だけを測定すると、その間に生じた障害を見落とす場合がある。持続可能性を評価するには、更新が完了した状態だけでなく、更新を実施する過程で必要な機能を維持できるかも確認する必要がある。
さらに、観測方法の制約によって、許容集合への所属を直接確認できない場合もある。例えば、復旧可能性は、実際に障害が発生して復旧を行うまで観測できない性質を含んでいる。障害が発生していない期間にサービスが正常に動作していても、重大障害から必要な時間内に復旧できるかどうかは、その事実だけでは分からない。復旧手順の試験や障害を想定した検証を行うことで、許容条件が成立する可能性を評価できるが、検証していない障害条件まで保証するには追加の根拠が必要となる。
このように、許容集合は運用上の目的を明確にするための形式であり、その集合に属するかどうかの判定には、評価関数の定義、観測方法、環境条件、時間範囲が必要となる。許容集合を定義したこと自体が、運用上の安定性を保証するわけではない。現在の状態が条件を満たしているかを測定し、環境が変化したときに必要な構造へ更新できるかを調べ、その更新の過程でも機能を維持できるかを確認することによって、持続可能性を具体的に評価できる。
ここで無常的な世界との関係を考えると、許容集合は、ある構造を永続的に固定するための領域というより、条件の変化に応じて維持したい機能を明示した領域として理解できる。環境が変化すれば、同じ機能を提供するために適切な構造も変化する可能性がある。また、利用者の要求や組織の責任が変化すれば、許容集合を定める評価基準自体が更新される場合もある。どの状態を望ましいとするかは、現実の構造だけでなく、評価の目的と条件にも依存している。
ただし、評価基準が更新されることと、現在の運用結果を都合よく評価し直すことは区別する必要がある。例えば、サービスの応答性能が目標を下回った後に、目標値を緩和して許容集合を広げれば、新しい基準では条件を満たすかもしれない。しかし、それによって実際の応答性能が改善したわけではない。評価基準を変更する場合には、変更前後の基準と、その変更を正当化する理由を明示する必要がある。運用上の持続可能性を評価するには、対象の状態と評価基準の変化を別々に記録することが重要になる。
6.3. 同じ機能が維持されても、維持方法は更新されうる
あるサービスが必要な機能を継続して提供している場合でも、その機能を実現する構造が一つに定まるとは限らない。例えば、要求数が少ない段階では、一つの処理部品がすべての要求を順番に処理する構造で十分な場合がある。この構造は部品間の通信が少なく、状態の管理も比較的単純であるため、変更や障害解析の負担を抑えやすい。しかし、利用者が増え、要求が集中するようになると、単一の処理部品では必要な応答時間を維持できなくなる可能性がある。その場合には、処理部品を分割して並列に実行する構造へ更新することが合理的になる。
ただし、処理部品を分割すると、別の制約が現れることがある。複数の処理部品が同じ状態を変更する場合には、更新の順序や整合性を管理する必要がある。ある部品が更新した情報を別の部品が古い状態のまま使用すれば、誤った結果が生じる可能性がある。また、分割した部品間の通信が増えることで、通信遅延や障害の伝播経路が増加する場合もある。要求数の増加に対応するための複雑化が、状態管理や障害解析の費用を増やすのである。
運用が進み、処理負荷の分布や利用者の要求が変化すれば、分割した部品を再び統合する判断が合理的になる場合もある。例えば、以前は複数の処理部品へ要求が均等に分散していたが、利用形態の変化によって一部の処理部品しか使用されなくなったとする。この場合、使用頻度の低い部品を維持する費用が大きくなり、統合によって管理対象を減らせる可能性がある。ただし、統合後の部品へ障害や負荷が集中する危険があるため、統合によって失われる分散性や復旧可能性も評価する必要がある。
このように、構造の複雑化と単純化は、同じ機能を維持するための異なる方法として現れる。要求数が増えたときには分割が有利になり、要求の分布が変化したときには統合が有利になる場合がある。変更の方向が反転しても、必要な機能を維持するという目的は継続している。構造の形が一定であることよりも、その時点の環境に対して適切な関係を形成できることが、運用上の持続性を支える。
この関係を数理的に捉えると、構造の変化量を表す \(A_t\) と、許容集合への所属を表す \(S_t\in\Omega(C_t)\) は、異なる役割を持つ。構造振幅が大きい変更でも、その変更によって必要な機能を維持できるなら、運用上の利益がある。逆に、振幅が小さい変更でも、重要な依存関係を失わせれば、許容条件を満たせなくなる場合がある。
例えば、認証処理の経路を一つ変更しただけで、未検証の要求が実行処理へ到達できるようになった場合を考える。構造上は辺が一本追加されただけであっても、その変更によって重要な安全性の条件が失われる可能性がある。一方、複数の処理部品を追加し、負荷分散の経路を大きく変更した場合には、構造振幅が大きくても、必要な応答性能を維持するために適切な変更となる場合がある。構造振幅の大小だけから、変更の危険性や価値を判断することはできない。
また、現在の構造が許容集合に属していることと、その構造を維持することが将来にわたって適切であることも区別する必要がある。例えば、現在の要求量では単一の処理部品で十分に対応できていても、近い将来に要求量が増加することが確実であり、処理部品の追加に長い時間を要する場合には、現在の性能が良好な段階で増強を開始する必要があるかもしれない。許容条件を満たさなくなってから変更を開始する運用では、変更が完了するまでの間に機能が失われる可能性がある。
この場合、構造の更新は、現在の障害を修正するための操作というより、将来の環境変化に備えて許容条件を維持するための操作となる。変更の必要性を判断するには、現在の状態だけでなく、環境の変化に関する予測と、変更に必要な時間を考慮する必要がある。例えば、処理能力を増強するために一日必要であるなら、要求量が処理能力の上限へ到達する前に、増強の判断と実施を完了する必要がある。構造の更新を適切な時点で実行できることが、持続可能性の条件となる。
ただし、将来の環境変化を完全に予測できるとは限らない。要求量が増加すると予測して処理資源を大量に追加した場合でも、実際には要求量が増えず、余分な維持費用が発生することがある。反対に、要求量の増加を過小評価すれば、必要な処理能力を確保できない可能性がある。予測に不確実性がある以上、構造の更新時点と更新量は、予測の精度、追加費用、変更に要する時間、性能不足による損失を合わせて判断する必要がある。
このような運用では、構造変更を実施するたびに、次の状態が必ず望ましいものになるとは限らない。例えば、負荷分散のために処理部品を追加した結果、部品間で状態の不整合が生じ、処理結果の正確性が低下する場合がある。応答性能を維持するための変更が、正確性という別の許容条件を損なったのである。複数の制約を同時に満たす必要がある場合、ある指標の改善だけで変更の成功を判断することはできない。
さらに、変更によって許容条件を一時的に満たせなくなる場合もある。例えば、処理部品の配置変更に伴って短時間の停止が必要な場合、更新前と更新後の構造がともに許容集合に属していても、更新中の状態は許容集合の外側にある可能性がある。変更の影響を評価するには、更新後の性能だけでなく、更新中の停止時間、利用者への影響、変更が失敗した場合の復旧可能性も含める必要がある。
この違いを整理するため、構造更新について、変更前、変更中、変更後という三つの時点を考えることができる。
| 評価時点 | 確認する対象 | 具体的な失敗条件 | 必要な評価 |
|---|---|---|---|
| 変更前 | 現在の構造と環境が、必要な機能を満たしているかを確認する。 | 現在は正常でも、予定されている負荷増加に対応できない場合がある。 | 現在の許容条件と、将来の環境変化に対する余裕を確認する。 |
| 変更中 | 構造を更新する過程で、必要な機能が維持されるかを確認する。 | 部品の停止、状態の不整合、経路の切り替え失敗が発生する場合がある。 | 更新中の機能、停止時間、失敗時の復旧方法を確認する。 |
| 変更後 | 新しい構造が、更新後の環境で必要な機能を満たしているかを確認する。 | 応答性能が改善しても、正確性や復旧可能性が悪化する場合がある。 | 複数の許容条件を同じ基準で測定し、変更の結果を検証する。 |
この表から、構造の更新が成功したかどうかは、変更後の構造だけでは判断できないことが分かる。変更によって期待した性能が得られても、変更中に長時間の停止が発生したなら、その影響を評価する必要がある。また、変更後の性能が改善していても、復旧手順が失われていれば、将来の障害に対する持続可能性が低下している可能性がある。構造変更の評価には、更新の目的、実施過程、得られた結果を対応させる必要がある。
ここで、許容集合の維持という考え方を用いると、構造の変更が継続的な運用にどのように寄与したかを具体的に説明できる。例えば、要求量が増加する前に処理能力を増強し、更新中も必要な応答性能を保ち、更新後も正確性と復旧可能性を維持できたなら、構造の変化を通じて運用上の許容条件を維持したことになる。逆に、変更後の性能だけが改善していても、更新中の停止や別の機能の喪失が許容条件を超えていれば、継続的な運用という観点では問題が残る。
ただし、ある時点で許容集合に属していることと、どのような環境変化に対しても許容集合の内部にとどまり続けられることは異なる。例えば、現在の処理能力が十分であっても、要求量が急激に増加し、追加できる処理資源にも上限があれば、必要な機能を維持できなくなる場合がある。許容集合の定義は、どの状態を望ましいとするかを示す。一方、その状態を維持するために必要な操作が存在するかどうかは、構造の更新規則、環境変化の範囲、操作可能な資源によって決まる。
さらに、技術的に可能な変更であっても、実際の運用で実施できるとは限らない。例えば、処理資源の増強に必要な費用が予算の上限を超える場合や、外部サービスの仕様変更に対応するための権限が与えられていない場合には、必要な変更を直ちに実施できないことがある。構造の更新可能性は、技術的な操作の存在だけでなく、変更に必要な資源、時間、権限、手続によって制約される。運用上の持続可能性を考える際には、これらの条件も評価対象となる。
このように、動的平衡は、内部構造が一定の形に落ち着いていることとしてよりも、環境の変化に応じて必要な機能を維持できることとして理解できる。ある時点では複雑な構造が適切であり、別の時点では単純な構造が適切となる場合がある。構造の増減を一方向に評価するのではなく、各時点でどの条件を満たし、その条件を維持するためにどの更新が必要となったかを調べることで、構造変化と機能の持続の関係を説明できる。
ただし、ここでいう動的平衡は、非線形力学における特定の平衡点や安定性の定義と同一ではない。内部状態が周期的に変化する場合もあれば、非周期的に変化する場合もあり、一定の構造へ収束する場合もある。いずれの場合でも、運用上の許容条件を満たしているかという評価は別に必要となる。構造の軌道が数学的に有界であることと、利用者が必要とする機能が維持されていることは、異なる性質として検証する。
この違いは、無常的な世界を運用するという問題を考えるうえでも重要である。条件に依存して成立するものは、その条件が変化するとき、従来の形を維持するだけでは必要な機能を保てなくなる場合がある。一方、条件の変化に応じて関係を更新することで、以前と同じ機能を継続できる可能性がある。構造の持続性は、その形が永続することよりも、成立条件の変化へ適切に対応できることによって支えられる。
ただし、どの機能を維持すべきかという判断も、あらかじめ与えられた不変の基準とは限らない。利用者の要求、組織の責任、社会的な条件が変化すれば、以前は許容されていた性能や障害の水準が、現在では許容されなくなる場合がある。また、同じ性能を測定していても、観測期間や集計対象を変更すれば、評価結果が変化する可能性がある。構造の状態だけでなく、構造を評価する基準と観測方法も、運用の条件として明示する必要がある。
構造振動モデルにおける動的平衡を具体的に扱うためには、構造の更新量、環境の変化、運用上の損失、許容条件、更新に必要な操作を分けて記述することが必要となる。これらを区別すれば、構造が大きく変化しても機能が維持された理由や、構造が一定であっても機能が失われた原因を説明できる。そして、状態を評価するために選択した指標や言葉が、実際の更新判断へどのように影響するかも検討できる。
この意味で、動的平衡は、変化を停止させることによって成立する静止状態ではなく、条件の変化に対応して必要な関係を維持する過程として理解できる。ただし、その過程を運用上の成功として評価するためには、何を維持するか、どの程度の損失を許容するか、どの操作を実行できるかを具体的に定める必要がある。構造の変化そのものよりも、変化する条件の下で機能がどのように成立し続けるかを問うことが、動的平衡を操作理論として考える際の中心となる。
7. 言語と指標は現実を記述すると同時に、現実を作り替える
7.1. 便宜的な分類が固定的な実体として扱われる
人間が複雑な対象を理解し、複数の主体の間で情報を共有するためには、名称や分類が必要になる。ソフトウェアの運用でも、「正常な処理」「例外」「失敗」「障害」「復旧」といった言葉が使われる。これらの分類によって、無数に存在する個別の動作を一定のまとまりとして把握し、記録や判断の対象にできる。しかし、どの動作を正常と呼び、どの状態を障害とみなすかは、観測の目的と評価基準によって具体的に定められる。分類は現実を扱うための道具であり、その分類に含まれるすべての対象が同じ性質を持つことまで保証するものではない。
例えば、ある処理が例外として記録された場合でも、その意味は一つではない。利用者から与えられた入力が仕様に適合しなかった場合、外部サービスが応答しなかった場合、内部のプログラムに不具合があった場合は、いずれも例外的な処理として記録される可能性がある。しかし、原因と責任の所在は異なる。入力が仕様に適合しない場合には、要求を拒否すること自体が正しい動作である。一方、正当な入力に対して内部の不具合によって結果を返せなかった場合には、必要な機能が失われている。両者を同じ失敗として集計すれば、異なる現象を一つの数値へまとめることになる。
分類の粒度を粗くすれば、多くの現象を少数の項目で整理できる。その一方で、個々の現象の違いは失われる。逆に、分類を細かくすれば原因や対処方法を区別しやすくなるが、記録する項目が増え、判断や集計に必要な負担も増加する。例えば、失敗を一種類として記録する運用では全体の失敗件数を簡単に把握できるが、入力の不備、認証失敗、通信障害、内部処理の不具合を区別できない。原因ごとに分類すれば対処すべき箇所を判断しやすくなる一方、どの分類に該当するかを判定する規則が必要になる。
このように、分類を導入することには、観測の対象を決めるという作用がある。例えば「内部処理の失敗」だけを監視対象にすれば、受付段階で拒否された要求は監視結果に含まれない。内部処理の品質を評価する目的であれば、この区分は有用である。しかし、利用者が要求した機能を受け取れたかを評価する場合には、受付段階の拒否も重要になる。分類が異なれば、同じ動作の集合から異なる評価結果が得られる。観測値の違いは、対象の実際の変化だけでなく、何を同じ種類の事象として数えるかという規則からも生じる。
中観思想では、対象がそれ自体で独立した本質を持つという見方が問い直される。Nāgārjuna の『中論』では、現象が条件に依存して成立することと、自性を持つ独立した実体として成立することの違いが検討される。また、日常的な名称や概念によって現象を理解する世俗的なあり方と、自性の成立を問う議論が区別されている[11]。名称や概念を使用すること自体が否定されるわけではない。対象を何らかの名称で把握することの有用性と、その名称によって対象の独立した本質が確定したと考えることには違いがある。
この思想的な区別は、工学で用いる分類や指標を検討する際にも示唆を与える。例えば、あるシステムを「安定している」と評価するとき、その評価には何らかの基準が存在する。一定期間に障害が発生しなかったことを安定と呼ぶ場合もあれば、障害が発生しても短時間で復旧できることを安定と呼ぶ場合もある。内部状態が一定の範囲に保たれていることを安定と呼ぶ場合もある。いずれも特定の性質を表す有用な評価だが、「安定」という同じ言葉によって、すべての性質が同時に成立していることが保証されるわけではない。
例えば、あるサービスの月間稼働率が 99.9% であったとする。この数値から、定義された稼働条件を満たした時間の割合については説明できる。しかし、停止した時間が利用者の集中する時間帯に偏っていれば、利用者への影響は大きくなる可能性がある。また、サービスが稼働していても、一部の重要な操作だけが失敗している場合には、稼働率という指標が良好でも必要な機能が提供されていないことがある。稼働率は運用上の重要な指標であるが、その値によってサービスの品質全体が尽くされるわけではない。
この問題は、指標を構成する分子と分母を確認すると具体的になる。例えば、要求の失敗率を測定する場合、分子を失敗した要求数、分母を評価対象の要求数として定義できる。しかし、どの要求を分母へ含めるかによって値が異なる。受付された要求だけを対象にする場合と、利用者が送信した要求をすべて対象にする場合では、受付段階の拒否が異なる形で扱われる。
具体例として、評価期間中に利用者から 10,000 件の正当な要求が送信されたとする。このうち 700 件が受付段階で誤って拒否され、残る 9,300 件が内部処理へ渡された。内部処理では 93 件が失敗し、9,207 件が正常に完了したとする。このとき、内部処理へ渡された要求だけを分母とすれば、失敗率は次のようになる。
\[
R_{\mathrm{internal}}
=\frac{93}{9300}
=0.01
\]
内部処理の失敗率は 1% である。この数値は、内部処理へ渡された要求について、そのうちどの程度が失敗したかを正確に表している。しかし、受付段階で誤って拒否された 700 件は含まれていない。利用者が送信した正当な要求全体に対して、必要な機能を提供できなかった割合を求めるなら、次のようになる。
\[
R_{\mathrm{user}}
=\frac{700+93}{10000}
=0.0793
\]
利用者から見た失敗率は 7.93% となる。内部処理の失敗率 1% と、利用者から見た失敗率 7.93% は、同じ期間の同じシステムについて得られた数値である。両者の違いは計算の誤りによるものではなく、何を失敗とみなし、何を分母へ含めるかという定義の違いから生じている。内部処理の品質を評価する目的では前者が有用であり、利用者へ必要な機能を提供できたかを評価する目的では後者が重要になる。
ただし、受付段階で拒否された要求がすべて失敗に該当するとは限らない。仕様に適合しない要求や、権限を持たない主体からの要求を適切に拒否することは、サービスの正常な機能である。そのため、利用者から見た失敗率を測定する場合にも、正当な要求と拒否すべき要求を区別する必要がある。拒否された要求をすべて失敗として数えれば、正しい拒否処理まで品質の悪化として扱ってしまう。分母と分子の定義には、サービスが何を提供すべきかという仕様と判断が含まれている。
この違いを整理すると、同じ事象から複数の指標が得られる理由が明確になる。
| 指標 | 測定対象 | 明らかになる性質 | 評価上の制約 |
|---|---|---|---|
| 内部処理の失敗率 | 内部処理へ渡された要求のうち、失敗した要求の割合を測定する。 | 受付後の処理経路がどの程度正常に機能したかを把握できる。 | 受付段階で拒否された要求の影響は含まれない。 |
| 利用者から見た失敗率 | 正当な要求全体のうち、必要な機能が提供されなかった割合を測定する。 | 利用者が必要な結果を受け取れたかを評価できる。 | 正当な要求と拒否すべき要求の識別規則が必要になる。 |
| 受付段階の拒否率 | 送信された要求のうち、受付段階で拒否された要求の割合を測定する。 | 受付処理がどの程度の要求を拒否したかを把握できる。 | 正しい拒否と誤った拒否を区別しなければ、機能上の品質を判断できない。 |
| サービスの稼働率 | 定義された稼働条件を満たした時間の割合を測定する。 | サービスが利用可能な状態を維持した時間を把握できる。 | 一部の操作の失敗や利用者ごとの影響が、集計値に現れない場合がある。 |
| 応答時間の達成率 | 指定した時間以内に結果を返した要求の割合を測定する。 | 要求に対する応答性能を評価できる。 | 結果の正確性や、集計対象から除外された要求の影響を別に確認する必要がある。 |
これらの指標は、同じシステムの異なる性質を表している。例えば、内部処理の失敗率が改善しても、受付段階の誤った拒否が増加していれば、利用者から見た品質は悪化する可能性がある。また、応答時間が短縮されても、誤った結果を返す要求が増えれば、必要な機能が改善したとは評価できない。どの指標を用いるかという選択は、システムのどの性質を運用上重要とみなすかという判断と結びついている。
ここで、分類と指標が持つ二つの作用を区別できる。一つは、多数の事象を一定の規則で整理し、状態を測定可能にする作用である。もう一つは、その指標が評価基準として採用されることで、どの操作が望ましいと判断されるかに影響する作用である。例えば、内部処理の失敗率だけを評価する制度では、受付後の処理の改善が優先されやすくなる。一方、正当な要求全体の成功率を評価する制度では、受付段階の誤った拒否も改善対象になる。評価する指標の選択が、改善の対象と操作の優先順位を決めるのである。
中観思想における名称や概念の問題と、工学における測定指標の問題は、その目的と射程を異にする。中観思想は、自性を持つ実体として現象を把握することの成立可能性を検討する。一方、工学では、特定の目的に対して分類と指標がどの程度適切に機能するかを検証する。しかし、概念による区分を対象そのものの不変の本質と取り違えることへの注意という点には、共通する問題意識がある。ある現象を「失敗」と呼んだことによって、その現象の原因、責任、影響が一意に定まるわけではない。名称によって対象を扱いやすくすることと、名称が表現する範囲を確認することは、両立して必要となる。
7.2. 代理指標が目的になると、行動の選択方向がずれる
システムの品質を直接測定することが難しい場合、観測しやすい指標を品質の代わりに用いることがある。例えば、利用者が必要な機能を継続して利用できるかという広い意味での品質を評価したい場合でも、そのすべてを一つの数値で測定することは難しい。そこで、失敗率、応答時間、稼働率などの指標を設定し、それらの値によって運用状況を判断する。このような指標は、直接評価したい性質の一部を観測可能な形で表す代理指標として機能する。
代理指標が有用であるためには、その指標が本来評価したい品質と適切に対応している必要がある。例えば、利用者が必要な処理結果を受け取れることを品質として重視するなら、正当な要求の成功率は品質と密接に関係する。しかし、内部処理へ到達した要求だけを対象とする成功率では、受付段階で拒否された正当な要求の影響が含まれない。代理指標と本来の品質との間にこのような差があると、指標の改善と品質の改善が一致しない場合がある。
この関係を単純な数理モデルとして表してみる。本来評価したい品質を \(q_t\)、実際に観測される代理指標を \(y_t\) とする。両者を同じ尺度へそろえたうえで、代理指標には品質以外の要因 \(a_t\) が加わると仮定すれば、次のように表せる。
\[
y_t=q_t+a_t
\]
ここで \(q_t\) は本来の品質、\(y_t\) は観測可能な代理指標、\(a_t\) は集計方法、対象の選別、測定誤差などによって生じる差を表す。この式は、品質と指標の関係を説明するための単純化である。実際には両者の関係が非線形であったり、複数の要因が相互に作用したりする場合もある。しかし、この形式だけでも、代理指標の値が本来の品質以外の要因によって変化しうることを明確にできる。
例えば、運用主体が代理指標 \(y_t\) を最大化することを目標にしたとする。このとき、\(q_t\) を改善する操作だけでなく、\(a_t\) を増加させる操作によっても指標の値を上げられる可能性がある。例えば、内部処理の成功率を改善するために、失敗しやすい要求を受付段階で拒否すれば、内部処理へ到達した要求の成功率は上昇するかもしれない。しかし、拒否された要求が正当なものであれば、利用者が必要な機能を受け取れる割合は低下する。指標の値が改善しても、本来の品質が改善したとは限らない。
このような差は、測定方法の変更だけでなく、実際のシステムの振る舞いが変更されることによっても生じる。単に集計方法を変えただけなら、現実の処理結果が同じでも指標の値だけが変化する場合がある。一方、失敗しやすい要求を受付段階で拒否するように構造を変更した場合には、指標の対象となる要求の集合と、利用者が受け取る機能の両方が変化する。代理指標の最適化が、測定上の改善にとどまらず、システムの状態遷移そのものを変更するのである。
具体的に、10,000 件の正当な要求のうち、当初は 9,500 件が正常に処理され、500 件が内部処理で失敗していたとする。受付段階では要求を拒否していなかったため、内部処理の成功率も利用者から見た成功率も 95% である。ここで、失敗しやすいと予測された 800 件の要求を受付段階で拒否するように変更したとする。残る 9,200 件のうち 9,100 件が成功し、100 件が失敗した場合、内部処理の成功率は約 98.91% となる。しかし、利用者から見た成功率は 91% であり、変更前の 95% より低下している。
この事例では、内部処理の成功率という代理指標は改善したが、正当な要求に対して必要な機能を提供できた割合は低下している。指標だけを見ると改善と評価される一方、利用者の観点では悪化している。受付段階で要求を選別するという操作が、指標の分母を変更し、同時に利用者が受けられるサービスの範囲を狭めたためである。
ここで、指標の最適化によって何が起きたかを、変更前後で比較すると次のようになる。
| 評価項目 | 変更前 | 変更後 | 評価上の意味 |
|---|---|---|---|
| 正当な要求の総数 | 10,000 件 | 10,000 件 | 利用者が必要な機能を要求した件数は同じである。 |
| 受付段階での誤った拒否 | 0 件 | 800 件 | 本来処理すべき要求が受付段階で除外されるようになった。 |
| 内部処理の成功件数 | 9,500 件 | 9,100 件 | 利用者へ正常な結果を提供できた件数は減少している。 |
| 内部処理の成功率 | 95% | 約 98.91% | 内部処理へ到達した要求だけを対象とする指標は改善している。 |
| 利用者から見た成功率 | 95% | 91% | 正当な要求全体に対する機能の提供割合は悪化している。 |
この比較によって、指標の改善が品質の改善と一致するためには、指標の対象と本来の目的が適切に対応している必要があることが分かる。内部処理だけを改善する目的であれば、内部処理の成功率は有用である。しかし、利用者へ必要な機能を提供することを目的とするなら、受付段階で除外された要求も評価へ含めなければならない。指標の良否は、数値の大小だけでなく、その指標が何を評価するために使用されるかによって決まる。
代理指標の最適化によって、本来の目的との対応が失われる問題は、一般に Goodhart の法則に関連して論じられる。Manheim と Garrabrant は、代理指標を強く最適化した場合に生じる複数の失敗機構を区別している[12]。代理指標と目的との間に存在する不完全な対応が、強い最適化によって顕在化する場合がある。また、指標を改善するための操作が測定対象の構成を変化させる場合には、最適化の前提としていた関係そのものが変わることもある。
例えば、ある障害検出指標が高い値を示したため、運用担当者が特定の処理経路を変更したとする。その結果、指標の値が低下した場合でも、実際の障害が減ったのか、障害が別の経路で発生するようになったのか、検出対象から除外されるようになったのかを区別する必要がある。指標の値だけでは、これらの原因を識別できない。どの構造変更が行われ、その変更によって観測の対象と条件がどう変化したかを確認することで、改善の意味を具体的に判断できる。
さらに、指標が組織内の報酬や処分の基準になる場合には、指標が行動を変化させる作用が強くなる。例えば、障害件数の少なさが担当者の評価に直接結びついている場合、担当者には障害を減らすための改善を行う動機が生じる。一方で、何を障害として記録するかという判断にも影響が及ぶ可能性がある。軽微な障害を別の分類へ移したり、記録対象の条件を厳しくしたりすれば、実際の機能が変化していなくても報告上の障害件数は減少する。指標が評価基準になると、その指標を構成する記録や分類の方法まで、行動の対象になりうるのである。
Campbell の社会的介入の評価に関する議論は、数量的な指標が意思決定に強く利用されるほど、測定対象の行動へ影響を及ぼし、指標が本来測定したかった過程を適切に表さなくなる場合があることを指摘している[13]。この問題は、指標を使用する主体に不正な意図がある場合だけに生じるものではない。運用担当者が与えられた評価基準を忠実に達成しようとする場合にも、評価基準が本来の目的を十分に表していなければ、望ましくない結果が生じる可能性がある。
例えば、問い合わせへの平均応答時間を短縮することが目標となった場合を考える。担当者が簡単な問い合わせを優先して処理すれば、平均応答時間は短縮する可能性がある。しかし、複雑で重要な問い合わせが後回しになれば、その問い合わせを行った利用者が受けるサービスの品質は低下する。平均値だけを目標にすると、処理順序の変更によって数値を改善できる一方、個々の要求に対する適切さが失われる場合がある。平均応答時間の改善と、すべての利用者にとって望ましい応答が提供されたことは、異なる命題である。
このような現象では、観測と介入の関係が循環している。最初に指標を定義し、その指標を観測し、観測結果に基づいて操作を選択する。操作によってシステムの振る舞いが変化すると、次の指標の値も変わる。この循環を繰り返すことで、指標の定義と更新ポリシーがシステムの状態遷移を形成する条件となる。
構造振動モデルの状態遷移を、構造 \(S_t\)、環境 \(C_t\)、観測 \(O_t\)、介入 \(U_t\) によって次のように表す。
\[
S_{t+1}=M(S_t,C_t,O_t,U_t)
\]
このとき、観測方法の定義を \(m_t\) とし、観測写像を \(G\) とすれば、観測結果を次のように表せる。
\[
O_t=G(S_t,C_t;m_t)
\]
ここで \(m_t\) は、何を測定対象とするか、どの分類を使用するか、どの期間を集計するかといった観測方法を表す。同じ構造と環境であっても、観測方法が変われば、得られる観測結果は変化する可能性がある。一方、観測方法が同じでも、構造や環境が変化すれば、観測結果は変化しうる。これらを区別することで、実際の状態の変化と測定方法の変化を別々に記述できる。
さらに、更新ポリシーを \(\pi\) とし、観測結果から次の操作を選ぶとすれば、次の関係が得られる。
\[
U_t=\pi(O_t)
\]
この式は、観測された値が操作の選択に影響することを表す単純な形式である。例えば、失敗率が目標を上回った場合に処理経路を変更するという規則を採用すれば、観測結果に応じて構造が更新される。ただし、実際の運用では、操作権限、変更に必要な時間、利用可能な資源などの制約が加わる。ここで重要なのは、観測写像 \(G\) と更新ポリシー \(\pi\) の組み合わせによって、指標の定義が次の構造の選択にまで影響するという関係である。
例えば、内部処理の成功率だけを観測する場合、受付段階で正当な要求が拒否されていても、その結果は更新ポリシーへ十分に反映されない可能性がある。一方、利用者から見た成功率も観測すれば、受付段階の問題を検出し、その改善を選択できる。観測方法が異なることで、同じシステムについて異なる操作が選ばれる可能性がある。指標を選択することは、何を改善対象として認識するかを決めることにつながる。
さらに、構造変更によって観測対象そのものが変化する場合には、以前の指標との対応も再検討する必要がある。例えば、処理経路を分割したことで、それまで一つの処理として記録していた要求が複数の処理として記録されるようになれば、件数の定義が変化する可能性がある。処理の実行回数が増えても、利用者が送信した要求の件数は変わっていない場合がある。このとき、処理回数と利用者の要求数を同じ指標として比較すれば、構造変更の影響を誤って解釈することになる。
このように、言語と指標が現実を作り替えるという命題は、概念が物理的な対象を直接変化させるという意味ではない。名称や分類が評価基準として採用され、その基準に基づいて主体が操作を選択することで、実際の構造や行動が変化するという因果関係を指している。指標が意思決定に使用されなければ、その指標の変更が対象の振る舞いへ影響するとは限らない。一方、評価制度や自動制御へ組み込まれた指標は、観測結果から操作へ至る経路を通じて、次の状態を形成する条件となる。
ここには、無常や縁起の思想との概念上の接点がある。対象を記述する名称や指標も、対象から独立した固定的な実体として存在するわけではなく、観測の目的、分類規則、社会的な運用条件によって成立している。さらに、その名称や指標が人間の判断へ影響し、判断が対象を更新する場合には、記述する側と記述される側の間に循環的な関係が生じる。工学的なモデルでは、この関係を観測写像と更新ポリシーによって具体的に表現できる。
ただし、代理指標の最適化による問題を認識したことだけで、指標を使用しない運用が望ましいという結論にはならない。指標がなければ、状態の変化を比較し、障害の発生状況を把握し、改善の結果を検証することが難しくなる。必要なのは、指標が本来の目的のどの部分を表し、どの部分を表していないかを明確にすることである。また、指標を改善する操作が、指標の対象と本来の品質の双方へどのように影響するかを確認する必要がある。
7.3. 指標を更新することにも、比較のための規則が必要になる
指標の定義に問題があると判明した場合、その定義を修正することは合理的な対応となる。例えば、内部処理の成功率だけでは利用者から見た品質を十分に表せないと分かったなら、正当な要求全体の成功率を追加することが考えられる。また、平均応答時間では一部の重要な要求の遅延を把握できない場合には、対象の操作ごとに応答性能を測定することが有効となる。指標の更新によって、以前は見落としていた現象を観測できるようになる。
ただし、指標を更新した後に得られた数値を、更新前の数値とそのまま比較できるとは限らない。例えば、以前は内部処理へ到達した要求だけを分母としていた失敗率を、正当な要求全体を分母とする失敗率へ変更した場合、同じシステムの動作であっても数値は異なる。変更前後の値を比較して失敗率が増減したと報告すれば、実際の品質の変化と指標の定義変更による差が混在することになる。
この問題を具体的に考えるため、あるサービスについて、旧定義では内部処理の失敗率を測定し、新定義では利用者から見た失敗率を測定するようになったとする。旧定義では受付段階の拒否が含まれず、新定義では正当な要求に対する誤った拒否が含まれる。同じ観測期間について両方の定義で失敗率を計算すると、二つの数値の差を確認できる。両者の差は、その期間のシステムの動作が変化したことではなく、測定対象が異なることによって生じている。
例えば、ある月の旧定義による失敗率が 1%、新定義による失敗率が 5% だったとする。翌月に新定義による失敗率が 4% へ低下した場合、新定義の下では改善が観測されている。しかし、旧定義の 1% と翌月の新定義の 4% を直接比較して悪化したと判断することはできない。測定対象が異なるためである。変更前後の評価を適切に行うには、同じ期間の要求を同じ定義で再集計するか、一定期間にわたって旧定義と新定義を並行して測定する必要がある。
指標の定義変更による差を明らかにするため、同じ観測対象について旧定義と新定義の両方で値を計算する方法が考えられる。例えば、同じ期間の記録から旧定義の指標を \(y_t^{\mathrm{old}}\)、新定義の指標を \(y_t^{\mathrm{new}}\) として求める。両者の差を次のように定義する。
\[
\Delta m_t
=
y_t^{\mathrm{new}}-y_t^{\mathrm{old}}
\]
ここで \(\Delta m_t\) は、同じ観測対象に対して指標の定義を変えたことで生じる数値の差を表す。実際のシステムの動作が同一であれば、この差は測定方法の違いによって生じたものとして解釈できる。ただし、旧定義と新定義で測定対象の単位や意味が大きく異なる場合には、単純な差を取ること自体が適切とは限らない。その場合には、共通して測定できる項目を明らかにし、何が比較可能であるかを個別に確認する必要がある。
また、旧定義の指標を後から再計算できるかどうかは、保存されているデータに依存する。例えば、以前の記録に受付段階で拒否された要求が含まれていなければ、利用者から見た失敗率を過去に遡って計算することは難しい。新しい指標を採用した後に過去の数値を比較しようとしても、必要な観測情報が残っていなければ、同じ条件での比較は成立しない。指標の更新可能性は、以前の観測で何を記録していたかにも依存している。
さらに、指標の定義を変更した時点で、実際の運用方法も変更される場合には、二つの効果を分ける必要がある。例えば、受付段階の誤った拒否を新しい指標へ含めるようにした結果、担当者が受付条件を緩和したとする。この場合、新しい指標の値は、定義変更による測定上の差だけでなく、受付条件の変更による実際の動作の差も反映する。旧定義と新定義を並行して測定するだけでは、受付条件の変更がなかった場合にどのような結果が得られたかを自動的に確定できない。観測方法の変更と構造への介入を区別することが必要となる。
ここで、指標の更新を構造振動モデルの状態遷移へ組み込むことができる。構造の状態を \(S_t\)、環境を \(C_t\)、観測方法の定義を \(m_t\) とする。観測結果が次の関係で得られるとき、
\[
O_t=G(S_t,C_t;m_t)
\]
同じ構造と環境であっても、\(m_t\) が変更されれば観測結果が変化する可能性がある。また、観測方法が同じであっても、構造や環境が変われば観測結果が変化する可能性がある。したがって、時刻 \(t-1\) と \(t\) の観測値を比較する際には、構造、環境、観測方法のうち何が変化したかを確認する必要がある。
例えば、ある時点で失敗率が大きく低下した場合、その原因として少なくとも三つの可能性がある。第一に、構造の変更によって実際の失敗が減少した場合である。第二に、入力や利用者の構成が変化し、失敗しにくい要求が増えた場合である。第三に、失敗として数える対象や分母の定義が変化した場合である。これらが同時に起きている場合には、単純な前後比較だけで改善の原因を特定することは難しい。観測された数値の変化を説明するには、構造、環境、測定方法の履歴を分けて記録する必要がある。
この違いを運用上の記録へ反映するには、指標の定義と構造変更の履歴を対応づけることが重要となる。
| 記録する対象 | 具体的な内容 | 比較に必要な理由 |
|---|---|---|
| 指標の定義 | 分子、分母、測定対象、除外条件、集計方法を記録する。 | 同じ名称の指標でも、定義によって数値の意味が異なるためである。 |
| 観測期間 | 集計開始時点、終了時点、観測の時間間隔を記録する。 | 観測期間の長さや位置によって、障害や負荷の影響が異なるためである。 |
| 対象の構成 | 入力の種類、利用者の構成、対象となる操作の範囲を記録する。 | 入力構成の変化による差と、構造変更による差を区別するためである。 |
| 構造の変更 | 追加、削除、分割、統合した部品や関係を記録する。 | どの操作がどの観測結果へ影響したかを検討するためである。 |
| 評価基準の変更 | 目標値、許容上限、優先する指標、変更を承認した主体を記録する。 | 実際の性能が変化したのか、合否を決める基準が変化したのかを区別するためである。 |
| 新旧指標の並行測定 | 比較可能な期間について、旧定義と新定義の値を同時に記録する。 | 定義変更によって生じる数値の差を確認するためである。 |
この表に示した記録は、指標の変更を禁止するためのものではない。利用者の要求や運用目的が変化すれば、以前の指標では必要な品質を十分に評価できなくなる場合がある。そのときには、より適切な指標へ更新することが合理的となる。ただし、指標を更新する理由と、更新によって比較可能性がどのように変化するかを明示する必要がある。測定方法の改善と、測定された対象の改善を区別することで、評価結果の意味を保てる。
例えば、重要な利用者の要求が全体の平均に埋もれていることが判明した場合には、利用者全体の成功率に加えて、重要な操作についての成功率を個別に測定することが考えられる。この変更によって、以前は観測できなかった失敗が可視化され、報告上の障害件数が増える可能性がある。しかし、その増加は必ずしもサービスが悪化したことを意味しない。以前から存在していた失敗を、新しい指標によって検出できるようになった場合があるためである。観測能力の改善によって失敗件数が増加して見えることと、実際の失敗が増加することは分けて判断する必要がある。
逆に、指標の変更によって報告上の失敗件数が減少した場合にも、その理由を確認する必要がある。例えば、従来は内部処理の失敗として記録していた事象を、受付段階の拒否として別の分類へ移せば、内部処理の失敗率は低下する可能性がある。しかし、その要求が正当なものであれば、利用者への機能提供は改善していない。このような変更では、分類上の移動が数値へ反映されている。指標が示す改善を実際の品質改善として判断するには、分類変更が利用者へ与えた影響まで確認する必要がある。
また、評価基準を変更する場合には、どの主体が変更を決定できるかという問題も生じる。例えば、サービスの応答時間が目標を下回ったため、目標値を緩和することを考える。利用者の要求やサービスの提供条件が正式に変更されているなら、評価基準の見直しには合理的な理由があるかもしれない。一方、実際の性能不足を改善せずに目標値だけを緩和すれば、報告上は条件を満たしていても、以前の利用者に対する約束が維持されているとは限らない。評価基準の変更は、観測方法の修正であると同時に、何を許容するかという運用上の判断でもある。
このように、言語と指標は、状態を記録するための受動的な道具として機能する場合もあれば、評価と介入を通じて次の状態を形成する条件となる場合もある。例えば「失敗」という分類を定義することで、どの動作が監視対象となるかが決まり、失敗率を目標へ組み込むことで、どの操作が改善として評価されるかが決まる。さらに、その目標に基づいて構造が変更されれば、分類と指標の選択が実際のシステムの振る舞いへ影響する。記述、評価、介入が連続した過程として成立しているのである。
ただし、この循環が存在することから、すべての指標が必ず望ましくない結果を生むという結論は導かれない。指標が本来の目的と適切に対応し、指標を改善する操作が必要な機能の改善へ結びついている場合には、観測と介入の循環は運用上の利益を生む。例えば、正当な要求の成功率を適切に定義し、その値を改善するために実際の障害原因を除去できれば、指標の改善と利用者から見た品質の改善が一致する可能性がある。問題は指標を使用すること自体ではなく、指標の値と本来の目的との対応関係が、どの条件で成立しているかにある。
ここで、無常と縁起の思想との接続を考えると、言語や指標についても成立条件を問い直す必要があることが分かる。ある分類が便利であることと、その分類が対象の固定的な本質を表していることは異なる。また、ある指標が過去の環境で適切に機能していたことと、環境や運用目的が変化した後も同じ意味で機能することは異なる。分類と指標は、観測対象、目的、判断主体、制度との関係の中で成立している。
さらに、分類や指標を決定する主体自身も、その指標によって得られる情報の影響を受ける。例えば、失敗率の測定方法を改善した結果、それまで把握できなかった障害が明らかになれば、担当者はシステムの状態についての認識を更新する。その認識の更新によって、新しい構造変更が選択される可能性がある。そして構造変更が行われれば、観測対象の状態も変化する。観測する主体、観測の方法、観測される対象は、時間を通じて相互に関係する。
構造振動モデルでは、この関係を、構造、環境、観測、介入という異なる変数によって記述できる。観測方法を明示し、どの指標がどの状態を表すかを定義すれば、構造の変化と測定方法の変化を区別できる。さらに、観測結果に基づく更新ポリシーを明示すれば、指標がどの操作を選択させ、その操作が次の状態へどのような影響を与えたかを検討できる。言語と指標が現実へ影響するという命題は、このような観測と介入の経路を通じて、具体的な因果関係として分析できる。
ただし、実際の運用でその因果関係を確認するには、単に指標の値が変化したという結果だけでは十分ではない。構造の変更、環境条件の変化、指標の定義変更が同時に生じる場合には、それぞれの影響を分離して検討する必要がある。特定の指標が改善したという事実から、その指標を採用した判断が適切だったことまで直接導くことはできない。判断の適切さを評価するには、本来の目的がどの程度達成され、どの操作がその結果へ寄与したかを確認する必要がある。
この意味で、言語と指標の問題は、構造振動モデルにおける観測の定義だけにとどまらない。何を測定するかという選択が、何を改善対象とするかという判断へ影響し、その判断がどの構造を維持し、どの構造を変更するかを決める。さらに、その変更によって新しい観測結果が得られ、評価基準が再び見直される場合もある。対象を記述するための表現が、対象の更新を通じて再び自身の意味を問い直されるのである。
無常的な世界を運用するうえで、この関係から得られる帰結は具体的である。観測された数値を現実の品質そのものとみなす代わりに、その数値がどの条件で得られ、何を表し、何を表していないかを確認する。指標を改善する操作を選ぶ場合には、その操作が本来の目的へどのような影響を与えるかを評価する。そして、環境や目的の変化によって指標の定義を更新する場合には、以前の数値との比較可能性と、評価基準を変更する責任を明示する。これらの条件を満たすことで、言語と指標を固定的な実体として扱うことから離れ、変化する対象を継続的に理解し、適切に介入するための道具として使用できる。
8. 観測と判断の循環を、状態推定とフィードバックとして記述する
8.1. 記録された値は、そのまま全状態を示しているとは限らない
システムの状態を把握するためには、何らかの観測が必要になる。ソフトウェアの運用では、応答時間、エラー件数、処理量、資源の使用率、障害の発生履歴などが観測対象となる。しかし、これらの数値はシステムの状態を特定の方法で測定した結果であり、内部で起きているすべての現象を直接表しているわけではない。例えば、応答時間が増加したという観測結果から、処理能力が不足しているのか、外部サービスの応答が遅れているのか、内部で再試行が発生しているのかを直ちに特定することは難しい。同じ観測結果が、異なる内部状態から生じる場合があるためである。
この違いを考えるため、障害監視を新たに導入したサービスを例にする。監視導入前には、一か月当たり 20 件のエラーが記録されていた。しかし、監視を詳細化した翌月には、記録されるエラーが 60 件へ増加したとする。この結果をそのまま解釈すれば、障害が三倍に増えたように見える。しかし、監視を変更したことで、それまで記録されていなかった失敗が検出されるようになった可能性がある。反対に、監視方法は改善されたものの、実際の障害も同時に増加している可能性がある。観測された件数の変化だけでは、どちらが原因なのかを確定できない。
例えば、実際には毎月 100 件の対象エラーが発生していたと仮定する。以前の監視で検出できる割合が 20% であれば、記録されるエラーの期待件数は 20 件となる。監視の改善によって検出率が 60% になれば、実際のエラー件数が変化していなくても、期待される記録件数は 60 件になる。この場合、報告件数の三倍への増加は、障害の悪化ではなく観測能力の向上によって説明できる。
一方、検出率が 20% のままで、実際のエラー件数が 100 件から 300 件へ増加した場合にも、記録件数の期待値は 20 件から 60 件へ増加する。前者では監視方法が変化し、後者ではシステムの状態が変化している。得られる集計結果が同じであっても、原因が異なれば必要な対応も異なる。監視方法の改善による増加なら、新旧の記録を比較する条件を調整する必要がある。実際の障害増加なら、障害の発生経路を調べ、必要な構造変更を検討する必要がある。
この関係を数理的に記述するため、実際のエラー件数を \(N_t\)、エラーを検出できる確率を \(p_t\)、記録されるエラー件数を \(Y_t\) とする。各エラーが同じ検出確率で独立に検出され、誤検出が生じないという単純化の下では、記録件数の期待値は次のようになる。
\[
\mathbb{E}[Y_t\mid N_t,p_t]=p_tN_t
\]
ここで \(\mathbb{E}\) は期待値を表す。\(N_t\) が実際の発生件数、\(p_t\) が検出率であり、右辺は実際の発生件数のうち平均的にどれだけが記録されるかを示している。例えば \(N_t=100\)、\(p_t=0.2\) なら期待記録件数は 20 件となる。\(N_t=100\)、\(p_t=0.6\) なら 60 件となる。また、\(N_t=300\)、\(p_t=0.2\) でも 60 件となる。異なる発生件数と検出率の組み合わせが、同じ期待記録件数を生み出すのである。
実際の観測では、期待値と完全に一致する件数が得られるとは限らない。検出には偶然による変動があり、特定の種類のエラーだけ検出率が高い場合や、同じ障害が複数回記録される場合もある。さらに、監視の処理自体が失敗することもある。そのため、記録件数を実際の発生件数へ換算するには、検出率の推定、重複の扱い、対象となるエラーの定義が必要となる。観測値から内部状態を推定する問題には、観測方法の性質も含まれている。
構造振動モデルでも、構造の状態と、観測によって得られる値を区別する必要がある。時刻 \(t\) における内部状態を \(x_t\)、観測値を \(y_t\)、観測方法を表す写像を \(G_t\)、観測誤差を \(\eta_t\) とする。観測誤差を加法的に表現できるという仮定の下では、観測関係を次のように記述できる。
\[
y_t=G_t(x_t)+\eta_t
\]
ここで \(x_t\) は、実際のシステムが持つ状態である。例えば、処理待ち行列の長さ、部品の負荷、接続先の応答状態、実行中の要求数などが含まれる。\(G_t\) は、その状態のうち何をどの方法で測定するかを決める写像である。\(y_t\) は監視によって得られた値であり、\(\eta_t\) は測定誤差や偶然の変動などを表す。観測写像に時刻を付けているのは、監視対象、記録方法、集計単位が運用中に変更される可能性があるためである。
例えば、当初は要求が成功したかどうかだけを記録していたサービスに、外部サービスの応答時間を測定する機能を追加したとする。監視の変更前後でシステムの構造や負荷が同じであっても、得られる観測情報の種類は増える。逆に、監視機能を削除すれば、実際の状態が変わっていなくても、それまで識別できていた現象を観測できなくなる場合がある。観測の範囲は、対象の状態だけでなく、観測手段の構成によって決まる。
また、観測写像が時間とともに変化する場合、同じ名称の指標でも以前と同じ意味で比較できるとは限らない。例えば、以前は内部処理の失敗だけをエラーとして数えていたが、監視の変更後には受付段階の拒否も含めるようになった場合を考える。エラー件数が増加しても、それは内部処理の障害が増加したことを直接意味しない。新しい観測写像によって、以前は含まれていなかった現象が測定対象になった可能性がある。観測値の変化を解釈する際には、観測対象そのものの変化と観測方法の変更を分離する必要がある。
この区別を整理すると、同じ観測値の変化に対して、少なくとも次の原因が考えられる。
| 変化した対象 | 具体例 | 観測値への影響 | 必要な確認 |
|---|---|---|---|
| 内部状態 | 処理部品の負荷が増加し、実際の応答時間が延びる。 | 同じ観測方法でも応答時間が増加する。 | 負荷、待ち行列、処理能力などの状態を確認する。 |
| 外部環境 | 依存する外部サービスの応答時間が延びる。 | 内部構造が同じでも、全体の応答時間が増加する。 | 外部依存先の状態と、要求の入力条件を確認する。 |
| 観測方法 | 監視対象を追加し、以前は検出できなかったエラーも記録する。 | 実際のエラー件数が同じでも、報告件数が増加する。 | 監視の変更内容、対象範囲、検出率を確認する。 |
| 観測誤差 | 記録の欠落、重複、時刻のずれが発生する。 | 実際の状態と観測値の間に差が生じる。 | 計測手段の精度、欠測、重複記録の有無を確認する。 |
| 複数条件の同時変化 | 監視機能を追加した時期に、利用者数と外部サービスの遅延も増加する。 | 複数の原因が同じ指標へ反映される。 | 構造、環境、観測方法の変更履歴を分けて確認する。 |
この表が示すのは、観測値が変化したという結果だけから、システムのどこに変化が生じたかを一意に決めることは難しいということである。例えば、応答時間が長くなった場合に、内部処理の遅延だけを原因として構造を変更すれば、外部依存先の遅延や観測方法の変更を見落とす可能性がある。誤った原因に対して介入すれば、必要な機能が改善しないだけでなく、新たな依存関係や費用を増やしてしまう場合もある。
状態推定は、このような問題に対して、観測値から内部状態を推定する方法を与える。内部状態を直接すべて観測できない場合でも、状態が時間とともにどのように変化するかというモデルと、実際に得られた観測結果を組み合わせることで、未観測の状態を推定できる可能性がある。例えば、処理部品の待ち行列を直接観測できなくても、要求の到着数、処理完了数、応答時間の変化を利用すれば、待ち行列の状態を推定できる場合がある。
Kalman の状態推定に関する研究は、線形の状態遷移モデルと雑音を含む観測を組み合わせ、内部状態を推定する方法の基礎を与えた[14]。線形モデルでは、状態と観測を次のように表せる。
\[
\begin{aligned}
x_{t+1}&=F_tx_t+B_tu_t+w_t\\
y_t&=H_tx_t+v_t
\end{aligned}
\]
ここで \(x_t\) は内部状態、\(u_t\) は操作、\(F_t\) は状態が時間とともにどのように変化するかを表す行列、\(B_t\) は操作が状態へ与える影響を表す行列である。また、\(H_t\) は内部状態から観測値を得るための行列であり、\(w_t\) は状態遷移に関する不確実性、\(v_t\) は観測に含まれる雑音を表す。標準的な Kalman フィルタでは、これらについて特定の統計的な仮定を置くことで、観測値とモデルを組み合わせた状態推定を行う。
ただし、観測値を増やせば、あらゆる内部状態を必ず推定できるわけではない。例えば、システム全体の応答時間だけを記録している場合、内部処理の待ち時間と外部サービスの待ち時間を分離できないことがある。また、状態遷移モデルが実際の動作と大きく異なっていれば、モデルに基づく推定にも誤差が生じる。状態推定の成立には、観測が内部状態についてどれだけの情報を含むかという条件と、状態遷移モデルが対象をどれだけ適切に表しているかという条件の両方が必要となる。
ここで、二つの状態が観測から区別できるかという問題が生じる。例えば、内部処理の待ち時間を \(q_t\)、外部サービスの待ち時間を \(d_t\) とし、全体の応答時間を \(y_t\) とする。ほかの時間を無視した単純なモデルでは、次のように表せる。
\[
y_t=q_t+d_t
\]
この式では、観測された全体の応答時間が 0.8 秒であっても、内部処理が 0.7 秒で外部サービスが 0.1 秒の場合と、内部処理が 0.2 秒で外部サービスが 0.6 秒の場合を区別できない。どちらも同じ観測値を生むためである。ある一時点の全体応答時間だけから、内部処理と外部サービスのどちらが遅延の主因であるかを決めることはできない。
この問題を解消するためには、追加の観測が必要になる。例えば、内部処理の開始時刻と終了時刻を記録すれば、内部処理に要した時間を直接推定できる。外部サービスへの要求時刻と応答時刻を記録すれば、外部サービスの待ち時間も分離できる。この場合、従来は一つの観測値にまとめられていた時間が、複数の観測値として得られるようになる。追加した観測によって、以前は区別できなかった内部状態を識別できる可能性が生じる。
ただし、観測値が増えたとしても、その数が内部状態の変数の数と同じであれば十分というわけではない。複数の観測値が実質的に同じ情報を含んでいれば、依然として内部状態を区別できない場合がある。一方、状態が時間とともに異なる規則で変化するなら、複数時点の観測を組み合わせることで、一時点の観測だけでは識別できなかった状態を推定できる場合もある。状態を観測から識別できるかどうかは、観測の数だけでなく、状態遷移と観測写像の関係によって決まる。
この性質は、制御理論では観測可能性として扱われる。観測可能性は、内部状態を直接すべて測定できるかどうかという意味に限られない。既知の状態遷移と観測の関係の下で、一定期間の観測結果から初期状態を識別できるかという性質を含む。観測可能性が不足している場合には、異なる内部状態が同じ観測系列を生み出し、適切な介入に必要な情報が得られないことがある。
例えば、応答時間が増加した原因を内部処理の負荷と外部サービスの遅延で区別できない場合、処理資源を追加するべきか、外部依存先への要求方法を変更するべきかを判断しにくい。原因を識別するために必要な観測を追加できれば、介入を選択する根拠も明確になる。観測可能性を改善することは、測定する数値を増やすこと自体よりも、異なる原因に対して異なる操作を選べるようにすることに意味がある。
ただし、観測の追加にも費用と制約がある。詳細な処理履歴を記録すれば、記録装置への負荷が増加し、保存すべき情報も増える。また、処理経路によっては記録のための追加処理が応答時間へ影響する場合もある。観測能力を高める操作が、観測対象の性能へ影響する可能性があるのである。観測手段を追加する判断では、識別できる状態が増える利益と、観測によって生じる費用や影響を比較する必要がある。
このように、観測可能な値と内部状態を区別することは、構造振動モデルを運用へ適用するための重要な前提となる。構造をどれだけ精密に記述しても、実際の運用で必要な状態を識別できなければ、その構造がどの条件で機能しているかを十分に判断できない。逆に、観測方法を改善することで、従来は同じ現象として扱われていた障害を異なる原因へ分解できれば、介入を選択する条件を具体的に定められるようになる。
8.2. 観測からの介入は、次の観測条件も変更する
観測された状態に応じて操作を選択し、その操作によって更新された状態を再び観測する過程は、フィードバックとして記述できる。例えば、処理待ち行列が増加した場合に処理資源を追加し、待ち行列が減少した場合に余分な資源を削減する運用では、観測結果が次の操作を決める。操作によって処理能力が変化すれば、待ち行列の状態も変化する。その変化を新たに観測することで、さらに次の操作を選択する。この循環によって、環境の変化へ継続的に対応することが可能になる。
この過程を形式化するため、内部状態を \(x_t\)、操作を \(U_t\)、環境条件を \(C_t\)、観測値を \(y_t\) とする。内部状態の更新を次のように表す。
\[
x_{t+1}=F(x_t,U_t,C_t)
\]
ここで \(F\) は、現在の内部状態、実施した操作、環境条件から次の状態を決定する規則である。例えば、処理資源を追加する操作は、次の時点における処理能力へ影響し、その結果として待ち行列の長さへ影響する。ただし、操作の効果が反映されるまでに時間を要する場合には、その遅延も状態遷移へ含める必要がある。
さらに、観測された情報をもとに操作を選択する規則を \(\pi\) とする。過去から現在までの観測履歴を利用して操作を決定するなら、次のように表せる。
\[
U_t=\pi(y_0,y_1,\ldots,y_t)
\]
この式の \(\pi\) は、観測履歴から操作を選ぶ更新ポリシーである。例えば、直近の応答時間だけでなく、過去数分間の応答時間の推移を参照し、継続的な遅延が確認された場合に処理資源を追加する規則が考えられる。過去の観測を利用することで、一時的な変動に過剰反応することを避けられる可能性がある。一方、過去の情報を重視しすぎれば、環境の急激な変化への対応が遅れる場合もある。
観測と操作を組み合わせると、次のような循環が成立する。
\[
\begin{aligned}
y_t&=G_t(x_t)+\eta_t\\
U_t&=\pi(y_0,\ldots,y_t)\\
x_{t+1}&=F(x_t,U_t,C_t)
\end{aligned}
\]
最初の式では、内部状態から観測値が得られる。二番目の式では、観測履歴から実施する操作が選択される。三番目の式では、その操作によって内部状態が更新される。更新された内部状態は次の観測値を生み、その観測値がさらに後の操作へ影響する。監視によって問題を検出し、修正を実施し、その結果を再び監視するという運用を、状態遷移と観測の循環として表現できる。
ただし、フィードバックが存在すること自体が、運用上の安定を保証するわけではない。観測結果に対して不適切な操作を選択すれば、状態の変化をかえって増幅する可能性がある。例えば、待ち行列の増加を検出するたびに大量の処理資源を追加し、待ち行列が減少するたびに資源を大幅に削減する運用を考える。追加と削減の判断が過剰であれば、処理能力が必要量を大きく上回る状態と、不足する状態を交互に繰り返す可能性がある。環境へ適応するための操作が、別の変動を生み出すのである。
この性質を単純な数理モデルで考えるため、目標値と実際の状態との差を \(e_t\) とする。ここで \(e_t\) は、例えば目標とする待ち行列の長さと実際の待ち行列の長さとの差を表す。観測された誤差に比例した操作を行い、その操作が遅延なく状態へ反映されると仮定する。操作の強さを表す係数を \(k\) とすれば、誤差の更新を次のように表せる。
\[
e_{t+1}=(1-k)e_t
\]
この式では、現在の誤差 \(e_t\) に係数 \(1-k\) を掛けた値が、次の時点の誤差になる。例えば \(k=0.5\) なら、次の誤差は現在の半分になる。\(k=1\) なら、この理想化されたモデルでは次の時点に誤差がゼロになる。一方、\(k=1.5\) なら係数は \(-0.5\) となり、誤差の符号が反転しながら大きさは半分になる。操作が強すぎる場合には、目標を越えて反対側へ移動することがある。
この単純なモデルでは、誤差が時間とともにゼロへ収束するための条件は次のようになる。
\[
|1-k|<1
\]
これを \(k\) について整理すると、次の条件が得られる。
\[
0<k<2
\]
つまり、操作の強さがこの範囲にある場合には、誤差の大きさが反復によって小さくなる。\(0<k<1\) では誤差の符号を保ちながらゼロへ近づき、\(1<k<2\) では符号が交互に反転しながらゼロへ近づく。\(k=2\) では誤差の大きさが維持され、符号だけが反転する。\(k>2\) では、誤差の絶対値が増加していく。
この例は、同じ目標に向かうフィードバックでも、介入の強さによって収束、振動、発散という異なる振る舞いが生じることを示している。ただし、ここで得られた条件は、誤差が一つの変数で表され、操作が線形に作用し、遅延や操作上限が存在しないという仮定に基づいている。実際の運用では、処理資源の追加に時間がかかり、資源の数には上限があり、負荷の変化も不規則に発生する。そのため、単純なモデルで得られた係数の条件を、そのまま実システムの安定条件として使用することはできない。
例えば、処理資源の追加を指示してから実際に利用可能になるまで数分間かかる場合を考える。追加を指示した直後には、まだ処理能力が増えていないため、待ち行列の増加が続く可能性がある。その観測結果だけを見てさらに追加を指示すると、複数の追加操作が重なり、後から過剰な処理能力が生じる場合がある。操作が状態へ反映されるまでの遅延を観測と判断へ含めなければ、すでに実施した操作の効果を待たずに同じ介入を繰り返す可能性がある。
このような運用では、現在の処理資源の数だけでなく、追加を指示したがまだ利用可能になっていない資源の数も状態として管理する必要がある。例えば、現在利用可能な資源を \(r_t\)、追加中の資源を \(h_t\) とすれば、観測された負荷に対する判断では、\(r_t\) と \(h_t\) の両方を考慮できる。処理能力の不足が観測されても、すでに十分な数の資源が追加中であれば、さらに追加する操作を控えることが合理的になる場合がある。状態を適切に定義することによって、フィードバックの過剰反応を抑えられる可能性がある。
また、観測値には偶然の変動が含まれるため、単一の観測値が閾値を越えるたびに操作を切り替えると、短時間の追加と削減が繰り返される場合がある。例えば、処理資源の追加条件と削減条件を同じ負荷率 70% に設定した場合、負荷率が 69% と 71% の間で変動すると、操作が頻繁に反転する可能性がある。このような現象を避けるため、追加と削減に異なる閾値を設定する方法がある。
例えば、負荷率が 80% を超えた状態が一定期間継続した場合に資源を追加し、40% を下回る状態が一定期間継続した場合に資源を削減する規則を考える。追加条件と削減条件の間に幅を設けることで、小さな観測変動による操作の反転を抑えられる。この方法はヒステリシスを利用した制御として理解できる。ただし、閾値の間隔を広げれば、環境の変化へ反応するまでの時間が長くなる場合もある。操作の頻度を抑える利益と、必要な更新が遅れる危険を比較する必要がある。
観測と介入を組み合わせる際に考慮すべき条件を整理すると、次のようになる。
| 条件 | 具体的な問題 | 運用上の影響 | 対応の考え方 |
|---|---|---|---|
| 観測の遅延 | 実際の状態が変化してから監視結果に反映されるまで時間がかかる。 | 過去の状態に基づいて現在の操作を選択する可能性がある。 | 観測時刻と判断時刻を区別し、情報の遅延を考慮する。 |
| 介入の遅延 | 処理資源の追加を指示しても、利用可能になるまで時間がかかる。 | 介入の効果を確認する前に追加操作を重ねる可能性がある。 | 実行中の操作と、その反映予定を状態として管理する。 |
| 観測誤差 | 負荷率や応答時間が短時間に変動する。 | 閾値付近で追加と削減が頻繁に切り替わる可能性がある。 | 観測期間や閾値の幅を設定し、短期的な変動への過剰反応を抑える。 |
| 状態の識別不足 | 応答時間の増加が内部処理と外部依存のどちらに起因するか分からない。 | 原因に対応しない操作が選択され、問題が改善しない可能性がある。 | 介入を区別するために必要な追加観測を設ける。 |
| 操作の上限 | 処理資源の数、予算、外部サービスの容量に上限がある。 | 必要な操作が技術的に定義できても、実際には実施できない場合がある。 | 実行可能な操作の集合を明示し、その範囲で更新を選択する。 |
| 観測方法の変更 | 監視対象や集計方法が更新される。 | 以前と同じ閾値でも異なる条件で操作が発動する可能性がある。 | 観測定義の変更履歴を管理し、更新ポリシーとの対応を確認する。 |
この表から、フィードバックの適切さは、更新ポリシーだけで決まるものではないことが分かる。同じポリシーを使用していても、観測が遅れれば判断の対象となる状態が古くなる。また、介入が遅れれば、観測された問題が解消する前に追加の操作が行われる可能性がある。観測誤差が大きければ、実際には状態がほとんど変化していなくても、閾値を越えたという理由で操作が選ばれる場合がある。観測と介入の条件を含めて状態遷移を考える必要がある。
Ashby のサイバネティクスは、状態、変換、制御、安定の関係を体系的に整理し、制御が成立するための条件を考える基礎を与えた[15]。制御の問題では、対象の状態がどのように変化するかだけでなく、その状態についてどのような差を識別できるか、識別した差に対してどのような操作を実行できるかが重要となる。必要な状態を区別できなければ、異なる原因に対して適切な操作を選択しにくくなる。また、状態を正しく把握できても、必要な操作を実行する手段がなければ、目的の状態へ移行できない場合がある。
例えば、外部サービスの遅延によって全体の応答時間が増加している場合、内部の処理資源を増やしても改善しない可能性がある。むしろ、処理資源の増加によって外部サービスへ同時に送信する要求が増え、外部サービスの負荷を高める場合もある。同じ応答時間の増加であっても、内部処理の能力不足と外部サービスの遅延では、適切な介入が異なる。観測から原因を十分に識別できない状態で介入を選択すると、問題の解消を妨げる操作が実施される可能性がある。
ここで、部分的な観測の下での介入という問題が生じる。例えば、内部処理の遅延が原因である状態と、外部サービスの遅延が原因である状態が、同じ全体応答時間を生むとする。全体応答時間だけを観測している運用者は、二つの状態を区別できない。処理資源を追加する操作が前者には有効であっても、後者には有効ではない場合、観測値だけから常に適切な操作を選択することは難しい。
この問題を形式的に表すと、異なる二つの内部状態 \(x_a\) と \(x_b\) が同じ観測値を生む場合、次の関係が成立する。
\[
G(x_a)=G(x_b)
\]
一方、それぞれの状態で必要な操作が異なり、例えば \(u_a\) と \(u_b\) が必要であるとする。このとき、現在の観測値だけを入力とするポリシー \(\pi\) は、二つの状態に対して同じ観測値を受け取る。したがって、同じ観測値から異なる操作を選択するための情報を持たない。どちらの状態にも適切な共通操作が存在しない場合には、現在の観測値だけに基づいて両方の状態を適切に制御することはできない。
ただし、過去の観測履歴や追加の情報を利用すれば、現在の観測値が同じでも内部状態を区別できる場合がある。例えば、応答時間が増加する前に内部の待ち行列が増えていたという履歴があれば、内部処理の能力不足を疑う根拠になる。また、外部サービスの応答時間だけが増加していた履歴があれば、外部依存の遅延を疑う根拠になる。現在の観測値だけでは識別できない状態でも、時間的な変化や追加の観測を利用することで識別できる可能性がある。
このように、観測から介入を選択する場合には、何を観測できるかが操作の選択範囲を決める。技術的に実行可能な操作が複数存在していても、それぞれの操作をどの状態で実施すべきかを識別できなければ、適切な更新を保証することは難しい。観測能力と操作能力を分けて評価することで、制御上の問題が観測不足によるものなのか、操作手段の不足によるものなのかを区別できる。
さらに、観測と介入は相互に影響する。例えば、ある処理経路を削除すれば、その経路に関するエラーは発生しなくなる可能性がある。しかし、同時に、その経路で発生していた問題を観測する機会も失われる。構造を更新することによって、次の時点で観測可能な状態の範囲が変わる場合がある。逆に、監視機能を追加すれば、それまで観測できなかった問題が可視化され、別の介入を選択できるようになる。観測方法の更新と構造の更新は、互いに独立した操作でありながら、実際の運用では相互に作用する。
この循環は、構造振動モデルにおける状態遷移の意味を広げる。構造の更新は、単に部品や接続関係を変更することではない。更新によって観測できる現象が変化し、その観測結果が次の介入の選択へ影響する場合がある。したがって、変更の前後で構造振幅を測定するだけでなく、観測可能性がどのように変化したかを確認することも、継続的な運用には重要となる。
8.3. 観測する組織も結果によって学習する
観測と介入の循環は、自動制御によって操作を選択する場合だけでなく、人間や組織が判断する場合にも成立する。例えば、あるサービスで障害の記録方法を詳細化したとする。以前は「システムの問題」として一括して記録されていた現象が、入力の不備、外部依存先の遅延、設定変更、内部処理の不具合などに分類されるようになる。観測方法を改善したことで、同じ障害件数であっても、その内訳を把握できるようになる。
この変更によって、組織が問題を理解する方法も変化する可能性がある。例えば、以前は内部処理の不具合だと考えられていた障害の多くが、実際には外部サービスの応答遅延によって生じていたと判明したとする。その場合、開発担当者による内部処理の改修だけでなく、外部サービスとの接続条件、再試行の方法、障害時の切り替え手順などが改善対象として認識されるようになる。観測の改善によって、問題の原因に関する組織の認識が更新されるのである。
さらに、原因の分類が変われば、問題を担当する主体も変化する場合がある。内部処理の不具合であれば開発担当者が中心となって修正することが合理的である。一方、外部サービスの容量制約が原因であれば、運用担当者や外部サービスの管理者との調整が必要になる可能性がある。障害の分類が詳細化されることで、問題を共有する相手、承認を必要とする操作、変更の優先順位が更新される。最初の変更は監視機能の追加であっても、その結果が組織の意思決定へ波及する場合がある。
このような変化を考えると、観測する組織は、対象から情報を受け取るだけの固定的な存在ではない。観測結果を通じて問題に対する理解を更新し、判断の基準や役割分担を変更することがある。例えば、重大障害を経験した後に、以前は任意だった変更前の確認作業を必須とする場合がある。また、障害の原因が特定の依存関係へ集中していると分かれば、その依存関係を変更する操作には追加の承認を必要とする場合もある。観測によって得た情報が、後の操作を選択する制度の変更へつながるのである。
この関係は、無我を考慮した判断主体の更新とも接続する。判断主体の認識や評価を表す状態を \(b_t\) とし、実施した操作を \(U_t\)、操作後に得られた観測結果を \(y_{t+1}\) とする。判断状態が経験によって更新される関係を、次のように表せる。
\[
b_{t+1}=B(b_t,y_{t+1},U_t)
\]
ここで \(B\) は、観測と操作の経験を通じて判断状態が更新される規則である。例えば、ある構造変更によって障害が減少したと観測されれば、その変更方法が有効であるという推定が強まる可能性がある。反対に、変更後に新しい障害が生じれば、同種の変更に対する評価が更新される場合がある。ただし、観測結果だけから介入の効果を確定することは難しいため、判断状態の更新には、介入時の環境条件や比較可能な観測記録も関係する。
また、個人の判断状態が更新されることと、組織の運用規則が更新されることは別である。例えば、ある障害を経験した担当者が新しい復旧方法を理解しても、その知識が組織へ共有されなければ、担当者が交代した際に同じ判断を再現できない可能性がある。逆に、障害原因と復旧手順を記録し、必要な確認事項を運用規則へ反映すれば、個人の経験を組織の判断条件として引き継げる。個人の認識と組織の制度を分けて扱うことで、判断の継続性がどのように成立しているかを説明できる。
例えば、監視の改善によって外部サービスの遅延が障害の主要な原因であると判明した場合を考える。担当者がその事実を理解しただけであれば、次に同じ障害が発生したときに、担当者個人の判断によって対処できる可能性がある。一方、外部サービスの応答時間を監視項目へ追加し、一定の条件で再試行を制限する運用規則を定めれば、担当者が交代しても同じ条件で操作を選択できるようになる。観測結果によって得られた知識が、制度へ反映されることで、組織としての判断の再現性を高められる。
ただし、運用規則を変更する場合にも、その変更によって新たな問題が生じる可能性がある。例えば、外部サービスの応答が遅い場合には要求を即座に失敗として扱う規則を導入すると、長時間待つ要求を減らせる一方、一時的な遅延でも成功できた要求まで失敗させる可能性がある。障害を減らす目的で導入した規則が、別の種類の失敗を増加させる場合があるのである。組織が新しい情報から学習する際には、観測された問題を解消するだけでなく、採用した規則が別の条件でどのように作用するかを確認する必要がある。
このような更新を一つの状態遷移として記述するため、対象の内部状態を \(x_t\)、判断主体の状態を \(b_t\)、運用規則や権限の状態を \(r_t\)、観測方法を \(G_t\) として区別する。観測された情報から操作を選択し、その結果を通じて対象と判断主体が更新される関係は、次のように表せる。
\[
\begin{aligned}
y_t&=G_t(x_t)+\eta_t\\
U_t&=\pi(b_t,r_t,y_0,\ldots,y_t)\\
x_{t+1}&=F(x_t,U_t,C_t)\\
b_{t+1}&=B(b_t,y_{t+1},U_t)
\end{aligned}
\]
最初の式は、対象の状態から観測値が得られる関係を表す。二番目の式は、判断主体の状態、適用される運用規則、観測履歴に基づいて操作を選択する関係である。三番目の式は、選択された操作が対象の状態を更新する関係を表す。最後の式は、操作後に得られた観測結果が判断主体の状態を更新することを示している。ここでは、個人の認識と制度的な制約を区別するため、\(b_t\) と \(r_t\) を別の変数としている。
この形式化において、運用規則 \(r_t\) は必ずしも毎時点で更新されるわけではない。例えば、障害対応の規則は、通常の運用中には同じ内容を維持し、必要な承認を経た場合にだけ変更されることがある。個人の判断状態は日々の経験によって更新されても、制度上の規則は変更権限を持つ主体が正式に改訂するまで維持される。この区別によって、個人が新しい知識を得たことと、その知識に基づく新しい操作が制度上許可されたことを分けて扱える。
また、観測方法 \(G_t\) 自体も、必要に応じて更新される。例えば、以前はエラー件数だけを記録していたが、新たに外部依存先の応答時間を記録するようになった場合、観測方法が変更されたことになる。この変更によって、判断主体は以前より詳細な情報を得られる可能性がある。新しい観測結果に基づいて構造を変更すれば、対象の状態も更新される。さらに、その変更の結果を観測することで、判断主体の認識が再び更新される。対象、観測方法、判断主体、運用規則のそれぞれが、異なる条件と時間尺度で変化する。
この違いを把握するためには、障害が報告されたときに、何が変化したのかを個別に確認する必要がある。例えば、監視を詳細化した翌月にエラー件数が増加した場合、少なくとも実際の障害件数、検出率、記録対象の定義が変化したかを調べる必要がある。その後、担当者が障害の原因を新たに理解した場合には、判断の根拠が更新されたことになる。さらに、新しい障害対応規則が承認されれば、制度的な条件も更新されたことになる。エラー件数の増加という一つの観測結果から、対象と組織に複数の更新が連鎖する可能性があるのである。
ここで、判断主体が学習しているということと、その学習によって適切な操作が選択されているということは区別する必要がある。例えば、ある変更の後にエラー件数が減少したという経験を得ても、同時に監視対象が縮小されていれば、実際の障害が減少したとは限らない。その結果を変更の成功として学習すれば、誤った判断が強化される可能性がある。判断状態の更新が適切であるためには、観測結果の意味と、結果が生じた条件を正しく評価する必要がある。
また、組織の学習は、個々の担当者の理解が一致することを必ずしも意味しない。例えば、開発担当者は処理の正確性を重視し、運用担当者は復旧時間を重視することがある。両者が同じ障害記録を確認しても、採用すべき変更について異なる結論へ至る可能性がある。この場合、観測された事実に関する認識の違いなのか、損失の評価基準の違いなのか、実行可能な操作の範囲の違いなのかを区別する必要がある。何が観測されたかを共有することと、何を優先するかについて合意することは、異なる過程である。
さらに、操作の権限と責任は、判断主体が更新されることによって自動的に変化するものではない。例えば、障害原因を特定した担当者が、必要な修正方法を理解したとしても、その担当者が本番環境の構造を変更する権限を持っているとは限らない。技術的な判断が適切であることと、操作の実施が制度上許可されていることは別である。判断主体の知識が更新された場合でも、適用される権限や承認手続を確認する必要がある。
この点は、構造振動モデルにおける操作の集合を定義する際にも重要となる。例えば、時刻 \(t\) に実施できる操作の集合を \(\mathcal U(r_t)\) とすれば、実際の操作 \(U_t\) は次の条件を満たす必要がある。
\[
U_t\in\mathcal U(r_t)
\]
この式では、操作が技術的に可能であることに加えて、現在の運用規則や権限の下で許容されていることを要求する。例えば、処理資源を追加する機能が存在していても、予算や承認の制約によって追加数に上限が設けられている場合がある。また、外部サービスの接続先を変更する操作が技術的に可能でも、その変更には別の責任者の承認が必要となる場合がある。実行可能な操作の集合は、技術的な能力だけでなく、制度上の条件によっても制約される。
このように、観測と判断の循環をモデル化することで、システムの状態変化と、判断主体の状態変化を区別できる。また、観測方法の変更と、運用規則の変更も独立して記述できる。例えば、エラー件数が増加した場合に、実際の障害が増えたのか、監視方法が改善されたのかを確認できる。さらに、その結果によって担当者の理解が変化したのか、組織の規則が変更されたのかを分けて追跡できる。
ただし、このような形式化によって、人間や組織のすべての判断を完全に予測できるわけではない。実際の意思決定には、観測されていない知識、経験の解釈、組織内の関係、利用者への責任などが含まれる。また、同じ観測結果に対して異なる判断が行われる場合もある。そのため、判断状態を表すモデルは、具体的な意思決定を分析するための形式として用い、そのモデルが扱える範囲を明示する必要がある。
ここで、無我の思想との接続を考えると、観測する主体を対象の変化から独立した固定的な存在として扱うことの限界が明らかになる。システムの構造が変化すれば、新しい観測結果が得られ、その結果によって判断主体の認識が更新される。判断主体の認識が更新されれば、次に選択する操作も変化する可能性がある。そして、その操作によって対象の構造が再び更新される。対象の変化と主体の変化は、観測と介入を通じて関係している。
ただし、仏教における無我は、経験を構成する諸要素を恒常的な自己として把握することを問い直す教説であり、工学的な状態推定や学習の更新式と同一の命題ではない。工学では、判断主体を継続的に識別し、どの情報に基づいてどの操作を実施したかを記録する必要がある。主体の認識が条件に依存して更新されるという理解は、こうした識別や責任の追跡を妨げるものではない。むしろ、判断の背景にある情報と条件を明示することで、判断がどのように成立したかを具体的に説明できる。
観測と判断の循環についての結論は、対象の状態を正確に測ることだけが、運用の問題を解決する条件ではないという点にある。観測された値から内部状態を識別できること、その状態に適した操作が存在すること、必要な権限の下で操作を実施できること、操作の結果を再び適切に観測できることが、それぞれ必要となる。さらに、得られた結果によって判断主体の認識と運用規則がどのように更新されたかを確認することで、同じ障害への対応が繰り返される理由や、以前とは異なる操作が選択される理由を説明できる。
構造振動モデルは、この循環を、構造、環境、観測、介入、判断という異なる要素へ分解することで記述できる。構造が変化したという事実だけでなく、何が観測され、その観測がどの判断を生み、どの操作が実施され、結果として何が維持されたかを対応させられる。変化する対象を観測する主体もまた変化するという条件を含めることで、構造の更新は、単独の変更操作としてではなく、継続的な観測と判断の過程として理解できる。
9. 更新ポリシーは、操作の選択だけでなく権限と責任を規定する
9.1. 技術的に可能な変更と、実施してよい変更を区別する
運用中の障害に対して、ある処理経路を切り替えると応答時間が改善することが分かったとしても、その切り替えを誰でも実行してよいわけではない。変更によって他の利用者や機能へ影響が及ぶ場合、実施できる権限、事前の確認条件、変更後の監視、必要に応じて元の状態へ戻す手順が必要になる。構造の更新は、システムの状態を操作する技術的な行為であると同時に、利用者や組織へ影響を及ぼす意思決定でもある。望ましい状態へ移行できる操作が存在することと、その操作を実際の運用で選択できることは、別の条件によって決まる。
例えば、処理の応答時間が目標を超過しているサービスを考える。原因を調査した結果、要求の処理後に行われる記録処理が、応答時間の大部分を占めていると判明したとする。記録処理を省略すれば、利用者へ結果を返すまでの時間を短縮できる可能性がある。しかし、その記録が取引結果の確認、障害発生時の追跡、利用者への説明に必要なものであれば、省略によって別の重要な機能が失われる。応答時間だけを評価するなら改善に見える操作が、記録の完全性という必須条件を損なう場合がある。
この状況で、応答時間の短縮だけを目的に記録処理を省略すると、変更直後には監視上の性能が改善したように見えるかもしれない。しかし、後から処理結果について問い合わせが発生した場合、必要な記録が残っていなければ、何が実行されたのかを確認できなくなる可能性がある。さらに、障害の原因を調査する際にも、記録の欠落によって状態遷移を復元できない場合がある。短期的な応答性能の改善が、後の説明可能性や復旧可能性を低下させるのである。
したがって、変更の適切さを判断するには、現在観測されている問題だけでなく、変更によって維持される機能と失われる機能を確認する必要がある。記録処理が応答時間を増加させているなら、記録そのものを省略する以外にも、処理方法を変更する選択肢が考えられる。例えば、記録の完了を待つ必要がある処理と、一定の遅延を許容できる処理を区別することができる。ただし、記録を非同期に実行する構造へ変更する場合には、応答を返した後で記録処理が失敗する可能性を考慮しなければならない。処理順序を変更することによって、応答性能と記録の完全性の関係も更新されるためである。
ここで、運用上の許容条件と、操作を実施できる条件を分ける必要がある。前者は、どのような状態を維持したいかという目標である。後者は、その状態へ移行するためにどの操作を選択できるかという制約である。例えば、記録の完全性を維持しながら応答時間を短縮するという目標が定まっていても、それを実現するための変更に必要な権限や資源が与えられていなければ、実際に介入することはできない。
この区別を数理モデルとして記述するため、時刻 \(t\) における観測を \(O_t\)、実施する操作を \(U_t\)、観測履歴から操作を選択する更新ポリシーを \(\pi\) とする。観測履歴を用いて操作を決定する関係は、次のように表せる。
\[
U_t=\pi(O_0,O_1,\ldots,O_t)
\]
この式は、過去から現在までの観測結果に基づいて操作を選択する規則を表す。例えば、応答時間が一定期間にわたり目標を超過していることを確認した場合に、処理資源を追加するという規則が考えられる。一方、同じ応答時間の超過であっても、外部サービスの遅延が原因であると観測された場合には、内部の処理資源を追加する以外の対応が必要になる可能性がある。観測履歴は、どの状態が成立しているかを推定し、その状態に対応する操作を選択するための情報となる。
ただし、ポリシーによって選択された操作が、そのまま実施可能であるとは限らない。例えば、処理資源を追加する操作が技術的に可能でも、追加できる資源の数や費用には上限がある。また、外部サービスとの接続先を変更する操作が技術的に実装されていても、その変更には別の責任者による承認が必要な場合がある。操作の実施可能性は、技術的能力、利用可能な資源、権限、運用上の安全条件によって制約される。
時刻 \(t\) において技術的に実行できる操作の集合を \(\mathcal U_t^{\mathrm{tech}}\)、権限上許可される操作の集合を \(\mathcal U_t^{\mathrm{auth}}\)、資源の制約を満たす操作の集合を \(\mathcal U_t^{\mathrm{resource}}\)、事前に定めた安全条件を満たす操作の集合を \(\mathcal U_t^{\mathrm{safe}}\) とする。このとき、実際の運用で選択できる操作の集合を次のように定義できる。
\[
\mathcal U_t=
\mathcal U_t^{\mathrm{tech}}
\cap
\mathcal U_t^{\mathrm{auth}}
\cap
\mathcal U_t^{\mathrm{resource}}
\cap
\mathcal U_t^{\mathrm{safe}}
\]
ここで \(\cap\) は集合の共通部分を表す。すなわち、技術的に可能であり、権限上も許可され、必要な資源を利用でき、定められた安全条件を満たす操作だけが、実際に選択できる操作となる。この定義を用いれば、更新ポリシーは次の条件を満たす必要がある。
\[
U_t=\pi(O_0,\ldots,O_t),
\qquad
U_t\in\mathcal U_t
\]
左側は観測履歴に基づく操作の選択を表し、右側は選択された操作が実行可能な集合に属していることを要求する。例えば、障害を最も短時間で解消できる操作であっても、実施に必要な権限が与えられていなければ、\(\mathcal U_t^{\mathrm{auth}}\) に含まれない。この場合、その操作を選択するポリシーは、実際の運用条件を満たしていない。理論上の制御能力と、制度上許可された制御能力を区別することで、操作を実施できる範囲を明確にできる。
この集合の定義では、権限を実際に定める制度や設定が存在することが前提となる。数学的に操作を許容集合へ含めたこと自体が、新たな権限を付与するわけではない。例えば、別の管理者の権限を借りれば操作を実行できるという技術的な事実があっても、その操作を実施する許可が与えられたことにはならない。権限の集合は、実際の承認、役割、制度、アクセス制御の条件によって定まる。更新ポリシーは、その範囲を入力条件として扱う必要がある。
また、操作が実行可能な集合に属することと、その操作が目的を達成することも区別される。例えば、処理資源を追加する権限と予算があり、追加する操作が安全上の手続を満たしているとしても、実際の遅延原因が外部サービスにあれば、応答時間は改善しない可能性がある。操作を実施できることは、操作の効果を保証するものではない。目的の達成を評価するには、操作によって構造や環境がどう変化し、その結果として必要な機能が維持されたかを確認する必要がある。
この違いを整理すると、操作の選択には複数の判断段階が存在する。
| 判断段階 | 確認する内容 | 具体例 | 条件を満たさない場合 |
|---|---|---|---|
| 状態の識別 | 現在の問題がどの状態と条件によって生じているかを確認する。 | 応答時間の増加が内部処理の負荷によるものか、外部サービスの遅延によるものかを調べる。 | 原因に対応しない操作を選択し、問題を改善できない可能性がある。 |
| 操作の技術的実行可能性 | 対象の構造に対して、必要な変更を技術的に実行できるかを確認する。 | 処理資源の追加や経路の切り替えが実装上可能であることを確認する。 | 変更方法自体が存在せず、期待する状態へ移行できない。 |
| 操作の権限 | 誰が変更を提案、承認、実行できるかを確認する。 | 本番環境の接続先変更には、責任者の承認を必要とする。 | 技術的に実行できても、制度上許可された操作にはならない。 |
| 資源の制約 | 操作に必要な時間、費用、処理能力などが利用可能かを確認する。 | 処理資源の増強が予算と容量の上限に収まることを確認する。 | 許可された操作でも、実施に必要な資源を確保できない。 |
| 運用上の安全条件 | 変更によって必須機能や他の利用者への条件が失われないかを確認する。 | 応答時間の短縮によって重要な記録が欠落しないことを確認する。 | 一部の性能が改善しても、別の必須条件を損なう可能性がある。 |
| 介入効果の確認 | 実施した操作によって、目的とする機能が改善または維持されたかを確認する。 | 処理資源の追加後に、応答時間と正確性を同じ条件で測定する。 | 操作を実施した事実だけでは、目的の達成を判断できない。 |
これらの判断段階は、常に同じ主体によって実施されるとは限らない。例えば、開発担当者が障害の原因を調査し、変更方法を提案する一方、運用担当者が実施時の影響と復旧手順を確認し、責任者が最終的な承認を行う場合がある。役割を分けることによって、技術的な判断、運用上の影響評価、制度上の許可を異なる観点から確認できる。ただし、役割を分離すれば、それぞれの担当者が必要な情報を共有するための手続も必要となる。権限の分離は、判断の独立性を確保する一方、情報伝達や承認に要する時間を増やす場合もある。
また、操作の権限は、時刻や状況によって異なる場合がある。通常時には責任者の承認を必要とする変更でも、重大障害の発生時には、あらかじめ定められた緊急対応権限の範囲で担当者が実施できることがある。この場合、重大障害という条件の下で許可される操作の集合が、通常時とは異なる。ただし、緊急時に許可される操作も、制度によって具体的に定義された範囲に限られる。障害が発生したという事実だけで、すべての操作が無条件に許可されるわけではない。
さらに、許容される操作の集合を定めても、その集合の中からどの操作を選ぶかという問題が残る。例えば、処理資源を追加する操作と、要求を一時的に制限する操作がともに許可されている場合、どちらを選ぶかは、必要な機能、利用者への影響、復旧までの時間、費用によって決まる。権限と安全条件は操作の選択範囲を定めるものであり、その範囲で最も適切な操作を選ぶためには、別に評価基準が必要となる。
ここで、更新ポリシーを単純な最適化として表すことができる。現在の状態と環境の下で操作 \(u\) を実施した場合に予想される損失を \(J_t(u)\) とする。許可された操作の集合を \(\mathcal U_t\) とすれば、選択する操作は次のように表せる。
\[
U_t\in\operatorname*{arg\,min}_{u\in\mathcal U_t}J_t(u)
\]
この式は、許可された操作の中から、予想される損失が最も小さい操作を選ぶという考え方を表す。ただし、\(\operatorname*{arg\,min}\) は最小値を実現する操作の集合を表すため、複数の操作が同じ最小損失を与える場合もある。また、許可された操作の集合が空である場合や、最小値が達成されない場合には、この形式だけで操作を決定できない。実際の運用では、何を損失として評価するか、複数の目的をどう扱うか、必要な情報をどの程度推定できるかによって、選択結果が異なる。
例えば、応答時間の短縮を主な目的とする場合でも、記録の完全性を必須条件として設定すれば、その条件を破る操作は選択肢から除外される。これによって、応答時間だけを最小化する場合とは異なる操作が選ばれる。目的関数と許容される操作の集合を分けて定義することにより、何を改善したいのかという目的と、何を守らなければならないかという制約を明確にできる。
このように、構造の更新を実際の運用へ接続するには、操作の効果を計算するだけでなく、その操作を誰が、どの条件で、どの範囲まで実施できるかを定める必要がある。構造振動モデルの更新規則は、状態の変化を記述する。更新ポリシーは、観測に基づいて操作を選択する。そして、権限と安全条件は、選択された操作を実際に許容できるかを定める。これらを区別することで、構造の更新を技術的な状態遷移として記述しながら、運用上の責任を具体的に維持できる。
9.2. 更新の順序と取り消し可能性を設計する
構造の変更によって生じる危険は、変更内容だけでなく、その変更をどの順序で実施するかにも依存する。例えば、処理経路を新しい方式へ切り替える場合、最初からすべての要求を新経路へ送る方法と、一部の要求だけを新経路へ送って結果を確認する方法では、障害が発生したときの影響範囲が異なる。変更の結果が事前に完全には分からない場合、実施対象を限定して観測することにより、問題を検出してから次の操作を選択できる余地が生まれる。
例えば、10,000 件の要求を処理するサービスで、新しい処理経路を導入することを考える。変更後の経路に未知の不具合があり、特定の条件で誤った結果を返す可能性があるとする。すべての要求を一度に切り替えた場合、その不具合が広範囲の利用者へ影響する可能性がある。一方、最初に全要求の 1% だけを新経路へ送るなら、問題の発生条件と影響を限定した範囲で観測できる。必要な確認ができた後に対象を拡大すれば、途中の観測結果を判断へ反映できる。
ただし、段階的な変更によって危険が必ず小さくなるとは限らない。例えば、新旧の処理経路が同じ記録装置や状態管理機構を共有している場合、新経路へ送った要求が少数であっても、共有する状態を破壊すれば全体へ影響する可能性がある。また、全要求の 1% を対象にした試験では、まれに発生する不具合や、負荷が高い場合にだけ生じる問題を検出できないことがある。変更対象を限定したことと、影響範囲が限定されたことは、実際の依存関係によって区別される。
例えば、全要求の 1% に相当する 100 件だけを新経路へ送ったとしても、その経路が共有する設定を変更する場合には、残りの 9,900 件にも影響する可能性がある。変更対象の要求数は限定されていても、変更された共有資源の影響範囲は限定されていないためである。段階的な変更を安全な方法として扱うには、対象となる要求の割合だけでなく、その変更がどの資源や状態へ影響するかを確認する必要がある。
また、段階的に変更を進める場合には、どの観測結果をもって次の段階へ進むかを定める必要がある。例えば、最初の 1% について応答時間、処理の正確性、エラー率を測定し、それらが許容条件を満たしていれば対象を 10% へ拡大するという規則が考えられる。次の段階でも同じ条件を確認し、必要な場合には 50%、100% へ拡大する。このように、変更対象を段階的に増やす操作と、各段階の観測結果に基づく判断を組み合わせることで、変更の実施をフィードバックの過程として記述できる。
ただし、評価に必要な観測件数や観測期間が不足している場合、最初の段階で問題が検出されなかったという事実だけでは、安全性を十分に判断できない。例えば、特定の不具合が 10,000 件に一件程度の割合で発生する場合、100 件の試験で一度も不具合が観測されなかったとしても、その不具合が存在しないことは保証されない。段階的な変更は、影響範囲を限定するための方法であると同時に、限られた観測から判断する方法でもある。そのため、進行条件には、監視する項目だけでなく、必要な観測件数や時間を含める必要がある。
変更を段階的に実施する方法を数学的に考えると、変更対象の割合を \(r_t\) として表せる。例えば、最初の段階では \(r_t=0.01\)、次の段階では \(r_t=0.1\)、その後は \(r_t=0.5\)、最終的には \(r_t=1\) とする。ただし、この割合は変更対象となる要求の数を表しているだけであり、共有資源への影響や障害の波及範囲まで直接表すものではない。実際の影響を評価するには、対象となった要求数と、変更した構造が共有する依存関係を合わせて考える必要がある。
例えば、ある段階で新経路を通過した要求数を \(n_t\)、そのうち不具合によって失敗する確率を \(p_t\) とする。各要求について失敗の確率が同じであり、失敗による損失を \(L\) として一定と仮定すれば、期待される損失は次のように表せる。
\[
R_t=n_tp_tL
\]
この式では、変更対象の要求数 \(n_t\) が増えれば、ほかの条件が同じ場合、期待損失も増加する。したがって、最初の変更対象を限定することには、問題が存在した場合に影響を受ける要求数を抑えるという意味がある。ただし、先ほどの共有資源を介した障害のように、変更対象以外にも影響が及ぶ場合には、この単純な式だけで損失を評価できない。影響範囲が要求数に比例するという仮定が成立するかを確認する必要がある。
Google の『The Site Reliability Workbook』には、サービスレベル目標、監視、公開の段階的な適用、過負荷からの復旧、エラーバジェットなど、変更を継続的な運用の中で管理するための方法が整理されている[16]。これらの実践では、変更を実施すること自体を目的とするのではなく、利用者へ提供する機能を維持するために、測定結果と許容される危険を変更判断へ結びつける。例えば、変更による障害が増加している状況では、新しい変更を進めることよりも、現在の状態を安定させることを優先する判断が合理的となる場合がある。
ただし、変更を停止する判断にも費用がある。例えば、現在の構造に重大な不具合が存在し、それを修正するための変更が必要である場合、新しい変更を一律に禁止すると、既存の問題を解消できなくなる可能性がある。変更を進める危険と、変更を行わずに問題を放置する危険を比較する必要がある。運用上の判断では、変更そのものを常に危険とみなすのでも、変更によって必ず改善するとみなすのでもなく、現在の状態と操作後の状態について、どのような損失が予想されるかを評価する。
変更を取り消すことができるかどうかも、重要な判断条件となる。例えば、新しい処理経路へ切り替えた後に障害が発生した場合、以前の経路へ戻すことができれば、影響を抑えられる可能性がある。ただし、旧経路へ戻せることと、システム全体を変更前の状態へ完全に復元できることは異なる。新経路で処理した要求がすでに記録装置の状態を変更している場合、処理経路だけを元へ戻しても、記録された内容までは自動的に元へ戻らない可能性がある。
例えば、新しい処理経路が、従来とは異なる形式で記録を保存するようになったとする。変更後に新形式の記録が追加された状態で、プログラムだけを旧版へ戻すと、旧版の処理が新形式の記録を読み込めない場合がある。このとき、プログラムの構造を以前の状態へ戻しても、データの状態は変更前と同一ではない。構造の更新がデータや外部状態へ影響する場合には、変更を取り消すための条件を個別に定める必要がある。
この違いを数理的に考えるため、構造の状態を \(S_t\)、更新操作を \(U_t\)、更新後の状態を \(S_{t+1}\) とする。構造の更新が次の関係で表されるとする。
\[
S_{t+1}=M(S_t,C_t,O_t,U_t)
\]
ここで、更新後に逆向きの操作 \(U_t^{-1}\) を実施すれば、必ず元の状態へ戻れると仮定することはできない。例えば、変更後に環境やデータの状態が更新されていれば、旧構造を再適用するだけでは、変更前の状態を復元できない可能性がある。完全な取り消しが成立するためには、構造の更新だけでなく、更新の影響を受けた状態についても復元条件が必要となる。
したがって、取り消し可能性を検討する際には、変更対象となった構造だけでなく、変更によって更新されるデータ、外部サービスの状態、利用者に提供済みの結果などを確認する必要がある。例えば、外部へ通知を送信する操作は、内部の記録を削除しても送信済みの通知を取り消せない場合がある。また、利用者へ結果を返した後に内部状態を元へ戻す場合には、すでに返した結果との整合性を維持する必要がある。変更前の状態へ復帰できる範囲は、操作が外部へ与えた影響によって制約される。
ここで、取り消し可能性と、障害からの回復可能性を分ける必要がある。取り消し可能性は、実施した変更を元の状態へ戻せるかという性質である。一方、回復可能性は、障害が発生した後に必要な機能を再び提供できるかという性質である。例えば、変更前の構造へ完全には戻れなくても、新しい修正を適用することで必要な機能を回復できる場合がある。逆に、プログラムを以前の版へ戻せても、データの整合性が失われていれば、必要な機能を回復できない場合がある。
そのため、変更の実施手順には、問題が発生したときの停止条件だけでなく、回復方法を含める必要がある。例えば、変更によって応答時間が許容上限を超えた場合には対象の拡大を停止し、旧経路へ戻すことができるなら切り戻しを実施する。一方、データ形式の変更によって旧経路への復帰が困難な場合には、新経路を維持したまま不具合を修正する方法や、保存した状態から復旧する方法を準備する必要がある。どの回復方法が実行可能かは、変更の内容と、その時点の状態によって決まる。
変更の順序、監視、取り消し可能性を整理すると、次のようになる。
| 運用条件 | 確認する内容 | 具体的な失敗条件 | 必要な対応 |
|---|---|---|---|
| 変更対象の限定 | 最初に変更を適用する要求や利用者の範囲を定める。 | 共有資源への影響によって、対象外の利用者にも障害が発生する。 | 対象の割合だけでなく、依存関係を通じた影響範囲を確認する。 |
| 観測と判定 | 変更後に測定する指標、測定期間、次の段階へ進む条件を定める。 | 観測件数が不足したまま、問題がないと判断して対象を拡大する。 | 検出したい障害の種類に応じて、必要な観測条件を設定する。 |
| 段階的な適用 | どの順序と条件で変更対象を拡大するかを定める。 | 途中で問題が発生しても、自動的に対象が拡大し続ける。 | 各段階の結果に応じて進行、停止、回復を選択できる規則を設ける。 |
| 取り消し可能性 | 変更前の状態へ戻すために必要な条件を確認する。 | 新しい形式で保存したデータを、旧版の処理が読み込めない。 | 構造だけでなく、データや外部状態の復元条件を確認する。 |
| 回復可能性 | 変更を取り消せない場合にも、必要な機能を回復できるかを確認する。 | 外部へ送信済みの通知や処理済みの結果を元へ戻せない。 | 取り消し以外の修正や補償操作を含む回復方法を定める。 |
| 緊急時の操作 | 重大障害時に通常と異なる手続を使用できる条件を定める。 | 承認を待つ間に被害が拡大する、または許可されていない操作が実施される。 | 緊急時の権限、操作範囲、報告、事後確認の条件を事前に定める。 |
この表の各条件は、互いに関係している。例えば、取り消しが容易な変更であれば、問題を検出した後に以前の状態へ戻すという選択肢を持てる。一方、取り消しが難しい変更では、適用前の検証や段階的な実施により大きな注意が必要になる。さらに、変更による影響が即座に観測できない場合には、観測期間を十分に確保しなければ、問題が表面化する前に対象を拡大してしまう可能性がある。変更の順序は、観測の精度、介入の可逆性、障害の波及範囲によって決まる。
ただし、手続を厳格にすれば、あらゆる変更が安全になるわけではない。例えば、重大な障害が進行している状況で、通常時と同じ承認手続をすべて完了するまで変更を禁止すると、その間に利用者への影響が拡大する可能性がある。逆に、障害が発生したという理由だけで確認を省略して変更を実施すれば、誤った介入によって別の障害を生む可能性がある。変更を待つ危険と、確認が不十分なまま変更する危険を比較する必要がある。
この比較を単純化するため、変更を待つ場合に予想される損失を \(R_{\mathrm{wait}}\)、直ちに変更を実施する場合に予想される損失を \(R_{\mathrm{act}}\) とする。両者が同じ評価期間と損失尺度で比較できるなら、次の条件では即時の介入が期待損失を減らす可能性がある。
\[
R_{\mathrm{act}}<R_{\mathrm{wait}}
\]
ただし、この比較は、操作が許可された範囲に属していることと、必須の安全条件を満たしていることを前提としている。期待損失が小さいという推定によって、権限の制約が自動的に解除されるわけではない。また、重大な損失については期待値だけで比較することが適切とは限らず、許容できない結果を生じさせる操作を別途制限する必要がある。
例えば、重大障害時には、通常の変更審査を簡略化して特定の復旧操作を許可する制度をあらかじめ設けることが考えられる。この場合、緊急時の判断を担当者の裁量だけへ委ねるのではなく、何を重大障害とみなすか、誰が緊急対応を実施できるか、どの操作を許可するか、操作後に何を報告するかを定める必要がある。緊急時の権限は、通常時の権限とは異なる条件で成立するが、その違いも制度によって明示される。
このように、更新の順序と取り消し可能性を設計することは、変更が成功するかどうかを事前に完全に知るための作業ではない。不確実性が残る状態で変更を実施するときに、影響を限定し、観測によって判断を更新し、問題が発生した場合に利用できる回復手段を確保するための作業である。構造の変化が避けられない場合でも、変化の実施方法と判断条件を具体的に定めることで、必要な機能を維持できる範囲を広げられる。
9.3. 状態の変化から説明責任は消えない
無常や無我を運用へ接続するとき、判断が変化することと、判断の責任がなくなることを混同するべきではない。担当者が新しい情報を得て以前とは異なる判断を選択することは、合理的な更新でありうる。しかし、誰がどの情報を得て、何を目的に、どの操作を提案し、誰が承認して実施したかという事実は、判断の背景として残る。判断主体の認識が変化することと、実施された操作の履歴を追跡することは、両立する。
例えば、処理経路の切り替えによって応答時間が短縮すると予測され、必要な承認を得て変更を実施したとする。しかし、変更後に記録処理の遅延が発生し、利用者へ返した結果と記録された内容に不整合が生じたとする。この場合、変更の結果が望ましくなかったという事実だけで、変更当時の判断が不適切だったと直ちに結論づけることはできない。変更前にどの情報が利用可能であり、どの失敗条件が予測でき、どの検証が実施されていたかを確認する必要がある。
例えば、変更前の設計と試験によって記録処理の不整合が予測できていたにもかかわらず、その危険を確認せずに変更を実施した場合には、事前の検証に問題があった可能性がある。一方、合理的に想定できる条件で検証を行い、記録処理の整合性について必要な確認を実施していたにもかかわらず、想定していなかった環境条件の組み合わせによって障害が発生した場合には、評価すべき事情が異なる。事後に判明した情報を、変更前から当然に利用できた情報として扱えば、判断当時の条件を誤って評価することになる。
この違いを分析するため、判断時点で利用可能だった情報を \(I_t\)、実施した操作を \(U_t\)、その後に観測された結果を \(O_{t+1}\) として区別する。判断時点では、\(I_t\) に基づいて操作を選択する。一方、事後の評価では、実際に得られた \(O_{t+1}\) を利用できる。この二つの情報集合は、通常、同一ではない。
例えば、変更後に初めて明らかになった外部サービスの仕様上の制約は、判断時点の担当者が把握していなかった可能性がある。その制約について事前に調査することが合理的に要求されていたかどうかと、変更後に実際に判明したかどうかは別の問題である。事後の結果を用いて判断の適切さを評価する場合には、判断当時の情報、事前に求められていた確認、実際に得られた結果を分ける必要がある。
また、変更が成功した場合であっても、実施手続が適切だったとは限らない。例えば、必要な承認を得ずに本番環境の構造を変更し、結果として応答性能が改善した場合を考える。この変更は技術的な目的を達成しているかもしれない。しかし、操作の実施が許可された権限の範囲に収まっていたかどうかは、結果とは別に評価する必要がある。変更の結果が良好であったという事実によって、実施時点に存在していた権限の制約が遡って解除されるわけではない。
逆に、必要な承認と検証を経て変更を実施したにもかかわらず、想定外の障害が発生する場合もある。この場合には、手続が満たされていたことと、結果が望ましくなかったことを分けて記録する必要がある。障害の結果だけをもって担当者の判断を評価すれば、必要な変更を避ける方向へ組織の行動が偏る可能性がある。一方、手続が適切だったという事実だけで、障害の原因分析や再発防止が不要になるわけでもない。手続の適切さと結果の検証は、別の観点から行う必要がある。
この関係を整理すると、説明責任には複数の側面がある。
| 評価する側面 | 確認する内容 | 具体例 | 区別すべきこと |
|---|---|---|---|
| 判断の根拠 | 変更を選択した時点で、どの情報と評価基準が利用されたかを確認する。 | 応答時間の測定結果と、遅延の原因に関する分析を記録する。 | 判断時点で利用できた情報と、事後に判明した情報を区別する。 |
| 操作の権限 | 変更の提案、承認、実施が許可された範囲で行われたかを確認する。 | 本番環境の変更について、必要な責任者の承認が存在したかを確認する。 | 操作の効果と、操作が制度上許可されていたことを区別する。 |
| 事前の検証 | 変更に伴う危険をどこまで確認し、何を未確定として扱っていたかを確認する。 | 記録処理の整合性と、変更失敗時の復旧方法を確認する。 | 合理的に確認可能だった条件と、事前には把握できなかった条件を区別する。 |
| 実施された操作 | 実際に何が変更され、どの順序で適用されたかを確認する。 | 新経路へ切り替えた対象と、変更が完了した時点を記録する。 | 承認された変更内容と、実際に実施された操作を区別する。 |
| 観測された結果 | 変更後にどの機能が維持され、どの問題が発生したかを確認する。 | 応答時間、処理の正確性、記録の完全性を測定する。 | 変更後の数値の変化と、その変化の原因を区別する。 |
| 事後の更新 | 得られた結果から、判断基準や運用規則がどのように更新されたかを確認する。 | 障害の原因を分析し、必要な試験や承認条件を見直す。 | 新しい情報を得たことと、その情報を適切に制度へ反映したことを区別する。 |
この表に示した事項は、実際の運用における変更履歴として記録できる。例えば、変更を実施した日時、対象となった構造、変更の目的、事前の観測結果、承認した主体、実施した操作、変更後の観測結果を対応させれば、判断の前提と結果を後から確認できる。障害が発生した場合には、変更そのものが原因だったのか、同時に変化した環境条件が影響したのかを調べるための情報にもなる。
ただし、変更履歴が詳細に残っていることだけで、変更の原因や効果を完全に特定できるわけではない。例えば、構造変更と同じ時期に利用者数が増加し、外部サービスの応答時間も悪化していた場合、変更後の障害を構造変更だけに帰属させることは難しい。操作の履歴は、何が実施されたかを明らかにする。一方、その操作がどの結果を生じさせたかを判断するには、環境条件や比較可能な観測結果を含めた因果的な検証が必要になる。
また、判断の過程を記録する際には、個人の内面的な状態を完全に復元することを目的とする必要はない。例えば、担当者がどのような感情を抱いていたかを推測するよりも、どの測定結果を確認し、どの選択肢を比較し、何を理由に操作を選択したかを記録する方が、実務上の検証に結びつきやすい。判断主体の認識や価値判断は時間とともに更新されるが、その時点で利用した情報と実施した操作は、具体的な記録として残すことができる。
ここで、無我を考慮した判断主体の理解と、運用上の説明責任との接点が明確になる。無我の思想は、判断する主体を恒常不変の実体として捉えることを問い直す。一方、運用における責任は、特定の時点で誰がどの権限を持ち、何を実施したかという事実と制度的な条件によって成立する。判断主体の知識や評価が変化することは、行為の記録や責任の帰属を不可能にするものではない。
例えば、ある担当者が過去に例外経路の追加を支持し、その後の運用経験によって削除を支持するようになった場合を考える。以前の判断が当時の情報に基づいて合理的であり、現在の判断も新しい情報に基づいて合理的である可能性がある。このとき、同じ担当者が反対の操作を支持しているという事実だけでは、どちらの判断が不適切だったかを決められない。各時点の観測情報、想定していた損失、実施可能だった操作を比較することによって、判断が更新された理由を説明できる。
一方、過去の判断を行った担当者が、後になって判断を変更したという理由で、過去に実施した操作の責任から自動的に離れることもできない。操作を実施した時点でどの権限と義務が存在したか、必要な確認が行われたかという事実は、その後の認識の変化とは別に残る。判断主体の認識が変化することと、過去の行為について説明を求められることは両立する。
また、責任を特定の個人へすべて集中させることが、常に適切な説明になるわけでもない。例えば、担当者が必要な監視情報へアクセスできない状態で変更を求められていた場合や、承認手続が存在しなかったために判断の権限が曖昧だった場合には、個人の判断だけでなく、組織の制度や情報共有の条件も問題となる。実施された操作の責任を確認する際には、個人がどの条件の下で判断したかを調べる必要がある。条件依存性を考慮することで、個人の行為と制度上の欠陥を分けて分析できる。
この点で、説明責任は、判断主体を不変の存在として扱うことによって成立するのではなく、判断と操作の関係を追跡できることによって成立する。誰が判断したかを識別し、その時点でどの情報と権限が存在し、どの操作が実施され、何が観測されたかを確認する。さらに、事後に得られた情報によって判断の条件がどのように更新されたかを記録することで、過去の判断を評価しながら、後の運用を改善できる。
ただし、責任の所在を明確にすることと、結果が悪化した場合に必ず誰かを処分することは同義ではない。例えば、事前に合理的な検証を行い、必要な承認を得て実施した変更が、想定外の環境条件によって失敗する場合がある。その場合には、どの条件が事前の想定から外れたかを明らかにし、必要に応じて観測方法や変更手順を更新することが重要となる。一方、権限外の操作や必要な確認の省略があった場合には、その事実を別に評価する必要がある。判断の適切さと、結果の良否と、手続の遵守を分離することで、運用上の説明責任を具体的に扱える。
さらに、変更後の結果が良好だった場合にも、その変更から得られる知識には限界がある。例えば、処理経路の切り替えによって応答時間が短縮されたとしても、別の負荷条件や外部環境でも同じ効果が得られるとは限らない。成功した変更の条件を記録することは、後の判断へ適切に知識を引き継ぐために必要となる。過去に成功したという事実だけを根拠に、条件の異なるシステムへ同じ操作を適用すれば、新しい障害を生む可能性がある。
このように、更新ポリシーを運用へ組み込む際には、状態をどのように変更するかという技術的な規則と、その変更を誰がどの条件で実施するかという制度的な規則を分ける必要がある。技術的な規則は、観測された状態から目的を達成するための操作を選ぶ。制度的な規則は、その操作が許可された範囲に属し、必要な確認と承認を経ていることを保証するための条件となる。さらに、実施された操作とその結果を記録することで、判断の妥当性と制度の適切さを事後に検証できる。
無常的な世界では、対象の構造も、環境も、判断主体の知識も時間とともに更新される。そのため、ある時点で適切だった操作が、別の時点でも適切であるとは限らない。しかし、判断が条件に依存することを認めるなら、どの条件の下で操作が選ばれたかを明確にする必要性はむしろ高まる。構造が変化する理由を理解し、更新された判断を適切に実施するためには、観測、権限、操作、結果を対応させて記録することが重要となる。
構造振動モデルの更新ポリシーは、こうした条件を持つ操作として理解できる。構造をどの方向へ更新するかを計算するだけでなく、許可された操作の集合を定め、更新の順序と回復手段を設計し、判断の根拠と結果を追跡する。これによって、構造の変化を技術的な状態遷移として扱いながら、変更に伴う責任を具体的に維持できる。
そして、必要な機能を維持するための操作が常に存在するとは限らないという問題も残る。現在の状態が運用上の許容条件を満たしていても、環境の変化に対応するための操作が、権限や資源の制約によって実施できない場合がある。あるいは、操作自体は存在していても、現在の観測から適切な操作を識別できない場合もある。継続的な運用が成立するためには、許容される状態を定義するだけでなく、その状態を維持するための実行可能な操作が存在するかを検討する必要がある。
10. 許容状態を維持できる条件を、制御不変性として導く
10.1. 現在の許容性と将来の維持可能性には差がある
あるシステムが現在の要求を満たしているとしても、その状態を将来にわたって維持できるとは限らない。例えば、毎秒 100 件の要求を処理できるサービスに、現在は毎秒 80 件の要求が到着しているとする。この状態では処理能力が要求量を上回っているため、処理能力には毎秒 20 件分の余裕がある。しかし、次の時点で要求量が毎秒 140 件へ増加する可能性があるなら、現在の余裕だけでは対応できない。処理能力を一度に毎秒 20 件分しか増やせない場合、最大限の増強を行っても処理能力は毎秒 120 件にとどまり、要求量を下回る。現在の正常性と、環境の変化に対して必要な機能を維持できることは、異なる条件によって決まる。
この違いは、構造の持続性を考えるうえで重要である。ある構造が現在の環境で正常に機能しているという事実は、その構造と環境の組み合わせが、現在必要な条件を満たしていることを示す。しかし、環境が変化したときにどの構造へ更新できるか、更新にどれだけ時間がかかるか、変更を実行するための資源と権限が存在するかによって、将来の状態は異なる。現在の性能が良好であっても、必要な変更を実施できなければ、機能の継続性は失われる可能性がある。
例えば、同じ毎秒 100 件の処理能力を持つ二つのサービスを考える。一方は処理部品を追加することで短時間に能力を増強できるが、もう一方は処理能力を変更するために長時間の停止が必要になるとする。現在の要求量が毎秒 80 件であれば、両方のサービスは同じ性能を示すかもしれない。しかし、要求量が急増した場合には、前者は必要な処理能力を追加できる一方、後者は更新が完了するまで要求を処理しきれなくなる可能性がある。現在の観測値が同じでも、利用できる操作が異なれば、将来の維持可能性も異なる。
また、処理能力を増やす操作が存在していても、増強量に上限があれば、対応できる環境変化には限界がある。例えば、一度の更新で処理能力を毎秒 20 件分だけ追加できる構造では、要求量が毎秒 10 件ずつ増える場合には対応できる可能性がある。しかし、要求量が毎秒 30 件ずつ継続して増える場合には、毎回最大限の増強を行っても、要求量の増加に追いつかない。現在どれだけ余裕があっても、増強能力を上回る要求の増加が続けば、その余裕はいずれ失われる。
このような問題を扱うには、ある時点で必要な条件を満たしているかという判定と、環境の変化に応じて条件を満たし続けられるかという判定を分ける必要がある。前者は現在の状態に関する条件であり、後者は状態遷移、操作の範囲、環境変化の範囲に関する条件である。現在の状態を評価するだけでは、将来の状態がどのような範囲に移動するかを判断できない。
第 6 章では、環境 \(C\) の下で必要な機能を満たす構造の集合を \(\Omega(C)\) として定義した。この集合を用いれば、現在の構造 \(S_t\) が許容される条件は、次のように表せる。
\[
S_t\in\Omega(C_t)
\]
この式が示すのは、現在の構造と環境の組み合わせが、定義された運用上の条件を満たしているということである。一方、環境が変化した後にも必要な機能を維持できるかを考えるには、構造と環境を合わせて状態として扱う必要がある。
そこで、時刻 \(t\) における構造と環境をまとめた状態を、次のように定義する。
\[
z_t=(S_t,C_t)
\]
ここで \(S_t\) はシステムの構造、\(C_t\) はその構造が動作する環境条件である。例えば、\(S_t\) には処理部品の数や接続関係が含まれ、\(C_t\) には要求量や外部サービスの状態が含まれる。実際の状態遷移が過去の待ち行列や実行中の変更に依存する場合には、それらも状態変数へ含める必要がある。現在の状態と操作、外部からの変化が与えられたときに、次の状態を決めるために必要な情報を状態として定義することが重要となる。
さらに、運用者が選択する操作を \(u_t\)、運用者が直接選択できない環境変化を \(w_t\) とする。このとき、状態遷移を次のように表せる。
\[
z_{t+1}=F(z_t,u_t,w_t)
\]
ここで \(F\) は、現在の状態、操作、環境変化から次の状態を決定する規則である。例えば、処理能力の増強が操作 \(u_t\) に対応し、要求量の増加が外乱 \(w_t\) に対応する。外乱とは、運用者が直接値を指定できない変化を表す。この例では要求量の増加が外乱であり、その値が確率的に変動する場合も、あらかじめ指定した範囲で変動する場合も考えられる。
この定式化では、外乱をどの範囲まで想定するかが重要になる。例えば、要求量が次の時点までに最大 20 件増えるという条件で設計した更新規則は、要求量が 100 件増える場合まで保証するものではない。また、外乱が一時点だけ発生する場合と、毎時点継続して発生する場合では、必要な処理能力の余裕が異なる。どの環境変化に対して機能の維持を要求するかを明示しなければ、維持可能性についての保証の範囲を定められない。
構造と環境を合わせた状態 \(z=(S,C)\) について、運用上の許容条件を満たす状態の集合を \(\mathcal K\) とする。第 6 章で定義した \(\Omega(C)\) を用いれば、次のように表せる。
\[
\mathcal K
=
\{(S,C)\mid S\in\Omega(C)\}
\]
この集合には、構造と環境の組み合わせが必要な機能を満たしている状態が含まれる。例えば、処理能力が要求量以上であるという条件を採用するなら、処理能力に十分な余裕がある状態だけでなく、処理能力と要求量が等しい状態も含まれる。しかし、両者が等しい状態では、要求量が少しでも増加すれば、その時点で処理能力が不足する可能性がある。現在の許容条件を満たす状態の中にも、将来の環境変化に対応できる余裕が異なる状態が含まれている。
ここで、許容集合に属することと、その集合の内部にとどまり続けられることを区別する必要がある。状態 \(z_t\) が現在の許容集合に属していても、次の状態 \(z_{t+1}\) が同じ集合に属するとは限らない。例えば、現在は十分な処理能力があっても、要求量の増加と処理能力の増強上限によって、次の時点では必要な条件を満たせなくなる場合がある。状態の現在の位置だけでなく、そこからどの方向へ移動しうるかを調べることが、維持可能性の検討につながる。
この違いは、無常的な世界の運用という観点からも重要となる。ある状態が現在成立していることは、その状態を成立させる条件が今後も継続することを意味しない。環境が変化するとき、必要な機能を維持するためには構造の更新が必要になる場合がある。しかし、どのような更新でも実行できるわけではなく、操作の能力、時間、資源、権限によって実施可能な範囲が定まる。持続性を検討するには、現在の成立条件だけでなく、条件の変化に対してどのような操作が可能かを明らかにする必要がある。
10.2. 操作可能範囲と外乱範囲を明示した維持条件
現在の状態が許容集合に属しているだけでは、将来も必要な機能を維持できるとは限らない。この問題をさらに進めるため、各状態で選択できる操作の集合と、考慮する外乱の集合を明示する。時刻 \(t\) における状態を \(z_t\)、許可された操作の集合を \(\mathcal U(z_t)\)、想定する外乱の集合を \(\mathcal W\) とする。ここでは状態を完全に把握でき、操作を外乱の値が確定する前に選択する場合を考える。
例えば、現在の処理能力と要求量を正確に把握できているが、次の時点で要求量がどの程度増えるかは分からないとする。運用者は、現在の状態に基づいて処理能力の増強量を決定する。その後、外部からの要求量が変化する。この順序では、要求量の増加を確認してから、それに完全に一致する増強量を選ぶことはできない。操作を選択する時点で利用できる情報と、その後に発生する外乱を区別する必要がある。
この条件の下で、許容集合 \(\mathcal K\) を維持するための十分な条件として、次の関係を考える。
\[
\forall z\in\mathcal K,\quad
\exists u\in\mathcal U(z),\quad
\forall w\in\mathcal W:
F(z,u,w)\in\mathcal K
\]
この式には、三つの量化条件が含まれている。最初の \(\forall z\in\mathcal K\) は、許容集合に含まれるどの状態から始めても条件が成立することを要求する。次の \(\exists u\in\mathcal U(z)\) は、その状態において許可された操作の中に、適切な操作が少なくとも一つ存在することを要求する。最後の \(\forall w\in\mathcal W\) は、その操作を選んだ後、想定した範囲のどの外乱が発生しても、次の状態が許容集合に含まれることを要求する。
この量化条件の順序は、運用上の意味を決めている。現在の状態 \(z\) を把握した後で操作 \(u\) を選び、その操作が固定された状態で、想定したどの外乱 \(w\) に対しても許容条件を維持できる必要がある。外乱の値を事前に知って、その値に応じて操作を選べる場合とは、要求される能力が異なる。
例えば、処理能力を一度に最大 20 件増やせるサービスで、次の時点に要求量が 0 件から 30 件の範囲で増加するとする。もし増加量が事前に分かるなら、現在の余裕に応じて必要な増強量を選択できる場合がある。しかし、増加量が分からないまま操作を決めるなら、想定される最大の増加にも対応できるように操作を選ぶ必要がある。外乱の値を知った後に操作を選べることと、外乱が発生する前に一つの操作を決めることには、情報上の違いがある。
この違いは、量化条件の順序を入れ替えると明確になる。先ほどの条件では、状態 \(z\) ごとに一つの操作 \(u\) を選び、その操作であらゆる外乱へ対応することが求められる。一方、次の条件では、外乱が分かった後で、その値に対応する操作を選ぶことが許される。
\[
\forall z\in\mathcal K,\quad
\forall w\in\mathcal W,\quad
\exists u\in\mathcal U(z):
F(z,u,w)\in\mathcal K
\]
後者の条件は、各外乱に対応する操作が存在することを表す。しかし、外乱が発生する前に一つの操作を決定しなければならない運用では、どの操作を選ぶかを事前に確定できない場合がある。例えば、要求量が増える場合には処理資源を追加し、要求量が減る場合には処理資源を削減することがそれぞれ適切でも、外乱が発生する前に増減の方向を識別できなければ、どちらを選ぶべきかを決められない。操作の選択時点で利用できる情報が、維持可能性を制約する。
ここで、最初の条件が許容集合 \(\mathcal K\) のすべての状態について成立し、各状態で条件を満たす操作を選ぶポリシー \(u=\pi(z)\) を構成できるとする。このポリシーを使用して状態を更新する場合、初期状態 \(z_0\in\mathcal K\) から出発すれば、最初の更新後も \(z_1\in\mathcal K\) が成立する。さらに、\(z_1\) も許容集合に属するため、同じ条件に従って操作を選べば \(z_2\in\mathcal K\) が成立する。この操作を繰り返せば、考慮した外乱が毎時点その集合に属する限り、帰納的にすべての時点で許容集合への所属を維持できる。
この性質は、離散時間のロバストな制御不変性として理解できる。許容集合の任意の状態から、許可された操作を適切に選ぶことで、想定した外乱に対して集合の外側へ移動しないという性質である。Aubin の維持可能性理論は、状態制約を満たしながら運動を継続できる条件を扱う。Blanchini の研究は、制御系における不変集合とその性質を整理している[17][18]。ここでは、その考え方を、構造と環境の変化に対して必要な機能を維持するための条件として用いる。
ただし、許容集合 \(\mathcal K\) に含まれるすべての状態が、この条件を満たすとは限らない。例えば、現在の処理能力が要求量と等しく、次の時点で要求量が大きく増加する可能性がある場合、許可された最大の増強操作を実施しても必要な条件を満たせないことがある。この場合、現在の状態は許容集合に属していても、次の状態を許容集合へ維持する操作が存在しない。許容集合に属することと、その集合が制御不変であることは異なる。
また、ある一つの状態から次の状態を許容集合へ移せることと、すべての時点で許容集合を維持できることも区別する必要がある。例えば、現在の余裕を使用することで次の時点の要求増加へ対応できても、その結果として余裕が減少し、さらに次の要求増加へ対応できなくなる場合がある。一段階の更新について条件を満たしたことだけでは、更新後の状態からも同じ条件を満たせるとは限らない。無限期間にわたる維持可能性を検討するには、更新後に到達する状態についても、許容集合を維持する操作が存在する必要がある。
この違いを考えるため、ある初期状態から許容条件を維持できる期間を調べる方法がある。例えば、現在の状態から一段階先まで条件を満たす操作が存在するかを確認し、その次の状態からも条件を維持できるかを調べる。必要に応じて、二段階、三段階と維持可能な範囲を広げて検討することで、現在の状態がどの程度の環境変化に対応できるかを具体的に評価できる。
さらに、許容集合全体が制御不変でなくても、その内部に制御不変な部分集合が存在する場合がある。例えば、現在の処理能力が要求量以上であるという条件だけでは、余裕の小さい状態も許容される。しかし、一定以上の処理能力の余裕を持つ状態に限定すれば、想定した外乱に対して必要な機能を維持できる場合がある。このとき、許容集合の内部から、将来の維持可能性を保証できる状態の範囲を求めることが考えられる。
このような範囲を求める考え方は、維持可能核や制御不変集合の問題と関係する。ある許容集合に対して、どの初期状態から、許可された操作を適切に選ぶことで制約を維持できるかを調べる。重要なのは、現在許容されているすべての状態が、同じ程度に維持可能であるとは限らないという点である。将来の環境変化へ対応する余裕や操作能力を持つ状態と、許容条件の境界に位置する状態では、維持可能性が異なる。
ただし、こうした数学的な保証は、定義した状態空間、操作集合、外乱集合、状態遷移規則の下で成立する。例えば、要求量の増加を毎秒最大 30 件と仮定したモデルで維持可能性を示したとしても、実際に毎秒 100 件の増加が発生した場合まで保証するものではない。また、処理資源の増強が即座に反映されると仮定したモデルでは、増強に必要な時間が長くなる場合の影響を扱えない。数学的な不変性の成立には、モデルが表現する条件と実際の運用条件が対応していることが必要となる。
この意味で、制御不変性の条件は、無条件の安定を約束するものではなく、何を保証するために、どの操作能力と環境条件が必要かを明示するものである。ある構造が持続できるかどうかは、構造そのものの性質だけでなく、環境の変化、実施できる操作、更新に必要な時間によって決まる。条件に依存する持続性を、具体的な状態遷移の性質として検討できる点に、この形式化の意義がある。
10.3. 処理能力の例で、操作可能性の境界を計算する
制御不変性の条件を、処理能力と要求量の関係から具体的に考える。時刻 \(t\) における処理能力を \(c_t\)、要求量を \(r_t\) とし、必要な条件を次のように定める。
\[
c_t\geq r_t
\]
この条件は、処理能力が要求量以上であることを表す。ここでは、処理能力と要求量を同じ時間単位で測定し、処理能力が要求量を上回っていれば、その期間に到着する要求を処理できるという単純化を置く。実際の待ち行列や応答時間には、処理時間の分布、要求の到着のばらつき、資源の共有などが影響するため、この条件だけでサービスの品質全体を評価できるわけではない。しかし、処理能力の余裕と要求量の増加の関係を調べるには十分な単純モデルとなる。
処理能力を増強する操作を \(u_t\) とし、時刻ごとに最大 20 件分まで増強できるとする。能力の増強は次の時点までに反映され、処理能力の削減は行わないものとする。このとき、処理能力の更新は次のようになる。
\[
c_{t+1}=c_t+u_t,
\qquad
0\leq u_t\leq20
\]
また、要求量は外乱 \(w_t\) によって変化し、一時点当たりの増加量が 0 件以上 30 件以下であるとする。
\[
r_{t+1}=r_t+w_t,
\qquad
0\leq w_t\leq30
\]
ここで \(u_t\) は運用者が選べる増強量であり、\(w_t\) は運用者が直接選べない要求量の増加である。運用者は現在の処理能力と要求量を把握しているが、次の時点における要求量の増加を事前に正確には知らないとする。したがって、増強量を決定した後で、想定した範囲のどの増加が発生しても必要な条件を満たせるかを検討する。
現在の処理能力が \(c_t=100\)、要求量が \(r_t=100\) である場合、処理能力と要求量は等しい。現在の条件 \(c_t\geq r_t\) は満たされているが、余裕は存在しない。この状態で最大の増強操作 \(u_t=20\) を選んだとしても、要求量が最大の \(w_t=30\) 増加すれば、次の状態は次のようになる。
\[
\begin{aligned}
c_{t+1}&=100+20=120\\
r_{t+1}&=100+30=130
\end{aligned}
\]
次の時点では \(c_{t+1}=120\)、\(r_{t+1}=130\) となるため、必要な条件を満たさない。現在の状態は許容されていても、許可された操作の範囲では、想定した最大の外乱に対応できないのである。
一方、現在の処理能力が \(c_t=120\)、要求量が \(r_t=100\) であれば、20 件分の余裕がある。この状態で最大の増強操作 \(u_t=20\) を選び、要求量が \(w_t=30\) 増加した場合、次の状態は次のようになる。
\[
\begin{aligned}
c_{t+1}&=120+20=140\\
r_{t+1}&=100+30=130
\end{aligned}
\]
この場合には、次の時点でも処理能力が要求量を上回り、10 件分の余裕が残る。現在の処理能力に余裕が存在することで、一度の増強操作だけでは対応できない要求量の増加にも、一段階先までは対応できる可能性がある。
この違いを一般的に表すため、処理能力と要求量の差を余裕 \(m_t\) として定義する。
\[
m_t=c_t-r_t
\]
このとき、現在の許容条件は \(m_t\geq0\) と表せる。処理能力と要求量の更新式を用いれば、次の時点の余裕は次のようになる。
\[
\begin{aligned}
m_{t+1}
&=c_{t+1}-r_{t+1}\\
&=(c_t+u_t)-(r_t+w_t)\\
&=m_t+u_t-w_t
\end{aligned}
\]
この式は、現在の余裕に処理能力の増強量を加え、要求量の増加分を差し引くことで、次の時点の余裕が決まることを示している。例えば、現在の余裕が 20 件で、処理能力を 20 件増強し、要求量が 30 件増加した場合、次の余裕は 10 件となる。
ここで、許可された最大の増強量が 20 件、想定した最大の要求増加が 30 件であることから、次の時点の余裕を最も小さくする条件は、要求量が最大の 30 件増加する場合である。運用者が最大の増強を実施しても、そのときの余裕は次のようになる。
\[
m_{t+1}=m_t+20-30=m_t-10
\]
したがって、次の時点でも許容条件 \(m_{t+1}\geq0\) を満たすためには、現在の余裕が少なくとも 10 件必要となる。
\[
m_t\geq10
\]
この条件は、想定した外乱範囲に対して一段階先まで必要な処理能力を維持するための条件である。現在の処理能力が要求量を上回っているだけでは十分ではなく、処理能力の増強上限と要求量の最大増加の差を補えるだけの余裕が必要になる。
現在の余裕と、次の時点における最悪条件での余裕を比較すると、次のようになる。
| 現在の余裕 \(m_t\) | 最大増強量 \(u_t\) | 最大要求増加 \(w_t\) | 次時点の余裕 \(m_{t+1}\) | 一段階先の許容性 |
|---|---|---|---|---|
| 0 件 | 20 件 | 30 件 | -10 件 | 処理能力が要求量を下回る。 |
| 5 件 | 20 件 | 30 件 | -5 件 | 処理能力が要求量を下回る。 |
| 10 件 | 20 件 | 30 件 | 0 件 | 処理能力と要求量が等しくなり、許容条件を満たす。 |
| 20 件 | 20 件 | 30 件 | 10 件 | 許容条件を満たし、10 件分の余裕が残る。 |
| 30 件 | 20 件 | 30 件 | 20 件 | 許容条件を満たし、20 件分の余裕が残る。 |
この表では、現在の余裕が 10 件以上であれば、最大の増強操作を選ぶことで、想定した最大の要求増加に対して次の時点の許容条件を満たせる。一方、余裕が 10 件未満の場合には、最大の増強を行っても、要求量の増加が最大となる条件で処理能力が不足する。現在の許容条件は \(m_t\geq0\) であるのに対して、一段階先の最悪条件まで含めた維持可能性には \(m_t\geq10\) が必要となる。現在許容されている状態の中にも、次の環境変化へ対応できる状態と、対応できない状態が存在している。
ただし、現在の余裕が 10 件以上であれば、将来にわたって許容条件を維持できるという意味ではない。例えば、現在の余裕が 10 件で、最大の増強操作を選び、要求量が 30 件増加した場合、次の余裕は 0 件となる。その状態は現在の許容条件を満たしているが、さらに要求量が 30 件増加すると、最大の増強操作を行っても処理能力が不足する。最初の更新で許容集合にとどまれたとしても、更新後の状態が再び一段階先の維持条件を満たすとは限らない。
この違いを明確にするため、現在の余裕が \(m_0=20\) である場合を考える。毎時点、処理能力を最大の 20 件増強し、要求量も最大の 30 件増加し続けるとすると、余裕の更新は次のようになる。
\[
m_{t+1}=m_t-10
\]
したがって、余裕は時刻ごとに 10 件ずつ減少する。初期状態からの推移は次のようになる。
\[
m_0=20,\quad
m_1=10,\quad
m_2=0,\quad
m_3=-10
\]
この場合、時刻 0 から時刻 2 までは許容条件を満たすが、時刻 3 では処理能力が要求量を下回る。現在の余裕が 20 件あるという条件によって、二段階先までは最大の要求増加へ対応できる。しかし、三段階先まで同じ条件を維持することはできない。現在の余裕は、将来の環境変化に対応するための資源であり、操作能力を上回る変化が継続すれば消費されていく。
この関係を一般化すると、毎時点の要求量の増加が最大 30 件であり、処理能力の増強が最大 20 件であるため、最悪条件では余裕が毎時点少なくとも 10 件ずつ減少する。初期の余裕を \(m_0\) とし、毎時点最大の増強操作を実施する場合、外乱が毎回最大となるときの余裕は次のようになる。
\[
m_n=m_0-10n
\]
ここで \(n\) は更新回数である。時刻 0 から \(T\) までのすべての時点で許容条件を満たすためには、次の条件が必要となる。
\[
m_0\geq10T
\]
この条件は、指定した有限期間について、想定した最大の要求増加へ対応するために必要な初期の余裕を表す。例えば、三段階先まで維持したい場合には、少なくとも 30 件分の余裕が必要となる。五段階先まで維持したい場合には、少なくとも 50 件分の余裕が必要となる。維持したい期間が長くなるほど、初期の余裕に要求される条件も厳しくなる。
さらに、毎時点の要求量の増加が最大の 30 件で継続し、処理能力の増強が最大の 20 件に制限されるなら、有限の初期余裕だけで無限期間にわたって許容条件を維持することはできない。初期の余裕がどれだけ大きくても、十分に長い期間が経過すれば、その余裕は失われる。これは、操作能力を上回る環境変化が継続するという条件の下で得られる結論である。
この例では、現在の許容集合を \(m\geq0\) としても、その集合は想定した外乱に対して制御不変ではない。余裕が 0 件の状態からは、次の時点に要求量が最大の 30 件増加した場合、許可された操作だけでは許容条件を維持できないためである。また、余裕が十分にある状態から一段階先まで維持できたとしても、最大の要求増加が継続すれば、いずれ維持できなくなる。したがって、この単純なモデルでは、有限の初期余裕を持つ状態について、すべての時点にわたるロバストな維持を保証することはできない。
ただし、外乱の条件を変更すれば、維持可能性も変化する。例えば、要求量の増加が毎時点最大 15 件であり、処理能力を毎時点最大 20 件増強できるなら、処理能力の増強が要求量の増加を上回る。必要な資源が継続して利用可能であり、増強操作が遅延なく反映されるという仮定の下では、現在の許容状態から、最大の増強操作を使用して余裕を維持することが可能になる。
同様に、要求量の増加が最大 30 件であっても、要求を別の処理系へ分散する操作や、許可された範囲で受付量を制限する操作が存在すれば、許容条件を維持できる範囲が変わる可能性がある。ただし、要求を制限する場合には、正当な要求を拒否することが運用上許容されるかを確認する必要がある。内部の処理能力を維持するために利用者への機能提供を制限すれば、別の許容条件を損なう場合がある。操作の追加によって制御可能性が高まるとしても、維持すべき機能の定義を含めて評価する必要がある。
また、処理能力の増強に時間がかかる場合には、必要な余裕はさらに異なる。例えば、増強を指示してから二時点後に能力が反映されるなら、その間の要求量の増加に対して、現在の処理能力だけで対応する必要がある。増強操作を選択できることと、その操作が必要な時点までに効果を発揮することは別である。更新規則に介入の遅延を含めることで、どの程度の余裕があれば必要な機能を維持できるかを具体的に検討できる。
ここまでの計算から、運用上の持続可能性には、許容集合への現在の所属に加えて、環境変化に対応する操作能力と、操作を実施する時間的な条件が必要であることが分かる。現在の状態が正常であることは、その時点の条件を満たしていることを示す。一方、将来の条件を維持するには、どの範囲の外乱が生じうるかを定め、その外乱に対して実行可能な操作が存在するかを確認する必要がある。さらに、操作能力を上回る環境変化が継続する場合には、現在の余裕がいずれ失われることも、数理モデルから具体的に導ける。
10.4. 部分観測の場合は、可能な状態の集合で判断する
これまでの議論では、運用者が現在の状態を正確に把握できると仮定していた。しかし、実際のシステムでは、処理能力、待ち行列、外部依存の状態などを完全に観測できるとは限らない。例えば、全体の応答時間が増加している場合、その原因が内部処理の能力不足なのか、外部サービスの遅延なのかを、全体の応答時間だけから識別できないことがある。観測された値が同じでも、実際の内部状態は異なる場合がある。
この違いは、適切な介入を選択する際に重要になる。内部処理の能力不足が原因であれば、処理資源を追加することで応答時間が改善する可能性がある。一方、外部サービスの遅延が原因であれば、内部の処理資源を追加しても改善しない場合がある。むしろ、処理資源の追加によって外部サービスへ同時に送信する要求が増え、外部サービスの負荷がさらに高まる可能性もある。同じ応答時間の増加に対して、原因によって有効な操作が異なるのである。
例えば、全体の応答時間が 0.8 秒である二つの内部状態を考える。一方では内部処理に 0.7 秒、外部サービスの応答に 0.1 秒かかっている。もう一方では内部処理に 0.2 秒、外部サービスの応答に 0.6 秒かかっている。全体の応答時間だけを観測すれば、どちらも 0.8 秒であり、同じ値になる。しかし、前者と後者では遅延の主な原因が異なる。内部処理と外部サービスのどちらに介入すべきかを判断するには、全体の応答時間以外の情報が必要となる。
このような状況では、運用者が把握している状態を一つの確定した値として扱うよりも、観測結果と整合する複数の候補状態の集合として扱うことが考えられる。時刻 \(t\) までの観測履歴と整合する状態の集合を \(B_t\) とする。
\[
B_t=
\{z\mid z\text{ は観測履歴と整合する状態}\}
\]
この集合には、観測された情報から排除できない状態が含まれる。例えば、全体の応答時間が 0.8 秒という情報しか得られていなければ、内部処理の遅延が大きい状態と、外部サービスの遅延が大きい状態の両方が候補となる。追加の観測が得られれば、候補状態の集合を狭められる可能性がある。
部分観測の下で、ある操作を選択した後も必要な機能を維持するためには、候補状態のどれが実際の状態であっても、その操作によって許容条件を満たせる必要がある。例えば、観測履歴から選べる操作を \(u\) とし、候補状態の集合を \(B_t\)、想定する外乱の集合を \(\mathcal W\) とすれば、一段階先のロバストな維持を要求する条件は次のように表せる。
\[
\exists u\in\bigcap_{z\in B_t}\mathcal U(z)
\quad
\text{such that}
\quad
\forall z\in B_t,\ \forall w\in\mathcal W:
F(z,u,w)\in\mathcal K
\]
この式は、候補状態のすべてについて許可された共通の操作が存在し、その操作を選んだ後、どの候補状態が真の状態であっても、想定した外乱に対して次の状態が許容集合に属することを要求する。操作の集合の共通部分を用いているのは、実際の状態が特定できていない以上、ある候補状態でだけ許可される操作を、すべての候補状態へ適用することはできないためである。
例えば、内部処理の能力不足が原因である状態では、処理資源を追加する操作が有効であり、外部サービスの遅延が原因である状態では、外部への要求数を制限する操作が有効であるとする。しかし、前者では要求数の制限によって必要な機能が失われ、後者では処理資源の追加によって外部サービスへの負荷が増える場合、どちらか一つの操作をすべての候補状態へ安全に適用することが難しくなる。観測値が同じであっても、状態ごとに必要な操作が対立するためである。
この場合、観測から識別できない状態の違いが、介入の選択を制限する。技術的には複数の操作が存在していても、どの操作を選ぶべきかを決める情報が不足している。状態を正確に観測できるなら異なる操作を選択できる場合でも、部分観測の下では同じ操作しか選べないことがある。観測能力は、制御可能な範囲を決める条件の一つとなる。
この違いを整理すると、次のようになる。
| 観測と操作の条件 | 成立する状況 | 実行できる判断 | 残る制約 |
|---|---|---|---|
| 完全な状態観測 | 内部処理と外部サービスの遅延を個別に把握できる。 | 識別した原因に応じて異なる操作を選択できる。 | 必要な操作が許可され、資源や時間の制約を満たす必要がある。 |
| 部分観測と共通操作 | 複数の候補状態を区別できないが、すべての候補状態に有効な共通操作が存在する。 | 現在の情報だけで、候補状態全体に対して許容条件を満たす操作を選択できる。 | 共通操作の効果を、すべての候補状態について確認する必要がある。 |
| 部分観測と操作の対立 | 候補状態ごとに必要な操作が異なり、共通の安全な操作が存在しない。 | 現在の観測だけでは、一律に安全な操作を選択できない。 | 追加観測や、許可された範囲での限定的な対応が必要になる。 |
| 観測能力の改善 | 内部処理時間と外部サービスの応答時間を別々に記録できる。 | 以前は区別できなかった候補状態を識別し、操作を選択できる可能性が生じる。 | 観測の追加に必要な費用と、観測結果の信頼性を確認する必要がある。 |
| 操作能力の不足 | 状態を正確に把握できても、必要な操作が権限や資源の制約で実施できない。 | 現在の許可範囲における代替操作の有無を確認できる。 | 観測を増やすだけでは、実行可能な操作の不足を解消できない。 |
この表から、状態を識別できないことと、必要な操作を実行できないことは、異なる問題であると分かる。例えば、外部サービスの遅延が原因であると正確に把握できても、その外部サービスへ介入する権限がなければ、直接の修正を実施できない場合がある。一方、内部処理の資源を増強する権限があっても、遅延の原因を識別できなければ、その操作が有効かどうかを判断しにくい。観測能力と操作能力は、それぞれ維持可能性を制約する。
部分観測の下で維持可能性を高める方法の一つは、観測を追加して候補状態の集合を狭めることである。例えば、全体の応答時間だけを測定している場合に、内部処理時間と外部サービスの応答時間を個別に記録するように変更すれば、遅延の原因をより具体的に識別できる可能性がある。候補状態の集合が狭くなれば、その集合全体へ適用できる操作を選択しやすくなる場合がある。
ただし、観測を追加すれば必ず維持可能性が高まるとは限らない。例えば、外部サービスの応答時間を測定できるようになっても、その外部サービスの処理能力を増強する権限がなく、代替経路も存在しない場合には、必要な介入を実施できない可能性が残る。観測能力の改善は、適切な操作を選択するための情報を増やすが、操作能力そのものを自動的に増やすわけではない。
また、観測を増やす操作自体にも制約がある。例えば、詳細な処理履歴を記録するために追加の処理が必要となり、応答時間へ影響する可能性がある。監視機能の追加によって記録装置への負荷が高まる場合もある。したがって、観測能力を高めるための変更についても、その変更が運用上の許容条件を満たすかを評価する必要がある。観測の改善は、対象へ影響を与えうる操作の一つである。
さらに、候補状態の集合を狭めるために介入を実施する場合には、その介入によって必要な機能が失われないことが条件となる。例えば、遅延の原因を調べるために特定の処理経路を停止する操作を考える。しかし、その経路が重要な要求を処理しているなら、原因を調べるための操作そのものがサービスの停止を生む可能性がある。情報を得るための介入にも、許可された操作の範囲と運用上の安全条件が適用される。
ここで、観測と介入の関係が再び重要になる。現在の観測結果だけでは候補状態を区別できない場合でも、過去の観測履歴や追加の測定によって原因を識別できる可能性がある。また、影響範囲を限定した操作を実施し、その結果を観測することで、候補状態についての情報を得られる場合もある。ただし、その操作が許容条件を満たす範囲で実施できるかを確認する必要がある。情報を得ることと、必要な機能を維持することの両方が、介入の選択条件となる。
このように、部分観測下の維持可能性は、現在の状態だけでなく、観測によって区別できる状態の範囲に依存する。異なる内部状態が同じ観測値を生む場合には、それらの状態のいずれに対しても許容条件を満たす操作が存在するかを調べる必要がある。共通の操作が存在しなければ、追加の観測によって状態を識別するか、許可された範囲で影響を限定できる対応を選択する必要がある。
ただし、どのような追加観測や介入を行っても必要な状態を識別できない場合には、維持可能性についての保証を与えられないことがある。また、状態を識別できても必要な操作が存在しなければ、許容条件を維持できない場合がある。制御可能性は、観測の精度だけでなく、操作の存在と実行可能性によっても決まる。
ここまでの検討によって、条件依存的な世界で運用を継続するために必要な条件を、より具体的に整理できる。第一に、何を維持すべき機能とするかを定め、その機能を満たす状態の集合を定義する必要がある。第二に、環境がどの範囲で変化するかを明示する必要がある。第三に、その変化に対してどの操作を選択できるかを、技術的能力、資源、時間、権限の制約を含めて確認する必要がある。第四に、操作を選択するために必要な状態を観測できるかを調べる必要がある。これらの条件が組み合わさることで、必要な機能を維持できる範囲が具体的に定まる。
無常的な世界における持続性は、現在成立している構造が将来も同じ形で存在することによって保証されるわけではない。構造と環境の関係が変化する中で、必要な機能を維持する操作が実際に存在し、その操作を適切な時点で選択できることによって成立する場合がある。一方、操作能力を上回る環境変化が継続する場合には、どれだけ適切な更新ポリシーを用いても、許容条件を維持できないことがある。
この限界を明示できることが、制御不変性の条件を導入する意義である。ある状態が現在許容されていることと、その状態から許容条件を維持し続けられることは異なる。操作可能な範囲と外乱の範囲を明示すれば、どの条件で維持が成立し、どの条件で成立しなくなるかを数学的に検討できる。さらに、部分観測の制約を含めれば、状態を識別するための情報が不足することも、維持可能性を制約する条件として扱える。
ただし、数学的な維持可能性が成立したことだけで、その運用が望ましいと結論づけることはできない。何を許容集合へ含めるか、どの損失を許容できるか、どの操作を制度上許可するかは、別に定める必要がある。また、実際の変更が想定した効果を生んだかどうかは、観測と検証によって確認する必要がある。制御不変性は、定義された目的を維持するための条件を明示するものであり、その目的自体を自動的に決定するものではない。
条件に依存して成立する世界を運用するという問題は、変化が発生することを認めるだけでは完結しない。どの状態を維持すべきかを定め、どの環境変化へ対応できるかを調べ、許可された操作によって必要な機能を継続できる範囲を確認することが必要となる。現在の状態が正常であることと、将来の変化へ対応できることを区別することで、持続性を具体的な条件として検討できる。
11. 構造更新による改善を、観測結果と因果効果に分けて検証する
11.1. 改善したという観測と、介入によって改善したという判断は異なる
構造を更新した後に運用指標が改善したとしても、その改善が構造更新によって生じたとは限らない。例えば、例外経路を削除した後、システム全体のエラー率が 11% から 3.8% へ低下したとする。この結果だけを見ると、例外経路の削除によって処理が安定したと考えたくなる。しかし、同じ期間に利用者の構成や入力の種類が変化していれば、構造更新とは別の原因によってエラー率が低下した可能性がある。観測された改善と、特定の操作が改善を生み出したという因果的な判断は、区別して検証する必要がある。
例えば、あるサービスでは、入力の種類によってエラーの発生しやすさが異なるとする。単純な要求は比較的容易に処理できる一方、複雑な要求は複数の例外経路を通過するため、エラーが発生しやすい。この場合、システム全体のエラー率は、それぞれの入力に対する処理の正確性だけでなく、どの種類の入力がどの程度の割合で与えられたかによって決まる。複雑な要求の割合が減少すれば、個々の種類の要求に対するエラー率がまったく改善していなくても、集計されたエラー率は低下する。
この関係を具体的に計算するため、入力を難しい要求と簡単な要求の二種類に分ける。難しい要求のエラー率を 20%、簡単な要求のエラー率を 2% とする。変更前には、難しい要求と簡単な要求がそれぞれ全体の 50% を占めていたと仮定する。このとき、システム全体のエラー率は、それぞれのエラー率を入力の割合で重み付けした平均として求められる。
\[
R_{\mathrm{before}}
=0.5\times0.20+0.5\times0.02
=0.11
\]
したがって、変更前の全体エラー率は 11% である。ここで、構造を更新した後に、難しい要求の割合が 10%、簡単な要求の割合が 90% になったとする。一方、それぞれの入力に対するエラー率は、変更前と同じ 20% と 2% のままだったと仮定する。この場合、変更後の全体エラー率は次のようになる。
\[
R_{\mathrm{after}}
=0.1\times0.20+0.9\times0.02
=0.038
\]
変更後の全体エラー率は 3.8% である。変更前の 11% から 7.2 パーセントポイント低下している。しかし、難しい要求に対するエラー率は 20% のままであり、簡単な要求に対するエラー率も 2% のままである。個々の入力種類に対する処理性能が改善していなくても、入力の構成比が変化しただけで全体のエラー率は大きく低下する。
この例を表にすると、次のようになる。
| 入力の種類 | 入力ごとのエラー率 | 変更前の構成比 | 変更後の構成比 | エラー率の変化 |
|---|---|---|---|---|
| 難しい要求 | 20% | 50% | 10% | 入力種類を固定した場合、エラー率は変化していない。 |
| 簡単な要求 | 2% | 50% | 90% | 入力種類を固定した場合、エラー率は変化していない。 |
| 全体 | 構成比による加重平均 | エラー率 11% | エラー率 3.8% | 集計値は 7.2 パーセントポイント低下している。 |
この結果から、集計されたエラー率が改善したことは確認できる。しかし、構造更新によって各入力種類の処理性能が改善したという証拠にはならない。構造更新の前後で、入力の種類ごとの性能が変化していないからである。全体の数値が改善した原因を調べるには、入力の構成比の変化と、各入力種類に対する処理性能の変化を分ける必要がある。
この違いを一般的に表すため、入力の種類を \(g=1,\ldots,G\) とし、時刻 \(t\) における種類 \(g\) の構成比を \(w_{g,t}\)、その種類のエラー率を \(p_{g,t}\) とする。構成比の合計が 1 であるとき、全体のエラー率は次のように表せる。
\[
R_t=\sum_{g=1}^{G}w_{g,t}p_{g,t}
\]
ここで \(R_t\) は全体のエラー率、\(w_{g,t}\) は入力の種類ごとの割合、\(p_{g,t}\) はその種類に対するエラー率である。この式では、構成比と各種類のエラー率の両方が、全体のエラー率を決める。したがって、全体の値が変化した場合には、どちらの要因が変化したのかを調べる必要がある。
変更前を時刻 0、変更後を時刻 1 とすると、全体のエラー率の変化は次のように表せる。
\[
\Delta R
=
\sum_g w_{g,1}p_{g,1}
–
\sum_g w_{g,0}p_{g,0}
\]
この式へ、変更前の種類別エラー率を用いた項を加えて差し引くと、次のように分解できる。
\[
\Delta R
=
\underbrace{
\sum_g(w_{g,1}-w_{g,0})p_{g,0}
}_{\text{入力構成比による変化}}
+
\underbrace{
\sum_gw_{g,1}(p_{g,1}-p_{g,0})
}_{\text{種類別エラー率による変化}}
\]
第一項は、変更前の種類別エラー率を固定したまま、入力の構成比だけが変化した場合に生じる差を表す。第二項は、変更後の構成比を使用し、各入力種類のエラー率が変化したことで生じる差を表す。この分解は代数的に成立するものであり、入力構成比の変化と種類別エラー率の変化を、観測値の上で分けて説明するために利用できる。
先ほどの例では、各入力種類のエラー率が変更前後で変化していないため、第二項は 0 となる。一方、第一項は次のようになる。
\[
\begin{aligned}
& (0.1-0.5)\times0.20\\
&\quad +(0.9-0.5)\times0.02\\
&=-0.08+0.008\\
&=-0.072
\end{aligned}
\]
したがって、全体エラー率の 7.2 パーセントポイントの低下は、この例で観測された値の分解において、入力構成比の変化だけで説明できる。ただし、この分解から、入力構成比がなぜ変化したかまでは分からない。利用者の要求が自然に変化したのか、受付条件を変更して難しい要求を除外したのか、構造更新によって処理対象の分布が変化したのかは、別に調べる必要がある。
また、この分解には、第一項で変更前の種類別エラー率を使用するという選択が含まれている。変更後の種類別エラー率を基準とする別の分解も可能である。どちらの場合も全体の変化を代数的に分解できるが、両者の寄与の割り当ては基準の選択によって変わる場合がある。したがって、分解された項を、そのまま独立した因果効果と解釈することはできない。分解が明らかにするのは観測値の構成であり、構成比や種類別エラー率が変化した原因ではない。
入力構成比の影響を取り除いて処理性能を比較したい場合には、共通の入力分布を使用する方法が考えられる。例えば、難しい要求と簡単な要求の割合をどちらも 50% に固定して、変更前後の種類別エラー率を集計する。この場合、変更前も変更後も、共通の分布に対するエラー率は 11% となる。入力の構成比を固定した比較では、処理性能の改善は観測されない。
このように、共通の分布へ重みをそろえることで、入力構成比の変化による差を除いた比較を行える。ただし、入力種類の分類が変更前後で同じ意味を持ち、各種類のエラー率が比較可能な方法で測定されている必要がある。また、特定の入力種類が変更後にまったく観測されなくなった場合には、その種類のエラー率を直接推定できないことがある。共通の分布へそろえるという操作にも、比較可能なデータが存在するという条件が必要になる。
ここで、入力構成比の変化が構造更新そのものによって生じた場合には、別の問題が現れる。例えば、例外経路を削除したことで、以前は処理されていた難しい要求が受付段階で拒否されるようになったとする。この場合、内部処理へ到達する要求の構成比が変化したことは、構造更新と無関係な外部要因ではない。構造更新が入力の選別を変更し、その結果として集計エラー率が改善した可能性がある。
この状況で、内部処理へ到達した要求だけのエラー率を比較すれば、処理できなくなった要求の影響が評価から除外される。さらに、変更後の入力構成比だけを固定して比較すると、構造更新によって生じた受付条件の変化を評価から取り除いてしまう可能性がある。何を介入効果として評価したいかによって、入力構成比を調整すべきかどうかが変わる。
例えば、変更前と同じ入力分布に対して処理性能が改善したかを評価したいなら、共通の入力分布で比較することに意味がある。一方、例外経路の削除によって利用者が必要な機能を受け取れる割合が改善したかを評価したいなら、受付段階で拒否された正当な要求も含めて比較する必要がある。構造更新による総合的な効果と、同じ入力に対する内部処理性能の変化は、異なる評価対象である。
既稿「構造振動モデルの定義を測定と検証まで含めて整理する」では、構造の変更量、更新方向、観測結果、介入効果を区別し、入力構成の変化によって集計値が改善して見える場合があることを整理している[8]。この区別によって、構造振幅が大きい変更を実施した後にエラー率が低下したという結果から、直ちに変更が有効だったと結論づけることを避けられる。
構造振動モデルでは、構造振幅 \(A_t\) は、隣接する二時点の構造差を表す。複雑さの変化 \(\Delta K_t\) は、採用した複雑さの尺度における増減を表す。一方、運用指標 \(R_t\) は、特定の環境と測定条件の下で観測された結果を表す。これらはそれぞれ異なる情報であり、一つの値からほかの値を自動的に導くことはできない。
例えば、例外経路を削除した場合、複雑さの尺度によっては \(\Delta K_t<0\) となる。また、関係グラフに記録された辺が削除されれば、構造振幅 \(A_t\) は正の値になる。しかし、その操作によってエラー率が改善するかどうかは、削除した経路がどの入力で使用されていたか、ほかの経路が同じ機能を提供できるか、入力の分布がどう変化したかに依存する。構造の変化を測定したことと、その変化が機能へ及ぼした影響を確認したことは別である。
さらに、変更後に運用指標が改善したとしても、その指標の改善が構造変更によって生じたかを判断するには、別の比較が必要となる。構造変更がなかった場合にも同じ改善が起きていた可能性を考える必要があるためである。入力構成の変化だけで全体のエラー率が低下する事例は、単純な前後比較がこの問題を解決できないことを示している。
11.2. 介入しなかった場合との比較を定義する
構造変更の因果効果を評価するには、変更を実施した場合の結果と、同じ条件で変更を実施しなかった場合の結果を比較する必要がある。しかし、ある時点の同じシステムについて、変更を実施した状態と実施しなかった状態の両方を同時に観測することは通常できない。例えば、例外経路を削除した後にエラー率が低下したとしても、その経路を残していた場合に同じ期間のエラー率がどうなっていたかを直接観測することはできない。この観測できない結果をどのように扱うかが、因果推論の中心的な問題となる。
因果推論では、介入を実施した場合と実施しなかった場合に、それぞれどのような結果が生じるかを潜在結果として区別する。例外経路を削除する介入を \(a=1\)、削除しない状態を \(a=0\) とする。ある評価対象について、削除した場合の結果を \(Y(1)\)、削除しなかった場合の結果を \(Y(0)\) とすると、個別の介入効果は概念的に次のように表せる。
\[
\Delta Y=Y(1)-Y(0)
\]
ここで \(Y(1)\) は例外経路を削除した場合の結果、\(Y(0)\) は削除しなかった場合の結果である。例えば \(Y\) を失敗の有無とし、失敗を 1、成功を 0 として定義すれば、\(\Delta Y\) が負であることは、介入によって失敗が減少する方向の効果を表す。ただし、同じ評価対象について両方の潜在結果を直接観測できるとは限らないため、個別の差を実測値からそのまま計算できるわけではない。
この問題を運用上の評価へ適用するには、何を一つの評価対象とするかを明確にする必要がある。例えば、個々の要求を評価対象とする場合には、同じ要求が例外経路の削除後に成功したかどうかを考えることになる。一方、サービス全体を評価対象とする場合には、指定した期間のエラー率や可用性を評価することになる。また、複数の独立した処理系や利用者群を評価対象とする場合には、それぞれの単位へ変更を適用した場合と適用しなかった場合の結果を比較できる可能性がある。評価対象の単位によって、必要な実験設計や因果効果の解釈が異なる。
例えば、個々の要求を評価対象とする場合を考える。要求 \(i\) に対して、例外経路を削除した構造での結果を \(Y_i(1)\)、削除していない構造での結果を \(Y_i(0)\) とする。同じ入力を二つの構造へ与えて比較することができれば、結果の違いを直接観測できる可能性がある。ただし、実際のサービスでは、要求の処理によって共有状態が変更されることがある。その場合、同じ要求を二度実行しても、二度目の実行時にはデータや環境が変化している可能性がある。入力が同じであることと、結果を決めるすべての条件が同じであることは区別される。
例えば、要求を受け付けるたびに識別番号を発行する処理を考える。同じ要求を変更前と変更後の構造へ順番に送信すると、二回目の処理では識別番号の状態が変化している。変更による効果を比較するつもりでも、要求を実行した順序による差が結果へ含まれる可能性がある。構造の介入効果を評価するには、入力だけでなく、必要に応じて初期状態や共有資源の条件もそろえる必要がある。
また、例外経路の削除という介入にも複数の方法がある。例えば、経路を完全に削除する方法、経路を無効化して実行されないようにする方法、経路の処理を別の部品へ統合する方法では、構造と機能へ与える影響が異なりうる。これらをすべて同じ「削除」という介入として扱えば、介入の内容が曖昧になる。潜在結果 \(Y(1)\) を定義するには、どの要素と関係を、どの手順で、どの時点に変更するかを明確にする必要がある。
因果効果を集団として評価する場合には、各対象の潜在結果の平均を考えることができる。変更を実施した場合の平均結果を \(\mathbb{E}[Y(1)]\)、実施しなかった場合の平均結果を \(\mathbb{E}[Y(0)]\) とすると、平均的な介入効果は次のように表せる。
\[
\mathrm{ATE}
=
\mathbb{E}[Y(1)]-\mathbb{E}[Y(0)]
\]
ここで ATE は平均処置効果を表す。例えば、\(Y\) を失敗の有無として定義すれば、ATE は介入によって失敗する確率が平均的にどれだけ変化するかを表す。この値が負であれば、対象とする集団において、介入が失敗を減少させる方向の効果を持つことを意味する。ただし、どの集団を対象とするかによって平均効果は異なりうる。簡単な要求が多い集団と、難しい要求が多い集団では、同じ構造変更の平均効果が異なる可能性がある。
この点で、因果効果の定義には、介入、評価対象、結果の測定方法、評価期間を具体的に指定する必要がある。例えば、例外経路を削除してから一時間後のエラー率を評価する場合と、一か月後のエラー率を評価する場合では、得られる結果が異なる可能性がある。変更直後には監視や切り替えの負担が生じても、長期的には保守費用が減少する場合がある。一方、変更直後には問題がなくても、まれな例外が発生したときに初めて機能不足が明らかになる場合もある。評価期間の選択は、どの効果を測定するかという問題に含まれる。
Hernán と Robins の『Causal Inference: What If』は、潜在結果を用いた因果効果の定義と、観測データからその効果を識別するための仮定を体系的に扱っている[19]。潜在結果を定義できることと、その潜在結果の差を観測データから推定できることは異なる。実際の介入効果を推定するには、観測された対象と観測されなかった反事実的な結果を、どの条件で結びつけられるかを検討する必要がある。
例えば、例外経路を削除したシステムと、削除していないシステムを比較する場合を考える。二つのシステムで入力の種類、要求量、外部依存先の状態、観測方法が異なれば、エラー率の差には構造変更以外の要因が含まれる。削除したシステムの方が簡単な要求を多く処理していたなら、変更がなくてもエラー率が低かった可能性がある。このような比較では、介入の有無と、結果へ影響する別の条件を区別する必要がある。
介入の有無と結果へ影響する条件が関連している場合、その条件は交絡の原因となる可能性がある。例えば、障害が多いシステムほど例外経路を削除するという運用を行っていたとする。この場合、変更されたシステムは、変更されなかったシステムよりも、変更前から障害を起こしやすい状態だった可能性がある。変更後に両者のエラー率を単純に比較すると、構造変更の効果だけでなく、変更対象が選ばれた理由による差が含まれることになる。
この問題へ対応する方法の一つは、比較可能な対象へ介入を無作為に割り当てることである。例えば、独立した複数の処理系について、例外経路を削除する処理系と削除しない処理系を無作為に割り当て、その後のエラー率を比較する方法が考えられる。適切に実施された無作為割り当てでは、介入の有無が事前の状態や未観測の条件によって系統的に決まることを防ぎやすくなる。ただし、対象の数が少ない場合や、処理系間で資源を共有している場合には、推定結果へ別の制約が生じる。
例えば、二つの処理系が同じ記録装置を使用している場合、一方の例外経路を削除したことで記録装置への負荷が減少すると、もう一方の処理系の応答時間まで改善する可能性がある。この場合、変更を適用していない処理系は、完全に介入の影響を受けていないとはいえない。比較対象の間に干渉が存在するためである。介入効果を識別するには、変更した対象の操作が比較対象へ影響しないか、あるいはその影響を含めて評価する設計が必要となる。
例えば、共有資源を持つ複数の処理系を比較する場合には、処理系単位で無作為に割り当てるよりも、共有資源を含む単位で介入を割り当てる方が適切な場合がある。これは、介入の影響が実際に及ぶ範囲と、比較する単位を対応させるためである。ただし、その単位を大きくすると、比較可能な対象の数が少なくなり、推定の不確実性が増える可能性がある。介入の独立性と観測対象の数の間にも、実験設計上の制約がある。
無作為な割り当てを実施できない場合には、観測データから介入効果を推定する方法を検討することになる。その際には、結果へ影響し、介入の選択にも関係する条件を、適切に観測して調整する必要がある。例えば、変更前の入力構成、負荷、外部依存の状態などが、介入の有無とエラー率の両方に関係しているなら、それらを比較条件として扱うことが考えられる。
この関係を形式的に表すため、介入の有無を \(A\)、結果を \(Y\)、介入前に観測された条件を \(L\) とする。ここで \(A=1\) は例外経路を削除した場合、\(A=0\) は削除しなかった場合を表す。介入前の条件 \(L\) を固定したときに、介入の有無が潜在結果と独立であるという仮定は、次のように表せる。
\[
(Y(1),Y(0))\perp A\mid L
\]
記号 \(\perp\) は独立性を表す。この条件は、介入前の条件 \(L\) が同じ対象について、介入を受けたかどうかによって潜在結果の分布が系統的に異ならないことを要求する。例えば、入力の難易度と要求量が介入の選択とエラー率の両方へ影響している場合には、それらを適切に調整することで比較可能性を確保できる可能性がある。ただし、結果へ影響する重要な条件が観測されていなければ、この仮定は成立しない可能性がある。
さらに、各条件について、介入を実施した対象と実施しなかった対象の両方が存在する必要がある。例えば、難しい要求を処理するシステムでは必ず例外経路を削除し、簡単な要求を処理するシステムでは決して削除しないという運用を行っていた場合、同じ入力条件の下で削除した場合と削除しなかった場合を比較するためのデータが存在しない。このような状況では、観測データだけから介入効果を識別することが難しくなる。
この条件は、介入前の条件 \(L=l\) が対象集団に存在する範囲で、次のように表せる。
\[
0<P(A=1\mid L=l)<1
\]
これは、各条件の下で介入を受ける可能性と受けない可能性が、ともに正であることを要求する。因果推論では、この性質を正値性と呼ぶ。実際の運用では、重大障害が発生しているシステムには必ず特定の介入を行う場合もあるため、比較に必要な介入の組み合わせが観測されないことがある。その場合、観測されていない条件に対する効果を推定するには、追加の仮定が必要となる。
また、観測された介入と潜在結果を結びつけるには、介入の内容が明確に定義されている必要がある。例えば、同じ「例外経路の削除」という名称でも、完全に削除する方法と、設定によって無効化する方法では結果が異なりうる。介入の内容が曖昧なままでは、\(Y(1)\) が具体的にどの状態を表すかを定められない。介入が十分に定義され、実際に受けた介入に対応する潜在結果が観測結果へ一致するという条件は、一貫性の仮定に関係する。
これらの仮定が成立し、必要な条件について適切な観測が得られている場合には、介入効果を条件ごとの結果の差から推定する方法が考えられる。例えば、条件 \(L=l\) ごとに介入を実施した場合としなかった場合の平均結果を比較し、対象集団の条件分布で重み付けする。この考え方は、標準化による因果効果の識別として表せる。
\[
\begin{aligned}
\mathrm{ATE}
=\sum_l&
\Bigl(
\mathbb{E}[Y\mid A=1,L=l]\\
&-\mathbb{E}[Y\mid A=0,L=l]
\Bigr)P(L=l)
\end{aligned}
\]
この式では、介入前の条件 \(L\) を固定した比較を行い、各条件で得られた差を対象集団の構成比によって平均する。ただし、これは条件付き交換可能性、正値性、一貫性など、因果的な解釈に必要な仮定が成立する場合の識別式である。単に条件別の集計値を計算できたことだけで、因果効果が識別されたとは限らない。
ここで、介入前に存在した条件と、介入によって変化した条件を区別する必要がある。例えば、例外経路の削除によって受付条件が変わり、内部処理へ到達する要求の構成比が変化した場合、その構成比は介入の結果である可能性がある。介入後に生じた構成比を無条件に調整すると、介入が利用者へ与えた影響の一部を取り除いてしまう場合がある。調整すべき条件は、単に結果と関連する変数をすべて列挙することで決まるものではなく、介入と結果の因果的な関係を踏まえて選択する必要がある。
また、変更前後の比較を行う場合には、時間の経過そのものが結果へ影響する可能性がある。例えば、運用が進むことで担当者が障害対応に習熟し、構造を変更しなくてもエラー率が低下する場合がある。外部サービスの更新や利用者の構成変化によって、同じ構造でも性能が変化する可能性もある。この場合、変更後のエラー率から変更前のエラー率を差し引いただけでは、構造更新の効果と時間的な環境変化の効果を分離できない。
実務上の比較方法と、それぞれの制約を整理すると、次のようになる。
| 比較方法 | 確認できること | 主な制約 | 適用時に必要な条件 |
|---|---|---|---|
| 単純な前後比較 | 構造変更の前後で、観測指標がどの程度変化したかを確認できる。 | 入力構成、外部環境、観測方法の同時変化を分離できない場合がある。 | 変更前後の測定定義と環境条件を記録する。 |
| 入力種類別の比較 | 全体の集計値と、各入力種類に対する処理性能の変化を分けられる。 | 入力種類の分類が適切でない場合や、介入後に入力の選別が変わる場合には解釈が難しくなる。 | 比較する入力の分類と、構成比が変化した原因を確認する。 |
| 共通分布による標準化 | 同じ入力分布を用いて、変更前後の種類別性能を比較できる。 | 観測されていない入力種類については、直接の推定が難しい。 | 対象とする入力分布と、各種類について比較可能な観測が存在することを確認する。 |
| 無作為割り当てによる比較 | 適切な実験設計の下で、介入以外の条件による系統的な差を抑えられる。 | 共有資源による干渉や、対象数の不足が推定へ影響する場合がある。 | 介入の単位、比較対象、割り当て方法、影響範囲を定義する。 |
| 観測データの条件付き比較 | 介入前の条件を調整し、同等の条件にある対象の結果を比較できる可能性がある。 | 未観測の交絡、正値性の不足、介入定義の曖昧さが残る場合がある。 | 因果的な識別に必要な仮定と、調整に使用する条件を明示する。 |
| 複数期間の継続観測 | 変更直後と長期運用で、性能や障害の推移がどう異なるかを確認できる。 | 時間とともに環境や判断基準が変化すると、単純な比較が難しくなる。 | 観測期間、構造更新の履歴、環境条件と測定定義の変更を記録する。 |
どの比較方法を採用するかは、対象の構造と操作可能な範囲によって決まる。例えば、独立した複数の処理系が存在するなら、変更を一部へ適用して比較できる可能性がある。一方、一つの共有データベースを使用するサービスでは、処理系ごとに変更を適用しても、共有状態を介した干渉が生じる場合がある。また、重大障害の回復に必要な変更については、介入しない比較対象を長期間維持することが運用上許容されない可能性もある。因果効果の推定方法は、技術的な比較可能性だけでなく、運用上の制約によっても選択される。
さらに、介入効果の推定には不確実性が残る。例えば、変更後のエラー率が低下したとしても、観測した要求数が少なければ、偶然による変動が大きい可能性がある。また、重大障害の発生頻度が低い場合には、短期間の観測で障害が発生しなかったことから、危険がなくなったと結論づけることは難しい。推定値だけでなく、観測数、推定の不確実性、対象とした環境条件を合わせて報告する必要がある。
例えば、ある構造変更の後に 100 件の要求を観測し、一度もエラーが発生しなかった場合を考える。この結果は、観測された 100 件について失敗がなかったことを示す。しかし、将来のエラー発生確率がゼロであることを意味しない。独立で同じ失敗確率を持つ要求という単純な仮定の下でも、少数の観測から発生確率を厳密に特定することはできない。特に、入力の種類や負荷条件が異なる場合には、観測されなかった条件でエラーが発生する可能性が残る。
このように、構造更新の因果効果を検証するには、単に変更後の数値が改善したことを示すだけでは不十分である。どの介入を評価するか、何を結果として測定するか、どの集団と期間を対象にするかを定める必要がある。そのうえで、介入しなかった場合の結果をどのような方法で推定できるかを検討し、必要な仮定と観測上の制約を明示することが重要となる。
11.3. 記述、予測、介入効果の識別を分ける
構造振動モデルを数理的に定義したとしても、そのモデルが現実の現象を十分に説明できることが自動的に保証されるわけではない。例えば、構造をグラフとして記述すれば、どの要素と関係が存在するかを正確に記録できる。しかし、その関係が実際の運用でどの程度使用されるか、障害がどの経路を通じて伝播するか、特定の関係を削除した場合に機能が改善するかまでは、グラフの存在だけから決まらない。構造の記述と、構造から生じる結果の予測と、介入による結果の識別は、それぞれ異なる根拠を必要とする。
この違いを具体的に考えるため、受付、検証、処理、記録という四つの部品からなるサービスを例にする。構造グラフによって、受付から検証へ、検証から処理へ、処理から記録へ要求が渡されることを記述できる。また、検証失敗時に記録へ直接進む例外経路が存在することも表現できる。しかし、このグラフだけでは、例外経路を通過する要求がどの程度の頻度で発生するかは分からない。入力の分布や処理条件を追加しなければ、経路の使用頻度を予測できないからである。
さらに、例外経路の使用頻度を予測できるようになったとしても、その経路を削除した場合の障害率を正確に予測できるとは限らない。例えば、例外経路が存在することで、通常の処理経路が障害から保護されている場合がある。経路を削除すると、以前は例外経路で処理されていた要求が通常経路へ流入し、新しい障害を生む可能性がある。現在の経路使用頻度を予測するモデルと、経路を削除した後の状態を予測するモデルでは、必要な関係が異なる。
この違いは、モデルが何を入力とし、何を出力するかによって整理できる。構造の記述では、時刻 \(t\) の構造 \(S_t\) を観測し、その要素と関係を記録する。将来の予測では、現在の構造と環境から次の状態や観測結果を推定する。介入効果の識別では、ある操作を実施した場合と実施しなかった場合の結果を比較する。これらは互いに関係しているが、同じ問題ではない。
例えば、構造の状態遷移を次のように表す。
\[
S_{t+1}=M(S_t,C_t,O_t,U_t)
\]
この式によって、構造、環境、観測、介入から次の構造が決まるという関係を記述できる。しかし、更新写像 \(M\) の具体的な内容が定まっていなければ、次の構造を数値的に予測することはできない。さらに、更新写像を観測データへ適合させた場合でも、観測されていない介入について正確な結果を予測できるとは限らない。過去の状態遷移をよく再現するモデルが、新しい操作を実施した場合にも適切に機能するかどうかは、別に検証する必要がある。
例えば、過去の運用では障害が発生するたびに例外経路を追加していたとする。その履歴から、障害の増加と例外経路の追加の関係を学習することはできるかもしれない。しかし、その結果だけから、例外経路を追加すれば障害が減少すると結論づけることはできない。障害が増えたために例外経路が追加されたという因果関係と、例外経路を追加することで障害が減少するという因果関係は、異なる方向の関係である。観測された相関や更新履歴だけでは、どちらの因果関係が成立しているかを決められない。
構造振動モデルを検証可能な理論として扱うには、モデルがどの種類の主張を行っているかを明確にする必要がある。例えば、構造の変化量を測定するモデルであれば、同じ構造差に対して同じ振幅が計算されるかを確認できる。構造の更新方向を説明するモデルであれば、追加と削除の記録に対して複雑さの変化が整合しているかを確認できる。将来の状態を予測するモデルであれば、観測されていない期間の状態遷移をどの程度予測できるかを検証できる。介入効果を扱うモデルであれば、比較可能な条件の下で実施した操作が、予測した結果を生むかを検討できる。
これらの検証対象を整理すると、次のようになる。
| 検証対象 | 主な問い | 必要な根拠 | 典型的な失敗 |
|---|---|---|---|
| 構造の記述 | 何が要素であり、どの関係が存在するかを正確に記録できるか。 | 要素の識別規則、関係の定義、構造の記録方法。 | 名称変更だけを構造変更として数えたり、重要な依存関係を記録から漏らしたりする。 |
| 構造振幅の測定 | 構造の変化量を、定義した距離で再現可能に測定できるか。 | 共通の表現空間、埋め込み写像、距離の定義。 | 観測粒度や埋め込みの規則を変更したため、振幅を時点間で比較できなくなる。 |
| 更新方向の判定 | 採用した複雑さの尺度で、構造がどの方向へ更新されたかを識別できるか。 | 複雑さの尺度、変更前後の構造、追加と削除の履歴。 | 複雑さの変化を、運用上の改善や悪化と同一視する。 |
| 将来状態の予測 | 環境と観測の条件から、次の構造や運用結果を予測できるか。 | 状態遷移モデル、環境条件、独立した予測対象期間の観測。 | 過去の履歴を再現できても、新しい環境条件では予測が外れる。 |
| 介入効果の識別 | 特定の構造変更が、必要な機能へどのような影響を与えたか。 | 明確に定義した介入、比較可能な対象、因果的な識別条件。 | 構造変更後の指標改善を、そのまま介入の効果と判断する。 |
| 許容状態の維持 | 定めた外乱と操作の範囲で、必要な機能を維持できるか。 | 許容集合、状態遷移、操作集合、外乱集合、観測条件。 | 想定範囲外の外乱や操作の遅延が発生し、維持条件が成立しなくなる。 |
さらに、予測モデルの検証では、過去の観測結果への適合と、未観測の条件への予測を区別する必要がある。例えば、ある期間の障害履歴へ状態遷移モデルを適合させ、その同じ期間の障害を再現できたとしても、将来の環境変化に対して予測できることまでは保証されない。モデルの係数や更新規則を観測済みの結果に合わせて調整していれば、過去の履歴をよく再現すること自体は、独立した予測能力の証拠として十分ではない。
このため、モデルの予測能力を評価するには、モデルを定めるために使用した期間と、予測を検証する期間を分ける方法が考えられる。例えば、ある期間の構造更新と運用結果から更新写像を推定し、その後の期間における状態遷移を予測する。予測された構造や指標と実際の観測結果を比較すれば、未観測の期間に対してどの程度の予測能力があるかを評価できる。ただし、予測対象の期間に環境が大きく変化している場合には、学習時と同じ関係が成立しているかを確認する必要がある。
この違いは、制御不変性についても同様である。第 10 章では、許容集合、操作集合、外乱集合を明示することで、一定の条件の下で必要な機能を維持できるかを検討した。しかし、数学的な条件が成立していることと、実際のシステムがその条件を満たしていることは別である。例えば、処理能力を一時点当たり 20 件増強できると仮定したモデルで維持可能性を示しても、実際には増強操作が完了するまでに二時点かかるなら、その保証を直接適用することはできない。
同様に、外乱の上限を 30 件として維持可能性を示した場合でも、実際の要求量が 50 件増加すれば、証明で使用した前提は満たされない。また、状態を完全に観測できると仮定したモデルを、実際には処理能力の余裕を正確に把握できない環境へ適用すれば、適切な操作を選択できない場合がある。数学的な保証の妥当性は、保証を導いた前提が実際の運用で成立していることに依存する。
さらに、必要な操作が技術的に存在していても、権限や制度上の制約によって実施できない場合には、実際の操作集合がモデルで仮定した集合より狭くなる。例えば、処理資源を増強する操作が実装されていても、予算や承認の制約によって最大の増強量を選択できないなら、モデル上の維持条件が実際の運用で成立しない可能性がある。構造、環境、観測、介入を独立した要素として扱うことで、どの前提が維持可能性を制約したのかを調べられる。
ここで、検証可能性をさらに高めるためには、モデルが成立しない条件も事前に明示することが重要となる。例えば、ある更新ポリシーについて、要求量が指定した範囲にあり、処理能力の増強が所定の時間内に完了し、必要な観測値が得られる場合には、応答時間を許容範囲内に維持できると予測する。この主張には、要求量の上限、増強の遅延、観測条件、許容する応答時間という具体的な前提が含まれている。実際の運用でこれらの条件が満たされていたにもかかわらず許容条件を維持できなかったなら、更新写像や制御条件の見直しが必要となる。
ただし、予測が外れるたびに適用条件を事後的に狭めれば、どのような結果も説明できるモデルになってしまう危険がある。例えば、障害が発生した後で、その障害を生じさせた環境条件をすべて例外として除外すれば、残された条件の範囲ではモデルが正しいと主張できるかもしれない。しかし、そのような事後的な条件変更だけでは、モデルが将来の状態を予測する能力を検証できない。適用条件の変更には根拠が必要であり、変更した条件については、独立した観測によって再び検証する必要がある。
この問題を避けるためには、何を予測するか、どの条件で予測するか、どの程度の誤差を許容するかを、観測結果を評価する前に定めることが重要となる。例えば、指定した要求量の範囲で、次の時点の待ち行列を一定の誤差以内で予測するという条件を定められる。その後に得られた観測結果が、その条件と整合しているかを確認する。モデルの予測が外れた場合には、状態遷移の定義、観測方法、環境条件、未観測の依存関係などを調べる必要がある。
また、モデルがある運用条件で有効だったとしても、その結果を別の対象へそのまま一般化できるとは限らない。例えば、例外経路の削除によって障害率が低下したサービスであっても、別のサービスではその経路が重要な復旧手段になっている可能性がある。同じ名前の構造変更でも、対象の依存関係、入力分布、許容される損失が異なれば、介入の効果も異なる。ある対象で確認された因果効果を別の対象へ適用するには、効果を生み出した条件がどこまで共通しているかを検討する必要がある。
ここで、無常的な世界を運用するという問題との接続が明確になる。ある状態が現在成立していることは、その状態を成立させた条件が将来も維持されることを保証しない。また、ある操作が過去に有効だったことは、条件の異なる将来にも同じ効果を持つことを保証しない。構造の持続と介入の効果は、いずれも具体的な環境と関係に依存する。したがって、過去の結果をそのまま普遍的な規則として扱うより、どの条件で結果が成立し、その条件がどの程度維持されているかを確認することが重要となる。
この違いを踏まえると、構造振動モデルの有用性は、構造の変化を一つの数値へまとめることだけにあるのではない。構造、環境、観測、介入を分離して記録することで、どの条件が変化し、どの結果が観測され、どの操作がその結果へ寄与したかを、検証可能な問いへ分解できる点にある。構造の更新が適切だったかを判断する際には、構造振幅や複雑さの変化と、必要な機能の維持を別々に測定する。そのうえで、観測された改善が実際に介入によって生じたかを検討する。
さらに、評価基準そのものが変更された場合には、その変更も独立して記録する必要がある。例えば、サービスの目標応答時間を一秒から二秒へ緩和した結果、目標達成率が改善したとしても、実際の応答時間が短縮されたとは限らない。許容条件を変更したことによる改善と、対象の性能が改善したことは区別される。観測指標や評価基準が時間とともに更新される場合には、構造と環境だけでなく、何を改善と呼ぶかという判断の条件も変化している。
構造振動モデルを検証可能な操作理論として扱うためには、何を記述できたか、何を予測できたか、何について因果効果を識別できたかを分けて示す必要がある。さらに、どの前提が成立すれば結論を適用でき、どの条件が失われれば結論を再検討する必要があるかを明示することが重要となる。構造の変化を数式で表現しただけでは、運用上の改善を説明したことにはならない。観測結果と介入効果を区別し、その関係を具体的な条件の下で検証することによって、構造更新が必要な機能の維持へどのように寄与したかを説明できる。
12. 仏教・過程哲学・複雑系科学と操作理論の接続を再構成する
12.1. 変化を基本とする思想は、同じ方法を採用しているわけではない
世界を固定された実体の集まりとして理解するのではなく、変化や関係、生成の過程から捉えようとする発想は、異なる時代と文化に見られる。しかし、変化を重視するという共通性だけで、それぞれの思想が同じ問題を扱い、同じ結論へ到達しているとはいえない。変化とは何か、変化するものの同一性をどのように理解するか、何を根拠としてその説明を認めるかによって、理論の性質は異なる。構造振動モデルとこれらの思想を接続するためには、まず共通する問いと、それぞれの理論が持つ固有の目的を区別する必要がある。
古代ギリシアのヘラクレイトスに帰される断片には、流れの中での同一性や、対立するものの関係をめぐる記述が見られる[20]。特に、同じ川へ入る者のもとへ別の水が流れ込むという断片は、同一性と変化の関係を考えるうえで重要である。川は同じ川として識別される一方、そこを流れる水は絶えず入れ替わる。川が同じであるという判断と、川を構成する水が同じであるという判断は一致しない。
この関係は、長期間運用されるサービスの同一性を考える際にも参考になる。あるサービスが十年間にわたって同じ名称で提供されていても、内部の処理部品、依存する外部サービス、運用担当者、利用者の要求は入れ替わっている場合がある。それでも、利用者が必要とする機能が維持されていれば、同じサービスとして扱われる。ここでは、構成要素が完全に保存されていることと、一定の関係や機能によって対象を継続的に識別できることが区別される。
ただし、ヘラクレイトスの断片を、単にすべてのものが絶えず変化するという一つの命題へ還元することには注意が必要である。川の断片では、流れる水の交代と、川を同じ川として指し示すことが併存している。また、伝承された断片には異なる表現が存在し、後世の解釈によって強調点が異なる場合がある。ここで重要なのは、固定された構成要素だけに同一性を求めることの限界であり、あらゆる対象が各時点で必ず異なる状態を取るという数学的な法則が導かれるわけではない。
仏教における無常・縁起・無我も、固定された実体として現象を把握する見方を問い直す。しかし、そこにはヘラクレイトスの断片との重要な違いがある。仏教の無常は、条件づけられた現象が恒常不変ではないという理解に関わる。縁起は、現象が条件によって成立することを示す。無我は、身体や意識などの経験を構成する要素を、恒常的で完全に支配可能な自己として把握することを問い直す。これらは単なる自然現象の記述ではなく、苦の成立と止滅を理解するという実践的な目的に結びついている。
例えば、ある対象が変化するという事実を知ることと、その対象が永続的に自分のものであり続けると期待することを問い直すことは、同じ認識ではない。前者は現象の時間的な性質についての記述として扱える。一方、後者は対象への執着や自己との関係を含む。無常の教説は、単に変化を観測できることを目的とするのではなく、変化する現象をどのように理解し、それに対してどのような態度を取るかという問題を含んでいる。
さらに、中観思想では、現象がそれ自体で独立した本質を持つという見方が検討される。Nāgārjuna の『中論』は、縁起と空、そして概念による把握の関係を論じる代表的な原典である[11]。ここで空を、あらゆるものが存在しないという単純な否定として理解すると、条件によって現象が成立することとの関係が見えにくくなる。現象が条件に依存して成立することと、独立した自性によって成立することを区別する点が重要である。
この区別は、構造振動モデルにおいて要素と関係を定義する際にも示唆を与える。例えば、ある処理部品が正常に機能しているとしても、その機能は入力、実行環境、接続先、利用可能な資源などに依存する。部品の存在だけを確認しても、その部品によって必要な機能が成立する条件の全体を説明したことにはならない。構造の成立を関係から考えるという点に、縁起と工学的な依存関係の分析との接点がある。
しかし、仏教における縁起を、ソフトウェアの呼び出し関係や資源依存のグラフへそのまま置き換えることはできない。仏教の教説が扱う苦、執着、自己への認識と、工学的なグラフが扱う通信経路、処理順序、操作権限は、同じ対象ではない。関係や条件を重視するという共通性があっても、その関係によって何を説明するかが異なる。両者を比較する際には、この目的の違いを維持する必要がある。
Whitehead の『Process and Reality』は、存在を固定された物体の集合から説明するのではなく、出来事や生成の過程を中心に捉え直す形而上学的な体系を展開した[21]。この体系では、現実的存在や、その生成に関わる関係が重要な位置を占める。対象をすでに完成した静止的なものとして扱うのではなく、現実がどのように成立するかという生成の観点から存在を説明しようとする。
例えば、あるサービスが同じ機能を継続して提供している場合、その持続を一つの固定された構造が保存されている結果として理解することもできる。しかし、実際には要求の処理、障害への対応、依存関係の更新など、個別の出来事が連続している。サービスとしての継続性を、それらの出来事と関係が形成する過程として考えることには意味がある。過程哲学は、完成した対象を説明の出発点とすることに対して、生成を基本とする別の理解を与える。
ただし、Whitehead の現実的存在を、ソフトウェアの部品やグラフの頂点と一対一に対応させることはできない。Whitehead が構想したのは、宇宙論を含む存在論的な体系であり、サービスの更新履歴を記録するための技術的な状態モデルではない。生成を基本とすることと、離散時間の状態遷移を定義することも同じではない。後者では、観測時刻、状態変数、更新規則を具体的に指定する必要がある。一方、前者は存在のあり方を説明するための概念体系として構成されている。
さらに、過程哲学における生成の概念から、工学的に望ましい変更の方向が直接導かれるわけでもない。例えば、処理部品を分割することと統合することのどちらが適切かは、要求量、保守費用、障害の影響範囲、利用者への影響によって決まる。存在を過程として理解することは、固定した構造にのみ価値を置く見方を問い直す契機になる。しかし、特定の変更を実施すべきかどうかを決定するには、その対象についての具体的な観測と評価が必要となる。
一方、複雑系科学や非線形力学では、複数の要素の相互作用によって生じる振る舞いを、数学的なモデルや観測によって検討する。例えば、Lorenz の研究は、決定論的な方程式に従う系でも、非周期的な運動や初期条件への鋭敏な依存が現れうることを示した[9]。これは、単純な規則から必ず単純な時間変化が生じるわけではないことを示す。対象の状態遷移を記述する規則と、その規則から長期的に生じる振る舞いには、区別すべき性質がある。
複雑系科学で扱う秩序は、必ずしも一つの静止状態への収束として現れるわけではない。状態が周期的に変化する場合もあれば、一定の範囲で非周期的に変化する場合もある。複数の要素が相互に影響することで、個々の要素だけを調べても予測しにくい全体の振る舞いが生じる場合がある。このような問題を扱うには、要素の性質だけでなく、要素間の関係と状態遷移の規則を定義する必要がある。
ただし、複雑な振る舞いが数学的に成立することと、その振る舞いが運用上望ましいことは別である。例えば、処理待ち行列の長さが周期的に増減する場合、その周期性を検出できたとしても、利用者の要求が許容時間内に処理されているとは限らない。また、内部状態が有界な範囲にとどまっていても、その範囲に大量の処理遅延が含まれていれば、必要な機能を満たしていない可能性がある。力学的な安定性と、目的に照らした運用上の許容性を分ける必要がある。
ここに、構造振動モデルのような操作理論との違いが現れる。構造振動モデルでは、観測対象を定義し、構造の変化量や方向を測定し、必要な機能を維持するために操作を選択する。対象がどのように変化するかを記述するだけでなく、何を維持したいか、どの操作を実施できるか、どの結果を改善として評価するかを明示する必要がある。例えば、応答時間を維持するために処理資源を追加する場合、その操作の効果だけでなく、費用や権限、変更中の影響も検討対象となる。
このように、ヘラクレイトス、仏教思想、Whitehead の過程哲学、複雑系科学、構造振動モデルは、固定された構成要素だけでは変化や持続を十分に理解できないという問題意識において比較できる。しかし、それぞれの理論が答えようとする問いは異なる。あるものを同じものとして識別する条件を問うのか、苦と自己への認識を問い直すのか、生成を基本とする存在論を構築するのか、状態遷移を数学的に説明するのか、必要な機能を維持する操作を選択するのかによって、理論に求められる根拠も異なる。
また、こうした共通性から、歴史的な影響関係が自動的に導かれるわけではない。ヘラクレイトスから仏教へ、仏教から過程哲学へ、過程哲学から制御理論へと、一つの思想が直線的に継承されたと主張するには、文献上の参照、受容、概念の継承について独立した根拠が必要となる。似た問題意識が存在することと、一方の理論が他方から成立したことは別の命題である。ここでの比較は、異なる理論がどの問題を共有し、どの問題を固有の方法で扱うかを明らかにするためのものである。
12.2. 「同型性」という言葉を使うには、保存される関係を示す必要がある
異なる思想や理論の間に似た説明が現れるとき、それらが同じ構造を持つと表現したくなる。しかし、概念上の類似と数学的な同型性は区別する必要がある。例えば、仏教の縁起と構造振動モデルの関係グラフは、対象を独立した要素だけから説明するのではなく、成立条件と関係を重視するという点で対応する。一方、この対応だけでは、両者が数学的に同型であるとはいえない。同型性を主張するには、比較する双方の構造を定義し、何が保存されるのかを示す必要がある。
数学におけるグラフの同型性を例にすると、この違いを具体的に説明できる。二つの有向グラフを \(G_1=(V_1,E_1)\)、\(G_2=(V_2,E_2)\) とする。両者が同型であるためには、頂点集合の間に一対一で対応する写像 \(f:V_1\to V_2\) が存在し、辺の接続関係がその写像によって保存される必要がある。
\[
(u,v)\in E_1
\iff
(f(u),f(v))\in E_2
\]
この式では、グラフ \(G_1\) に辺 \((u,v)\) が存在することと、対応するグラフ \(G_2\) に辺 \((f(u),f(v))\) が存在することが同値であることを要求する。頂点の名前が異なっていても、写像によって接続関係が保存されれば、二つのグラフは同じ構造を持つと判断できる。例えば、受付、検証、処理という三つの部品を \(A,B,C\) と呼ぶ場合と、別の識別子 \(X,Y,Z\) で呼ぶ場合でも、接続関係が対応していればグラフの構造は同型となる。
ただし、グラフが同型であることは、そのグラフが表す現実の対象まで同じ性質を持つことを意味しない。例えば、三つの部品が直列に接続された二つのサービスは、接続関係だけを記録したグラフとしては同型であるかもしれない。しかし、一方は認証処理を行い、もう一方は記録処理を行っている場合、それぞれの機能や安全条件は異なる。グラフが保存しているのは、定義された頂点と辺の接続関係であり、それらの意味や実行時の振る舞いのすべてではない。
このため、重みや属性を持つグラフの同型性を検討する場合には、接続関係に加えて、どの属性を保存するかを明示する必要がある。例えば、辺の重みが通信量を表している場合と、障害時の影響度を表している場合では、同じ数値でも意味が異なる。比較するグラフの間で重みの意味と尺度が一致していなければ、数値の対応だけから同じ運用上の構造を持つとは判断できない。
さらに、状態遷移を含む動的システムの同型性を検討する場合には、状態の対応だけでなく、時間の経過に伴う遷移関係も保存される必要がある。二つの離散時間システムの状態遷移を、それぞれ \(F:X\to X\)、\(G:Y\to Y\) とする。このとき、状態空間の間の対応 \(h:X\to Y\) が存在し、次の条件を満たすなら、両者の状態遷移には整合した対応がある。
\[
h(F(x))=G(h(x))
\]
この式は、最初のシステムで状態 \(x\) を更新してから対応先へ写した結果と、先に対応先へ写してから二番目のシステムで更新した結果が一致することを表す。さらに、状態空間の構造に応じて、\(h\) が適切な一対一の対応と逆写像を持つなどの条件を課すことで、動的システムの共役関係を定義できる。単に状態の形が似ていることよりも、状態遷移の関係が保存されることが重要になる。
例えば、二つのサービスが同じ数の処理部品を持ち、同じ接続関係を持っているとしても、負荷の変化に対する更新規則が異なれば、状態遷移の性質は異なる。片方は負荷が増えた場合に処理部品を追加し、もう片方は要求を拒否するという操作を選ぶかもしれない。構造グラフが同型であることから、運用上の状態遷移まで同型であるとはいえない。
この区別を仏教思想と構造振動モデルの比較へ適用すると、必要な条件が明確になる。縁起と関係グラフの間に数学的な同型性を主張するためには、まず縁起の教説が扱う対象と関係を、グラフの頂点や辺に対応する形式として定義する必要がある。そのうえで、仏教思想における成立条件の関係が、グラフにおける接続関係とどのように対応し、その対応によって何が保存されるかを示す必要がある。さらに、両者の目的や意味をどこまで保存できるかを検討しなければならない。
しかし、縁起の教説には、苦の生起と止滅、認識、執着、実践に関する内容が含まれる。これらを工学的な通信経路や資源依存の辺へそのまま割り当てることはできない。一方、構造振動モデルには、通信量、処理能力、変更費用、観測誤差、操作権限など、仏教の教説が具体的な数値や操作集合として定義していない情報が含まれる。両者の間に、対象と関係の全体を保存する対応が与えられているわけではない。
したがって、両者の接続は、数学的な同型性ではなく、成立条件と関係を重視するという限定された概念上の対応として理解するのが適切である。この対応には十分な意味がある。例えば、ある部品が正常に動作していることだけでサービス全体の機能が保証されるわけではないという理解は、機能の成立条件を分析する方向へ考察を進める。一方、その理解から、どの処理経路を追加すべきか、どの例外経路を削除すべきかという判断までは直接導かれない。具体的な操作には、対象の観測と評価が必要となる。
この関係を整理するため、仏教思想、過程哲学、複雑系科学、構造振動モデルを、主な問い、対象、評価の形式、介入の位置から比較する。
| 観点 | 仏教思想 | 過程哲学 | 複雑系科学 | 構造振動モデル |
|---|---|---|---|---|
| 主な問い | 条件づけられた現象と自己への執着をどのように理解し、苦を止滅するかを問う。 | 存在を固定した実体の集まりではなく、生成する過程としてどのように理解するかを問う。 | 相互作用や状態遷移が、秩序、周期性、非周期的な運動をどのように生み出すかを問う。 | 条件の変化に応じて構造をどのように更新し、必要な機能を維持するかを問う。 |
| 対象 | 経験、認識、行為、苦の成立などを含む条件づけられた現象を扱う。 | 現実的存在や生成を含む、存在論的な概念体系を扱う。 | 状態と相互作用を定義でき、数学的・経験的に分析可能な系を扱う。 | 要素、関係、環境、観測、操作が定義された実務上の構造を扱う。 |
| 変化の位置づけ | 条件づけられた現象の無常性や、条件による生起と止滅に関わる。 | 生成が存在の理解において基本的な位置を占める。 | 状態遷移の規則と、その規則から生じる時間的な振る舞いを分析する。 | 構造の追加、削除、分割、統合を状態遷移として記述する。 |
| 同一性の理解 | 恒常的で独立した自己や自性として対象を把握することを問い直す。 | 出来事や生成の関係から、持続や存在を説明する。 | 状態空間、観測変数、軌道の性質によって同一性や変化を扱う。 | 要素の識別規則、関係の定義、維持する機能によって構造を比較する。 |
| 評価の形式 | 教説の理解と、苦の止滅へ向かう実践的な変容が重要になる。 | 形而上学的な概念体系の整合性と説明力が重要になる。 | 数学的な整合性と、理論予測を観測・実験へ照合することが重要になる。 | 構造の測定、運用条件の達成、更新効果の検証が重要になる。 |
| 介入の位置 | 認識や行為のあり方を変える実践に位置づく。 | 人工物の運用を制御することが理論の主目的ではない。 | 対象と研究目的に応じて、実験や制御を扱う。 | 更新ポリシー、操作権限、変更手順、回復方法を明示する。 |
| 成立条件の意味 | 現象の条件依存性と、独立した自性の問題を検討する。 | 現実的存在が生成する過程と関係を概念的に説明する。 | 状態遷移、相互作用、初期条件、境界条件を数理的に指定する。 | 環境、資源、観測、権限の制約を含め、機能を維持できる範囲を定義する。 |
この比較によって、各理論が扱う条件や関係の意味が異なることが分かる。仏教思想では、条件に依存して成立する現象を、苦や自己への認識と結びつけて理解する。過程哲学では、生成を基本とする存在の説明が中心となる。複雑系科学では、状態遷移と相互作用が生み出す振る舞いを数学的・経験的に検討する。構造振動モデルでは、観測と介入を通じて必要な機能を維持するための条件を明示する。
同じ「条件」という言葉を使っていても、それが示す対象と役割は異なる。例えば、仏教の縁起における条件と、制御理論における外乱集合 \(\mathcal W\) は、同じ意味ではない。外乱集合は、状態遷移モデルで考慮する環境変化の範囲として具体的に定義される。一方、縁起は苦の生起と止滅に関わる条件関係を含む教説である。両者を同じ記号へ置き換えることによって、思想上の内容が保存されるわけではない。
また、構造振動モデルの状態変数 \(S_t\) を、無常の教説における現象のすべてと対応させることもできない。状態変数は、観測と検証の目的に応じて選択された構造の表現である。対象の内部構造、外部環境、運用担当者の認識、制度上の権限を、どの程度モデルへ含めるかは設計上の判断によって決まる。モデルに含めなかった条件について、状態変数から直接結論を導くことはできない。
一方、このような限定が存在するからといって、異なる思想を比較する意味がなくなるわけではない。例えば、構造を固定した実体として把握する代わりに、関係と成立条件によって理解するという見方は、何を状態変数へ含めるべきかという問いを生む。さらに、対象だけでなく観測主体も変化するという理解は、観測方法や判断基準の更新をモデルへ含める必要性を明らかにする。思想上の接点は、数式を直接導出するためではなく、何を問うべきかという問題設定を具体化するために利用できる。
ただし、その問いから得られる答えは、対象ごとの実測と検証によって決まる。例えば、ある例外経路が現在ほとんど使用されていないという事実は、その経路を削除すべきだという結論を与えない。必要になる確率、障害時の損失、維持費用、代替経路の有無などを確認する必要がある。条件依存性を重視するという思想的な立場だけでは、どの条件を重視し、どの操作を選択するかを一意に決定できない。
ここに、概念上の類似と操作理論としての成立条件の違いがある。概念上の類似は、異なる対象に共通する問題を発見するために役立つ。一方、操作理論では、その問題に対してどの状態を測定し、どの操作を実施し、どの結果を許容するかを具体的に定める必要がある。思想間の対応を限定することによって、それぞれの理論の固有性を維持しながら、共通する問いを実務上の検証へ接続できる。
12.3. 設計されるものには、設計者が定める目的がある
自然現象の説明と、人工物の設計には重要な違いがある。自然現象を説明する場合には、対象がどのような条件によって生じ、どの規則に従って変化するかを明らかにすることが中心となる。一方、人工物や制度を設計する場合には、対象が何を実現するために作られるかという目的が与えられる。人工物の構造は、自然に生じる状態を観測するだけでなく、ある機能を実現するために選択され、変更される。
Simon の『The Sciences of the Artificial』は、人工物を、目的と環境への適応という観点から理解するための基礎を与えた[22]。この議論では、人工物は内部の構造と外部環境との間に位置し、与えられた目的に対して環境へ適応するものとして考えられる。人工物の振る舞いは、その内部構造だけでなく、外部環境と、何を実現するために設計されたかによって理解される。
例えば、同じ処理能力を持つ二つのサービスでも、提供する目的が異なれば、適切な構造は異なる。大量の要求を短時間で処理することが中心となるサービスでは、処理能力の増強や負荷分散が重要となる。一方、取引結果を正確に記録することが中心となるサービスでは、処理速度だけでなく、記録の完全性や処理結果の整合性が重要になる。どちらのサービスも同じ種類の処理部品を使用できるかもしれないが、維持すべき機能と許容できる損失が異なれば、選択される構造も異なる。
この違いは、構造振動モデルにおける損失関数の定義にも現れる。構造を \(S\)、環境を \(C\)、運用上の損失を \(L(S,C)\) とする場合、どの性質を損失へ含めるかを決める必要がある。例えば、応答時間、誤り率、停止時間、保守費用をそれぞれ \(L_1,L_2,L_3,L_4\) とし、それらを重み付けした損失関数を考えることができる。
\[
L(S,C)
=
\lambda_1L_1(S,C)
+
\lambda_2L_2(S,C)
+
\lambda_3L_3(S,C)
+
\lambda_4L_4(S,C)
\]
ここで \(\lambda_1,\ldots,\lambda_4\) は、それぞれの損失をどの程度重視するかを表す重みである。重み付けに先立って、各損失を比較可能な尺度へそろえる必要がある。また、どの重みを採用するかによって、同じ構造の評価結果が異なる場合がある。例えば、応答時間の重みが大きければ処理速度を優先する構造が選ばれやすくなり、記録の正確性の重みが大きければ、処理時間を要しても正確性を維持する構造が選ばれやすくなる。
しかし、この式を定義できたことによって、重みの選択が自動的に正当化されるわけではない。どの損失を優先し、どの程度まで許容できるかは、利用者の要求、組織の目的、制度的な責任、法的・契約的な条件などに依存する。例えば、重要な記録の欠落が許容されないサービスでは、応答時間の改善によって記録の欠落を補償できるとは限らない。すべての損失を単一の重み付き平均へまとめれば、ある指標の大幅な改善によって、別の必須条件の違反が数値上打ち消される場合がある。
このような場合には、必ず維持すべき条件を制約として分離することが考えられる。例えば、応答時間に関する損失を最小化しながら、記録の欠落率と復旧時間については許容上限を設定する。応答時間の損失を \(L_{\mathrm{latency}}\)、記録の欠落に関する損失を \(L_{\mathrm{record}}\)、復旧時間に関する損失を \(L_{\mathrm{recovery}}\) とすれば、次のような設計問題になる。
\[
\begin{aligned}
\text{minimize}\quad&
L_{\mathrm{latency}}(S,C)\\
\text{subject to}\quad&
L_{\mathrm{record}}(S,C)\leq\tau_{\mathrm{record}}\\
&
L_{\mathrm{recovery}}(S,C)\leq\tau_{\mathrm{recovery}}
\end{aligned}
\]
この式では、記録と復旧に関する条件を満たす構造の中で、応答時間に関する損失を最小化する。例えば、記録処理を省略することで応答時間を短縮できても、記録の欠落率が許容上限を超えるなら、その構造は選択対象から除外される。目的関数と制約を分離することで、何を改善したいかという目的と、何を必ず維持すべきかという条件を明確にできる。
ただし、制約を定義しただけでは、その制約を満たす構造が実際に存在するとは限らない。例えば、現在の処理能力と予算の範囲では、応答時間と記録の完全性を同時に満たす構造が存在しない場合もある。そのとき、数学的な最適化問題には実行可能な解が存在しない可能性がある。制約を満たせないという結果は、モデルの失敗というより、与えられた目的と資源の組み合わせが実現不可能であることを示している場合がある。
この場合には、処理能力の増強、追加予算の確保、要求量の調整、設計方式の変更など、実行可能な範囲を広げる操作を検討する必要がある。ただし、どの操作を実施できるかは、技術的な能力だけでなく、権限や制度によっても制約される。例えば、予算を増額できる権限がなければ、処理資源を増強する計画は実施できない。また、利用者との契約によって記録の完全性が要求されているなら、その条件を運用担当者の判断だけで緩和することはできない。設計目的と操作可能性は、異なる主体の判断に依存する場合がある。
この違いを具体的に考えるため、あるサービスの要求量が増加した場合を取り上げる。現在の処理能力では応答時間を維持できなくなり、処理部品を追加すれば性能を回復できるとする。しかし、処理部品の追加には費用がかかり、共有する記録装置への負荷も増加する。別の方法として、処理方式を単純化して実行時間を短縮することも考えられる。ただし、その変更によって例外的な入力への対応能力が低下する可能性がある。
この状況では、処理部品の追加と処理方式の単純化のどちらが適切かを、構造の複雑さだけで決めることはできない。処理部品を追加すれば部品数は増えるが、応答性能を維持できるかもしれない。処理方式を単純化すれば部品数や分岐数が減るかもしれないが、一部の機能を失う可能性がある。必要な機能と許容損失を明示して初めて、二つの操作を比較できる。
さらに、複数の目的が競合する場合、一つの構造がすべての指標について最も優れているとは限らない。例えば、構造 \(S_1\) は応答時間が短いが維持費用が大きく、構造 \(S_2\) は維持費用が小さいが応答時間が長いとする。どちらか一方が両方の指標で優れているなら、比較は比較的容易である。しかし、一方が応答時間で優れ、他方が維持費用で優れている場合には、どちらを選ぶかを決めるために目的の優先順位が必要となる。
このような関係は、多目的最適化におけるパレート優越として整理できる。例えば、応答時間と維持費用をともに小さくしたい場合、構造 \(S_a\) が構造 \(S_b\) に対して、どちらの指標でも悪化せず、少なくとも一方で改善するなら、\(S_a\) は \(S_b\) をパレート優越する。一方、応答時間が短い構造と費用が小さい構造の間では、どちらも他方を優越しない場合がある。その場合、評価する主体が何を重視するかによって選択が決まる。
さらに、設計目的そのものも時間とともに更新される場合がある。例えば、サービスの初期段階では、少数の利用者に対して必要な機能を提供することが重視される。その後、利用者が増加すると、応答性能や障害時の復旧可能性が重要になる。さらに、サービスが社会的に重要な機能を担うようになれば、監査可能性や記録の完全性に対する要求が高まる場合もある。構造の更新が必要になるのは、外部環境が変化する場合だけではない。何を維持すべき機能とみなすかという設計目的が更新される場合にも、新しい構造が必要となる。
一方、目的が更新されたからといって、以前の責任が自動的に消えるわけではない。例えば、記録の完全性を利用者へ約束していたサービスが、応答時間の短縮を新しい目標として採用した場合でも、そのことだけで記録の完全性を放棄できるとは限らない。以前から存在する契約や制度上の義務を維持したまま、新しい目的へ対応する必要がある場合もある。設計目的の更新には、何を維持し、何を変更できるかという判断が伴う。
さらに、構造を更新する主体の判断もまた、観測と経験によって更新される。例えば、初期には未知の要求へ備えるために例外経路を追加し、その後の運用経験によって維持費用が明らかになれば、同じ主体が削除を支持する場合がある。目的を維持しながら操作の方向が反転する場合もあれば、目的自体が更新されることで、以前とは異なる構造が選ばれる場合もある。対象の状態、判断主体の認識、設計目的を区別することで、変更の理由を具体的に説明できる。
この違いは、哲学的な説明と操作理論との間にある境界を明確にする。哲学的な説明では、変化するものの同一性、生成のあり方、条件依存性、自己への認識などが問われる。操作理論では、具体的な対象について、維持する目的、観測可能な状態、実行可能な操作、許容する損失を定義する。両者には共通する問題意識がある一方、それぞれの問いに対して必要となる根拠は異なる。
ただし、これらを一つの理論へ統合できたと主張するためには、概念の類似だけでは十分ではない。どの対象と関係が対応し、何が保存され、どの主張がどの方法で検証されるかを明示する必要がある。現時点での接続は、独立した実体の保存よりも、条件による成立と変化を重視するという概念上の対応である。その対応から、構造の同一性、判断主体の更新、観測の限界、維持可能性の条件を問い直すことができる。一方、特定の構造変更の合理性や因果効果は、対象ごとの観測と検証によって判断される。
変化する構造を持続させることは、同じ形を永久に保存することではない。必要な機能を明示し、環境の変化に応じて関係を更新し、その更新が実際に目的を達成したかを確かめることである。哲学的な理解は、何を固定したものとして扱っているのかという前提を問い直す。数理モデルは、どの関係と変化を測定できるかを定める。操作理論は、何を維持し、どの操作を許可し、どの条件で変更を実施するかを決める。それぞれの役割を区別して接続することによって、無常的な世界における持続を、思想上の洞察と検証可能な運用の双方から考察できる。
13. 無常的世界を運用するとは、維持する機能と更新する関係を選ぶことである
変化を前提として世界を理解することは、構造を無条件に変更し続けるべきだという結論を意味しない。ある構造が現在の要求を満たし、必要な機能を安定して提供しているなら、その構造を維持する判断には合理性がある。しかし、その合理性は構造そのものが恒久的に正しいことから生じるのではない。入力の分布、外部環境、依存関係、運用資源、利用者の要求など、機能の成立を支える条件が満たされていることによって生じる。条件が維持される間は同じ構造を使用できても、条件が変化すれば、構造を保存することと必要な機能を維持することが対立する場合がある。
例えば、単一の処理経路で十分な応答性能を提供していたサービスを考える。要求量が少ない段階では、処理経路を増やさないことで、実装と監視の対象を限定できる。しかし、要求量が増加して処理能力を上回るようになれば、同じ構造を維持することによって待ち行列が蓄積し、応答性能が低下する。このとき、処理経路を分割して能力を増強することは、必要な機能を維持するための合理的な変更となる可能性がある。反対に、要求量が減少し、分割した経路の維持費用が利益を上回るようになれば、再び統合する判断が合理的になる場合もある。
この一連の更新では、分割と統合という反対方向の操作が選ばれている。しかし、判断の目的が必要な機能の維持にあるなら、操作の方向が反転すること自体は矛盾ではない。各時点で異なるのは、構造を取り巻く条件と、その条件の下で生じる損失である。以前の構造が適切だったという事実は、その後も同じ構造を選ぶべきだという根拠にはならない。同様に、以前の構造を変更したという事実だけで、過去の判断が誤っていたと結論づけることもできない。
無常は、現象の持続を恒常不変の実体の証拠として捉える見方を問い直す。縁起は、現象がどのような条件に依存して成立するかという問題を明らかにする。無我は、身体や意識などを恒常的で完全に支配可能な自己として把握することを問い直す[2][3][4]。これらの論点は、単にあらゆるものが変化すると繰り返すためのものではない。何を持続とみなすのか、その持続を支える条件は何か、誰がどのような認識によって判断するのかを検討するための視点を与える。
この違いを扱うため、構造振動モデルでは、時刻 \(t\) における構造を次のように表す。
\[
S_t=(V_t,E_t,W_t)
\]
\(V_t\) は要素、\(E_t\) は関係、\(W_t\) は関係に付与した重みである。構造を共通の表現空間へ写せば、隣接する時点の構造差を振幅 \(A_t\) として測定できる。また、複雑さの尺度 \(K\) を定めれば、その変化 \(\Delta K_t\) を振幅とは別に記述できる。これらの定義によって、構造がどれだけ変更されたかという問題と、複雑化したのか単純化したのかという問題を区別できる[7][8]。
ここで、構造 \(S_t\) が環境 \(C_t\) の下で必要な機能を満たしているかを評価するため、許容される構造の集合 \(\Omega(C_t)\) を考える。現在の許容性は次の条件で表せる。
\[
S_t\in\Omega(C_t)
\]
この条件は、現在の構造が現在の環境で定められた要求を満たすことを示す。しかし、環境が変化したときにも必要な機能を維持できるかは、別に検討する必要がある。例えば、現在の処理能力が要求量を上回っていても、要求量の増加が処理能力の増強上限を超えれば、許容条件を維持できなくなる場合がある。現在の正常性から、将来の維持可能性は自動的には導かれない。
構造と環境を合わせた状態を \(z_t=(S_t,C_t)\)、許容状態の集合を \(\mathcal K\) とすると、持続可能性の検討には、状態遷移と実行可能な操作を含める必要がある。例えば、状態を完全に観測でき、操作を外乱の発生前に選択する場合、許容集合のロバストな制御不変性は、次の条件によって表せる。
\[
\forall z\in\mathcal K,\quad
\exists u\in\mathcal U(z),\quad
\forall w\in\mathcal W:
F(z,u,w)\in\mathcal K
\]
この式では、許容集合のどの状態から出発しても、許可された操作の中に適切な操作が存在し、その操作を選んだ後、想定したどの外乱が発生しても次の状態が許容集合にとどまることを要求する。条件を満たす操作を各状態で継続して選択できるなら、指定した状態遷移と外乱範囲の下で、許容状態を維持するための根拠となる[17][18]。
この関係を実際の運用へ適用するときには、少なくとも次の区別が必要となる。
| 検討対象 | 確認する問い | 確認を省いた場合に生じる問題 |
|---|---|---|
| 維持する機能 | 利用者や運用主体にとって、何をどの水準で維持する必要があるか。 | 構造が単純になったことや指標が改善したことを、機能の維持と取り違える。 |
| 成立条件と環境 | 現在の機能は、どの入力、依存関係、資源によって成立しているか。 | 以前は適切だった構造を維持し続け、環境変化への対応が遅れる。 |
| 構造の更新 | どの要素や関係を追加、削除、分割、統合する必要があるか。 | 変更の規模や複雑さの増減だけで、操作の価値を判断する。 |
| 観測と状態推定 | 実際の状態と測定方法の変化を区別できるか。 | 監視対象の追加による報告件数の増加を、障害の悪化と誤認する。 |
| 操作の実行可能性 | 必要な操作が、権限、資源、時間、安全条件の範囲で実施できるか。 | 理論上は有効でも、実際には実行できない更新を前提にする。 |
| 更新結果の検証 | 変更後の改善が、実施した操作によって生じたと判断できるか。 | 入力構成や環境の変化による改善を、構造変更の効果として扱う。 |
| 判断と責任 | 誰がどの情報と権限に基づいて変更を選択し、承認したか。 | 判断の根拠や変更の責任を後から確認できなくなる。 |
さらに、構造を維持するという選択も、変更を実施するという選択と同じく、条件付きの判断である。例えば、現在の構造が必要な性能を満たしている場合には、不要な変更を避けることで障害の危険を抑えられる可能性がある。しかし、近い将来に要求量が増加することが分かっており、処理能力の増強に長い時間を要するなら、現在の性能が良好な段階で変更を開始する必要があるかもしれない。変更しないことの費用と、変更することの費用は、ともに環境と時間に依存する。
したがって、構造更新の合理性を、変更量が小さいことや、単純化していることだけで評価することはできない。どの機能を維持するために、どの条件の下で、どの関係を変更または保持するのかを具体的に説明する必要がある。例えば、使用頻度の低い経路であっても、重大障害時の復旧に不可欠なら保持する理由がある。一方、頻繁に使用される経路であっても、ほかの経路へ統合することで必要な機能を維持しながら運用費用を減らせるなら、統合を検討する理由がある。経路の数や使用頻度だけでは、適切な操作を一意に決められない。
最終的に問われるのは、構造を変化させるべきか、保存すべきかという一般的な二者択一ではない。現在の機能は何によって成立しているのか。その条件のうち何が変化しているのか。必要な機能を維持するには、どの関係を変更し、どの関係を保持する必要があるのか。そして、その操作を許可された範囲で実施でき、結果を検証できるのか。これらの問いに具体的に答えることで、構造の持続を固定性から切り離し、変化する条件の下で必要な機能を維持するための判断を形成できる。
変化する世界で何を保つかは、目的と責任に基づいて明示される。どうすれば保てるかは、構造、環境、観測、操作、外乱の条件によって検討される。何を保つかという価値判断と、どう保てるかという維持可能性の検証を区別し、その両方を継続的な更新判断へ結びつけることが、無常的世界を運用するための操作理論の核心である。
参考文献
- id774, 無常的世界をどう運用するか(2026-03-02). https://blog.id774.net/entry/2026/03/02/3884/
- Aṅguttara Nikāya, Uppādāsutta (AN 3.136). https://suttacentral.net/an3.136/en/sujato
- Saṁyutta Nikāya, Paccaya Sutta (SN 12.20). https://accesstoinsight.org/tipitaka/sn/sn12/sn12.020.than.html
- Saṁyutta Nikāya, Anatta-lakkhana Sutta (SN 22.59). https://accesstoinsight.org/tipitaka/sn/sn22/sn22.059.nymo.html
- id774, 構造振動モデルとは何か(2026-02-17). https://blog.id774.net/entry/2026/02/17/3666/
- Herbert A. Simon, A Behavioral Model of Rational Choice(1955-02-01). https://academic.oup.com/qje/article-abstract/69/1/99/1919737
- id774, 構造振動モデルを数理モデルとして定義する(2026-04-05). https://blog.id774.net/entry/2026/04/05/4318/
- id774, 構造振動モデルの定義を測定と検証まで含めて整理する(2026-11-11). https://blog.id774.net/entry/2026/11/11/5869/
- Edward N. Lorenz, Deterministic Nonperiodic Flow(1963-03-01). https://journals.ametsoc.org/abstract/journals/atsc/20/2/1520-0469_1963_020_0130_dnf_2_0_co_2.xml
- Betsy Beyer et al., Site Reliability Engineering: How Google Runs Production Systems(2016). https://sre.google/sre-book/table-of-contents/
- Nāgārjuna, Nāgārjuna’s Middle Way: Mūlamadhyamakakārikā(2013). https://wisdomexperience.org/product/nagarjunas-middle-way/
- David Manheim and Scott Garrabrant, Categorizing Variants of Goodhart’s Law(2018-03-13). https://arxiv.org/abs/1803.04585
- Donald T. Campbell, Assessing the Impact of Planned Social Change(1979). https://www.sciencedirect.com/science/article/abs/pii/014971897990048X
- R. E. Kalman, A New Approach to Linear Filtering and Prediction Problems(1960). https://doi.org/10.1115/1.3662552
- W. Ross Ashby, An Introduction to Cybernetics(1956). https://www.biodiversitylibrary.org/item/26977
- Betsy Beyer et al., The Site Reliability Workbook(2018). https://sre.google/workbook/table-of-contents/
- Jean-Pierre Aubin, Viability Theory(2009). https://link.springer.com/book/10.1007/978-0-8176-4910-4
- Franco Blanchini, Set Invariance in Control(1999-11). https://www.sciencedirect.com/science/article/pii/S0005109899001132
- Miguel A. Hernán and James M. Robins, Causal Inference: What If(2020). https://miguelhernan.org/whatifbook
- Heraclitus of Ephesus, Fragments. https://adfonteslibrary.org/work-presocratics-heraclitus-fragments
- Alfred North Whitehead, Process and Reality: An Essay in Cosmology, Corrected Edition(1978). https://books.google.com/books/about/Process_and_reality.html?id=qh0cAAAAMAAJ
- Herbert A. Simon, The Sciences of the Artificial, Third Edition(1996-09-26). https://mitpress.mit.edu/9780262691918/the-sciences-of-the-artificial/