書いたのも今は昔、1年間の運用の末にこの度Boxenを卒業しました。Boxenをやめたのか、やめて今はどうしているのか、といった話を書きます。Boxenのつらいところここで述べるBoxenの問題点の大部分は筆者のBoxenおよびPuppetに対する理解の低さが根底にあります。間違った使い方をしている可能性は十分にあり、適切に使っていればこのような問題は発生しないのかも知れません。深い理解がなければまともに使えないというのもどうかと思いますのでつらつらと並び立てたいと思います。挙動を把握するのが難しいBoxenはPuppetの上で動作します。Puppetを便利に使うためのフレームワークみたいな位置づけだと思っています。Rubyに詳しくなくても、RailsのDSLを組み合わせるととりあえず動くものを作れるように、BoxenもPuppetを知らなくても雰囲気でなんか動くものを書くことができます。同時にRubyに詳しくなければRailsの内部動作を調べることができないように、Puppetに明るくなければBoxenの中身を知ることができないのもまた事実。普段からPuppetを使っているような人はBoxenの中身まで調べられるでしょうが、筆者を含むそうではない大半のエンジニアにとっては、Boxenは完全なるブラックボックスと化し、問題が起こったときに対処するのが非常に困難になります。その問題がBoxenに起因するものなのか、Puppetに起因するものなのかが分からないのが辛い幸いBoxenの開発は今も非常に活発に続けられており、GitHub上でissueを立てればちゃんと質問に答えてくれる雰囲気はありますBoxenの開発についていかないといけないBoxenの開発が活発なのはいいのですが、活発過ぎてついていくのが大変です。Boxenをアップデートする方法という記事を書いたこともありますが、正直これが本当に正しいやり方なのか未だに不明ですし、アップデートする度に毎回バージョンのチェックをしてまわらないといけなかったりして非常に面倒です。開発環境の要件が変わることなどそうそう起こることではなく、Rubyのバージョンを上げる時くらいのものでした。Rubyのバージョンが上がるまでにBoxenのバージョンは爆上がりしているので、アップデートするためには先にBoxenをアップデートしないといけないという不要なオーバーヘッドが発生して時間を浪費します。環境構築に時間がかかるBoxenによる環境構築がとにかく遅いです。boxenコマンドを実行して完了するまで、最初の一回目は大々的に環境構築を行うので数十分かかるのは致し方ないとしても、一切の変更が不要な場合でも結構な時間を待たされます。Boxenが実行できなくなっている場合がある時間がかかるのはその間に他のことをして待っていればいいので、なんとか我慢することができます。問題なのはBoxenを実行するための環境そのものをメンバーが意図せず壊してしまっている場合です。BoxenはMacに直接インストールしているので、こういうことがたまに起こります。何気なく実行したら壊れた、ということがありましたこの場合、そもそもBoxenを実行できるように復元しなければなりませんが、その復旧作業は当然ながら手作業です。その手作業の末にやりたいことはたかだかRubyのバージョンを上げる程度のことなのです。最新版が使えないことがある例えばRubyの新しいバージョンがリリースされたとします。そのときBoxenを使っているとBoxenが対応するまでそのバージョンを使えません。使えるようになるまでにどれくらいのラグがあるのかは一概に言えないですが、Boxenの構造として個別のプラグインは既に最新版に対応しているのに、肝心のBoxenそのもののバージョンを他のプラグインとの兼ね合いでアップデートできず、結局その最新版を使うことができない、ということも多々起こります。いざ使えるようになったとしても、そこで待ち受けているのは先ほど書いたように「まずはBoxenのアップデートをしなければいけない」という不毛な現実なのです。Rubyをアップデートしたいだけなのに、なんでBoxenのアップデートから始めないといけないのでしょう?Boxenを入れることに抵抗があるBoxenは素のMacにインストールします。個人のPCにインストールするのは非常に躊躇われます。全体的にシステムが重くなる気のせいかもしれないですが、Boxenを止めたらシェルの起動がめちゃくちゃ速くなりましたBoxenを置き換えるBoxenでやりたかったことはこの2つです。メンバー間の環境の差異を無くしたいMacのセットアップを自動化したいはっきり言って2つ目の要求をプロジェクト用の環境構築ツールに求めるのは筋が悪い。開発環境はVagrant+VirtualBoxで開発環境はVagrantを使って共通化することにしました。Boxとしてメンバーに配布しています。upするだけでとりあえず環境を戻すことができます。Boxは定期的にアップデートされていきBoxごとまるっと入れ替えることを意図しているので、そもそもVagrant内の環境を変更しないからです。MacからVagrant内で起動しているWebサーバにアクセスするためにDnsmasqを使っています。Homebrew-caskアプリケーションの開発環境の条件がVagrantとVirtualBoxとDnsmasqがインストールされているDnsmasqが正しく設定されていることだけになったので手動インストールと簡単なシェルスクリプトで十分に対応可能。あとは各自が必要なツールを必要に応じてインストールします。Homebrew-caskの組み合わせを使うことにしました。個々の構成要素が非常にシンプルで気に入っています。yuku-t/dotfilesおわりにというわけでBoxenが辛すぎるのでVagrantとHomebrewを使うようにしたらハッピーになった、というお話でした。Takahashi@yuku_tFLYWHEEL社でソフトウェアエンジニアをしています。昔はIncrements社最初の従業員としてQiitaを開発したりCTOやったりしていました。upLoginユーザーは見つかりませんでした。