グリーの開発環境(歴史と概要)

こんにちは。グリーでインフラ的なお仕事をしているsotarokです。今回は、グリーの開発環境についてお話します。

グリーの開発環境

開発環境どうするか、という問題はエンジニアリングをしている会社であれば誰しも一度は悩んだことのある問題だと思います。開発環境の作り方は、会社やサービスの規模、事業の形態などによって様々ですし、割と小さな規模から「歴史的な経緯」を経て成長してくることが多く、これといったスタンダードがあるわけでもありません。
グリーでも初期の頃から、いくつかの経緯を経て現在の開発環境があります。これは、特に画期的な開発環境やスタンダードに合わせてつくったわけではなく、日々の業務のなかで、あれこれ困ったことやより便利にしたいことなどを解決していくうちに作り上げられたものです。

今回は、グリーの開発環境の移り変わりと、今後の開発環境づくりについてお話させていただきます。

初期の頃の開発環境

グリーが比較的小規模だったとき、開発は全員が1台のマシン上に開発環境をつくり、ローカルからsshでアクセスしてそのマシン上で作業をするという形態をとってきました。
次のようにディレクトリを区切り、何番のディレクトリを誰が使っているのかをwikiで管理していました。

それぞれのディレクトリに、VirtualHost でドキュメントルートを設定し、それぞれのホストをそれぞれの開発環境へのURLとして開発を行ないます。開発環境へのHTTPアクセスは社内からのみ許可されている形です。この場合、すべての開発者が同一のマシンにアクセスし、ホスト名によって各自の環境への振り分けをおこなっています。

ソースコードの開発以外のところでは、環境は以下のようになっています。

  • ソースコードは Subversion で管理 (*1)
  • 開発環境用のDBやキャッシュサーバは全員で共通のものを使用。

イメージ図:

さて、1台のマシンで開発をするモデルは、環境を作り易く、非常に運用しやすいのですが、

  • リソースが足りなくなる (例えばみんなで svn up する、など重い処理をすると全員に影響する)
  • 環境が統一されているので、新しいライブラリなどをつか合う場合も他の人に影響する (実験的なバージョンアップなどもしづらい)

など、使いづらい面も多くあります。
そして、このどちらの問題も、そこそこの人数で割とすぐに、クリティカルな問題になってしまいます。

現在の開発環境

やがて人も増え、ひとつのマシン上で全員が作業をすることは困難になったため、1人1台の開発環境用マシンを持つようになりました。現在は、このモデルで運用されています。
入社時には開発用マシンとしてで1台マシンが渡され、手順にしたがって開発環境を各自で作成し、サーバルームに設置する形です。DBやキャッシュサーバは開発環境向けのものを全員で共有する点にかわりはありません。

1人1台の開発環境をもつメリット・デメリットは、概ね次のようなことが挙げられます。

  • メリット
    • リソースが独占できる
    • 好き勝手いじれる環境を持てる (ソースコードをいじる場合でも、実験的なライブラリなどを作成・導入する場合でも、他の人を気にする必要があまりない)
  • デメリット
    • 管理が一元化できない
    • コストがかさむ

イメージ図:

さて、そうはいってもこのモデルでは、人が増えればサーバルームの容量もたくさん必要になりますし、各人1つずつのマシンをもっていても、リソースの余った状態ではもったいないので、有効活用したいところです。というところをもう少し考えればコスト面でも、きっとお得です。

そこで、現在進められているのが、新世代の開発環境をつくるためのプロジェクトです。

新世代開発環境

新しい環境を作るにあたっては、今後人が増えても運用コストがかさまず、各個人の環境も使いやすいものをつくらなければいけません。
求められる環境は、

  • 簡単に作成できる (ワンクリックでセットアップしたりしたい)
  • 一元管理できる
  • 使用状況によってリソースの割り当てを動的に変えられる
  • 省スペース

あたりです。
そこで、現在、開発環境の仮想化プロジェクトを進めています。そうです、時代はクラウドです(!!!)。

昨今は仮想化するためのソフトウェア/ハードウェアも色々な選択肢がありますが、コスト面や柔軟性の面で、今回はXenを導入することにしました。
Xenの特に素晴らしい点が、Xen APIが非常に充実しているところです。Xenは(特に国外では)多くのホスティングサービスのVPSにも利用されていますので、実績も十分かと思います。ということで、Xenを採用して開発環境構築することのできるプラットフォームを構築することにします。

イメージとしては、こんなかんじです。

まとめ

というわけで、今回はグリーの開発環境について、これまでのものとこれからのものについて、概要だけ述べました。
次回から現在進められている新世代の開発環境に必要ないくつかの要件と、具体的な環境開発の実装について話していきたいと思います。

*1: Git にしたい・・・!ですが、グリーの開発はSubversion上での開発に非常に最適化されています。まあ、その話は機会があればまた。