本当に危険なのは変更そのものではなく、変更の起点が増えることだ

Ryusei Nakamura

Hatched by Ryusei Nakamura

May 27, 2026

1 min read

84%

0

触るたびに、整合性は静かに壊れていく

システムは壊れた瞬間よりも、少しだけずれたまま動き続ける瞬間のほうが危険です。見た目は正常、動作も一応する。しかし、どこか一つでも設定の起点が増えると、次に更新したときに初めて矛盾が表面化します。多くの人はそのとき初めて気づきます。問題は設定そのものではなく、誰が真実を持っているのかが曖昧になることだと。

たとえば、あるサービスの設定をコンソールで少しだけ直し、その後にテンプレートから更新したとします。すると、テンプレートに書かれている内容が再び正とされ、手で入れた修正は消えます。これは冷たい仕様ではありません。むしろ、システムが「真実は一つでなければならない」と主張しているのです。

この感覚は、macOS の環境管理を Nix に寄せたときにも同じように現れます。システムレベルの設定は一箇所で管理し、ユーザー環境は別の層で管理する。やっていることは違うようでいて、どちらも本質は同じです。変更を許すことではなく、変更の入口を制御することが目的なのです。

システムを守るとは、変更を止めることではない。変更がどこから入るかを、一箇所に絞ることだ。


ドリフトとは、設定の問題ではなく「権威の分裂」である

ドリフトという言葉は、よく「テンプレートと実体がずれること」と説明されます。しかし、それだけでは不十分です。より本質的には、ドリフトとは権威の分裂です。ある設定項目について、テンプレートが正しいのか、手で直した値が正しいのか、もはやシステム自身も分からなくなる状態です。

この分裂が起こると、運用は徐々に政治化します。誰かが「この値は手元で直しておいた」と言い、別の誰かが「いや、コードに戻すべきだ」と言う。双方とも正しいことを言っているのに、参照している真実の層が違う。こうなると、障害対応よりもまず、どの変更を採用し、どの変更を破棄するかという判断コストが増えます。

ここで重要なのは、ドリフトは大きな事故として現れるとは限らないことです。むしろ、運用現場では小さな成功として積み上がります。緊急対応で手を入れた結果、事態は収束する。誰も困らない。だからその場しのぎが正当化される。でも、その場しのぎが積み重なるほど、テンプレートは現実から遠ざかっていきます。

これはタスク定義やシステム設定だけの話ではありません。あらゆる構成管理に共通するのは、変更が「実体」側に滲み出すほど、再現性が失われるという点です。再現性がない環境は、優秀な人ほど疲弊します。なぜなら、問題が起きるたびに「何が正しい状態なのか」を再発見しなければならないからです。


Nix が教えるのは、構成管理ではなく「境界設計」である

Nix というと、しばしば再現可能な環境構築の仕組みとして語られます。しかし本当に面白いのは、Nix が単なる便利ツールではなく、境界の設計思想を体現していることです。nix-darwin は macOS のシステムレベルを、home-manager はユーザー環境を扱う。役割を分けることで、「何をどこで宣言するのか」が明確になります。

この分割は見た目以上に重要です。なぜなら、構成管理で失敗する多くのケースは、技術的な難しさよりも、境界が曖昧になることから起こるからです。例えば、シェルの設定、アプリの設定、OS の設定がそれぞれバラバラに散らばっていると、何かを変えるたびに「これはどの層の責任か」を考えなければならない。責任の所在が曖昧な設計は、短期的には自由に見えて、長期的には混乱を生みます。

Nix の発想は逆です。自由に直接いじれることよりも、いじってよい場所を減らすことに価値を置く。すると不思議なことに、体験はむしろ軽くなります。どこを変えればよいかが明確だからです。迷いが減り、再現性が増え、変更の影響範囲を読めるようになる。

ここで見えてくるのは、構成管理の本質が「記述」ではなく「統治」にあるという事実です。設定ファイルを書くだけなら誰でもできます。しかし、重要なのは、どの層で何を許可し、何を禁止するかを決めることです。Nix の強さは、その統治をコードとして固定しやすい点にあります。


便利さと正しさは、なぜいつも対立するのか

多くの現場では、手で直せることは美徳として扱われます。緊急時に素早く修正できる、試行錯誤しやすい、GUI で見ながら触れる。たしかに便利です。けれど、その便利さはしばしば、正しさの外部化と引き換えになっています。

ここには面白い逆説があります。自由に変更できるほど短期的には速くなるのに、長期的には遅くなるのです。なぜなら、変更の履歴が一貫した形で残らず、次の変更の足場が削れていくからです。結果として、システムは一見柔らかく、実際には脆くなります。

