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

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

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

xstatestate-machine2typescript27react3workflow39form-validationantigravity449

プレミアム記事

真偽値が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/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

連携・プラグイン2026-04-21
Antigravity × Warp Terminal で開発フローを一体運用する — エディタとAIターミナルを往復しないための実践ガイド
エディタでは AI と対話できるのにターミナルに降りると手作業に戻る——そのもったいなさを、Antigravity と Warp Terminal の一体運用で解消します。既定ターミナル化、prompt ファイルで共有する文脈、現場で効いた3つの運用パターンを紹介します。
連携・プラグイン2026-04-09
Antigravity × Notion API連携:ドキュメント駆動開発を自動化するAIワークフロー
Notion の仕様書と実装コードがズレていく問題を、MCP サーバー経由の連携で解決するドキュメント駆動開発です。Antigravity IDE への MCP 登録から、仕様書を読み取ってコードを生成する実践ワークフローまでを順に構築していきます。
連携・プラグイン2026-04-01
Antigravity × React 完全入門ガイド:コンポーネント設計・Hooks・状態管理をAIで習得する
コンポーネントの分割粒度や Hooks の使い分けに迷う方へ、Antigravity の AI と一緒に React を習得する入門ガイドです。セットアップからコンポーネント設計、Hooks の実践、Context API、パフォーマンス最適化までを扱います。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →