アポロ11号の「月面着陸シーケンス」をMermaid.jsで完全再現してみた

人類史上最も複雑で、失敗が許されないワークフロー。NASAのフライトプランをMermaidのState Diagramに書き起こして分かった「堅牢性」の秘密。

アポロ11号の「月面着陸シーケンス」をMermaid.jsで完全再現してみた

「失敗は選択肢にない(Failure is not an option)」

NASAのフライトディレクター、ジーン・クランツの言葉として有名ですが、実際のシステム開発において「絶対に失敗しない」ことは至難の業です。

しかし、1969年。我々は当時の貧弱なコンピュータ(スマホの数千分の一の性能)で、月面着陸を成功させました。

なぜ可能だったのか? その秘密は**「徹底的に設計されたステートマシン(状態遷移)」**にあります。

この記事では、アポロ11号の全行程をMermaid.jsの stateDiagram で再現し、その堅牢な設計美学に迫ります。

再現:アポロ11号フライトプラン

打ち上げから月面着陸、そして地球帰還まで。 一つのミスが命取りになる、緊張感あふれるシーケンスです。

%%{init: {
  'theme': 'neutral',
  'themeVariables': {
    'fontFamily': 'Courier New',
    'fontSize': '14px',
    'stateBorder': '#333',
    'stateBackground': '#f9f9f9'
  }
}}%%
stateDiagram-v2
    direction TB

    [*] --> Launch: T-0 Liftoff

    state "Phase 1: Earth Ascent" as P1 {
        Launch --> Stage1_Sep: "+2:42"
        Stage1_Sep --> Stage2_Ig: Ignition
        Stage2_Ig --> Stage2_Sep: "+9:12"
        Stage2_Sep --> Stage3_Ig: Ignition
        Stage3_Ig --> EarthOrbit: "Parking Orbit (1.5 revs)"
    }

    P1 --> TLI: "Trans-Lunar Injection"

    state "Phase 2: Translunar Coast" as P2 {
        TLI --> CSM_Sep: Separation
        CSM_Sep --> Docking: "Transposition & Docking"
        Docking --> Extract_LM: "Extract Lunar Module"
        Extract_LM --> Correction: "Midcourse Correction"
    }

    P2 --> LOI: "Lunar Orbit Insertion"

    state "Phase 3: The Landing" as P3 {
        LOI --> Undocking: Eagle Separates
        Undocking --> DOI: "Descent Orbit Insertion"
        DOI --> PDI: "Powered Descent Initiation"
        PDI --> Approach: "High Gate / Low Gate"

        state "Terminal Descent" as Landing {
            Approach --> BoulderField: "Alarm 1202"
            BoulderField --> ManualControl: "Armstrong Takes Over"
            ManualControl --> Contact: "Contact Light"
            Contact --> EngineStop: "Shutdown"
        }
    }

    P3 --> Surface: "The Eagle has Landed"

    Surface --> EVA: "One Small Step"
    EVA --> Sleep: "Rest Period"
    Sleep --> Ascent: "Lunar Liftoff"

    state "Phase 4: Return" as P4 {
        Ascent --> Rendezvous: "Docking with Columbia"
        Rendezvous --> Jettison_LM: "Goodbye Eagle"
        Jettison_LM --> TEI: "Trans-Earth Injection"
    }

    P4 --> Splashdown: "Pacific Ocean"
    Splashdown --> [*]

分析:1202アラームと手動オーバーライド

図中の “Terminal Descent” (最終降下フェーズ)にご注目ください。

stateDiagram-v2
    direction TB
    state "Terminal Descent" as Landing {
        Approach --> BoulderField: "Alarm 1202"
        BoulderField --> ManualControl: Armstrong Takes Over
        ManualControl --> Contact: "Contact Light"
        Contact --> EngineStop: "Shutdown"
    }

着陸直前、アポロ誘導コンピュータ(AGC)は処理落ちを起こし、悪名高い “1202 Alarm” を発しました。通常のソフトウェアならここでクラッシュするか、再起動ループに陥って墜落していたでしょう。

しかし、AGCは違いました。 **「優先度の低いタスクを捨て、姿勢制御とエンジン噴射だけを維持する」**という設計になっていたのです。

さらに、アームストロング船長は即座に**Manual Control(手動操縦)**に切り替えました。予定されていた着陸地点が岩だらけ(BoulderField)だと気づき、燃料ギリギリまで飛行して安全な平地を探したのです。

現代のシステムへの教訓

項目アポロ11号現代のシステム
状態管理明確なフェーズ分け(State Machine)状態が曖昧(Stateful/Statelessが混在)
エラー処理重要機能のみ維持(Graceful Degradation)全体停止(Crash)
人間介入最終判断は人間(Human-in-the-loop)自動化過信(Human-out-of-the-loop)

[!TIP] アポロの成功は、完璧な機械があったからではなく、**「機械の限界を知り、人間が補完するワークフロー」**が設計されていたからです。 これは現代のAIエージェント設計(Human-in-the-loop)にも通じる真理です。

結論:ステート図を描こう

複雑なワークフローを設計するとき、私たちはつい「ハッピーパス(成功ルート)」だけを考えがちです。 しかし、アポロのエンジニアたちは、ありとあらゆる失敗ルートを想定し、それをステート図に落とし込みました。

Mermaid.jsを使えば、この「状態遷移」を簡単に可視化できます。 あなたのシステムには、“1202 Alarm” が鳴ったときの脱出口は用意されていますか?

“Here men from the planet Earth first set foot upon the Moon. We came in peace for all mankind.” — Apollo 11 Plaque

参照・出典