きりかノート 3冊め

おあそびプログラミング

pecoのPortfileを書いてみた

さいきんちらほら見かけた、絞り込み選択インターフェイスのコマンドpecoが気になったので試してみた。golangで書かれているので、goでビルドしてやる必要がある。

自分はMacPortsユーザなので、こういう状況になると「とりあえずPortfile書くか」というのがアプローチになるんだけれど、goの作法とかは全然わからない。ありがたいことに本家でhomebrew用のformulaが公開されてるので、それを参考にすればよい。

これでport install pecoで使える(注:本家にはコミットしていません)。標準出力が使えるってのが思ってた以上に強力で、どこでも差し込めるからあれこれ試しててけっこう楽しい。

で、Portfile書きながら、MacPortsgolang製ツールの相性とかをぼんやりと考えていた。

○良いところ

buildbotが各OSバージョン用のバイナリ作ってくれるので、port:go入れなくてもインストールできる。今回なら${prefix}/bin/pecoだけ取ってくることになる。

また、goのことを知らなくてもインストールできる。ただこれは他のパッケージ管理ツールでも同様。

ちなみにpecoのissueながめてたところ、issue83に「drone.io使えばバイナリ自動ビルドできるよ」的なことが書いてあるので、そもそもそれ使えばよい話かも。

×良くなさそうなところ

今回は`go get`で逃げてるけれども、MacPorts的にはバージョンやタグを指定して、ライブラリも特定のリビジョンをdistfileとして取ってくるようにしたいところ。チェックサムの検証もできるし。

MacPorts自体はdistfilesにtagをつけることで、各distnameをそれぞれのmaster_siteから取ってくる機能があるので実現可能だと思う。

ただgithubのdownloadsがくれる.tar.gzなどはディレクトリにコミットidが入ってたりと使いづらい。それをPortGroup githubが解消してくれるんだけど、複数ファイルには対応してないっぽい。けっこう手を入れないと対応は難しそう。

Portfile書くにあたって、port:goが依存関係に入ってる公式portを検索してみたら、今朝時点ではport:codesearchひとつしかなかった。。

とくに結論とかはありません。