日々之迷歩

世の中わからんことだらけ

ITが複雑で難しくなっていく様に翻弄される日々です。微力ながら共著させていただいた「シェル・ワンライナー160本ノック」をよろしくお願い申し上げます。

Open usp TukubaiをHomebrewでインストールする

ユニケージ開発手法で使われるTukubaiコマンドのオープンソース版がOpen usp Tukubai。シェル芸勉強会などでも出てくるが、Tukubaiコマンドは使ってみないと良さが分かりにくいシブいやつ。より使ってもらうには簡単にインストールが出来る方がイイよね。先日USP研究所からPersonal Tukubaiも発売され、Tukubaiコマンドが世に広まる気配が感じられる。

MacというかOSXで使うならやっぱりHomebrewでインストールしてみたい。ということでFormula作ってtapで公開した。下記コマンドでOpen usp Tukubaiがインストール出来るようにした。

$ brew tap papiron/shelltool
$ brew install papiron/shelltool/open-usp-tukubai

既にOpen usp Tukubaiをインストールされている方は、Open usp Tukubaiのtar.gzを展開、またはgitリポジトリをcloneして、下記コマンドで先にアンインストールしておこう。

$ make uninstall

WebにはFormulaの作成とtapで公開は簡単!って見かけるのだが、Formulaの書き方や流れを理解出来るまで試行錯誤を重ね、結構手間取ってしまった。Formula公開する方の参考になればと思い、忘備録も兼ねてブログっておく。

方針

非公式なものとして公開。tapで追加してインストールしてもらう方針で。インストールは付属のMakefileを活用。また本来なら依存関係としてpython2系が必要だが、OSXには標準でpython2系が入っているのでそれを使う。

  • 非公式で公開。
  • tapの名前はpapiron/shelltool
  • パッケージ名(Formula)はopen-usp-tukubai
  • ソフトウェアはGithubから取得
  • 依存関係の指定は無し
  • 取得するリビジョンは手動で指定(最新版は --HEAD指定で取得)
  • バージョンは取得するリビジョンがcommitされた日付(yyyymmdd)
  • インストールはMakefileを使ってmake installで(PREFIXを変更)
  • インストールするパスはHomebrew標準に従う

tapをpapiron/shelltoolにしたのは、将来的に他のシェルツール的なFormulaを追加するかもしれない?から。

Formula公開場所作成

Formulaを公開するGithubのリポジトリ名はhomebrew-名前にする必要がある。今回はhomebrew-shelltoolという名前でリポジトリを作成。

github.com

tap追加

下記コマンドでtapを追加すると、/usr/local/Homebrew/Library/Taps/papiron/homebrew-shelltoolにgitリポジトリが作成される。Githubのリモートリポジトリも設定されている。

$ brew tap papiron/shelltool

Formulaテンプレート作成

brew createコマンドでFormulaのテンプレートを作成。取得元のリポジトリやtar.gzファイルのhttp/ftpなURLを指定するようだ。

下記を実行すると、/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/open-usp-tukubai.rbというFormulaテンプレートが作成される。Formulaの中身はRubyのDSLになっている。

$ brew create https://github.com/usp-engineers-community/Open-usp-Tukubai.git

Formulaの移動と編集

Formulaファイルを、作成したtapディレクトリに移動。

$ mv /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/open-usp-tukubai.rb /usr/local/Homebrew/Library/Taps/papiron/homebrew-shelltool

Formulaファイルを編集する。ポイントは次の通り。

  • インストールするリビジョンは手動で指定(自動で最新版でもいいのだが念のため)
  • brew install --HEAD用にhead行追加
  • インストールはMakefileを使ってmake installコマンドで
  • インストール先のディレクトリは環境変数PREFIXで指定
  • インストール先のディレクトリ指定はHomebrew側で提供される変数prefixを使う。
$ brew edit papiron/homebrew-shelltool/open-usp-tukubai

環境変数HOMEBREW_EDITOREDITORで指定されたエディタが起動する。

class OpenUspTukubai < Formula
  desc "Open usp Tukubai"
  homepage "https://uec.usp-lab.com/TUKUBAI/CGI/TUKUBAI.CGI?POMPA=DOWNLOAD"
  url "https://github.com/usp-engineers-community/Open-usp-Tukubai.git", :revision => "0da8b6cfe04df6e7d8cb8b4fe62170ee2fc4ab47"
  version "20151015"
  head "https://github.com/usp-engineers-community/Open-usp-Tukubai.git", :branch => "master"

  def install
    ENV.append "PREFIX", prefix
    system "make", "install"
  end

  test do
    system "false"
  end
end

Homebrew側で提供される変数prefix#{HOMEBREW_PREFIX}/Cellar/#{name}/#{version}のようになる。今回の場合は/usr/local/Cellar/open-usp-tukubai/20151015になる。Homebrew側で提供されるディレクトリに関する変数はこちらの公式ドキュメントを参照のこと。

https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/Formula-Cookbook.md#variables-for-directory-locationsgithub.com

編集したFormulaはbrew auditコマンドでチェックを行う。

$ brew audit --strict papiron/shelltool/open-usp-tukubai

Formulaのcommitとpush

tapのディレクトリはgitリポジトリになっている。修正内容をcommitし、Githubのリモートリポジトリにpushする。この時https経由でpushするためか、ユーザー名とパスワードが聞かれる。SSHの公開鍵認証使いたいけど仕方ない?

$ cd /usr/local/Homebrew/Library/Taps/papiron/homebrew-shelltool
$ git add open-usp-tukubai.rb
$ git commit
$ git push

これでFormulaの公開は完了。

インストールのデバッグとアンインストール

tapが追加されていることを確認。

$ brew tap
caskroom/cask
homebrew/apache
homebrew/core
homebrew/dupes
homebrew/php
homebrew/science
homebrew/versions
homebrew/x11
papiron/shelltool
sanemat/font

詳細デバッグモードでインストール。--debug --verboseオプションを指定。

$ brew install --debug --verbose papiron/shelltool/open-usp-tukubai

/usr/local/Cellar/open-usp-tukubai/20151015ディレクトリ以下にインストールされる。bin以下の各コマンドは/usr/local/binディレクトリ以下ににシンボリックリンクがはられる。share以下のディレクトリも/usr/local/shareディレクトリへシンボリックリンクがはられる。

アンインストールは下記コマンドで行う。

$ brew uninstall papiron/shelltool/open-usp-tukubai

Formulaのメンテナンス

Formulaは作って終わりではない。ソフトウェアのバージョンが上がったり、Formula自体の書き方を変えたりでメンテナンスしていく必要がある。ちなみにHomebrewではFormulaのversionで指定したバージョンが変更になると、新しいバージョンになったと判定されるようだ。

先ほどは直接vimでFormulaファイルを指定して開いたが、Formulaの編集は下記コマンドで行う。

$ brew edit papiron/shelltool/open-usp-tukubai

編集したFormulaのチェックを行う。

$ brew audit --strict papiron/shelltool/open-usp-tukubai

修正内容をcommitし、Githubのリモートリポジトリへpushすればいい。この手順もbrewコマンドで出来るのかも??

$ cd /usr/local/Homebrew/Library/Taps/papiron/homebrew-shelltool
$ git add open-usp-tukubai.rb
$ git commit
$ git push