3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsでコマンドラインを書く時の決定版

Last updated at Posted at 2019-07-31

概要

railsでコマンドラインスクリプトを各方法はtaskとrunnerと2種類あります。

taskは引数の扱いが微妙で、オプションも扱えません。書き方も独特なためイマイチ好きになれません。またspringも効かないので読み込みも遅いです。

runnerはspringが効くので起動は早めですが引数を自分で解析しないといけません。

Thorというrubyのコマンドライン用のツールがあって引数やオプションを柔軟に扱えて便利です。以前「Thorのコマンドの中でrailsのActiveRecordを使う」という記事を書きましたが、spring経由で起動できないので起動が遅くイマイチでした。

実はその記事を書いた時点でrunnerの存在をすっかり忘れてました。runner経由で起動し、Thorで引数の解析を出来ないか試したらあっさり動きました。

コード

スクリプトを置く場所はどこでもOKですが、thor/testにスクリプトをおいた前提で書きます。

# thor/test
class Main < Thor
  desc "exec", "foobar"
  def exec(foobar)
    # ここで何かする
  end
end

Main.start(ARGV)

まあ、普通のThorのスクリプトですね。これをrunner経由で呼び出します。

$ bin/rails runner thor/test exec foobar
Running via Spring preloader in process 66365

こんな感じで実行します。ちなみにthor/test内のARGVには[exec foobar]が来ます。なのでThorがうまく引数やオプションを解析できるんですね。

既存のツール、機能の組み合わせですが、すっかり見落としてました。Railsのコマンドライン関係がイマイチだと思ってたのですが、私の中ではこれで決まりといった感じです。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?