この関係は、建築でいえば「その場で増築し続けた家」に似ています。住めることは住める。でも、どこに柱があるか誰も正確には知らない。床下に何が通っているかも分からない。新しい配管を通そうとした瞬間、どこかで無理が出る。ソフトウェアの構成管理も同じで、変更の自由度が高いほど、内部の構造は見えにくくなります。

だからこそ、優れたシステムは「変更しやすさ」を単純に増やすのではなく、変更の仕方を限定することで変更を安全にするのです。これは制約ではありません。むしろ、信頼性を作るための前提です。制約のない自由は、すぐに無秩序になります。制約のある自由だけが、継続的な運用に耐えます。

本当に扱いやすいシステムは、何でもできるシステムではない。正しい場所だけを触れるシステムだ。


変更を一箇所に集めると、世界の見え方が変わる

では、どうすればよいのでしょうか。答えは意外に地味です。変更の起点を一箇所に集めること。ただし、ここでいう一箇所とは単なるファイル一つではありません。真実の所在を一つにし、そこから派生する状態を機械的に再構築できるようにすることです。

この考え方には、実務で使える強い利点があります。たとえば、ある設定を変えたときに、その変更がシステム全体のどこに波及するかを追いやすくなります。逆に、手作業の修正が混ざると、波及先を追跡するには人間の記憶と勘に頼るしかなくなります。これは規模が大きくなるほど破綻します。

具体例を挙げると、以下のような違いがあります。

  • 手作業中心の管理: 画面上で少し直すとすぐ反映されるが、次の更新で消える可能性がある
  • 宣言的管理: どの値を採用するかがコードに残るので、更新のたびに同じ結果を再現しやすい
  • 層分離された管理: システム全体とユーザー環境を分けることで、変更の責任範囲が明確になる

このとき重要なのは、宣言的であること自体が目的ではないことです。目的は、未来の自分が理解できる状態を保つことです。今の自分が少し楽になるために手で直した設定は、未来の自分に利息付きで返ってきます。宣言的な仕組みは、その借金をできるだけ増やさないための仕掛けです。

もう一つ、見落とされがちな利点があります。真実の起点が一箇所だと、改善も一箇所で済みます。たとえば、同じポリシーを複数のマシンに適用したいとき、設定が散らばっていれば一つずつ修正が必要です。しかし一元化されていれば、変更は定義上の一回で済む。これは単なる省力化ではなく、組織の学習速度を上げることでもあります。


Key Takeaways

  1. 設定を触る前に、「真実の場所」はどこかを決める。 手作業で直せる場所が多いほど、ドリフトのリスクは上がる。

  2. 変更の自由より、変更の入口の少なさを重視する。 制約は不便ではなく、再現性を守るための設計です。

  3. システム層とユーザー層は分けて考える。 役割を混ぜると、責任範囲が曖昧になり、あとで修正しにくくなる。

  4. 緊急対応で手を入れたら、必ず宣言側に戻す。 一時的な修正を恒久化すると、次の更新で矛盾が噴き出します。

  5. 「誰が正しいか」ではなく「どの層が正しいか」を問う。 ドリフトは人のミスではなく、権威の分裂として捉えると対策しやすくなります。


結論: 管理すべきなのは状態ではなく、状態が生まれる経路だ

構成管理の議論は、しばしば「どうすれば壊れないか」に終始します。しかし本当に問うべきなのは、もっと深いところです。状態をどう保つかではなく、状態がどの経路から生まれるかをどう統制するか。ここを取り違えると、便利さのために入口を増やし、結果として整合性を失います。

CloudFormation 的な世界観も、Nix 的な世界観も、突き詰めれば同じ問いに答えようとしています。つまり、システムは変更を拒むべきか、それとも変更を一箇所に閉じ込めるべきか。答えは後者です。変更は必ず起きるからです。問題は変更の有無ではなく、変更の起点が増殖していないかです。

だから、成熟した運用とは「たくさん直せること」ではありません。むしろ、どこを直せばよいかが常に明確であることです。その明確さこそが、未来の更新を安全にし、過去の応急処置を無力化し、システムに時間耐性を与えます。

本当に強い仕組みは、自由に見えて統治されている。触れる場所が少ないからこそ、安心して触れる。そこにあるのは不自由ではなく、整合性を失わないための自由です。

Sources

← Back to Library

Hatch New Ideas with Glasp AI 🐣

Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)

Start Hatching 🐣