複数のLinuxサーバーで動かしている Orca の orca serve を、まとめて同じバージョンに更新する orca-fleet というツールを作りました。今は毎日自動で最新版に揃うようになったので、まとめておきます。

Orcaを使っている理由

Orcaは、Claude CodeなどのAIエージェントを動かすためのアプリです。デスクトップ版に加えてネイティブのモバイルアプリも提供されていて、リモートのサーバーで orca serve を動かしておけば、手元のクライアントからそのサーバーのエージェントに依頼を出せます。

自分は出張が多く、出先から仕事をすることがよくあります。ネイティブのモバイルアプリとTailscale(VPN)を組み合わせると、出先からでも自宅のマシンに気軽に依頼を出せるので、とてもありがたいです。

現在の環境は以下の通りです。

用途 クライアント サーバー
私用 1台 2台
仕事用 1台 3台

困っていたこと

Orcaは開発頻度が高く、毎日のように新しいバージョンがリリースされます。ところが、Linux版の orca serve については、リモートサーバーの更新は手動での運用しかサポートされていませんでした。

そのため、サーバーごとに新しいパッケージを取得して入れ直し、サービスを再起動する、という作業を週1回以上は手でやっていました。サーバーが5台あると、これがなかなか面倒です。

作る前に既存のissueがあるか調べたところ、要望自体は出ているものの、まだ対応の目処は立っていないようでした。それなら自分で作ってしまおうと思い、作ったのがorca-fleetです。

orca-fleetとは

複数のLinuxサーバーで動く orca serve を、クライアントから同じOrcaのバージョンに揃えるための仕組みです。次の3つで構成されています。

構成 役割
orca-fleet(CLI) クライアント側のCLI。状態確認、更新計画の作成、サーバーごとの並列ダウンロード、1台ずつの更新と検証を行う
orca-serve-update 各サーバーに入れるヘルパー。公式リリースの取得と検証、更新、ロールバック、中断からの復旧を担う
orca-fleet(スキル) Orca上のClaudeから自然言語で操作するためのスキル

更新は次のような流れで進みます。

flowchart TD A["全サーバーの状態とバージョンを確認"] --> B["更新計画を作成"] B --> C["各サーバーで新旧の.debを並列ダウンロードして検証"] C --> D["1台ずつ停止・インストール・起動"] D --> E{"検証に通ったか"} E -- "通った" --> F["次のサーバーへ"] E -- "失敗" --> G["旧バージョンに戻す"] G --> H["残りの更新を止めて結果を記録"] F --> D

ダウンロードしたパッケージは、GitHubのReleasesが返すsha256のdigestなどで検証してから使います。更新後は、サービスが起動していること、ポートが開いていること、Orcaから見えるバージョンが目的のものになっていることを確かめ、失敗したら更新前のバージョンを入れ直します。

基本的な使い方は以下の通りです。

orca-fleet status          # 全サーバーの状態とバージョンのずれを確認
orca-fleet plan            # 更新計画を表示(何も変更しない)
orca-fleet update          # 計画を表示し、承認すると更新する

導入手順はリポジトリの README にまとめています。

毎日4時に自動更新している

自分は orca-fleet update --yes をOrcaのAutomation(定期実行の機能)に登録して、毎日4時に自動で更新するようにしています。寝ている間に全サーバーが最新版に揃うので、もう手で更新することはなくなりました。

気になるのは、エージェントが動いている最中に更新して大丈夫なのか、という点かと思います。これについては、Orca自身が、更新した後も古いセッションは古いバージョンのまま動き続けられるようになっているので問題ありません。既存のセッションは旧バージョンで継続し、新しく開いたターミナルから新しいバージョンが使われます。

orca-fleet側でも、更新先のバージョンが既存のセッションを引き継げるかを事前に判定し、引き継げない場合は更新を延期するようにしています。

あわせて作ったorca-account-failover

Orca関連では、fukata/skills に orca-account-failover というスキルも最近追加しました。これも非常に便利です。

自分はClaude Codeのサブスクリプションを3アカウント持っていて、複数のタスクを並行でエージェントに依頼していることもあり、毎週のように全てのアカウントが利用上限に達するような使い方をしています。寝ている間に上限が来てセッションが止まってしまうと悲しいので作りました。

Orcaの端末で動くClaude Codeのセッションが利用上限で止まると、Orcaに登録した別のClaudeアカウントに切り替えて、同じ端末で同じセッションを自動で再開してくれます。一時的なレート制限(429エラー)では動かず、利用上限で止まったときだけ切り替わります。

導入は以下のコマンドです。

npx skills add fukata/skills -g -a claude-code -s orca-account-failover
bash ~/.claude/skills/orca-account-failover/setup.sh

orca-fleetでサーバーを最新に保ちつつ、orca-account-failoverでセッションが止まらないようにしておくことで、人が見ていない時間帯も作業が進み続ける環境になりました。

まとめ

Linux版の orca serve を複数サーバーでまとめて更新するorca-fleetを作りました。

毎日のようにリリースがあるOrcaを、週1回以上手作業で更新していた頃と比べると、Automationで毎日4時に自動更新されるようになって、かなり楽になりました。Orcaは出先から自宅や仕事のマシンに気軽に依頼を出せる便利なツールなので、複数のサーバーで使っている方は試してみてください。