Macを買う度にアプリケーション入れたり、環境構築するのが面倒?!ならBoxenを使おう
お詫び
ただのBoxen入れる際に作ったメモを、導入手順書のように書き置こしたものです。
まずはじめに
Macを買い換えるたび、アプリをApple Storeからダウンロードしたり WEB上を徘徊したり、vimの設定をしたりめんうなんですー。何かいい方法はないのですか!!
Boxenって何?
説明しよう!BOXENとは、
GitHub社で使われている、Mac の環境を自動構築するためのツール(フレームワーク)です。GitHub ではローカルの Mac を開発環境として使っているので、新しく人が加わった時に Boxen で開発環境構築してもらっているとのこと。
やってみよう!
とりあえず準備
Command Line Toolを手に入れる
途中cのコンパイルでエラーになるので、そうならない為に必要になるものをいれます。
からダウンロード次にターミナルを立ち上げて、以下のコマンドを実行
xcode-select --install
「インストール」を押す。
Boxenの雛形を手に入れる
まだ手元にBoxenなんてものは存在しないので、 https://github.com/boxen/our-boxenをforkして、からMacにclone
$ mkdir ~/src
$ git clone git@github.com:{your_name}/our-boxen.git ~/src/boxen
$ cd ~/src/out-boxen
とりあえず、これで最低限必要なものは準備完了かな
初期状態のまま検証開始
実行~! Boxen はデフォルトではディスクの暗号化を要求するらしいから、 システム設定 → セキュリティとプライバシー → FileVault で有効にする
ではでは、実行してみよう 暗号化しなくても以下のコマンドで実行できるらしいけど
$ script/boxen --no-fde
今回は、推奨通り通常実行
$ script/boxen Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/bin]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/data]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/data/project-sockets]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/data/puppet]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/log]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/Users/sonots/src]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/env.d]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/env.d/config.sh]/ensure: defined content as ...
おお、何か動いてる感がある
処理が終わった時に、作成される /opt/boxen/env.shを実行したらboxenで入れたアプリが使えるようになるので .zshrc や .bashrcなどに以下を追加
[ -f /opt/boxen/env.sh ] && source /opt/boxen/env.sh
追加したら、exec $SHELL -Lをしておく。
このとき、Lunchpadに

が追加される。
本格的にアプリを入れてみよう
まずは手始めに、chromeと、chrome canaryを入れてみる
Puppetfile にgithubを定義
github "chrome", "1.1.2"
次に、個人用の設定ファイルを作成 boxenでの個人設定はgithubアカウントにひもづくので、githubアカウントは作っておく それから、以下のファイルに個人用設定を定義します。 /modules/people/manifests/{{github アカウント名}}.pp
class people::{{github アカウント名}} {
include chrome
include chrome::canary
}
Puppetfileでchromeのgithubを定義して、個人用ファイルで chromeと、chrome canaryをincludeすると定義
ちゃんと入るか確認してみよう
$ script/boxen
処理が終わってからLunchpadを見たら chromeとchrome canaryがインストール出来てる事が確認できた!

楽!!(定義めんどいけど、定義済みだったとしたら楽!!)
次はhomebrew入れれるパッケージを入れてみる
技術ブログ書いてると使いたくなる、treeコマンドとか ファイルを取得する時とかに使いたくなる、wgetコマンドを入れてみる。
さっき作った個人用ファイルに以下を追加 /modules/people/manifests/{{github アカウント名}}.pp
package {
[
'tree',
'wget'
]:;
}
はい、実行
$ script/boxen
treeとwgetが入ってるか確認
$ source ~/.bash_profile $ which wget /opt/boxen/homebrew/bin/wget $ which tree /opt/boxen/homebrew/bin/tree
おお、入ってる!!
次は、dmgパッケージを指定してみる。今回はgoogle日本語入力で確認
さっき作った個人用ファイルに以下を追加 /modules/people/manifests/{{github アカウント名}}.pp
package {
'GoogleJapaneseInput':
source => "http://dl.google.com/japanese-ime/latest/GoogleJapaneseInput.dmg",
provider => pkgdmg;
}
簡単にsourceでダウンロードURLを指定して、providorでdmg pkgをインストールすると、定義してるのかな に追加します。
はい、実行
$ script/boxen
google日本語入力がLunchpadに追加されてる!!

