これなに
RailsとDigdagを繋ぐライブラリ、「mogura」を公開しました。
モチベーション
Railsでバッチを管理する手段としてRakeタスクがあります。
しかしバッチ処理というのは泥臭い要件が発生することが多く、コードベースが肥大化し運用コストがかさみがちです。
バッチの運用コスト肥大化に伴いワークフローエンジンの導入を検討するかとおもいますが、Airflowを筆頭にしたPython製のプロフェッショナルなETLツールを導入するのは、学習/構築/運用/費用あるいは人材採用といったハードルが存在する局面があるかと思います。
またRakeタスクに内包された、Railsに紐づいた業務ロジックをマイクロサービスとして切り出しPythonで書き直すのは、工数を鑑みると現実的な選択肢にならないことが往々にしてあるかと思います。
Railsアプリケーションの中にワークフローエンジンを内包したい、という需要もあるのではないでしょうか?
そこでRailsアプリケーションの業務ロジックを流用しつつ、ワークフローエンジンとしての要件をしっかり満たす構成を模索したところ、Rails向けのDigdagブリッジライブラリを作るという選択肢を取りました。
使い方
お手元のRailsプロジェクトのGemfileに下記を追加し、 bundle install
してください
gem 'mogura'
ライブラリのインストールが完了したら、Railsプロジェクトのrootディレクトリで下記コマンドを実行してみてください
$ bundle exec mogura help
Commands:
mogura help [COMMAND] # Describe available commands or one specific command
mogura init # Initialize Digdag files
mogura push # Push Digdag workflows
mogura version # Prints version
bundle exec mogura init
でRailsプロジェクトに下記ファイルが生成されます
RAILS_ROOT/config/digdag/sample.dig
RAILS_ROOT/app/dags/sample_dag.rb
_export:
rb:
require: {{ RAILS_ROOT }}/config/environment
+run:
rb>: SampleDag.run
class SampleDag
def run
puts "Hello Rails #{Rails.env}"
end
end
bundle exec mogura push
を実行することで sample.dig
がDigdagに登録されます。
sample.dig
内部でDigdagからRailsの環境を読み込むことで、ワークフローからRailsの業務ロジックを呼び出すことができます。
今後の開発
現状は単一のDigdagプロジェクトしかワークフローを登録することができませんが、複数のDigdagプロジェクトを登録できるようにするとより良いかと思っております。
また現状本ライブラリではcliからのみDigdagの操作が可能となっていますが、Railsアプリケーションの業務ロジックからワークフローの登録や編集などの操作が出来ればと思っております。
また本ライブラリの改善や新しい機能の追加要望などありましたら、是非GitHubにフィードバックやコントリビューションなどをいただけますと幸いです。