エンジニア必見!分散システムを楽にするConductor入門:居酒屋から始めるオーケストレーション


エンジニア必見!分散システムを楽にするConductor入門:居酒屋から始めるオーケストレーション

conductor-oss/conductor

2025-08-13

大将、ちょっと聞いてくれよ!このConductorってやつが、俺たちの仕事にめっちゃ役立ちそうなんだ。

Conductorは、複雑なワークフローを管理するための強力なオーケストレーションプラットフォームだ。マイクロサービスを組み合わせて一つの大きな処理を実行するとき、サービスの呼び出し順序や、途中でエラーが起きたときのリカバリ処理を自動でやってくれるんだ。例えるなら、居酒屋の大将が、お客さんの注文(ワークフロー)を受けて、焼き鳥担当、刺身担当、ドリンク担当(マイクロサービス)に的確に指示を出し、どのタイミングで何を作るか、もし材料が切れたらどうするか、といった全体を仕切る役目を自動でやってくれるようなもんだ。

新米
先輩、それって具体的にどう便利なんすか?全部自分でコード書けばいいんじゃないっすか?

先輩
お、いい質問だ。自分で書くこともできるが、それだとめちゃくちゃ大変になるんだ。Conductorを使うと、こんなメリットがある。

分散システムの管理が簡単になる
マイクロサービスが増えると、それぞれのサービス間の通信や状態管理が複雑になる。Conductorは、この「誰が、何を、いつ、どうやって」というのをブループリント(設計図)として定義できる。これによって、コードの可読性が上がり、管理が楽になるんだ。

障害に強いシステムが作れる
ワークフローの途中でサービスがダウンしたり、タイムアウトしたりすることがあるだろ?Conductorは、そういう場合に自動でリトライしたり、失敗した処理をやり直したりする機能を持っている。これのおかげで、エンジニアはエラーハンドリングのロジックをいちいち自分で書かなくて済むようになる。まるで、大将が「あ、あの客の注文、焼き鳥がまだ来てないな!もう一回作り直してくれ!」って自動で指示を出してくれる感じだな。

スケーラブルなシステムになる
Conductorは分散型アーキテクチャで動くから、ワークロードに応じて柔軟にスケールできる。大量のワークフローを並行して処理できるので、サービスの負荷が増えても安定して動かし続けられるんだ。

先輩
よーし、じゃあ実際にどうやって使うか見ていこうか。

Conductorの導入は、主にDockerを使って手軽に始めることができる。

Dockerコンテナを起動する

まず、docker-composeファイルを用意して、Conductorのサーバーとデータベース(Redis、Elasticsearchなど)を起動する。

version: '3'
services:
  conductor-server:
    image: conductor-oss/conductor-server:latest
    ports:
      - "8080:8080"
    environment:
      - CONDUCTOR_CONFIG_DIR=/app/config
    volumes:
      - ./config:/app/config
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2
    ports:
      - "9200:9200"
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
  redis:
    image: redis:6.2-alpine
    ports:
      - "6379:6379"

このdocker-compose.ymlを使って、コンテナを起動する。

docker-compose up -d

ワークフローを定義する

次に、ワークフローの設計図(ブループリント)をJSON形式で定義する。これは、どのタスク(マイクロサービスが実行する処理)を、どのような順序で実行するかを指定するものだ。

{
  "name": "payment_processing_workflow",
  "version": 1,
  "tasks": [
    {
      "name": "get_user_info",
      "taskReferenceName": "get_user_info_ref",
      "type": "SIMPLE",
      "inputParameters": {
        "userId": "${workflow.input.userId}"
      }
    },
    {
      "name": "process_payment",
      "taskReferenceName": "process_payment_ref",
      "type": "SIMPLE",
      "inputParameters": {
        "amount": "${workflow.input.amount}",
        "userEmail": "${get_user_info_ref.output.email}"
      }
    },
    {
      "name": "send_confirmation_email",
      "taskReferenceName": "send_email_ref",
      "type": "SIMPLE",
      "inputParameters": {
        "email": "${process_payment_ref.output.email}",
        "message": "Payment successful for amount ${process_payment_ref.output.amount}"
      }
    }
  ]
}

この例では、ユーザー情報を取得し、決済を処理し、確認メールを送るという一連の流れを定義している。

タスクを実行するワーカーを実装する

各タスク(get_user_info, process_payment, send_confirmation_email)を実際に実行するワーカー(マイクロサービス)を実装する。ここでは、JavaScript(Node.js)の例を見てみよう。

const { ConductorClient } = require('conductor-client-js');

// Conductorクライアントを初期化
const conductorClient = new ConductorClient({
  serverUrl: 'http://localhost:8080/api'
});

// ワーカーを登録
conductorClient.registerWorkers([
  {
    taskDefName: 'get_user_info',
    execute: async ({ inputData }) => {
      // ユーザーIDから情報を取得する処理
      console.log(`Getting user info for userId: ${inputData.userId}`);
      return {
        status: 'COMPLETED',
        outputData: {
          email: '[email protected]',
          name: 'Test User'
        }
      };
    }
  },
  {
    taskDefName: 'process_payment',
    execute: async ({ inputData }) => {
      // 決済処理
      console.log(`Processing payment for amount: ${inputData.amount} from user: ${inputData.userEmail}`);
      return {
        status: 'COMPLETED',
        outputData: {
          transactionId: '12345',
          amount: inputData.amount,
          email: inputData.userEmail
        }
      };
    }
  },
  {
    taskDefName: 'send_confirmation_email',
    execute: async ({ inputData }) => {
      // メール送信処理
      console.log(`Sending confirmation email to: ${inputData.email} with message: ${inputData.message}`);
      return {
        status: 'COMPLETED',
        outputData: {
          messageStatus: 'SENT'
        }
      };
    }
  }
]);

