Ruby
ATOM

Atomのscriptパッケージでbundle exec付きで実行する

More than 3 years have passed since last update.

Atomで現在開いているスクリプトを簡単に実行して結果を見るためのscriptパッケージでbundle exec rubyで実行しようとしたらちょっとハマったのでメモ。


問題

scriptは現在開いているスクリプトのファイルタイプに対応したコマンドでスクリプトを実行してくれます。例えばhoge.rbだったらruby hoge.rbを実行した結果を表示してくれます。

しかしBundlerでGemを管理していたり、libディレクトリにあるクラスをrequireしたい場合などはrubyだけは依存パッケージを読み込めないのでbundle exec ruby -I ./libで実行させたい。

Atomのメニューからscript→Configure Scriptを開くとCommandという項目があるのでここにbundle exec rubyと書けば実行してくれそうなのですが、エラーになってしまいます。


Configure Scriptのそれぞれの項目の意味

scriptパッケージのUsageにEnviroment Variablesについてだけは説明があるのですが、その他は具体例がないのでよく分からない感じです。

さすがにCurrent Working Directoryだけは実行するディレクトリの指定と想像が付くのですが、それ以外のオプションに何を入れるべきか分からなかったので調べてみました。

検索してみたところ、scriptパッケージのrunner.coffeeにあるRunnerクラスのrunメソッドの@bufferedProcessに引数をセットして子プロセスを走らせているっぽいので、このあたりにconsole.logを仕掛けて追っかけてみました。

https://github.com/rgbkrk/atom-script/blob/master/lib/runner.coffee#L23

以下のような使われ方のようです

項目
用途
補足

Command
実行するコマンド。.rbだとデフォルト挙動はrubyが入る
スペース区切りで2つのコマンドを指定しようとしてもエラーになってしまう

Command Arguments
Commandへの引数

Program Arguments
実行するスクリプトに渡す引数

つまり、hoge.rbに対してターミナルでruby -I ./lib hoge.rb hogehogeとして実行したい場合には以下のように指定すると意図通りに動いてくれます。

項目
入力

Command
ruby

Command Arguments
-I ./lib

Program Arguments
hogehoge


結論

ターミナルで実行するときのコマンドとConfigure Scriptの各オプションは以下のように対応しているようです。

${Command} ${Command Arguments} ${実行されるスクリプト} ${Program Arguments}

よって以下の設定をしてSave as profileで保存し、次回からはRun with profileで実行すればbundle exec付きで実行できます。

項目
入力

Command
bundle

Command Arguments
exec ruby -I ./lib


補足

scriptパッケージのREADMEにも書いてありますが、Atom内でパスが通っていないためにコマンドが実行できないというのがありがちな問題としてあるそうです。

その場合はターミナルから

atom .

で起動することでシェルのPATHを引き継げるようです。