Umi Uyuraのブログ

プログラミング関連の作業ログ

Boxenで環境構築してみました

念願だったMacBook Airを手に入れました!

これまで勉強会やもくもく会などでPCが必要なときには、重量3kgの2010年モデルのMacBook Pro 17インチを持ち歩いてました。
これは私が初めて個人で買ったMacで、もちろん買った当時はそんな風に持ち歩くことなど想定しておらず、省スペースのデスクトップのつもりで、一番ディスプレイが大きくて性能が良いモデル、ということで選んだものです。

ところが、その後すぐに転職して、勤務地が横浜から都内になったので、そういった場にも足を運びやすくなったお陰で、逆に重量級Macが仇になってしまい、しかたなく毎回ヒーコラ担いで行っておりました。

まあそれだけならなんとかガンバレていたのですが、最近、1歳を迎えた息子を保育園へ送るという任務が始まり、さすがに10kg近くなった息子とMBPを抱えていくのは、今後のことも考えると非常にシンドイなーと思っていました。

そんなわけで、MBP購入してまだ3年しかたっていないところではありましたが、恐る恐る奥さんに相談してみたところ、意外にもあっさりとOK!

(代わりに、奥さんが使っていたLet's Noteがちょっと前に壊れたので、その代替としてMBPを共有するという条件が付きましたが・・・)

そんなわけで、ようやく外に連れ回しやすいMacが手に入ったので、存分にもくもくせねばと思っています。

Boxenで環境構築

というわけで本題。

せっかくクリーンな環境で1から構築できる機会なので、最近話題になっているBoxenを使ってみることにしました。

個人で使う機会は多くはないと思いますが、ちょうどMacを使い始めて3年程経ったこともあり、一度自分の環境を整理しておくのも、今後のために良いと考えたからです。

まずは自分用のBoxenを作るところから始めなければいけないので、最初に今まで使っていたMBP上でBoxenをカスタマイズし、それをMBA側に反映するという順序で進めました。

後述するURLあたりを参考にしつつ、our-boxenをcloneしてきた後、Boxenのリポジトリを漁って、自分が使っているアプリに対応するモジュールを探しては追記し、探しては追記。
作業するまでは正直期待していなかったのですが、探してみると結構欲しいモジュールが見つかるものです。

モジュールがないものも、DMGやZIPパッケージの所在がわかるものは、個人用の設定ファイルのpackage指定で追記。

最終的にできたものは、次にMBAで活用するために自分のGitHubに上げました。

umi-uyura/my-boxen

新規に構築する側

ここまで出来ていると、MBA側でやることは単純で、

  1. Xcodeインストール&Command Line Toolsのダウンロード
  2. SSH Keyを生成して、GitHubアカウントへ追加
  3. my-boxenをcloneしてきて、boxenの実行

と言った具合です。 実行後、30〜40分くらい待っていたら、ひと通りのアプリがインストールされていました。 これは楽ですね。

そう何度もMacを一からセットアップすることなどないと思いますが(そもそも、次にMacをセットアップすることにはBoxenが廃れているかもしれないし)

というわけで、以降は自分がハマった部分についていくつかメモしておこうと思います。

ハイフンを含むGitHubアカウント

自分のGitHubアカウントはumi-uyuraでハイフンを含んでしまっているのですが、Boxenのreadmeには

Boxen may not play nice with a GitHub username that includes dash(-)

と書かれており、最悪動かないのかも!?と心配になりました。

実際、最初とりあえず個人用の設定をumi-uyura.ppとして作ったところ、Boxenを実行しても読み込んでくれなかったのですが、冷静に中身を見ていたら、この場合はハイフンをアンダースコアに変えれば良いという記述を見つけたので、ファイル名をumi_uyura.ppにしたところ、無事に読み込んでくれるようになりました。

また同様に.pp内のclass名もアンダースコアに置き換えて記載すれば良いそうです。

class people::umi_uyura {
  # 〜略〜
}

DMGパッケージ用のprovider

少しハマったのが、DMGパッケージで落としてくるアプリのインストールで、providerにpkgdmgを設定していたけどうまくいかないものがありました。

で、調べてみたところ、どうやらpkgdmgはDMGの中に.pkgのインストーラが含まれている場合に指定するもので、DMGの中に.appで格納されていて、アプリケーションフォルダにコピーしてインストールする形式のものはappdmgを指定するらしいということに気づいて、無事に.appのアプリもインストールできました。

LibreOfficeモジュール

私はMac環境でのOfficeソフトとして、普段LibreOfficeを使っています。

幸い、BoxenのリポジトリLibreOfficeのモジュール(boxen/puppet-libreoffice)もあり、それを利用することにしました。 モジュールのReadmeによるとランゲージパックのインストールもできると記載があったので設定していたのですが、どうも実行時にエラーが発生します。

そこでソースを見てみたところ、どうやら基本的にLibreOffice本体のバージョンとランゲージパックのバージョンは同じ前提で処理されているのが問題のようでした。
他の言語はどうなのかわかりませんが、少なくとも日本語向けのランゲージパックは必ずしも本体のバージョンと同時に出ているわけでないようです。
ランゲージパックのページを見ると、最新の4.1.2の前は4.0.6でした。

そのうち本家モジュールでうまいこと対応してくれるのを待しつつ、せっかく原因がわかったので、とりあえず最新の日本語版を入れられるものを自作ってみました。

umi-uyura/puppet-libreoffice

やっていることは単純で、日本語ランゲージパック用のバージョンを内部で保持するような設定を追加しているだけですが。
以下の記述を.ppに記載することで、本体と異なるバージョンが振られた日本語ランゲージパックをダウンロードしておくことができます

## for japanese
include libreoffice::languagepack::ja

そう、作ってから気づいたのですが、元のモジュールもそうですが、これを実行するとランゲージパックのインストーラがApplicationsフォルダにインストールされます

そうです、ランゲージパックのインストールまではやってくれないのです!

なので、Boxenの実行が終わった後、手動でインストーラを実行する必要があります。

注:ちなみに、これを作った時点では4.1.2が最新だったのですが、その後4.1.3が出ていまして、それは日本語ランゲージパックと本体のバージョンが一致しているので、これを使わなくても内部のバージョンを書き換えるだけで対応できそうです。

感想

モジュールによっては、インストールされるもののバージョンが少し古かったりするものがありますが(例えば、私が試した辞典で、Javaの最新は7u45でしたが、モジュールでインストールできるものは7u21でした)、それでもひとつひとつ手作業で入れていくよりは、かなり楽ですね。

何だかんだで、自分が普段使っているツール類の50%〜60%くらいはインストールできてしまいました。 残りはMac App Storeだったり個別に落としてくるものでしたが、それも棚卸ししてリスト化できたので良かったです。

今後は、最近使うことが多いNode.js系のツールもBoxenでカバーできるようなので、いずれその辺りも補完しておこうと思います。

あと、定期的に自分のboxen自体もメンテしておくことも必要な気がしますが、その辺りはどうしていらっしゃるのでしょうかね? 最適なタイミングとか、そういった情報があれば見てみたいですね。

参考にさせて頂いた情報