LoginSignup
168
170

More than 5 years have passed since last update.

要約:知らないと損するアプリ開発におけるStateMachineの活用法

Last updated at Posted at 2014-10-10

はじめに

知らないと損するアプリ開発におけるStateMachineの活用法(SlideShare full版)」

知らないと損するアプリ開発におけるStateMachineの活用法(full版).png

という内容でクラスメソッド & ゆめみ 合同勉強会 Developers.IO Meetup 09で発表させて頂きました。

これについての要点をまとめます。

内容

StateMachineとは何か?

StateMachineは簡単に言うとUMLの「状態図(ステートチャート)」の実装です。
状態図による分析・設計は、実は色々な分野で活用されていて、iOS/Android/WebApp などのクライアントアプリでは実は非常に有用なものなのです。

ただ、StateMachineの実装は真面目にやると大変です。

例えば、こんな単純な状態図でも

知らないと損するアプリ開発におけるStateMachineの活用法_のコピー_pptx.png

真面目にJavaで実装すると300行以上になります。
https://gist.github.com/mokemokechicken/9eb89e3c69d7e97800ea
まあもちろん、実装方針とか言語的な行数傾向はありますが、意外と大変であると言えると思います。

StateMachine Generator

そこで State Machine Compiler(SMC) というOSSを活用します。
これは、SMC用のDSLから状態図、StateMachineコードを生成してくれます。そして、この状態図とコードは意味的に同じであることが保証されます。従って 状態図を見ればStateMachineの膨大なコードを見る必要が無くなります

StateMachineのメリット

このStateMachine Generatorのおかげで次のようなメリットが生まれます。

  • ModelやViewControllerから複雑な非同期遷移ロジックはStateMachineに移せる。
  • StateMachineは状態図と同じなので状態図を見ればコードを読む必要はない。ModelやViewControllerは単純なアクションのみ実装すればよいので、「状態図+アクションコード」のみ人間は理解すれば良い。これは非常に可読性が高い。
  • 状態遷移の変更にも非常に強く、コードの修正は局所的なもので済む。

この辺の詳細はスライドの方を参照してもらえればと思います。

SMCのWeb実行環境

SMCは便利なのですが、Setupが少し面倒です(要Java, Graphviz)。
また、生成したコードとDSLの結びつきの管理が少し面倒です。

そこで、SMCの実行をWebから行えるようにして、更にソースコードにDSLが再現されたSMCのWebのURLを埋め込んでおくことでこれらの問題を解消できます。

この仕組みをDockerに詰め込んだものを配布しています。詳しくは下記の投稿を参考にしてください。
State Machine CompilerのWebUI付きDockerコンテナの使い方

設計Tips

StateMachineの設計時の注意事項です。

  • 状態名は名詞にする(動詞にしない)
  • 複合状態はなるべく作らない(状態数が爆発するので)
  • 1つのStateMachineは複数スレッドにまたがらない

などがあります。

さいごに

以前作ったスライドとあわせてアプリ設計の3部作みたいになりました。
一つ目で言いたかったことの細かいことを2,3で書いたような感じです。

興味のある方は時間のある時にでも見てみてください!

168
170
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
168
170