Appearance
状態マシン ― 新状態を追加したらどこが壊れる?
この章のキーワード
| 用語 | 意味 | なぜ重要か |
|---|---|---|
| 状態マシン | 「現在の状態」と「許可される遷移」を定義する設計パターン | 不正な状態変更を防ぐ |
| 状態遷移 | ある状態から別の状態への変化 | Draft → Active → Paused → Archive |
| 定数(Constant) | 変更されない固定値 | タイプミスや不正な値を防ぐ |
| マジックナンバー | コード中に突然現れる意味不明な数値 | 定数にすることで可読性が上がる |
Phase 1: 観察
LIBOT のシナリオ(自動メッセージ配信フロー)は 4 つの状態を持ちます。
php
// Constant.php (excerpt)
// Label: exemplar
// シナリオの状態
const SCENARIO_STATUS_DRAFT = 3702001; // 下書き
const SCENARIO_STATUS_ACTIVE = 3702002; // 有効(実行中)
const SCENARIO_STATUS_PAUSED = 3702003; // 一時停止
const SCENARIO_STATUS_ARCHIVE = 3702004; // アーカイブphp
// Scenario.php
public function isActive(): bool
{
return $this->status === Constant::SCENARIO_STATUS_ACTIVE;
}状態遷移の想定フロー:
Draft → Active → Paused → Active(復帰可能)
↓
Archive(終了)Phase 2: 判断
AI禁止ゾーン
「スケジュール待ち」(Scheduled)という 5 番目の状態を追加してほしい、と言われました。 Draft で作成し、指定日時に自動で Active になる状態です。
- どこを変更する 必要がありますか? 全て挙げてください
- 壊れる可能性がある 既存コードはどこですか?
- 状態が文字列(
"active","draft")ではなく数値定数なのは なぜ ですか?
AIに聞く前に、自分の頭で考えてみましょう。
テキストを入力すると有効になります