LoginSignup
4
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-13

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を引き継げるようです。

4
3
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
4
3