REPL での編集を motion-live で楽にする

RubyMotion では、rake コマンドでエミュレータを起動するとコンソール側は対話モード(REPL)になり、あるラベルの背景色を黄色から赤色に変えるといったことをシミュレータの再起動なしで可能にする。

どんな風に使うのかというと、例えばシミュレータ上のラベルを command キーを押下しつつクリックすると、REPL での文脈が、クリックして選択したラベルの文脈になるので(self がラベルとして生成されたインスタンスになる)、self.textColor = UIColor.redColor とすれば文字が赤色になる。

これはとても便利だし、RubyMotion の目玉機能だと思うのだけれど、如何せん、コンソールでの編集がめんどくさい。そこで「自分の好きなエディタで編集できたらいいのに」という要望を叶えたのが motion-live になる。

使用方法はリンク先に書いてあるとおり、gem で motion-live をインストールし、プロジェクトの Rakefile で require "motion-live" とする。その後、プロジェクトのルートに LiveScratchpad.rb というものを作成し、rake live でシミュレータを起動すればライブ編集が可能になる。

ラベルの文字色を赤色に変える例では、変更したいラベルを選択して、LiveScratchpad.rb に self.textColor = UIColor.redColor と書いて保存すると REPL に編集した内容が送信・評価される。青色に変えたかったらエディタで red の部分を blue に編集して保存すれば、また送信されて評価される。

LiveScratchpad.rb は diff がとられていて、編集していない部分は送信されないようになっている。編集する毎に LiveScratchpad.rb の内容を全部送信したいのだったら、マジックコメントとして #nodiff をファイルの先頭に書いておけば良い。

これで REPL を使ってボタンの位置調整とかをしやすくなるし、すごく便利だと思う。