brew cask にアプリがなかったら追加しよう

公式リポジトリのアプリが増えるとうれしいので、かんたんな追加方法をまとめました。

下記のアプリを実際に登録申請してみました。

> * [ACTPrinter: Virtual Printer](http://houdah.com/ACTPrinter/)

お気づきの点などあれば、コメント頂けるとうれしいです。
<(_ _)>




## 事前確認

`brew cask search` で該当するアプリが既に登録されていないか確認します。

1. 見つからなかった
2. 見つかったが別のバージョンが欲しい

(1) の場合、[caskroom/homebrew-cask](https://github.com/caskroom/homebrew-cask) にプルリクエストを送ります。

(2) の場合、[caskroom/homebrew-versions](https://github.com/caskroom/homebrew-versions) にプルリクエストを送ります。
β版や日本語版、古いバージョンの Cask を登録したい場合はこちらです。

どちらの場合も、Cask の作成方法は同じとなります。




### Cask 作成のための仕様

詳細は、こちらにまとめられています。

> * [homebrew-cask/CONTRIBUTING.md at master · caskroom/homebrew-cask · GitHub](https://github.com/caskroom/homebrew-cask/blob/master/CONTRIBUTING.md)

ここでは実際の手順に沿って、補足を含めて記述します。




## 登録したいアプリをダウンロードしておく

Cask に登録したいアプリをダウンロードしておきます。
.dmg や .zip 形式の配布ファイルと、これを展開した .app ファイルを用意します。


### 確認事項

今回の例では、以下の状態であることが分かりました。

* __配布ファイルの url__ ... http://www.actprinter.com/mac/ACTPrinter%20for%20Mac%203.1.4.zip
* __配布サイトのホームページ url__ ... http://houdah.com/ACTPrinter/
* __展開(解凍)後のファイル構成__ ... ディレクトリは生成されない※
* __アプリのファイル名__ ... ACTPrinter for Mac.app
* __アプリのバージョン__ ... 3.1.4

※ アプリによっては、解凍後、サブフォルダに内包されている場合があるので、その path 情報が必要になります（ex. foo/bar.app）。




## 命名ルールを確認する

.rb ファイルを作成しますが、ファイル名などを付ける必要があります。
命名ルールを確認できるツールがあるので、これを利用します。

確認した __アプリのファイル名から .app を除いた部分__ で調べます。

```
% "$(brew --repository)/Library/Taps/caskroom/homebrew-cask/developer/bin/generate_cask_token" 'ACTPrinter for Mac.app'
Proposed token:               actprinter
Proposed file name:           actprinter.rb
Cask Header Line:             cask 'actprinter' do
```


### 確認事項

* __生成されたファイル名__ ... actprinter.rb




## チェックサムを生成する

ダウンロードファイルの checksum を作成します。
sha256 が仕様です。

```
% shasum -a 256 ~/Downloads/ACTPrinter\ for\ Mac\ 3.1.4.zip
7f92b093be3ddc08f5ce00cd19b3edb13c01a4c4626948b204c484123d3e25e8  /Users/****/Downloads/ACTPrinter for Mac 3.1.4.zip
```


### 確認事項

* __チェックサム__ ... 7f92b093be3ddc08f5ce00cd19b3edb13c01a4c4626948b204c484123d3e25e8




## brew cask create で Cask を作成する

__生成されたファイル名__ をつかって、Cask ファイルを生成します。
こちらもコマンドが用意されています。

```
% brew cask create actprinter
```

エディタが起動しますので、確認した内容を埋めていきます。

```ruby:actprinter.rb
cask 'actprinter' do
  version '3.2.2'
  sha256 '6e49ac75f8a660e33b3f0d3033bf9788cfeef5a0838faad93f06b21af0efb2ee'

  # actprinter.com was verified as official when first introduced to the cask
  url "http://www.actprinter.com/mac/ACTPrinter%20for%20Mac%20#{version}.zip"
  name 'ACTPrinter'
  homepage 'https://www.houdah.com/ACTPrinter/'

  app 'ACTPrinter for Mac.app'
end
```

※ 上記は v3.2.2 の情報です。


- version ... __アプリのバージョン__ を書きます。
- sha256 ... __チェックサム__ を書きます。
- url ... __配布ファイルの url__ を書きます。
- name ... __正式名称__ を書きます。
- homepage ... __配布サイトのホームページ url__ を書きます。
- app ... __展開(解凍)後のファイル構成__ を確認し、.app ファイルまでのパスを含めて書きます。
今回はサブフォルダがないので __アプリのファイル名__ のみになりました。


この他にもいろいろな[設定](https://github.com/caskroom/homebrew-cask/blob/master/CONTRIBUTING.md#cask-stanzas)があり、登録するものによっては必要なようです。

エディタを保存終了すると、作成したファイルは `/usr/local/Homebrew/Library/Taps/caskroom/homebrew-cask/Casks/` に置かれます。

```
% ls /usr/local/Homebrew/Library/Taps/caskroom/homebrew-cask/Casks/ | grep actprinter 
actprinter.rb
```


### 補足

配布ファイルの url にバージョンが含まれず、常に最新バージョンがダウンロードできる場合、下記のように指定します。

```ruby
cask 'foo' do
  version :latest
  sha256 :no_check
```




## 作成した Cask の動作確認をする

ファイルが作成され、`brew cask` コマンドで扱えるようになりました。
きちんとインストールできるかを確認します。

```
% brew cask search actprinter
==> Exact match
actprinter
% brew cask info actprinter
actprinter: 3.1.4
http://houdah.com/ACTPrinter/
Not installed
https://github.com/caskroom/homebrew-cask/commits/master/Casks/actprinter.rb
==> Contents
  ACTPrinter for Mac.app (link)
```

インストールします。

```
% brew cask install actprinter
==> Downloading http://www.actprinter.com/mac/ACTPrinter%20for%20Mac%203.1.4.zip
######################################################################## 100.0%
==> Symlinking App 'ACTPrinter for Mac.app' to '/Users/deadwood/Applications/ACT
  actprinter installed to '/opt/homebrew-cask/Caskroom/actprinter/3.1.4' (158 files, 3.4M)
```

無事インストールと利用を確認することができました。




## 公式リポジトリにプルリクエストを送る

作成した Cask を他の人も使えるように登録してもらいましょう。
事前確認したとおり、今回は [caskroom/homebrew-cask](https://github.com/caskroom/homebrew-cask) にプルリクエストを送ります。


### Fork する

[caskroom/homebrew-cask · GitHub](https://github.com/caskroom/homebrew-cask) を GitHub でフォークします。

![kobito.1401548940.188048.png](https://qiita-image-store.s3.amazonaws.com/0/19223/982502eb-5e7d-fabe-6ec4-381f4d7d82e7.png "kobito.1401548940.188048.png")

git clone します。

```
% git clone git@github.com:DriftwoodJP/homebrew-cask.git
```


### 作業用ブランチで commit & push する

作業用ブランチを作成します。

```
% cd homebrew-cask/
% git checkout -b add_actprinter                                 
```

作成した Cask を ./Casks へ移動します。

```
% mv /usr/local/Homebrew/Library/Taps/caskroom/homebrew-cask/Casks/actprinter.rb Casks
```

add, commit します。
コミットメッセージにバージョンを含めます。

```
% git add .
% git commit -m 'Add ACTPrinter for Mac v3.1.4'
```

作業用ブランチを push します。

```
% git remote -v
origin	git@github.com:DriftwoodJP/homebrew-cask.git (fetch)
origin	git@github.com:DriftwoodJP/homebrew-cask.git (push)
% git branch -v
* add_actprinter
  master
% git push origin add_actprinter
```


### GitHub からプルリクエストを送る

フォークしたプロジェクトからプルリクエストを送ります。

![kobito.1401549782.053104.png](https://qiita-image-store.s3.amazonaws.com/0/19223/f1ae1492-a43c-29ce-c0b5-5c9863a0dd83.png "kobito.1401549782.053104.png")

プルリクエストするとチェックリストが記入済みの状態で表示されます。
確認が終わったら、`[x]` でチェックしましょう。

merge されれば終了です。




## 参考資料

このあたりで悩んだところを今回まとめてみました。
参考になれば幸いです。

> * [brew cask で異なるバージョンをインストールする、もしくはアプリを追加する | deadwood](http://www.d-wood.com/blog/2014/03/27_5895.html)


公式のドキュメントです。

> * [homebrew-cask/CONTRIBUTING.md at master · caskroom/homebrew-cask](https://github.com/caskroom/homebrew-cask/blob/master/CONTRIBUTING.md)
> * [homebrew-cask/doc at master · caskroom/homebrew-cask](https://github.com/caskroom/homebrew-cask/tree/master/doc)