大“仮想”!! 開発環境の
劇的ビフォーアフター


【特集】プログラマが仮想化でラクをするための4つのコツ

有限会社 スティルハウス
吉川 和巳
2008/11/18


プログラマはこうして仮想化でラクできる


【1】たっぷりのメモリと速いSSDをサーバに載せるべし

 まずは、仮想化ソフトウェアのホストマシンにふさわしい能力を備えたサーバを1台用意する。例えば2008年11月現在、筆者は以下のようなスペックのマシンを使用している。

  • Intel Core 2 Quad 2.4GHz
  • 4Gbytesメモリ(実際に利用可能な領域は3.4Gbytes程度)
  • HDD:Intel X25-M 80Gbytes SATA SSD

 例えば、VMware Workstation 6上で4台のLinux仮想マシン(メモリサイズ256Mbytes)と1台のWindows XP仮想マシン(メモリサイズ512Mbytes)を稼働させると、実質の消費メモリは合計で2〜3Gbytesとなる。よって、メモリは最低でも4Gbytes、理想的には64bitsのOSを載せて、それ以上のメモリを搭載するとよい。

 またHDDは、仮想化ソフトウェアで十分なパフォーマンスを引き出す“要”となる。仮想マシンのディスクI/O性能は一般に3分の2程度に低下するケースが多いため、できるだけ高性能のHDDを仮想マシンに割り当てる。例えば、アクセス速度が極めて高速なSSD(ソリッドステートドライブ)上に仮想マシンを作成することで、仮想化による性能低下を補って余りあるパフォーマンスが得られ、重ためのプロジェクトのビルドもこなせる。

 もっとも、SSDは容量が少ないため、プロジェクトのカットオーバー後は仮想マシンをHDDに移すといった使い分けが必要だ。

【2】仮想マシンの“テンプレート”をこまめに残すべし

 仮想マシンの最も便利な点は、すでに構築した仮想マシンを簡単にコピーできる点だ。よって、OS環境や開発環境を構築したら、随時コピーを残しておくことで、それをほかのプロジェクトでも再利用できる“テンプレート”として活用できる。

 例えば、あるプロジェクトで「CentOS 5上で動作するRuby on Rails(以下、Rails)ベースのWebアプリケーション」という環境が必要になったとしよう。

 この場合、まずは真っさらな仮想マシンを用意し、そこにCentOS 5をクリーン・インストールする。続いて、ホスト名やIPアドレス、DNS、アカウント、sshNTP、不要なサービスの停止など、どのプロジェクトでも必ず実施するような基本設定を行う。この段階で、仮想マシンのコピーを取って「CentOS 5のテンプレート」として残しておくのである。こうすることで、新しいCentOS環境が必要となるたびに同じような設定作業を繰り返す手間が省ける。

 続いて、RailsベースのWebアプリを稼働させるための実行環境づくりを進める。例えば、ApacheやMySQLRuby、Rails、Mongrel(Rubyで実装されたアプリケーションサーバ)といった定番ソフトウェアのビルドやインストール、設定を実施する。ここでも、仮想マシンのコピーを「Rails開発マシンのテンプレート」として残しておく。「真っさらなRails実行環境をすぐに用意したい」といった状況や、同じ環境で別のプロジェクトが開始したときに、このテンプレートはとても重宝するはずだ。

【3】PC丸ごとの開発環境を共有すべし

 仮想マシン上で開発対象のアプリケーションが稼働する環境を構築したときも、随時コピーを作成する。アプリケーションをCVSやSubversionからチェックアウトし、ビルドして実行できる環境が整ったら、仮想マシンのコピーを作成してチーム内の開発者やテスターに配布する。これにより、前述のような面倒かつ繊細な環境構築の作業は不要となり、すべてのメンバーが均質な開発環境を共有できる。

 もし開発環境としてWindowsベースの仮想マシンを作成するのならば、例えば日々の開発作業に必要なファイルやドキュメント、パスワードのメモ、ブックマークなどをあらかじめデスクトップに配置しておいたり、IDEのバージョン管理ツールやコーディング・ルールをプロジェクト標準のものに事前設定したり、VPNやIMを事前インストールするなど、PC丸ごとをあらかじめ用意した「標準的な開発環境のテンプレート」として全員に配布できる。まさしく“インスタント開発環境”だ。

