wharfy をリリースしました ― 1 つのバイナリを、あらゆるチャネルへ

自作のバイナリを、あらゆるパッケージマネージャから入れられるようにするのは骨が折れます。それを 1 枚の設定で片づける CLI、wharfy(波止場 wharf から)をリリースしました。やることは、1 つのバイナリを、あらゆるチャネルへ配ること。wharfy.yaml 1 枚から、こう流します。

wharfy.yaml ──▶ Homebrew / Scoop / apt / rpm / container(ghcr)
                AUR / winget / go install / curl | sh

何が問題だったのか

チャネルごとに作法が違う

チャネル 置くもの
Homebrew Ruby の formula
Scoop JSON の manifest
winget YAML 3 種(version / installer / locale)
apt / rpm deb・rpm + リポジトリのインデックスメタデータ
AUR PKGBUILD と .SRCINFO

これに署名・git tag・公開先(tap や hosted repo)の用意が乗ります。チャネルが増えるほど別作法が要る。リリースのたびに手で回すのは、個人では続きません。

配布を回すのは、人とは限らなくなった

CLI を操作する相手に AI エージェントが入る時代です。配布も例外ではありません。

ただ既存のツールは「人がドキュメントを読んで YAML を書く」前提。そこにエージェントを向けると、リリースという本題の手前でコストがかさみます。配布が「人が手で覚えてやる」形のままだと、そっくりエージェントには渡せない。これが解きたかった問題です。

どう解決したか

複数のチャネルへまとめてリリースするアプリケーション、それが wharfy です。

作法の違いは wharfy が吸収する

wharfy.yaml に「何を、どこへ配るか」だけ書けば、各チャネルが求める形式 ―― formula・manifest・winget の YAML・deb/rpm ―― は wharfy が生成し、それぞれの公開先へ配ります。

エージェントが回せるようにする

残るは「人が手で回す前提」です。wharfy は、エージェントがリリースという本題の手前で払うコストを、出力で 1 つずつ潰します。

エージェントが手前で払うコスト wharfy の答え
どんなコマンドがあるか探す wharfy agent が能力マップを一枚で返す
構造化されない出力を解釈する 全コマンドが --json を持つ
今どこまで・どこに発行したか追う status が記録と実体を照合し、ズレ(drift)を見せる
壊しかねない操作を見張る 所有物しか書かず、--dry-runnext: で先に見せる

入口は wharfy agent。コマンド・使う順番・チャネルまで一枚で返すので、エージェントはこれを最初に読めば動き出せます。

$ wharfy agent
wharfy — ship one binary to every channel. Read this once, then drive.

COMMANDS (usual order)
  wharfy agent     print this capability map   → next: status
  wharfy build     cross-compile for every os/arch   → next: release
  wharfy release   upload the github release   → next: publish
  wharfy publish   push to owned channels; prepare gated ones   → next: verify
CHANNELS  homebrew scoop apt rpm container aur goinstall script  + winget homebrew-core(gated)

そして、どのコマンドも最後に「次の一手」を出します。next: の各行は、そのまま実行できるコマンドです。

$ wharfy version
✓ 0.2.4
next:
  wharfy agent     # print this capability map (read once, then drive)

ルートも勝手に汚しません。wharfy が書くのは自分が所有する配布物だけで、生成した中間ファイルも .wharfy/ の下に置きます。状態も黙って合わせにいかず、ズレがあれば差分として見せる。何が起きるかが出力に見えるので、エージェントに任せても暴走しにくい、ということでもあります。

さいごに

複数チャネルへの配布を、AI フレンドリーを前提にまとめたのが wharfy です。お使いの環境に合わせた入れ方は、製品サイト wharfy.io にまとめてあります。

☕ チップを送る