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-run と next: で先に見せる |
入口は 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 にまとめてあります。