ステート図とは何ですか?
A ステート図(しばしばステートマシンまたはステートチャート図と呼ばれる)は、行動的なUML図は、単一のシステムオブジェクト、ビジネスエンティティ、またはランタイムプロセスのライフサイクルをモデル化するものです。統合モデル化言語(UML)仕様の基本的な構成要素として、この特定のUML図タイプオブジェクトが初期化されてから最終破棄されるまでの間、取りうるさまざまな状態を示し、一つの状態から別の状態に遷移を引き起こす特定のイベントや条件も含んでいます。
WebSocket接続の複雑な接続フラグのドキュメント作成、eコマースのチェックアウトモデルの注文処理ステップ、または自律型ハードウェアシステムの動作を記述する場合でも、UMLステートマシンはソフトウェア開発者やソフトウェアアーキテクトに、複雑な反応型論理の明確で曖昧さのないブループリントを提供します。VPasCodeを使用すれば、グリッドの整列や重複する境界矢印の問題に悩まずに、複雑なステート遷移を即座にスクリプト化できます。
コア構文ガイド:要素と構造
高品質で標準準拠のステートチャートレイアウトを書くためには、開始点と終了点、ステート定義、イベント遷移、ネストされた複合ステート、および条件付き選択ポイントを理解する必要があります。
1. 初期状態と終了状態
すべてのステートマシンにはエントリポイントが必要であり、オプションで終了ポイントも持つ必要があります。PlantUML構文では、これらの境界要素は明確なアスタリスク記号のラッパーで表されます:
[*] --> StateName(初期開始状態を定義)StateName --> [*](終了状態を定義)
2. ステートとイベント遷移の定義
ステートは、方向性のある矢印(-->)でリンクされているときに自動的に宣言されます。遷移に文脈を追加するには、コロン(:)を付加し、ステート変化を引き起こす特定のイベント、APIトリガー、またはメソッド呼び出しを記述します:
[*] --> Disconnected
Disconnected --> Connecting : "connect()"
Connecting --> Connected : "auth_success" 
3. 複合/ネストされた状態
複雑なアプリケーションでは、個別の状態が自身のネストされたサブ状態を含むことがよくあります。これらの複合構造は、キーワード「state」の後に波かっこを記述することで実装できます。stateキーワードの後に開き波かっこを記述します:
state ActiveWorkspace {
[*] --> Idle
Idle --> Typing : "keypress"
Typing --> Idle : "timeout"
} 
4. 選択ポイント(条件分岐)
イベントが発生すると、システムは次の状態の先を決定する前に、内部データフラグを評価する必要があります。標準的なUML選択ダイアモンドを描くには、<<choice>>スタereotypeトークンを使用します:
state check_payment <<choice>>
OrderPlaced --> check_payment : "process()"
check_payment --> Paid : [balance >= total]
check_payment --> Failed : [balance < total] 
クリーンなステートチャートのためのベストプラクティス
- 状態の説明を活用する:コロンでラップされたインライン形式を使用することで、状態ノード内に明確な操作詳細、エントリーフック、またはエグジット関数を直接追加できます(例:
StateName : entry / logTimestamp()). - 状態名を簡潔に保つ:内部状態変数のコードにはCamelCaseまたはsnake_caseを使用してください(例:
PaymentProcessing)、長めの読みやすいラベルを付ける必要がある場合は、引用符を使用してください。 - ベクタールーティングの方向を管理する:複数段階のライフサイクルマップが垂直方向にごちゃついた場合、接続矢印内にインラインの空間ルールを挿入してください(例:
-right->または-down->) レイアウト密度を調整する。
実世界のPlantUML状態図の例
例1:IoTデバイスネットワークライフサイクル(複合状態と選択)
このテンプレートは、IoTセンサーモジュールの接続行動状態ループを追跡し、複雑な構造的ネストブロックおよび条件評価選択ピンを示している。
@startuml
[*] --> オフライン
オフライン --> 接続中 : "電源オン"
state 接続中 {
[*] --> 初期化
初期化 --> DNS解決中 : "ハードウェア準備完了"
DNS解決中 --> ハンドシェイク送信中 : "IP取得完了"
}
state 認証確認 <<choice>>
接続中 --> 認証確認 : "サーバーチャレンジ受信"
認証確認 --> オンライン : [トークン有効]
認証確認 --> オフライン : [トークン期限切れ] : "赤LED点滅"
state オンライン {
[*] --> 待機
待機 --> データ送信中 : "タイマー発動"
データ送信中 --> 待機 : "ACK受信"
待機 --> 省電力モード : "バッテリー低電圧検出"
}
オンライン --> オフライン : "接続喪失"
@enduml 
構文の分解: このマップは個々の操作ループを明確に分離している。ハードウェアが複合状態の「接続中」ラッパー状態に遷移すると、認証確認に到達する前にDNS解決などの局所的サブ状態を追跡する。認証確認選択ダイアモンドに到達する。括弧([トークン有効])は標準のUMLガード条件を表す。
例2:ECオーダー履行状態機械(並行サブ状態)
この高度なエンタープライズブループリントは、並行して配送パッケージ処理と請求記録処理を行う直交する並行動作を示す、マルチスレッドオーダーシステムをモデル化している。スプリットライン(--).
@startuml
[*] --> カート
カート --> 注文送信済み : "チェックアウトクリック"
注文送信済み --> 支払い処理中 : "資金承認"
state 支払い処理中 {
[*] --> 銀行連絡中
銀行連絡中 --> 支払い完了 : "決済成功"
}
支払い処理中 --> 注文確定 : "支払い完了"
state 注文確定 {
[*] --> 物流処理
state 物流処理 {
[*] --> 商品ピッキング
商品ピッキング --> 箱詰め中 : "在庫確保完了"
箱詰め中 --> 配送中 : "ラベル印刷完了"
}
--
[*] --> 請求記録
state 請求記録 {
[*] --> 請求書作成中
請求書作成中 --> 請求書メール送信済み : "PDF生成完了"
}
}
注文確定 --> 注文アーカイブ : "配送完了確認"
注文アーカイブ --> [*]
@enduml 
構文の分解: 「注文確定」複合構造内では、ダブルダッシュデリミタ(--)が直交デリミタとして機能する。これによりPlantUMLは図を2つの並行状態に分割し、並行して実行させる:左側に物理的な物流パイプライン、右側に企業の請求更新が存在する。