最後はちょっと応用すぎるけど、.dotfiles系を構築時に作れるようにしてみる(今回はvim only)
Puppetfile にgithubを定義
github "vim", "1.0.5"
/modules/people/manifests/{{github アカウント名}}.ppには、以下を追加、編集
package {
[
'tree',
'wget',
'fontforge'
]:;
}
# settings for dotfiles
$home = "/Users/${::boxen_user}"
$dotfiles = "${home}/.dotfiles"
file { $home:
ensure => directory
}
# $dotfilesパスに、sourceをcloneしますよって定義
repository {
$dotfiles:
source => 'git@github.com:yshinoha/.dotfiles.git',
require => File[$home];
}
# settings for vim
include vim
# Example of how you can manage your .vimrc
file { "${vim::vimrc}":
target => "/Users/${::boxen_user}/.dotfiles/.vimrc",
require => Repository[$dotfiles]
}
# $dotfilesに依存してます
# .dotfiles/.vimrcを ~/.vimrcにコピー
# いろいろ変数定義
$vim = "${home}/.vim"
$neobundle = "${vim}/bundle"
$powerline = "${neobundle}/vim-powerline"
$fontpatcherdir = "${neobundle}/vim-powerline/fontpatcher"
$fontpatcher = "${fontpatcherdir}/fontpatcher"
$inconsolata = "${fontpatcherdir}/Inconsolata.otf"
$wgetInconsolata = "wget http://levien.com/type/myfonts/Inconsolata.otf"
$vimPluginInstall = "yes | vim -c 'q'"
vim::bundle { [
'scrooloose/syntastic',
'sjl/gundo.vim'
]: }
repository { $neobundle:
source => "git@github.com:Shougo/neobundle.vim",
path => "${neobundle}/neobundle.vim"
#require => File[$vim]
}
exec { $vimPluginInstall:
creates => "${fontpatcher}",
require => Repository[$neobundle],
}
exec { $wgetInconsolata:
cwd => $fontpatcherdir,
creates => "$inconsolata",
require => Package['wget'],
}
exec { "fontforge -script ${fontpatcher} ${inconsolata}":
cwd => $fontpatcherdir,
require => [ Exec[$vimPluginInstall], Exec[$wgetInconsolata], Package['fontforge'] ],
}
NeoBundleInstallとかまでやってるけどこれは https://github.com/yshinoha/.dotfiles を参考にしてください。
ここまで、準備して
$ script/boxen
をしたら、.vimrcが入って、.vimが作成されて vimを一度ひらいて、NeoBundleInstallが走って、vimを閉じる を一気にやります。
vimでファイルを開いてみたら

ここまで自動で出来たらまじ便利
他になにができるの?(今回は説明を省略して、紹介)
チームで共有
もともとboxenはgithub社が、チームで同じ環境をつくるため 新メンバーが同じ環境を手軽に作る目的で作られた物なので、今回書いた内容とは別に、チームで管理する方法もある その場合は、modules/projects/manifests/いかにファイルを作成するけど、今回は無しで。
modules/projects/manifests でチーム単位で環境を共有して 各々入れたいものがあれば、個別に /modules/people/manifests/{{github アカウント名}}.ppに記述するイメージかな
また今後やってみよう
これでMacを買い換えるのも怖くない!!???
今回使ったソース
今回作ったboxen完全版
今回使った.dotfiles完全版(ではない)
参考
Puppet http://docs.puppetlabs.com/references/latest/type.html

