BoxenをWebアプリケーションとして配布できるboxen-webを使ってみた。
簡単なまとめ
boxen-webは...
- Boxenのインストールから実行までを1行のシェルコマンドでできるようにする
- デザイナなどの非エンジニアに優しい
- Boxenを使う上で必須ではない
- OAuthを用いた認証によりメンバーのみアクセス可能
- Heroku上で動作するのでサーバを用意する必要はない
- GitHubの利用が必須
- デプロイすると下記のようなサイトができる
この記事で分かること
- boxen-webをデプロイする方法
- 新しいMacをboxen-webを使ってセットアップする方法
この記事で分からないこと
- Boxenの使い方
- Herokuの詳しい使い方
注意事項
Boxen自体はGitHub外のプライベートリポジトリでホストできるが、boxen-webを使う場合はGitHub上でホストされていなければならない。例えば、Boxen使わなくても許されるのは2012年までだよねに従ってBitbucketを使ってプライベートリポジトリを作った場合はboxen-webを使えない。
boxen-webとは何か
boxen-webはGitHub社が開発しているオープンソースのMac自動設定ツールBoxenを簡単にチームで共有できるようにするツール。中身はRailsで書かれておりHeroku上で動作する。
Webアプリケーションにアクセスすると表示されるワンライナーを実行するだけでセットアップが完了するので非エンジニアでも簡単に使える。(boxen-webを使わずにBoxenを使う場合一旦git-cloneしてきてからスクリプトを叩く必要がある)
GitHubのOAuthによってクライアントを認証し、部外者がアクセスできないようになっている。
現在利用できるのはGitHub上でホストされているBoxenリポジトリのみ。GitHub:Enterpriseのサポートはissueには上がっているがいつになるかは不明。
使い方
- 事前準備
- GitHub OAuth Applicationの用意
- boxen-webの用意
- Herokuにデプロイ
- 新しいMacをboxen-webでセットアップする手順
事前準備
Boxenを作る
チーム用にBoxenを用意する。詳しくはBoxen使わなくても許されるのは2012年までだよね参照。
OrganizationとTeamを作る
GitHubにOrganizationとTeamを作る。OrganizationとTeamの関係は一対多、つまり、1つのOrganizationに複数のTeamを作れる。そしてOrganizationのmemberとは少なくとも1つのTeamに所属しているGitHubアカウント。
boxen-webはOrganizationではなくTeam単位で作るものであることに注意。
Boxen自体にプロジェクト単位やチーム単位でセットアップする設定を書けるので、AllみたいなTeamを作って全員このTeamに含めてしまうのがいいのではないだろうか。
OrganizationとTeamの作り方はGoogle先生に聞いてほしい。Teamには固有のID(整数)が割り振られる。それについてはTeamのページのURLを見れば分かる。このIDは後で必要になる。
GitHub OAuth Applicationの用意
OrganizationのOrganization Applications設定へ行って"Register new application"を押す。
下記のNAME
はHerokuに作るアプリケーションの名前に置きかえる。
項目 | 値 |
---|---|
Application Name | Boxen Web |
Main URL | https://NAME.herokuapp.com |
Callback URL | https://NAME.herokuapp.com/auth/github/callback |
boxen-webを用意
cd ~/src
git clone git://github.com/boxen/boxen-web.git
cd boxen-web
ローカルで動作確認する
boxen-webの動作確認をローカルですることができる。必須ではないので、一旦ここは飛ばしていきなりデプロイしていい。デプロイが上手くいかなかったらここに戻ってくる。
まず、前提としてHerokuなのでDBはPostgreSQLである。またそのPostgreSQLはBoxenでセットアップされたものでなければならない。
# 追記
github "postgresql, "1.0.0"
そして下記を実行する。上手くいかなかったら自分のmanifestにinclude postgresql
と追記してscript/boxen
を実行する。
cd ~/src/my-boxen
script/boxen postgresql # PostgreSQLをインストール
次にboxen-webをインストールする。
script/bootstrap
続いて以下の環境変数を設定する。一つでも欠けているとエラーになる。
名前 | 値 |
---|---|
REPOSITORY | GitHub上でのリポジトリの名前 |
GITHUB_CLIENT_ID | OAuth Applicationで作ったやつ |
GITHUB_CLIENT_SECRET | OAuth Applicationで作ったやつ |
GITHUB_TEAM_ID | アクセスを許可するTeamのID |
SECRET_TOKEN |
$ rake secret で取得する |
rake db:migrate
script/server
するとローカルでサーバが立ち上がる。http://localhost:9393 にアクセスしてみる。エラーが起きなければOK。500が発生する場合は環境変数がおかしい可能性が高いので確認する。
Herokuにデプロイ
Herokuの準備
- Herokuのアカウントを持っていない人は http://get.heroku.com でアカウントを作る。
- https://toolbelt.heroku.com からHeroku Toolbeltをダウンロードしてインストールする。これはHerokuを使うためのCLIツール。
-
heroku login
を実行するとメールアドレスとパスワードを聞かれるので正しく入力する。
Herokuにアプリケーションを作る
NAME
はGitHub OAuth Applicationで設定したものと同じにする。
# ~/src/boxen-webで下記を実行
heroku create NAME
これで空のアプリケーションが作られた。gitのremoteが設定されていればOK
git remote -v
#=> heroku git@heroku.com:NAME.git (fetch)
#=> heroku git@heroku.com:NAME.git (push)
#=> origin git://github.com/boxen/boxen-web.git (fetch)
#=> origin git://github.com/boxen/boxen-web.git (push)
デプロイ
Heroku用の環境変数を設定してデプロイする。環境変数の値は前述した「ローカルで動作確認する」参照。
# ~/src/boxen-webで下記を実行
heroku config:set \
REPOSITORY=user_or_organication/repo_name \
GITHUB_CLIENT_ID=your_github_client_id \
GITHUB_CLIENT_SECRET=your_github_client_secret \
GITHUB_TEAM_ID=team_id \
SECRET_TOKEN=your_secret_token
git push heroku master
heroku run bundle exec rake db:migrate
https::NAME.herokuapp.com にアクセスしたらGitHubにリダイレクトされるのでアクセスを許可。再びherokuapp.comにリダイレクトされて "WELCOME TO BOXEN" という画面が表示されればOK
新しいMacをboxen-webでセットアップする手順
Boxenの管理者がすること
その人の設定が既にBoxenにある場合、例えばMacを新しく買い換えた場合、は特にすることはない。
新しくメンバーが加わった場合は以下を実行する。
- GitHubアカウントを教えてもらう
- OrganizationのTeamにその人を追加する
- Boxenのリポジトリにmodules/people/manifests/ACCOUNT.ppを作る
- その人のための設定を書く
- 忘れずにGitHubにgit-pushする
boxen-web利用者がすること
- GitHubアカウントを持っていなければ作る
- 必要に応じて公開鍵を設定する(Boxenでアクセスするプライベートリポジトリに正しくアクセスできるようにするため)
- Xcodeをインストールする(CLIでもGUIでもどちらでもOK)
- https://NAME.herokuapp.com にアクセスする
- ワンライナーを端末にコピペ実行してしばらく待つ
- .zshrc(や.bashrc)に下記を追記する
[ -f /opt/boxen/env.sh ] && source /opt/boxen/env.sh
[ -f /opt/boxen/nvm/nvm.sh ] && source /opt/boxen/nvm/nvm.sh