理系学生日記

おまえはいつまで学生気分なのか

Macでのアプリケーションインストールの自動化

先述の通り、新年を迎えたことをきっかけに Mac を初期化しました。 面倒なのは、使っているソフトウェアのインストールなのですが、皆さんと同様 homebrew を使っています。

そういえばと思い立ったのですが、この homebrew で各種 CUI アプリケーションとともに AppStore で配布されているソフトウェア(例えば LINE や Evernote など) も一気にインストールできることはイマイチ知られていません。というわけで、本エントリではそのあたりをご紹介します。

GUI アプリケーションのインストール

野良アプリのインストール (cask)

Mac で AppStore 以外で配布されている、いわゆる野良 GUI アプリケーションをインストールする場合、インストーラをダウンロードしてダブルクリック、出てきたアプリのアイコンを Application フォルダにドラッグ&ドロップというのがよくあるインストールだと思います。 PCを換装したときにこれをやるのはかなりメンドい。

homebrew はこれを CLI で行えるサブコマンド brew cask を持っています。例えば、Google Chrome をインストールする場合、

$ brew cask install google-chrome

を実行すれば、勝手に Chrome がダウンロードされ、Applications フォルダに移動してくれます。便利。

AppStore 配布のアプリケーションのインストール (mas)

世の中には AppStore のみで配布されているアプリケーションも存在します。LINE なんかが代表例ですね。 これを CLI からインストールするためには、mas を使います。

例えば LINE をインストールする場合は、最初に LINE の ID を取得し、その ID に対して mas install サブコマンドを発行すればインストールが可能です。

$ mas search LINE | head -1
   539883307  LINE                                            (5.21.2)
$ mas install 539883307

いちいちコマンド発行するのも面倒 (Brewfile)

ただ、自分が通常 PC で使用しているソフトウェア全てに対してこれらのコマンドを発行するのも面倒です。 homebrew は、通常の CUI アプリケーションとともに、上記のような野良アプリ、AppStore アプリを Brewfile と呼ばれるファイルに羅列しておけば統一的にインストールしてくれる brew bundle コマンドを持っています。

例えば、以下のような内容の Brewfile を用意しておけば、$ brew bundle install コマンドで CUI、GUI アプリ関係なく、一気にアプリケーションをインストールできます。 この Brewfile を Github あたりで管理しておけば、PC を換装したときも怖くありません。

# tools
brew 'ansifilter'
brew 'coreutils'
brew 'curl'
brew 'goenv', args: ['HEAD']

# Cask Applications
cask '1password'
cask 'alfred'
cask 'caffeine'

# AppStore Applications
mas "LINE", id: 539883307
mas "Pocket", id: 568494494

僕自身は、単純な brew bundle install だと意図せずアップデートもかかるので、--no-upgrade オプションを付与してインストールだけ行うようにしています。

Brewfile のみでアプリを管理する (brew bundle cleanup --force)

人類は怠惰なので、Brewfile に記述することなくソフトウェアのインストールをすることがあります。 これを防ぐために、私はインストール後常に brew bundle cleanup --force を行うようにスクリプトを組んでいます。

このコマンドが何をしてくれているかというと「Brewfile に記述されないまま brew 経由でインストールされたソフトウェアを、強制的にアンインストールする」ということをやってくれます。過激ですが便利。