図 仮想マシンで動作する開発環境(Flex Builderを使った例)
図 仮想マシンで動作する開発環境(Flex Builderを使った例)(画像をクリックすると、拡大します)

 ちなみに、各メンバーの開発環境として仮想マシンを配布する場合は、各メンバーが十分な性能のPCを持つことが前提となる。もしくは、リモート・デスクトップを用いて高性能のサーバにリモート接続し、そこで開発を実施するというシンクライアント形式も選択肢となるだろう。

【4】テストや保守で仮想マシンを役立てるべし

 Webサイトがリリースされたら、プロダクション環境とまったく同じ内容の実行環境をテンプレートとして残し、保守用の環境として利用する。もちろん、普段は仮想マシンを閉じておけば、サーバのリソースはまったく消費しないので、サーバは次のプロジェクトにフルに活用できる。

 また仮想マシンならば、テスト用の環境も手軽に用意できる。実際、筆者が参加したプロジェクトでは「Windows 2000でのみバグが出る」「英語版OSで国際化機能を検証したい」といったニーズが発生したとき、それぞれの環境を仮想マシン上で再現することで即日での対応が可能であった。

 さらに、デスクトップを含めたPC丸ごとの開発環境を残しておくことで、冒頭でも紹介した“タイムカプセル効果”が生じ、スムーズなトラブル対応が実現する。

 例えば、「古いファイルやブックマークは邪魔だから削除してしまった」「OSやIDEをバージョンアップしたので古いプロジェクトの設定は残っていない」といったことが起こらない。数年前のプロジェクトでも、デスクトップからIDE、Webブラウザ、OSのバージョンや設定に至るまで、当時の状態がそのまま保存されている。そのため、トラブル対応のために徹夜で環境構築をやり直し……といった悲しい状況を避けられるのである。

 また場合によっては、緊急時にプロダクション環境の代替として用いることも可能だろう。オフィスから自宅、そしてデータセンタへと物理的な制約なしにあらゆる場所に移動でき、ハードウェアの障害や旧式化を超えて不老不死で稼働し続けるのが、仮想マシンが「仮想」たるゆえんである。

【アフター】さまざまな問題を解決してくれた「仮想化」

 以上、本稿ではプログラマの7つ道具の1つとして、仮想化ソフトウェアをいかにして活用できるかを考えてきた。

 筆者の携わる現場では、かつて3〜4台の開発用サーバを仕事場に並べていたが、仮想化後は1台のサーバでほとんど事足りるようになった。これにより、コストや騒音、電源、空調、設置スペース、そして性能にまつわる諸問題が一挙に解決された。ちなみに2008年11月現在、この1台のサーバ上では5〜6台の仮想マシンが常時稼働しており、30〜40台程度の仮想マシンがいつでも起動可能な状態となっている。

 ここまで便利な“打ち出の小づち”が現在では3万円程度、あるいは無償で入手できるのであるから、使わない手はないだろう。この記事を読んだ読者で、まだ開発環境を仮想化してない方にはぜひ仮想化をお勧めする。

@IT関連記事


Java「仮想化」開発環境を検証
1つのマシン上に仮想マシンを複数用意することができる仮想化技術を導入し、Java開発環境としてのメリットを検証する
ユカイ、ツーカイ、カイハツ環境!
プロジェクトが愉快で痛快になるような開発環境/ツールを毎月紹介します
第1回 Trac Lightningで始めるチケット式開発「電撃」入門

第2回 SubversionとTracでファイル管理の“迷宮”から脱出
CoolなEclipseプラグイン
役立つプラグインを毎月紹介。第1回は「Javaのプロパティファイルエディタ」「Tomcatコントローラ」「HTML/JSP/XMLエディタ」

第20回 ERダイアグラムを編集するAmaterasERDでDB設計
第21回 Apache LDAP StudioでLDAPはもう怖くない
第22回 JavaScriptを書かずにAjaxを実現するjMaki
第23回 Mylyn&Tracでリズムに乗ってタスクを大掃除♪
第24回 これはすごい!? コード品質のカイゼン化プラグイン2種
組み込みシステムに吹く“仮想化”の風
特集:組み込み仮想化技術解説
 リアルタイム処理への応用を例に、組み込み分野における『仮想化技術』の適用イメージと、そのメリット・デメリットについて解説する

1-2  

 INDEX
  Page1
  仮想化ソフトは開発環境を生み出す“打ち出の小づち”
【ビフォー】開発環境の構築は難しくて面倒だ!
Page2
  プログラマはこうして仮想化でラクできる
【アフター】さまざまな問題を解決してくれた「仮想化」


Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間