Macににゃしぃフォント改二をコマンド一発で導入する！

# tl;dr

```shell-session
$ brew cask install caskroom/fonts/font-nyashi
```

# brew caskでのフォントの導入について

「[Macにフォントをコマンド一発で導入する！](http://qiita.com/unhappychoice/items/6720fe2e363b1c17fc88)」を参考にさせていただきました。

# にゃしぃフォント改二について

某ブラウザゲームの古参駆逐艦が書いたとされる掛け軸に着想を得てマルセ様によって作成されたフォントです。以下で配布されています。

* フォント名: にゃしぃフォント改二
* 作者名: マルセ様
* サイト名: よく飛ばない鳥
* サイトURL: http://marusexijaxs.web.fc2.com/
* ライセンス: 営利目的、非営利目的ともに「字形あるいは著作権表示、もしくはその両方を改変しての二次配布」以外は用途に制限を設けておりません。

このようなフォントを作っていただき、作者の方には感謝です。

# コントリビュートについて

これだけだと何なので、プルリクエストする際に少々詰まった点についてまとめたいと思います。

基本は、[caskroom/homebrew-fonts](https://github.com/caskroom/homebrew-fonts) をフォークした自分のリポジトリに、"[How To Contribute](https://github.com/caskroom/homebrew-fonts/blob/master/CONTRIBUTING.md)"に従って以下のようなファイルを作成後、プルリクエストします。

```ruby:Casks/font-nyashi.rb
cask 'font-nyashi' do
  version :latest
  sha256 :no_check

  url 'http://marusexijaxs.web.fc2.com/nyashi_ote.zip'
  name 'Font Nyashi'
  homepage 'http://marusexijaxs.web.fc2.com/tegakifont.html'
  license :cc # CC BY-ND

  font 'nyashi_ote/Nyashi.otf'
end
```

## Font Cask名

"[Converting the Canonical Name To a Token](https://github.com/caskroom/homebrew-fonts/blob/master/CONTRIBUTING.md#converting-the-canonical-name-to-a-token)"に厳密なルールが記載されていますが、基本以下になります。

* 最初に`font-`をつける
* フォントファミリー名を小文字にする
* 空白をハイフンでつなぐ

ファミリー名は、以下で取得できます。

```shell-session
$ brew install fontconfig
$ fc-query --format='%{familylang}' ~/Library/Fonts/Nyashi.otf 
en,ja
$ fc-query --format='%{family}' ~/Library/Fonts/Nyashi.otf 
Nyashi,にゃしぃフォント改二
```

今回の場合、英語のファミリー名が"Nyashi"なのでcask名は`font-nyashi`、ファイル名は`font-nyashi.rb`になります。

なお、以下のようにファミリー名をMac標準のFont Bookで取得できますが、日本語環境では日本語となってしまます。そのため、システム環境設定の「言語と地域」の優先する言語で英語を最優先にした後、取得する必要があります。

![fontbook_nyashi.png](https://qiita-image-store.s3.amazonaws.com/0/84248/587dcf54-7eec-009f-8216-790a85d1a491.png)

## Font Caskフィールド

* `url`:<br>フォントをダウンロードするURLを指定します。できる限り上流を指定することが推奨されています。今回は作者の方のページを指定しています。
* `version`, `sha256`:<br>フォントのバージョンとSHA-256ハッシュ値を指定します。ただし、今回はダウンロードされるZIPファイル名にバージョンが含まれておらず、ダウンロードされるファイル名からバージョンを特定できないため、`:latest`と`:no_check`をそれぞれ指定しています。
* `name`:<br>"[How To Contribute](https://github.com/caskroom/homebrew-fonts/blob/master/CONTRIBUTING.md)"には記載されていませんが、後述の動作確認でエラーとなるため、他のフォントを参考に追加しています。
* `license`:<br>`:apache`や`:mit`といったライセンスを指定します。有効な値は、[ソースコード](https://github.com/caskroom/homebrew-cask/blob/master/lib/hbc/dsl/license.rb)を参照しました。当然のことながら、再配布可能なライセンスである必要があります。なお、今回はフォントの作者の方に了承を得た後、プルリクエストしました。

"[Automatic Generation](https://github.com/caskroom/homebrew-fonts/blob/master/CONTRIBUTING.md#automatic-generation)"には、自動的に`version`, `sha256`, `font`を取得する方法が記載されていますが、今回は使いませんでした。

また、フィールドの順番が違うだけで、後述の動作確認 (Rubocopによるスタイルのチェック) で怒られます。どこかに正しい順番が記載されているのかもしれませんが、今回はトライ&エラーでエラーがなくなった結果が上記の順番となります。

## コミットメッセージ

コミットメッセージにはCask名を含める必要があります。今回は追加なので、単純に"Add font-nyashi"となります。

## 動作確認

プルリクエスト作成時に以下の動作確認を実施しているかのコメントが自動的に挿入されるため、動作確認を実施しました。

* `brew cask audit --download {{cask_file}}` is error-free.<br>
  上記コマンド実行でエラーがないこと
* `brew cask style --fix {{cask_file}}` left no offenses.<br>
  上記コマンド実行で違反がないこと
* `brew cask install {{cask_file}}` worked successfully.<br>
  インストールできること
* `brew cask uninstall {{cask_file}}` worked successfully.<br>
  アンインストールできること

実際の実行結果です。

```shell-session
$ brew cask audit --download mtakayuki/fonts/font-nyashi
==> Adding new tap 'mtakayuki/homebrew-fonts'
==> Cloning into '/usr/local/Library/Taps/mtakayuki/homebrew-fonts'...
Checking out files:  22% (230/1044)   )   
==> Tapping mtakayuki/fonts
Tapped 0 formulae (1,067 files, 895.6K)
Cloning into '/usr/local/Library/Taps/mtakayuki/homebrew-fonts'...
Checking out files: 100% (1044/1044), done.
==> Downloading http://marusexijaxs.web.fc2.com/nyashi_ote.zip
######################################################################## 100.0%
==> No checksum defined for Cask font-nyashi, skipping verification
audit for font-nyashi: passed

$ brew cask style --fix mtakayuki/fonts/font-nyashi
==> Installing or updating 'rubocop-cask' gem
Fetching: rainbow-2.1.0.gem (100%)
Successfully installed rainbow-2.1.0
Fetching: ast-2.2.0.gem (100%)
Successfully installed ast-2.2.0
Fetching: parser-2.3.0.7.gem (100%)
Successfully installed parser-2.3.0.7
Fetching: powerpack-0.1.1.gem (100%)
Successfully installed powerpack-0.1.1
Fetching: ruby-progressbar-1.7.5.gem (100%)
Successfully installed ruby-progressbar-1.7.5
Fetching: unicode-display_width-0.3.1.gem (100%)
Successfully installed unicode-display_width-0.3.1
Fetching: rubocop-0.37.2.gem (100%)
Successfully installed rubocop-0.37.2
Fetching: rubocop-cask-0.5.0.gem (100%)
Successfully installed rubocop-cask-0.5.0
8 gems installed

1 file inspected, no offenses detected

$ brew cask install mtakayuki/fonts/font-nyashi
==> Downloading http://marusexijaxs.web.fc2.com/nyashi_ote.zip
######################################################################## 100.0%
==> No checksum defined for Cask font-nyashi, skipping verification
==> It seems there is already a Font at '/Users/admin/Library/Fonts/Nyashi.otf'; not linking.
🍺  font-nyashi staged at '/usr/local/Caskroom/font-nyashi/latest' (3 files, 3.3M)

$ brew cask uninstall mtakayuki/fonts/font-nyashi
```

なお、エラーが検出された際、修正→GitHubにフォースプッシュ→コマンド再実行という手順を踏んでいたのですが、Mac上のファイルが更新されずにエラーが解消されませんでした。そのため、一度`brew untap mtakayuki/fonts`を実行後、再度実行しました。

## プルリクエスト作成

上記の動作確認に加えて、プルリクエスト作成時に以下をチェックする必要があります。

* Checked there aren’t open pull requests for the same cask.<br>
  同じcaskに対するプルリクエストがオープンされていないこと
* Checked there aren’t closed issues where that cask was already refused.<br>
  過去に却下されたissueがないこと
* When naming the cask, followed the reference.<br>
  Cask名が規約に沿っていること
* Commit message includes cask’s name.<br>
  コミットメッセージにcask名が含まれていること

それでは、頑張っていきましょー！

# 補足

プルリクエストを送ったタイミングから、このパッケージには「拡張にゃしぃフォント改二」は含まれていません。そもそも、ディレクトリ名に日本語が含まれていて正しく動作するのか試していません。