// ワーカーを開始
conductorClient.start();
console.log('Workers started!');

このコードでは、Conductorサーバーと通信して、特定のタスクを待ち受けるワーカーを実装している。

ワークフローを開始する

最後に、定義したワークフローをAPI経由で開始する。

curl -X POST 'http://localhost:8080/api/workflow' \
-H 'Content-Type: application/json' \
-d '{
  "name": "payment_processing_workflow",
  "version": 1,
  "input": {
    "userId": "123",
    "amount": 1000
  }
}'

このcurlコマンドを実行すると、Conductorがブループリントに従って、一連の処理を順番に実行してくれるんだ。

大将
へぇ、すげぇな!つまり、俺が新しいメニュー(ワークフロー)を考えたら、あとは自動で各担当が動いてくれるってことか!

先輩
そういうこと!このConductorを使えば、俺たちはもっと本質的な部分、つまり「どんなサービスを作るか」に集中できるってわけさ。


conductor-oss/conductor




ソフトウェアエンジニア必見! MCPでAI開発の密室を突破する

おいおい、一体どういうことだ!? この部屋は完全に密室じゃないか!…おっと、すみません。ついドラマの役に入り込んでしまいました。でも、この密室、実は我々ソフトウェアエンジニアの目の前にある「AI開発の密室」かもしれません。「ん? AIの密室ってどういうこと?」と、あなたは首を傾げていますね。ご説明しましょう。


名探偵の技術解析:巨大リポジトリ「mdn/content」を解析してWeb標準のプロになる

おっと、失礼。名探偵の助手くん、君もこの『mdn/content』という謎に包まれたリポジトリの正体が気になりますか?世界中のエンジニアが毎日お世話になっている「MDN Web Docs」の心臓部。これをエンジニアが「読み物」としてではなく「ツール」として使いこなすとどうなるか……。私の推理を聞いていただけますか?


開発効率を劇的に向上!エンジニア必携のユーティリティツール集「it-tools」徹底活用ガイド

CorentinTh/it-toolsは、名前の通り、IT(情報技術)に携わる人々、特に開発者のために作られた、便利なオンラインツールをまとめたコレクションです。これはWebベースで動作するオープンソースプロジェクトで、以下のような特徴があります。


「DBの構造、見つけたり!」drawdbで実現する設計の見える化とコミュニケーション革命

あなたのおっしゃる drawdb-io/drawdb というツールは、データベース設計を行うソフトウェアエンジニアにとって、すごく便利で強力な味方になってくれます。この記事では、それを 「DB図作成のスペシャリスト」 と呼んで解説していきますね!


Webエンジニア必見!「florinpop17/app-ideas」で基礎力とアウトプットを両立させる導入ガイドとサンプルコード

キリン(真面目で探求心旺盛な雰囲気) 「うむ。キリンとしては、その体系的なプロジェクトのアイデアが、スキルアップという名の『麦芽』をいかに効率良く育ててくれるか、技術的な視点から掘り下げてみたい。」アサヒ(勢いとキレのある雰囲気) 「おっしゃる通り!アサヒは、このアイデア集を『最速でアウトプットを出すための燃料』と捉えています!実践的な導入方法と、すぐに使えるキレの良いコードで、皆様をサポートしますよ!」


Kestra: ソフトウェア開発を効率化するワークフロー自動化ツール

ソフトウェアエンジニアの皆さん、こんにちは!Kestra について、まるで酒の飲み比べをするように、その特徴と魅力を分かりやすく解説します。今回は、特に Kestra を「仕事の効率を上げる最高の一杯」と見立てて、その味わいを深く探っていきましょう。


ソフトウェアエンジニアが知っておきたい!OSSの「Immich」で実現するプライベートな写真管理術

Immichっていうのはね、自分で管理できる写真や動画のストレージサービスだよ。簡単に言うと、GoogleフォトとかiCloudみたいなサービスを、自分の家のサーバーで動かせるようにしたものなの。お兄ちゃんはソフトウェアエンジニアだから、このすごさがわかるよね?ただの写真管理アプリじゃないんだよ。


ドラッグ&ドロップで設計!ノードベースUI構築ライブラリ「React Flow / Svelte Flow」入門と活用事例

お悩みはさておき、ご質問のxyflow/xyflowについて、ソフトウェアエンジニアの視点から、分かりやすく丁寧にご説明しますね!これは、「React Flow」や「Svelte Flow」として知られる、ノードベースのUI(ユーザーインターフェース)を構築するための、めちゃくちゃ強力なオープンソースライブラリのことなんです。


ソフトウェアエンジニア必見!Koogで効率的なAI開発

この番組は、クイズに答えながら新しい技術を楽しく学んでいくクイズ番組。 司会の私(AIの知識はちょっとだけ…)と、解説員のKoogさんが、皆さんの疑問をコント形式で解決していきますよ!司会今日のテーマ、Koogさん!いったい何ができる方なんですか?


分散型Webアプリの新境地!HeyPuter/puterで始める次世代開発

「HeyPuter/puter」は、一言で言うと「ブラウザ上で動くオペレーティングシステム(OS)」です。でも、ただのOSじゃありません。これはインターネットを基盤とした、分散型Webアプリケーションを構築するためのオープンソースのフレームワークなんです。JavaScriptを書いて、ブラウザ上で動くOSのような環境を作り、ファイルシステム、ウィンドウ管理、GUIツールキットなどを活用することができます。これは、まるでブラウザの中に、自分だけの「パソコン」を作るようなイメージですね。