エンジニア必見!分散システムを楽にする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の密室ってどういうこと?」と、あなたは首を傾げていますね。ご説明しましょう。


Web技術とネイティブアプリの融合:WebKit入門

WebKitは、Appleが開発したWebブラウザのレンダリングエンジンです。簡単に言うと、Webページを画面に表示するための、ブラウザの心臓部にあたるソフトウェアですね。みなさんが普段使っているSafariや、iPhone/iPadのアプリ内でWebページを表示する機能は、すべてこのWebKitが動かしています。


開発効率を劇的に上げる!iluwatarのデザインパターンで保守性の高いJavaコードを書く

これは、GitHubで公開されているJavaのデザインパターン集で、「iluwatar/java-design-patterns」 という名前で知られています。「iluwatar/java-design-patterns」は、単なるコードのコレクションではなく、「設計の知恵」 が詰まったレシピ集です。ソフトウェアエンジニアの視点から、これがどのように役立つかを見ていきましょう。


彼女のランジェリー選びとESLintのコント

彼女のランジェリー選び、さながら複雑なJavaScriptのコードですね! どれも魅力的に見えるけど、サイズが合わなかったり、着心地が悪かったり、合わせる服が難しかったり…。ESLintは、そんな彼女の悩みを解決するあなたの最高のパートナーです。 彼女が素敵なランジェリーを選べるよう、あなたはESLintを使って、プロの視点からアドバイスをしてあげられます。


Motiaの魔法の杖で開発の悩みを解決!API、ワークフロー、AIを統合する現代のバックエンドフレームワーク

今回は、すごい魔法アイテムを紹介するよ!その名も「MotiaDev/motia」!まるで、魔法少女の変身アイテムみたいに、あなたの開発を華やかに彩ってくれる、素敵な魔法の杖なんだ。昔々、あるところに、たくさんの魔法使いが住んでいました。彼らは、それぞれ得意な魔法を持っていました。


JavaScriptエンジニア必見!Reactの核心:Hooksとコンポーネント指向による状態管理の最適解

Reactは、Facebook(現Meta)によって開発された、Webおよびネイティブのユーザーインターフェース(UI)を構築するためのJavaScriptライブラリです。Reactが現代のウェブ開発で非常に人気があるのには、いくつかの大きな理由があります。


twentyhq/twentyって何?コスプレイヤーあるあるで学ぶ新CRMツール!

コスプレイヤーさんにとって、イベントでの交流、衣装の管理、撮影の計画って、めちゃくちゃ大事だよね?それを「ソフトウェアエンジニアのあるある」に置き換えると、twentyhq/twentyはまさにそんな感じ!「イベントでの交流」= 顧客との関係構築 (CRM)


[React/TS対応] 視覚的構築から即時API化へ:FlowiseAI導入ガイドとサンプルコード

今日は、あなたのAIエージェント開発を劇的に変える「FlowiseAI」について、ソフトウェアエンジニアであるあなたが、どう活用し、どう世界を変えるのかを熱く語りましょう!「FlowiseAI」は、AIエージェントやカスタムLLM(大規模言語モデル)アプリケーションを視覚的に構築できるオープンソースのツールです。これは、開発のパラダイムシフトですよ!


UIのエッジケースを見逃すな!Storybookで実現するコンポーネントの状態管理と網羅的検証

Storybookは、一言で言えば「UIコンポーネントを隔離して構築・文書化・テストするための業界標準の作業場(ワークショップ)」です。アプリケーション全体を動かすことなく、個々のボタン、ヘッダー、フォームなどのコンポーネントを独立した環境で開発・確認できます。これは、まるで小さな探偵事務所のように、一つ一つの手がかり(コンポーネントの状態)をじっくり検証できる環境を提供してくれます。