オープンソースのETLツールDigdagを徹底解説

この記事を書いた人
北爪 聖也

株式会社pipon代表取締役。 キャリアはADK(広告代理店)でテレビ広告運用をして残業120時間するが、ネット広告では自分の業務がAIで自動化されていることに驚愕する。そこで、機械学習受託会社に転職し、技術力を身につけた後、piponを創業。現在、製薬業界、大手監査法人、EC業界、様々な業界でAI受託開発事業を運営。

はじめに

今回は、ワークフローエンジンの一つである「Digdag」を見ていきます。ワークフローエンジンとは、依存関係のある複数のタスクを、バッチ処理で実行し、その実行状況や結果を管理してくれるソフトウェアのことです。

例えば、日常の業務で発生するデータを収集し、加工して、格納するようなETLツールに使ったり、日常的に発生する定型的な業務を、ワークフローとして管理したりすることができます。

世の中には、様々なワークフローエンジンがリリースされていますが、その中の一つである「Digdag」を見ていきましょう。詳細なプログラミング方法は、公式サイトなどに掲載されていますので、ここではDigdagの考え方のみの紹介とします。

Digdagとは

1) Digdagの概要

Digdagとは、米国のTreasure Data社が開発したオープンソースのワークフローエンジンです(図1)。

主な特徴は、以下のようなものがあります。

・手動で行っているタスクを、YAML形式というファイルでワークフローに書いて定義することで、タスクのバッチ処理が可能である

・タスクが失敗した場合や、既定の時間内にワークフローが終了しない場合に、通知を行うことができる

・シェルスクリプトでバッチ処理のフロー制御ができるので、メンテナンス性の高いコードを作ることができる

・データサイエンティストがよく使うPythonと、Web開発者がよく使うRubyをサポートしている。

とあるデータソースから定期的にデータを抽出し、加工して意思決定に用いたいといった場合、手動でせっせと作業するのは大変ですが、Digdagを使えば、人の手からそれらの作業を切り離すことができるので、人を付加価値の高い意思決定に集中させる、といったことが可能となります。

2) 基本設計

では、Digdagの基本設計を、公式サイトを基に紐解いていきます。

2-1) ワークフローの自動化

ワークフローとしてタスクの流れを定義すれば、Digdagがそれをを実行してくれるので、どんな種類の手作業も、Digdagのワークフローで自動化することができます。各タスクはオペレータプラグインで定義するので、ワークフローから様々なシステムの制御が可能となります。

Digdagは、スケジュールに基づいて自動的にワークフローを始めてくれます。また、ワークフロー実行時の問題にも対応してくれます。例えば、実行時にタスクが失敗すれば警告を送ってくれますし、ワークフローが規定の時間内に終わらなかければ、その旨の通知を送ってくれます。よって、ユーザーはワークフローの作成に注力することができます。

2-2) タスクの管理

複雑なワークフローを自動化しようとすると、ワークフローの定義はあっという間に複雑になってしまいます。しかし、Digdagではタスクをグループ化して整理することができるので、ワークフローの定義を見直す際、まずグループで全体の流れを俯瞰し、着目するグループを絞り込んでからその中のタスクの修正を行う、といったことが実現できます(図2)。

グループをうまく使うことで、開発時には効率的なデバックが可能となりますし、運用時には管理者が、問題となっている現象やタスクを特定することが容易になります。

タスクをグループ化している場合、グループの親タスクが実行されると、その親タスクがサブタスクを実行します。従って、すべてのサブタスクが正しく終了したときに初めて、親タスクも正しく終了することになります。もし、サブタスクがうまくいかなければ、当然サブタスクだけでなく親タスクも失敗することになります。

2-3) パラメーターの受け渡し

タスクをグループ化することで、タスク間のパラメーターの受け渡しが可能となります。例えば、親タスクからサブタスクに、変数をエクスポートすることができます。この特性を利用すると、親タスクは実行中にサブタスクを作ることができ、前のタスクの結果に従って異なるタスクを実行する、といった複雑なワークフローが可能になります。

2-4) コードによるワークフローの定義

Digdagでは、一連のワークフローはコードで定義していきます。コードで定義することの最大の利点は、効率的な開発が可能になることです。具体的には、バージョン管理、コードレビュー、コードのテスト、レビュワーへのプルリクエストなどが、容易に可能となります。開発者は作成したワークフローをGitのリポジトリにプッシュできますし、誰もがそのワークフローをプルして、開発者と同じ結果を再現することができます。

このメンテナンス性の高さが、Digdagの大きな強みと言えます。

2-5) 作成したワークフローの実行

作成したワークフローは、ローカルマシン上、サーバー上、及び、Dockerのコンテナで実行することができるので、日常の業務で使うには十分と言えます。

おわりに

今回は、ワークフローエンジンの一つである、「Digdag」の特徴を見てきました。ワークフローエンジンをうまく活用することで、人手で行っていた作業の自動化が可能となりますので、業務の効率化やミスの低減につながることが期待できます。

ワークフローエンジンの導入を考えている方は、「Digdag」を候補の一つに検討されたらいかがでしょうか。

参考サイト

ワークフローエンジンDigdagのまとめ

https://qiita.com/hiroysato/items/d0fe5e2d88c267413a82

SIMPLE, OPEN SOURCE, MULTI-CLOUD WORKFLOW ENGINE

Digdag 入門

分散ワークフローエンジン『Digdag』の実装

http://regional.rubykaigi.org/tokyo11/interview/frsyuki/

ETL基盤を構築してみた 〜Digdag編 その1〜

Digdagのアーキテクチャとコンセプトを理解する #digdag

https://dev.classmethod.jp/articles/understanding-digdag-architecture-and-concepts/

piponではエンジニアの皆様に業務委託や副業でAI・データサイエンスの案件をご紹介しています!

piponの案件にご興味がある方は以下のフォームにご登録ください。案件をご案内します。

https://share.hsforms.com/1qk0uPA_lSu-nUFIvih16CQegfgt