◉ANTIGRAVITY LABEN
記事一覧/連携・プラグイン
⬡ 連携・プラグイン/2026-04-10上級

Antigravity × XState v5 ステートマシン設計 — 複雑なUI状態遷移・ワークフロー・フォームバリデーションを型安全に実装する

useState と useEffect の積み重ねで説明できなくなった状態管理を、XState v5 のステートマシンに置き換えます。マルチステップフォーム、OAuth・MFA、WebSocket 再接続、Actor Model、Inspect API の5パターンと、スナップショット永続化で踏んだ落とし穴を扱います。

xstatestate-machinetypescript28react3workflow41form-validationantigravity464

✦ プレミアム記事

真偽値が5つになった日

決済フォームの「戻る」を素早く連打されると、送信済みのリクエストがもう一度飛ぶ。この報告を受けて isSubmitting を足し、hasSubmitted を足し、useEffect の依存配列を睨んでいるうちに、どの組み合わせが正しい状態なのかを自分で説明できなくなりました。

真犯人はレースコンディションそのものではなく、「今どの状態にいるのか」がどこにも書かれていなかったことでした。真偽値が5つあれば組み合わせは32通りあります。そのうち意味を持つ状態はせいぜい4つで、残りは「起きてはいけないのに、コード上は到達できてしまう」状態です。

XState v5 は、有限ステートマシン(FSM)とステートチャートの概念をTypeScriptで型安全に実装できるライブラリです。Antigravity のAIエージェントと組み合わせることで、状態遷移図の設計からコード生成、テスト作成までを一気通貫で行えます。

扱う範囲は、マシン定義の書き方から、本番に出したあとで初めて困る部分までです。React と TypeScript での開発経験があり(基礎はAntigravity × React 完全入門ガイドにまとめています)、真偽値をこれ以上増やせないと感じている方を想定しています。

XState v5 の基本アーキテクチャとAntigravity連携

ステートマシンの核心概念

XState v5 では、状態遷移を「マシン定義」として宣言的に記述します。従来の v4 から大幅にAPIが刷新され、よりTypeScriptフレンドリーになりました。

// XState v5 の基本的なマシン定義
import { setup, createActor, assign } from 'xstate';
 
// setup() で型安全なマシンを定義
const toggleMachine = setup({
  types: {
    context: {} as { count: number },
    events: {} as { type: 'TOGGLE' } | { type: 'RESET' },
  },
  actions: {
    increment: assign({
      count: ({ context }) => context.count + 1,
    }),
  },
}).createMachine({
  id: 'toggle',
  initial: 'inactive',
  context: { count: 0 },
  states: {
    inactive: {
      on: {
        TOGGLE: {
          target: 'active',
          actions: 'increment',
        },
      },
    },
    active: {
      on: {
        TOGGLE: 'inactive',
        RESET: {
          target: 'inactive',
          actions: assign({ count: 0 }),
        },
      },
    },
  },
});
 
// Actor を生成して状態遷移を実行
const actor = createActor(toggleMachine);
actor.subscribe((state) => {
  console.log(`State: ${state.value}, Count: ${state.context.count}`);
  // State: inactive, Count: 0
});
actor.start();
actor.send({ type: 'TOGGLE' });
// State: active, Count: 1

Antigravity でのマシン定義支援

Antigravity のAIエージェントは、自然言語から状態遷移図を生成し、XState v5 のコードに変換できます。プロジェクトの .antigravity/rules に以下のルールを追加すると、AIが生成するステートマシンの品質が向上します。

// .antigravity/rules/xstate.md
## XState v5 コード生成ルール
- setup() API を必ず使用し、types でコンテキストとイベントの型を定義する
- v4 の Machine() や interpret() は使わない(v5 では createMachine / createActor)
- アクションは setup() の actions オブジェクトで事前定義し、文字列参照する
- ガード条件は setup() の guards で定義する
- 非同期処理は invoke(Promise/Observable)または spawn(子Actor)で実装する

Antigravity のチャットパネルで「認証フローのステートマシンを設計して」と指示すると、ルールに従った型安全なコードが生成されます。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦複雑なUIの状態管理で『どこでバグが起きているか分からない』問題を、ステートマシンの可視化と形式検証で根本解決できる
✦マルチステップフォーム・認証フロー・WebSocket 再接続など、実務で頻出する5つのパターンをそのままプロジェクトへ持ち込める
✦スナップショットを永続化したあとにマシン定義を変えたときの「例外を出さずに固まる」事故を、バージョン付き保存と復元対象の絞り込みで防げる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ Agents & Manager2026-03-30
Antigravity × Durable Execution: 障害に強い長時間AIタスクの設計パターン
Durable Execution パターンで Antigravity のエージェントを長時間タスクに投入する実装ガイド。チェックポイント・べき等性・自動リトライに加え、CAS 付きチェックポイントストアの実装、障害注入テスト、本番で踏みやすい 7 つの落とし穴まで具体的にまとめます。
⬡ 連携・プラグイン2026-09-05
GOOGLE_GEMINI_BASE_URL を差し替えても、鍵の持ち主は変わりません
Antigravity CLI の宛先を自前のゲートウェイへ向けたとき、手元の API キーがどこまで運ばれるかを受け側で記録しました。クロスホストのリダイレクトで Authorization は落ちるのに API キーヘッダーは残る、という挙動差の実測と、鍵を端末から外すゲートウェイの組み方を書き残します。
⬡ 連携・プラグイン2026-05-24
Antigravity サブエージェントの「動いているのに何もしていない」を捕まえる Observability 3層設計
Antigravity サブエージェントを 6 アプリ並行で動かしていると、月に 10 件以上「実行ログは緑なのに成果ゼロ」のサイレント失敗が起きます。Heartbeat / Output Trace / Decision Log を 3 層で重ねて 60 秒以内に検知する実装を、コードと運用数値ごと共有します。