はじめに
State Machine Compilerは、複雑なStateMachineを簡単に生成してくれる便利ツールです。
ただし、JavaのInstallが必要だったり、図を出力しようとしたらGraphvizが必要だったり、割と準備が大変です。
そこで、SMCをWebから操作できるUIを付けたサービスを
に公開しているのですが、誰がメンテしているかわからないサービスを業務などで利用するのは気が引けると思います。
そこで、誰でもPrivateに使えるようにDockerに詰めて公開してあるので、その使い方について紹介します。
準備
対象システムにDockerをInstallしておきましょう。
今回試したversionは1.2.0になります。
それ以前のDockerでも多少コマンドは違うかもしれませんが、大抵動くと思います。
サービスの利用方法
起動方法
動作として、過去に変換したデータを保存する仕組みになっています。
その内容はsqliteファイルとして存在します。
その部分のみ dockerコンテナが再起動しても残しておきたいので、dockerのHost側のDirに配置されるようにします。
そのdocker host側のDirを /var/lib/smc
とした場合、
以下のコマンドを実行することで、サービスが起動します。
% docker run -d -p 8000:8000 -p 9000:9000 -p 10022:22 -v /var/lib/smc:/application/GoodParts/mnt mokemokechicken/smc_service
ワンライナー!w Dockerすごい!!
ちなみに初回はネットワークから数GBのImageを取得するので時間がかかりますが、2回目以降は一瞬です。
注意1: 8000,9000番portを開けて下さい
<docker host>
の8000と9000番 portにアクセスできる必要があります。
AWSなど使っている場合はportを開けるようにしてください。
注意2: Macでboot2dockerを使っている時
boot2dockerを使っている場合、 sqliteファイルが置かれる docker host の dir というのは、
Macのファイルシステムではなく、VirtualBox内のVMのファイルシステムになります。
boot2docker ssh
などでVMにログインすると、確かにファイルがあることが確認できます。
アクセス方法
無事起動したら、ブラウザで http://<docker_host>:8000/
にアクセスします。
この <docker host>
は、ブラウザからみたDocker HostのIPかHost名になります。
Macでboot2dockerを使っている場合、 export DOCKER_HOST=tcp://<XX.XX.XX.XX>:4243
などとすると思いますが、その <XX.XX.XX.XX>
が<docker host>
になります。
SSHでログインしたい時
動作中のDockerコンテナにアクセスしたい場合は、SSHが起動しているのでそこから可能です。
% ssh -p 10022 root@<docker_host>
(password is 'rootroot')
良い所・悪い所
良い所
このSMC WebUIの良い所
- ブラウザからアクセスできるので、誰でも(使い方がわかっていれば)使える。
- 生成したStateMachine CodeにURLを埋め込む機能があるので、そのURLをクリックすると、StateMachineの状態図などを見ることができるし、編集もでき、誰とでもStateMachineを共有できる
- swift対応(まだベータ版)の独自拡張がしてあるので、swift用のStateMachineも生成可能!
オススメの使い方
オンプレミスでもクラウドでもどこでも良いので1つ配備しておくと良いです。
すると、「アクセスできる人たち全員で共有」でき、「昔の状態もソースに埋め込まれたURLから復元できるので修正も容易」です。
コンテナの作成方法が公開されている
下記に公開しています。悪い物は入っていないので安心して下さい。
https://github.com/mokemokechicken/smc_service_docker
ちなみにbuildするのに、私のMac Miniで30分くらいかかります。
悪い所
- ソース、汚い。(なんかいつも、そんなこと言っている気がする --)
- もっと拡張する予定の仕組みだったのに、SMCしかないので、そういう意味でUIが全然イケてない
- そもそもUIがいけてない
- Docker内でrootアカウントでサービスが起動している…
つまり、動くから良いよね、というシロモノです。すみません。
さいごに
こういうちょっとしたシステムを配布するのに Docker はかなり便利ですよね。
でも、今後のUpdateをどう配布するのかとかイマイチイメージできていません。
こういうのも徐々に慣れていきたいですね。
もしgeneratorやUIやDockerなどをカスタマイズしたら、pull request頂けると非常にありがたいです!
SMC便利なので是非使ってみてください。