Grailsインタラクティブモードのstop-appとexitコマンドの違い

〜2.1.2まで

Grails開発者はみんな大好きなインタラクティブモードですが、開発中のWebアプリケーションの起動/停止もインタラクティブモードでやると、2回目以降が早くなって良い感じです。ときどきハマっておかしくなったら、さっくり再起動し直せばOK。Ctrl+Cして"grails"+ ENTERキー(ターンッ が一番早い。

grails> run-app

でWebアプリ起動、

grails> exit

で停止。

実はこのexitコマンド、run-app中かどうかで挙動が変わります。

  • run-appしてる -> Webアプリが停止、インタラクティブモードは継続
  • run-appしてない -> インタラクティブモードを抜ける

慣れれば別に大丈夫なんですけど、まあ勢いつきすぎて、exit打ち過ぎてWebアプリを停止するだけのつもりがインタラクティブモードを抜けてしまうこともままありました。

で、Grails2.2.0で地味ながらこれが改善されてました。

2.2.0

Webアプリ停止専用のstop-appコマンドが追加されました。
代わりにexitはWebアプリが起動してたら停止しつつインタラクティブモードを抜ける専用コマンドになりました。

クセでうっかりexitコマンドを打つとインタラクティブモードまで抜けるから、慣れるまでしばらくめんどくさい...*1

2.1.3系

ちなみに2.1.3では単純にexitの別名でしかない模様。

--- a/grails-bootstrap/src/main/groovy/org/codehaus/groovy/grails/cli/interactive/InteractiveMode.groovy                                                                                                                           
+++ b/grails-bootstrap/src/main/groovy/org/codehaus/groovy/grails/cli/interactive/InteractiveMode.groovy                                                                                                                           
@@ -118,7 +118,7 @@ class InteractiveMode {                                                                                                                                                                                        
                     else if ("quit".equals(trimmed)) {
                         goodbye()
                     }
-                    else if ("exit".equals(trimmed)) {                                                                                                                                                                            
+                    else if (("exit".equals(trimmed)) || ("stop-app".equals(trimmed))) {                                                                                                                                          
                         exit()
                     }
                     else if (scriptName.startsWith("open ")) {

Wow! コマンドの頭数だけ揃えましたという感じですね。

おまけ

InteractiveModeのログみてたら、@kiy0takaのコミットを見つけた。

2012-07-07 00:53 kiy0taka           o GRAILS-9250 - fixed open command error.

kiy0takaカコイイ

*1:コマンド打っててなんか違和感を感じて調べたらこうなってたという