LoginSignup
16
17

More than 5 years have passed since last update.

Swift製のコマンドラインツールをbrewでインストールできるようにする

Posted at

自分用のツールをbrewで入れられるようにした時の記録です。

ちなみにそのツールはXcodeのプロジェクトをxcで開くだけおもちゃです :wink:
https://github.com/tattn/xc

Swiftファイルをシェルスクリプトのように動かす

今回はビルドせずに、Swiftファイルをインタプリタとして動かすことにしました。
SwiftもBashスクリプトやRubyスクリプトのように shebang (#!で始まるやつ) をファイルの頭に付けることで、インタプリタでサクッと実行ができます。

$ vi hello
#!/usr/bin/env swift

print("こんにちは世界")

実行権限を与えます。

$ chmod a+x hello

これで実行できます。

$ ./hello

Homebrew用のリポジトリを作成する

本家Homebrewにプルリクエストを送らずに自作ツールをインストールできるようにするためには、brew tapでリポジトリを登録する必要があります。
次は、そのために必要なリポジトリを作成します。

まず、以下のようにツール本体をGithubにpushします。
https://github.com/tattn/xc

そして、Githubのリリース機能を使い、brewでインストールするtar.gzを作成します。
https://github.com/tattn/xc/releases/tag/0.0.1

tar.gzのリンクをコピーして、以下のコマンドでbrewのFormulaのテンプレートを作成します。

$ brew create コピーしたURL

不要な記述があるので、以下のように編集します。(適宜内容を変更してください)

xc.rb
class Xc < Formula
  desc "Just open a Xcode project :-)"
  homepage "https://github.com/tattn/xc"
  url "https://github.com/tattn/xc/archive/0.0.1.tar.gz"
  sha256 "053e959fe4d8994c96f629d01d7153ad81699f8d0a67cc984032e081719df673"

  def install
    bin.install "xc"
  end
end

installメソッドの中でインストール方法を記述します。
ここで、makeコマンドなどを呼び出してビルドすることもできます。

brew installしたものは/usr/local/Cellar以下に展開されます。
bin.installを使用するだけで、Cellar内から/usr/local/binにシンボリックリンクを作成することができます。
今回はSwiftファイルを配置するだけで良いので、bin.installを使用しました。

できたファイルをGithubにpushします。
この時のリポジトリ名には命名規則があり、

homebrew-ツール名

にする必要があります。

このような感じです。
https://github.com/tattn/homebrew-xc

正しく設定が出ていれば、これで完了です。

インストールする

tapコマンドでリポジトリを登録します。

$ brew tap {ユーザー名}/{homebrew-を除いたリポジトリ名}

例えば、
$ brew tap tattn/xc

インストールします。

$ brew install {homebrew-を除いたリポジトリ名}

例えば、
$ brew install xc

これで、どこでもすぐにインストールすることができるようになりました :tada:

参考

HomeBrewのFormulaを作ってみた
https://freedom-man.com/blog/homebrew-formula/

Swift2で作るコマンドラインツール
http://techlife.cookpad.com/entry/2015/11/09/150248

16
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
17