ページ内ナビ
概要
AASMは、Rubyクラスへ有限ステートマシンを組み込むライブラリです。状態、イベント、遷移に加えてguardやcallbackを定義でき、plain RubyだけでなくActiveRecord、Mongoidなどの永続化層とも連携できます。注文、申請、ジョブなどの状態変化を条件と副作用ごとコードにまとめられます。
特徴と向いている用途
公式資料に基づく紹介・実機未検証 · 内容確認日:
主な特徴
状態・イベント・遷移をRubyのDSLで定義する
initial stateと複数のstateを宣言し、eventごとにfrom/toのtransitionを定義します。現在状態の判定や、特定eventを実行可能かどうかの確認用methodも生成されます。
出典:[1]
guardとcallbackで遷移条件と副作用を整理する
transitionやeventへguardを付け、before/after、state enter/exit、errorなどのcallbackを組み合わせられます。状態変更に伴う通知や監査処理を遷移の流れに配置できます。
出典:[1]
ActiveRecord等の永続化とtransaction・lockingへ接続する
plain Rubyに加えActiveRecord、Mongoid、Dynamoidなどのadapterを持ち、ActiveRecordではbang eventによる保存、transaction、pessimistic lockingなどを利用できます。
出典:[1]
向いている用途
状態遷移のルールをmodel近くへ明示したいRubyアプリに向く
注文status、承認flow、background jobの段階など、許可される遷移と条件を分散したif文ではなく一つのstate machineとして管理したい場合に適しています。
出典:[1]
導入前の確認
6.0ではRuby 3+、ActiveRecord連携ではRails 7+が必要
current sourceはAASM 6.0.0を宣言し、5→6 migration guideではRuby 2とRails 6のsupport終了を明記しています。既存applicationのruntime versionを先に確認します。
namespace付きevent methodの名前が5.xから変わる
6.0ではnamespaceを使うstate machineでplainなevent methodを作らず、namespace suffix付きmethodを直接生成します。5.xでplain methodを呼んでいたcodeは移行が必要です。
出典:[4]
bang eventのpersistence失敗が例外になる既定値変更を確認する
6.0ではwhiny_persistenceが既定でtrueになり、保存に失敗したbang eventはsilentにfalseを返すのではなく例外を発生させます。既存error handlingを確認します。
出典:[4]
参考にした公式資料
- [1]AASM README(2026-10-03)
- [2]AASM version source(2026-10-03)
- [3]AASM gemspec(2026-10-03)
- [4]AASM v5 to v6 migration guide(2026-10-03)
- [5]AASM MIT license(2026-10-03)
編集部からの補足
注文・申請・ジョブなど、状態と許可された遷移をコード上で明示したいRubyアプリで使いやすいライブラリです。6.0ではRuby/Rails要件とnamespaced event、persistence失敗時の挙動が変わるため、5.xからの更新は通常のpatch更新として扱わない方が安全です。
3ステップで試す
- 1
AASMをGemfileへ追加
AASM 6系はRuby 3+、ActiveRecord連携ではRails 7+が前提です。既存applicationのversionを先に確認します。
Add gem 'aasm' to Gemfile, then run bundle install - 2
状態column付きmodelを準備
READMEのgenerator例に沿ってmodelとstate column用migrationを準備します。既存modelへ適用する場合は生成差分を確認してください。
rails generate aasm Order state - 3
stateとeventを定義して遷移を確認
state、event、transitionを定義し、consoleでcurrent stateとevent実行を確認します。
Open app/models/order.rb, define the aasm block, then run rails console
成長
成長の推移 · 直近30日
5,229 Stars
推移データを蓄積中です。
開発アクティビティ
直近90日・週次
- Commit(直近30日)
- 0
- Open PR
- 32
開発アクティビティを蓄積中です。
Built with
カテゴリとタグ
カテゴリ
GitHubデータ
関連情報
関連記事を投稿するこのOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。
あわせて探訪
- CanCanCan5,681 Stars
共通タグ 2件 · 同じ言語
Railsの認可ルールをAbilityへ集約し、コントローラー・ビュー・検索条件で同じ権限制御を再利用する
Ruby - Draper5,277 Stars
共通タグ 2件 · 同じ言語
Rails modelをdecorator/view-modelでwrapし、presentation logicをmodelやglobal helperから分離するRuby library
Ruby - Jekyll51,707 Stars
共通タグ 1件 · 共通カテゴリ 1件 · 同じ言語
MarkdownとLiquidからブログ対応の静的サイトを生成
Ruby - Homebrew49,876 Stars
共通タグ 1件 · 共通カテゴリ 1件 · 同じ言語
macOS/Linuxのソフトウェア導入を
Rubybrewコマンドへまとめるパッケージ管理ツール - Vagrant27,211 Stars
共通タグ 1件 · 共通カテゴリ 1件 · 同じ言語
Vagrantfileでprovider差を隠し、portableな開発環境を配布するsource-available tool
Ruby - Kamal14,627 Stars
共通タグ 1件 · 共通カテゴリ 1件 · 同じ言語
Docker化したWeb appをSSHでbare metalやcloud VMへ配備し、kamal-proxyでzero-downtime切替を行う
Ruby
情報の誤りを報告
掲載内容に誤りや古い情報があればお知らせください。