Komai: ネイティブでRustを活用したMatrixデスクトップ体験へのアプローチ

約10年にわたり、etke.cc のチームは Matrix エコシステムのインフラ側に注力し、ホスティングサービスや広く利用されている matrix-docker-ansible-deploy プレイブックの開発を行ってきました。しかし、何千ものユーザーのホスティング問題を解決した一方で、利用可能なデスクトップクライアントに満足できずにいました。その結果生まれたのが Komai です。デスクトップ体験に特化したネイティブな Matrix チャットアプリケーションです。

Matrix クライアントの構築は極めて困難です。プロトコルの表面は広大で、ルームやスペースから、マルチデバイスキー、クロスサイン、リカバリを伴う複雑なエンドツーエンド暗号化(E2EE)まで網羅しています。etke.cc のチームにとって、既存のクライアントはしばしば「紙切れ」のような小さな UX 摩擦が積み重なり、苛立たしい体験となっていました。

nheko から独立へ: 「テセウスの船」

ゼロから作り直すのではなく、開発者は nheko というネイティブ Qt/QML クライアントを出発点にしました。当初の目標は控えめで、いくつかの UX パッチを適用し、洗練されたビルドを出荷することでした。しかし、約100件のパッチを重ねた後、プロジェクトは「テセウスの船」的な分岐点に達しました。自分たちのビジョンと上流プロジェクトとの乖離が大きくなり、維持が困難になったのです。

完全な独立を実現するため、チームは大規模なアーキテクチャ変更に踏み切りました。暗号化コアを入れ替えるのです。mtxclient と(廃止予定の)libolm を取り除き、代わりに matrix-rust-sdk を採用しました。この変更により、Komai は Matrix エコシステム全体の最新の方向性と合致し、スライディングシンクや vodozemac 暗号実装のサポートが可能になります。

Rust 中心のアーキテクチャ

Rust SDK への移行は、Rust への更なるシフトの触媒となりました。C++ の表面積を削減し安定性を向上させるため、チームは特定の機能に対していくつかの Rust クレートを統合しました:

  • Linkify: メッセージ中の URL 検出。
  • BlurHash: 画像プレースホルダーのエンコード/デコード。
  • Syntect: コードブロックの構文ハイライト。
  • Resolvematrix: Continuwuity を介した Matrix サーバー探索。

プロトコルやテキスト中心のロジックを Rust に移すことで、Komai はよりテスト済みで高性能な基盤を得つつ、速度重視のネイティブ C++/QML フロントエンドを維持しています。

デザイン哲学と主な機能

Komai は「デスクトップファースト」の考え方で構築されており、モバイル UI を単に拡大してモニタに合わせるという落とし穴を回避しています。そのデザイン哲学は可読性、ネイティブなパフォーマンス、そして Matrix の概念に対する透明性を重視しています。

パワーユーザ向け機能

  • ブラウザ風ルームタブ: 複数の会話を横並びで開き、頻繁に使用するルームをピン留めできる機能は、他の Matrix クライアントではほとんど見られません。
  • 自動化フック: CLI、D-Bus、あるいは Model Context Protocol (MCP) を利用した AI エージェントからアプリを操作できます。
  • マルチアカウントプロファイル: 専用のアプリケーションプロファイルにより、完全に分離された ID と状態を持つウィンドウをそれぞれ起動できます。

アクセシビリティとオンボーディング

  • 分散型登録: デフォルトで matrix.org に誘導するのではなく、登録ページで公開サーバーのキュレーションリストを提示し、最初から分散化を促します。
  • インクルーシブテーマ: Catppuccin、Dracula、Tokyo Night など、10 以上の組み込みテーマを提供し、WCAG AA のコントラスト基準を満たしています。
  • 音声文字起こし: Claude に触発され、Space キーを長押しすると音声入力が開始され、OpenAI またはローカル互換サーバーで文字起こしされます。これにより音声コミュニケーションも検索・スキミング可能になります。

開発における AI の役割

Komai で最も議論を呼んだ点の一つは開発プロセスです。チームは正直に、C++、QML、Rust が得意分野ではなく、matrix-rust-sdk の移植やその他機能実装に Claude CodeCodex といった AI コーディングエージェントに大きく依存したと認めています。

このアプローチはコミュニティ内で賛否両論を巻き起こしました。批判者は「AI スロップ」と呼び、開発者が熟知していない言語でコアロジックを AI に委ねるのはリスクが高いと指摘。一方で擁護派は、結果として高速でオープンソース、かつ Electron を使わない本物の価値あるアプリが生まれたと評価しています。

"AI を有能な手に委ねれば、平均以上の成果を出せる" と開発者は主張し、AI をエンジニアの力を増幅させるツールとして位置付けています。たとえすべての言語に精通していなくても、何を作りたいかが明確であれば実現できるというメッセージです。

現在の状況と入手方法

Komai は現在 Linux (x86_64) 向けに AppImage、Flatpak、Snap、そして Arch Linux AUR で提供されています。まだ完璧ではなく、当面は Linux のみですが、開発者にとってのデイリードライバーであり、GPL-3.0-or-later ライセンスの下で完全にフリーソフトウェアとして公開されています。

Sources