Rails向けのDigdagブリッジライブラリを作った

2380 ワード

これなに

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にフィードバックやコントリビューションなどをいただけますと幸いです。