自作コマンド(opy)をbrewとsnapに対応した
Wed Sep 11 22:49:48 JST 2019 (modified: Fri Sep 20 16:57:58 JST 2019)
views: 2803, keywords:opy, Python, ワンライナー, シェル芸 この記事は最終更新日が5年以上前のものです。
要旨
この記事がそこそこ反響を呼んで調子に乗った上田は、opy
(おーぴーわい or おーぱい。促音禁止)の普及を図るためにbrewとsnapに手を出した。
homebrew
ということで、まずはMacで簡単にインストールできるようにbrewに対応しました。こちらを参考にしました。
結果、これでインストールできるようになりました。
$ brew tap ryuichiueda/oneliner-python
$ brew install oneliner-python
書いた設定はこんな感じです。
require "formula"
class OnelinerPython < Formula
homepage "https://github.com/ryuichiueda/opy"
url "https://github.com/ryuichiueda/opy/archive/v1.4.4.tar.gz"
sha256 "f3ab839ff0e919bcf5764fb0a8eb69904d3eba2fa3eb4f19ebf60c464a782a73"
head "https://github.com/ryuichiueda/opy.git"
version "1.4.4"
def install
bin.install "opy"
man1.install "opy.1"
end
end
ついでにchikubeam
(1)させていただきました。
ちょwwwwwwwwwwwwwhttps://t.co/tefTMSxY8U pic.twitter.com/4W6RdonQBm
— 上田 隆一 (@ryuichiueda) September 9, 2019
とてもたのしい(とてもたのしい)。
Snappy (snap)
で、次にsnapに対応しました。deb作るの大変そうだし、こっちの方が新しいし・・・って手を出しましたがかなりつらかったです。
snapのパッケージを作るときは、snapcraftというツールをインストールして、次のようなyamlを書いて、そこでsnapcraft
と打って作ります。snapcraft
のやってることを見ていると、何かVMみたいなものを作ってそのなかに必要なツールをダウンロードしてビルドして、そのあと固めてsnap
という拡張子のファイルにするみたいです。
name: opy
version: 'latest'
summary: Onelinerers' Python, which works like AWK
description: |
This command works like AWK in one liners. It enables you to use Python
modules on CLI.
grade: stable
confinement: strict
apps:
opy:
command: opy
parts:
opy:
source: https://github.com/ryuichiueda/opy.git
plugin: dump
source-tag: master
source-depth: 1
ビルドがうまくいったら、Ubuntu Oneのアカウントで https://snapcraft.io にログインし、https://snapcraft.io/register-snap でパッケージの名前を予約して、
$ snapcraft push --release=stable opy_latest_amd64.snap
とアップロードしました。これで、こんなふうにパッケージがインターネッツ上にさらされました。あとは、任意のsnapが使える環境で、誰でも
$ sudo snap install opy
するとインストールできる状況になりました。
ハマったところ
細かい手順は書く時間がないので、ハマりポイントを書いておきます。最初はopyという図々しい名前でなく、oneliner-pythonという名前でパッケージを作っていました。ただ、これだとどんなに頑張ってもコマンド名がoneliner-python.opy
とかoneliner-python
にしかなりませんでした。
snapのパッケージの作り方、だいたいわかったんだけど、コマンドをインストールしたら「<パッケージ名>.<コマンド名>」みたいになっちゃって、パッケージ名をどう除去するのかわからんという状況。
— 上田 隆一 (@ryuichiueda) September 10, 2019
どうやら名前がバッティングするのを避けるために、パッケージ名をくっつけるしかなさそう。
一応、これはユーザの方で
$ sudo snap alias oneliner-python.opy opy
とすればよいようなのですが、これはこれで面倒なので、結局パッケージ名をopyにしました。
また、オプションがいろいろ煩雑で、手元で試しにsnapファイルをインストールするときは、
$ sudo snap install opy_latest_amd64.snap --dangerous
というふうに--dangerous
とオプションを加えなければいけませんが、よく忘れて時間を食いました。また、pushするときも--release=stable
をつけないと、snap installできない状態になり、また同じsnapファイルをアップロードできなくなるので、これも時間を食いました。
ちなみに、https://snapcraft.io/opy
ではダウンロード数とかも閲覧できるみたいなので楽しみです。これでダウンロードが少ないと、先日のバズりが、「opy
面白い!使ってみたい!」ではなく、「opyがお○ぱいだ!」という点でのものだったことになり、大変悲しいのでぜひsnapでインストールしてみてください。
お、おっぱ……
— うむー (@umux_24) September 10, 2019
Pythonをコマンドラインで使いたいのでopyというコマンドを作った | 上田ブログ https://t.co/eThANDMEV2
違う!寝る。