Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】C# (Maybe) Joins the Motia Family: Building Multi-Language Workflows with .NET 9

2025年10月04日に「Dev.to」が公開したITニュース「C# (Maybe) Joins the Motia Family: Building Multi-Language Workflows with .NET 9」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Motiaは、APIやバックエンド処理などを多言語で統合できるフレームワークだ。今回、C# (.NET 9) のサポートが加わり、TypeScriptやPythonなどと共にC#でサービス開発が可能になる見込みだ。これにより、言語間の連携が容易になり、開発の柔軟性が向上する。

ITニュース解説

このニュース記事は、Motiaという新しいタイプのバックエンドフレームワークと、そこにC#言語が加わることの重要性について解説している。Motiaは、さまざまなプログラミング言語を使ってバックエンドのシステムを構築するための画期的な仕組みを提供する。通常、API(Webサービスとのやり取り)、バックグラウンドで動く処理、決まった時間に実行されるタスク、そして最近注目されているAIエージェントなどを開発する際には、それぞれ異なるフレームワークやツールを組み合わせて使うことが多い。例えば、Web APIにはExpress、データ処理にはBull、定期実行にはnode-cronといった具合だ。しかし、これらを連携させるには、それぞれが異なる言語や技術で書かれているため、複雑な設定やコードの記述が必要になる。

Motiaは、このような手間を解消し、これらの機能をすべて「ステップ」というシンプルな単位で統一的に扱えるように設計されている。ステップには、「トリガー(いつ動くか)」、「ハンドラー(何をするか)」、「エミット(結果を出すか)」、「サブスクライブ(何を受け取るか)」という4つの基本概念がある。このステップの最大の特長は、同じプロジェクト内で異なる言語を使ってステップを記述できる点だ。例えば、ユーザーからのリクエストを受け付けるAPIエンドポイントをTypeScriptで作り、そのAPIから発行されたイベントを受けて、機械学習(AI)の処理を行うステップをPythonで書く、といったことが可能になる。さらにその結果を、別のRubyのステップが受け取って処理することもできる。これらすべてのステップ間の連携はMotiaが自動的に行ってくれるため、マイクロサービスのように個別のサービスを複雑に連携させたり、メッセージのやり取りを仲介するシステム(メッセージブローカー)を自分で構築したり、分散したシステムの動きを追跡する設定をしたりする手間が一切不要になる。まるでWebサイトの部品(コンポーネント)を組み合わせて作るように、バックエンドの処理を部品として組み合わせて構築できる、というのがMotiaの目指す世界観だ。

今回発表されたのは、このMotiaにC#(.NET 9)がまもなく正式にサポートされるかもしれない、という非常に喜ばしいニュースだ。すでに開発者がプルリクエストとして提案し、Motiaの既存の仕組みにC#を統合する作業が完了している。これにより、C#開発者はこれまで培ってきたスキルやライブラリを活かして、TypeScript、Python、JavaScript、Rubyといった他の言語で書かれたサービスとシームレスに連携するバックエンドサービスをMotia上で構築できるようになる。

このC#サポートの特長はいくつかある。まず、従来の多言語システムのように、異なる言語間でデータをやり取りするための「つなぎのコード」(グルーコード)をほとんど書く必要がない。完全に自動で、C#と他の言語の間で双方向の通信(RPC: リモートプロシージャコール)ができる。つまり、C#のコードからPythonの関数を呼び出したり、PythonのコードからC#のデータを取得したりできる。設定も非常に簡単で、C#のステップファイル(拡張子が.step.csのファイル)を作成するだけで、Motiaが自動で認識して実行してくれる。ステート管理(データの状態を保持すること)、ログ記録、システムの追跡といったMotiaの主要な機能もC#で完全に利用でき、C#の持つ強力な「型安全性」を活かして、コードの品質を高められる。さらに、このC#サポートはmacOS、Linux、Windowsといった様々なOSで動作することも確認されている。

具体的な例を挙げると、C#で書かれたAPIエンドポイントが、新しい注文が作成されたことを示すイベントを発行する。このイベントはMotiaのシステムを通じて、Pythonで書かれた別のステップに届けられる。Pythonのステップでは、その注文データを使って機械学習によるリスク分析を行い、その結果をまたイベントとして発行する。さらに、そのイベントはTypeScriptで書かれた決済処理のステップに引き渡され、最終的なビジネスロジックが実行される、といった一連の処理が、異なる言語の最適な部分を使いながら、自動的かつスムーズに連携して動作する。

このC#サポートを実現するためには、いくつかの技術的な課題があった。一つは、C#のコードをMotiaが実行する際に、事前にコンパイルされたファイルを使うのではなく、実行時にC#のコードを動的にコンパイルして実行する「Roslyn Scripting」を統合することだった。これにより開発者はコードを修正してすぐに結果を確認できるが、動的なコンパイル速度と実行速度のバランスを取るのが難しかった。また、C#とMotiaの本体(Node.jsで書かれている)との間で双方向の通信を行う「RPCプロトコル」の設計も大きな課題だった。当初はC#からMotiaへ一方的に情報を送ることはできたが、MotiaからC#へ情報を返す、例えば共有されたデータをC#側から取得するといった双方向のやり取りを実現するために、通信の識別子を管理したり、バックグラウンドで常に応答を監視したりする仕組みを工夫する必要があった。さらに、異なる言語間でデータを共有する際には、JSON形式でデータをやり取りするため、C#とNode.jsの間でデータ型が正しく変換されるように「JSONシリアライゼーション」を調整する必要もあった。各C#のステップが独立した.NETプロセスとして起動するため、それらのプロセスの起動、終了、クラッシュ時の対応といった「プロセス管理」も重要な要素だった。

Motiaのアーキテクチャは、Roslyn ScriptingによるC#コードの動的コンパイル、標準入出力(stdin/stdout)を通じた効率的な双方向RPC通信、各ステップを個別のプロセスで実行することによる分離、そしてファイル名に基づいてステップを自動的に見つけ出す仕組みが特徴だ。これにより、初めてC#ステップが起動する際のプロセス生成に200〜300ミリ秒、動的コンパイルに500〜1000ミリ秒かかるものの、RPC通信自体は1回の操作あたり1〜5ミリ秒と高速で、各プロセスは40〜60MB程度のメモリを使用する。

今後の展望としては、C#プロセスの再利用による起動時間の短縮、コンパイル時間の削減、公式NuGetパッケージの提供、コード自動生成による定型コードの削減、C#のミドルウェアサポート、そしてF#言語のサポートなどが挙げられている。このC#サポートは、ユニットテスト、統合テスト、エンドツーエンドテスト、プラットフォームテストといった多岐にわたるテストが実施されており、品質は高く保たれている。

このC#サポートが実現すれば、C#開発者は既存のスキルセットを最大限に活かしつつ、最新の多言語バックエンドシステムを構築できるようになる。Motiaのユーザーにとっても、特定の処理に最も適した言語を選んで利用できるため、より柔軟で効率的な開発が可能になる。そして、多言語フレームワークにおける双方向RPCパターンの実装例として、コミュニティ全体に技術的な貢献をもたらすだろう。

関連コンテンツ

関連IT用語

関連ITニュース