GitHub社内のDevOpsを支えるツール「Boxen」と「Hubot」(前編)~DevOps Day Tokyo 2013
世界中でDevOpsのイベントとして行われている「DevOps Days」の東京版「DevOps Day Tokyo 2013」が9月28日に開催、海外から来日した多くのゲストスピーカーによるセッションが行われました。
GitHubのJohn Britton氏は「Ops for Everyone」(みんなの運用)という題で、GitHub社内で開発から運用までをデベロッパー自身が行うためのツール、BoxenとHubotの紹介と社内の利用例を解説しています。
Ops for Everyone
John Britton氏。
GitHubでエンジニアと教育の橋渡しをしています。

私は以前、運用というのはあごひげを生やしたようなオタクがやるものだと思っていました。でもそれは間違っていました。

その話をする前に、弊社の理念をお話しましょう。弊社のプロジェクトは、つねに社の理念を念頭において進めています。
GitHubの4つの理念
理念の1つめは「Collaboration」です。孤軍奮闘するよりもチームワークを重んじます。これは運用にも同じことがいえるでしょう。

次は「Automation」。つまり同じ仕事は二度とやってはならないと考えています。雑務を減らす、ということです。

「Experimentation」、実験です。そのために環境が新しいことを試しやすいようになっているべきです。

「Distribut-ation?」、分散型であれ、ということ。誰か一人、あるいは少数の人だけが分かっているよりも、チーム全体で運用がわかっていれば、人為的な単一障害点をなくすことができます。

この4つの理念をどう実装していくのか。2つのオープンソースプロジェクトについて話しましょう。どちらもGitHubで開発したものです。
理念をツールで実装する
1つは「Boxen」。デベロッパーのマシンを管理するためのツール。GitHubには200人近くの従業員がいますが、みんなこれを使ってコンフィグしています。

もう1つは「Hubot」。Hubotはロボットで、チャットルームにいていろんな操作をチャットで実行できます。

Boxenで開発環境を自動構成
まずは「Boxen」から。その目的は雑務を減らすことで、Boxenのおかげで入社した人でもビルド作業がその日からできるようになります。
一般に多くの会社で開発環境を整えるのには手間がかかり、1週間くらいかかってもおかしくありません。こんな大きなコストが、Boxenを採用することで省略できます。

GitHubに入社した私は、初日に新しいMacbookをもらいました。そしてまずXcodeのコマンドラインツールをインストールします。これはアップルの規約上、マニュアルでのインストールが必要です。

次に、curlコマンドをコピペしてターミナルから実行します。bashのスクリプトがダウンロードされて実行され、続いてGitHubのユーザー名などを入力すると、あとは待つだけです。

通信速度にもよりますが、全部をダウンロードするのに速くて1時間。終了するとこんな環境が入っています。これでWebアプリケーションをローカルマシンでテストできるようになります。

次は、プロジェクトを選択します。例えばGitHubを選択するときはこのコマンドです。あとはコーディングに取りかかればいい。

Mac版のPuppetみたいなもの
Boxenはどう動いているのか、GitHubの依存関係をどうやって知るのでしょう。そのために、まずProject Manifestファイルがあります。

Boxenはこうした依存関係をもとに、GitHubのプロジェクトをクローンしてくれます。中身はPuppetです。
それからみんなテキストエディタなどの好みがありますし、開発ニーズも違うかもしれないので、それらを記述するPersonal manifestファイルもあります。
つまりこれはMac版のPuppetみたいなものなのです。

≫後編に続きます。後編ではデプロイや運用を支えているチャットのロボット、Hubotについて。
DevOps Day Tokyo 2013
- 運用を見える化することでDevOpsを前進させよう(前編)~DevOps Day Tokyo 2013
- 運用を見える化することでDevOpsを前進させよう(後編)~DevOps Day Tokyo 2013
- GitHub社内のDevOpsを支えるツール「Boxen」と「Hubot」(前編)~DevOps Day Tokyo 2013
- GitHub社内のDevOpsを支えるツール「Boxen」と「Hubot」(後編)~DevOps Day Tokyo 2013
- クックパッドのインフラ責任者が語る、DevOpsを成功させる考え方「迷ったら健全な方を選ぶ」~DevOps Day Tokyo 2013
DevOps Day Tokyo 2012
あわせて読みたい
GitHub社内のDevOpsを支えるツール「Boxen」と「Hubot」(後編)~DevOps Day Tokyo 2013
≪前の記事
運用を見える化することでDevOpsを前進させよう(後編)~DevOps Day Tokyo 2013