これは、さくらインターネット Advent Calendar 2024の23日目の記事です。昨日は@yamamasa23さんの GitHub ActionsでFreeBSDを使う でした。QEMUで実現しているCross-Platform GitHub Action はとても便利そうなので、機会があれば使ってみようと思います。
研究所合宿
先日、私の所属するさくらインターネット研究所の合宿が松江市で行われました。合宿は、メンバーが何かについて発表し、その内容についてみんなで議論をするという研究会スタイルのイベントです。研究所では、純粋に研究をしている人と、社会実装としてプロダクトを開発している人がいます。合宿ではその双方が一堂に介して普段やっている仕事について発表を行うため、多種多様な発表があり、議論もさまざまな専門分野からのフィードバックとなるため、非常におもしろい会になります。今回、私が幹事だったので、個人的に行ったことがない松江を開催地として選んだのでした(出雲そばやしじみなど、食べ物がおいしかった!)。
わたしの発表
合宿での私の発表は「研究を支える拡張性の高いワークフローツールの提案」です。この発表をご紹介します。
再現性のある実験
研究ではさまざまな実験を行います。実験の再現性は重要ですが、みなさんは再現性のある実験ができているでしょうか?自分ならできる!という人が多いのではないでしょうか。私はソフトウェアにおける研究をやっているので、自分ならできるでなく、誰でもできるという状態にしたいと考えています。

ソフトウェア(電子工学)における実験は、化学やバイオ、電気工学に比べて物理的な制約が少ないので実験の再現が容易にできます。当然ながら、環境はクラウドやPCでそろえることができます。そして、その環境の設定はIaCで定義することができます。また、ワークフローツールを使うことで再現性のある実験を実現できるでしょう。

ワークフローツールのサーベイ
ということで、既存のワークフローツールを、調査し分類し特徴を確認しました。純粋なワークフローツールは少ないものの、いろんなツールがあります。一方で、私が「これだ!」というものはありませんでした。


また、ワークフローを定義する標準仕様(Common Workflow Language)があることを同僚の小西さんから教えていただきました。標準仕様があるということは、実装が複数あるということで、期待はしましたが、環境構築と実験処理が結合しており、実験処理は愚直にコードを書くような形式となります。おそらく、適応分野が違っている気はしました。

ここで、私の考えるワークフローツールの要件を整理してみました。

各ワークフローツールをこの要件で表にすると、唯一N8nが該当します。しかし、jsonで定義するのはあまり気が進みません。

既存のワークフローツールが、メールの送受信に関するワークフローを定義しずらいことからこれを課題として、この課題を解決するようなツールを作ります。

拡張性の高いワークフローツールの提案
ワークフローのランタイムを全部モジュール化し、本体はyamlの読み込みやワークフローの条件やコントロール、表示に関することだけを行うといった、モジュラーワークフローツールを提案します。

このワークフローツールの全体像を図示したものが以下です。ワークフローのランタイムを実行は、Actionsがコントロールします。Actionsの結果をDisplayがユーザが識別しやすい形で表示させます。基本的なランタイムは、ビルトインのプラグインとして本体に内包されていますが、満たせないものはユーザープラグインとしてもりもり拡張することができます。とてもシンプルな設計です。

現在、これらは簡単に実装していて、githubに公開しています。名前は Probeとつけました。

ワークフローの定義は、Github Actionsを参考にしており、JobsとStepsによる構成です。次のyamlはHTTP Actionを使った例です。ActionはStepで呼び出すことができ、その共通処理を defaultとして書くことができます。

Stepsは上から順番に実行され、処理が完了することで次のStepが実行されます。Stepは、 withで定義された値をActionsに渡します。そして、Actionsの結果を testで検証することができます。

次のyamlは、SMTP Actionを使った例です。定義したJobsは、並行実行されるため、Job1, Job2, Job3はほぼ同時に実行されます。しかし、Job3は needsによってJob1とJob2が完了していることを条件とし、さらに waitif で特定のコマンド結果が成功するまで待つようになっています。

今後の予定
現状は簡易実装で実用的ではありませんが、今後多くの機能追加を考えています。Probeのyamlをリポジトリで公開していたら誰しもが実験結果を確認できるようになればなと考えています。

明日はクリスマスイブ、 @shibe23 さん担当の記事「さくらのクラウド超入門チュートリアル」でつまづいたポイントを解説」です。お楽しみに!
さくらインターネットでは、エンジニア採用を強化しています。少しでも気になっているという方は、気軽にカジュアル面談を申し込みましょう!

