状態遷移図と状態遷移表とは?用途や書き方の基本を初心者向けに解説

状態遷移図と状態遷移表は、さまざまな条件やイベントにより遷移するシステムの状態をモデル化するツールです。

状態遷移図や状態遷移表を用いることにより、特にデータモデルやシステム開発において、オブジェクトがどのように状態を変化させ、イベントに応じてどのように反応するかを明確に表現することができます。

これらは、データモデルやシステム開発に特化した内容だけではなく、汎用的な概念としても理解しやすいツールです。日常的な製品の動作などを元に状態遷移図を作成するのも、とてもよい学習方法になるでしょう。

この記事では、状態遷移図の基本的な構成要素、状態遷移表のフォーマット、両者の相互関係、そして両ツールを用いた実例について説明します。

目次

状態遷移図(ステートマシン)とは

状態遷移図はステートマシン(state-machine)とも呼ばれます。「state」は日本人にも馴染みのある英単語「ステータス」と、ほぼ同じ意味を持つ『状態』を意味する単語です。

この章では、状態遷移図を理解するうえでの基本的な内容について説明します。

状態遷移図:状態の変化とイベントの関係を可視化

状態遷移図は、ある状態が条件やイベントによってどのように遷移するかを、単純図形や矢印記号を用いて表現するツールです。システム開発の3つのアプローチのうち主に「プロセス中心アプローチ」で使われる図法です。

状態遷移図を書くことにより、オブジェクトの状態の種類や遷移する条件、そして遷移の流れを明確にすることができます。

たとえば下記の状態遷移図では、状態Cからは状態Bに遷移しないことが分かります。

状態遷移表とは

状態位遷移表は、前章の状態遷移図とセットで使われることが多いツールです。単純図形や矢印記号などは用いず、状態や遷移条件を表形式で一覧表示したものが状態遷移表です。

この章では、状態遷移表を理解するうえでの基本的な内容について説明します。

状態遷移表:状態遷移の条件やアクションを体系的に整理

状態遷移表は、ある状態が条件やイベントによってどのように遷移するかを、表形式で一覧化するツールです。状態遷移図と一緒に使われることが多いです。 

状態遷移表を書くことにより、オブジェクトの状態の種類や遷移する条件を一覧化することができます。 

たとえば下記の状態遷移表では、それぞれの状態とイベントの遷移関係が体系的に把握できます。

状態遷移図と状態遷移表がある理由

状態遷移図と状態遷移表は、システムの動作を異なる方法で表現し互いに補完するために使われます。

状態遷移図は、システムの状態変化を視覚的に捉え、複雑な遷移を明確にします。これに対し、状態遷移表は遷移に必要な具体的な条件やアクションを一覧化して整理します。

両者の組み合わせにより、システムの全体的な動作を包括的に理解できます。たとえば、ソフトウェア開発では、状態遷移図がシステムの動作概要を可視化し、状態遷移表が具体的な実装に必要な詳細情報を明確にします。

状態遷移図の書き方

この章では、実際に状態遷移図を書くときの参考手順を紹介します。

実務的な状態遷移図では、その状態の多さや求められる詳細度などによって最適な書き方が変わる場合もありますので、あくまでも参考としてご覧ください。

01_状態の種類を特定する

状態遷移図の主役は「状態」です。どのような状態が存在するのか、まずは書き出すことから始めます。

Bluetoothイヤホンの場合

Bluetoothイヤホンは状態遷移が分かりやすい事例のひとつです。下記のような状態が存在します。

状態:電源OFF

状態:ペアリング待ち

状態:ペアリング中

02_遷移関係を特定する

次にどの状態からどの状態に遷移するのか、それぞれの状態から矢印を引いてみます。

今回の例は簡単な3つの状態しかありませんが、状態の数が多い場合や遷移関係がすぐに思いつかない場合には、適宜、この時点で次節で説明する「遷移条件」を記述したり、次章で説明する状態遷移表を先に書いたりするのもよい選択肢です。

03_遷移条件(イベント)を記述する

最後に、それぞれの状態から遷移するための「遷移条件(イベント)」を記述します。これで状態遷移図が完成します。

遷移条件に誤りや不足がないか精査するのと合わせて、次章で説明する状態遷移表と論理性が一致しているかの確認をします。

状態遷移表の書き方

この章では、実際に状態遷移表を書くときの参考手順を紹介します。

状態遷移表を書くにあたっては特別な手法は必要ありません。一般的な「表」と同様、行(縦)と列(横)の対象物の関係性を表記するだけです。

01_状態の種類を特定する

状態遷移を可視化するうえでのメインオブジェクトは「状態」です。状態遷移図同様、どのような状態が存在するのか、漏れがないように行タイトルに洗い出します。

02_遷移条件(イベント)を特定する

次に、状態が遷移するきっかけとなる条件(イベント)を洗い出します。これを、列タイトルに表記します。

このように「状態」と「イベント」で基本的な状態遷移表が完成します。

03_遷移関係を整理する

最後に、それぞれの状態とイベントでどのような遷移が発生するのかを正確に表記します。

状態とイベント(行と列)の数が多くなるほど、状態遷移表も複雑になりますので、誤りがないように論理性が一致しているかの確認もします。

状態遷移図との整合性

状態遷移図と状態遷移表は整合性がとれていなければなりません。

たとえば、下記の状態遷移図の場合、「状態B」に遷移する条件はひとつのため、状態遷移表にも「状態B」はひとつだけ存在しているはずです。

状態Aにイベント①が発生した場合のみ「状態B」に遷移する。状態Cから状態Bには遷移しない。

実例:状態遷移図と状態遷移表

この章では、実例を用いて状態遷移図と状態遷移表の使い方について説明します。

題材は世界中でお馴染みのゲームタイトル「スーパーマリオブラザーズ」です。

はじめに

スーパーマリオブラザーズはゲーム機(プラットフォーム)に応じて、さまざまなタイトルが販売されており、ゲームルールも異なる可能性がありますが、この記事で取り上げるのは初期の「FC版:スーパーマリオブラザーズ」です。

スーパーマリオの状態遷移図

スーパーマリオには、「初期マリオ」「スーパーマリオ」「ファイアマリオ」の3つの状態が存在します。それぞれの状態と遷移条件を状態遷移図で表すと、下記の図になります。

※スターアイテムによる無敵状態は割愛

スーパーマリオの状態遷移表

スーパーマリオの「状態」と「イベント」を状態遷移表で表すと下表のようになります。前記、状態遷移図との整合性にもご注目ください。

状態遷移表から把握しやすいこと

  • スーパーマリオに遷移するのは「初期マリオ」のみ
  • (敵接触による)Deadに遷移するのは「初期マリオ」のみ
  • 初期マリオは、どのイベントでも何らかの状態に遷移する
  • 敵に接触イベントは、すべての状態を遷移させる
  • ファイアマリオを遷移させるイベントは「敵に接触」のみ

あとがき

今回は、データモデルやシステム開発、そして「プロセス中心アプローチ」で使われる状態遷移図と状態遷移表について、基本や両ツールの違いと組み合わせ、書き方について記事にしました。

状態遷移図や状態遷移表は、システムを可視化する手法の中では汎用性が高く、求められる専門知識も少ないため、日常的な製品・サービスから書き起こすことも難しくありません。

容易に書けるとはいえ、今回の実例でも分かる通り、状態遷移図と状態遷移表を使うことで、「状態の遷移関係」は明確になります。システムを可視化する有用なツールとして活用しましょう。

目次