Railsアプリケーション中でrakeタスクを実行する方法

プログラミング
2020年11月03日 10:00

概要

Ruby on Rails(以下Rails)のアプリケーション中にrake/railsコマンドを使用したいということがあります。

ここでは、そのようなコマンドをRails中で実行する方法について紹介します。

環境

  • Rails 6.0.3
  • Ruby 2.7

やりたいこと

Railsでは、Rakeタスクと呼ばれるタスクをコマンドとして実行することができます。代表的なものとしては、rails db:migrateなどがあり、これはRailsに最初から組み込まれています。

また、他にもgemを追加したときに追加されるRakeタスクもあり、今回はこのタスクをRailsのアプリケーション中から実行したくなりました。

実行方法

Railsのアプリケーション中で、Rakeタスクを実行する方法はいくつかあります。

最初に、Rubyのコマンドを実行する機能を利用した実行方法を紹介します。

`rake db:migrate`

Rubyでは、`で囲った文字列をコマンドとして実行してくれます。

この方法の欠点としては、実行結果をログとして出力できないということがあります。

実行結果を取得するには、Open3というライブラリを使用します。

require 'open3'
o, e, s = Open3.capture3('rake db:migrate')

それぞれ、oでは標準出力、eでは標準エラー出力、sでは終了ステータスの確認ができます。

ログなどに適切に整形して出力したいという場合は、これらを使うことをおすすめします。

さいごに

Rails中でコマンドを実行する方法について、あまり情報がなかったので、このような記事を書きました。