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


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

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


仮想化ソフトは開発環境を生み出す“打ち出の小づち”


今回の主な内容

仮想化ソフトは開発環境を生み出す“打ち出の小づち”
【ビフォー】開発環境の構築は難しくて面倒だ!

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

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

 プログラマの日々の開発作業に欠かせない「7つ道具」として、あなたなら何を挙げるだろうか?

 使い慣れたエディタやIDE、機能豊富なWebブラウザ、参考になるサイトや書籍、Wikiバグトラッカー(バグ管理システム)、Instant Messanging(以下、IM)やSkype、打ちやすいキーボード、疲れにくい椅子などなど……無数にあることだろう。

 筆者にとっての最も重要な道具の1つは「仮想化ソフトウェア」だ。なぜなら、「仮想化ソフトウェアは、開発環境をポンポンと生み出すことのできる“打ち出の小づち”だからだ」といっておこう。

構築にとても時間のかかる開発環境を簡単にコピー

 筆者が仮想化ソフトウェアを使い始めたのは4年ほど前。仮想化ソフトウェアの導入によって、OSをクリーン・インストールした真っさらなPC(仮想マシン)を用意したり、構築にとても時間のかかる開発環境をいくつもコピー(クローン)したりといったことが、ほんの数回のクリックであっという間に実行できた。

仮想化による“タイムカプセル効果”

 予想外だったのは、仮想化による“タイムカプセル効果”である。

 例えば、2〜3年前に開発したシステムについて突然のトラブル対応依頼があったときでも、慌てる必要はない。OSや実行環境、IDEの構成はもちろん、デスクトップのアイコン配置やブックマークさえタイムカプセルのごとく残されているので、素早くスムーズな対応が可能となった。

手抜きのレガシー・マイグレーション

 また、Windows 2000Red Hat Linux 7といった古いOSしかサポートしないシステムも、仮想マシンに載せておけば最新のPC上でいつまでも継続運用できる(つまり、“手抜きのレガシー・マイグレーション”である)。

仮想化ソフトを使わないのは“不便”

 このように筆者の場合、仮想化ソフトウェアを使わずに開発環境を構築するという“不便”なことは、あまり行わなくなった。「仮想化ソフトウェアは、プログラマの開発環境構築を助ける画期的な発明品であり、7つ道具としての殿堂入りにふさわしい……」というのが、導入後4年を経た結論だ。

 そこで本稿では、仮想化ソフトウェアの導入によって開発環境の構築作業がいかにラクになるか、そのビフォー・アフターを紹介したい。

【ビフォー】開発環境の構築は難しくて面倒だ!

 オープンソース・ソフトウェアに大きく依存する現在のシステム開発では、アプリケーションの実行環境を整えるための「インテグレーション」の作業に大きな負担が掛かる。そのため、プロジェクトの初期に実施する開発環境の構築は、高いスキルが要求され、時間もかかる面倒な作業だ。

 例えば、典型的なWebアプリ開発を想定すると、ざっと以下のような作業が必要となるだろう。

【メンバーごとに必要な環境構築】

  • 運用環境と同じバージョンおよび構成のOSをクリーン・インストールおよび設定(必要なパッチやアップデート、アクセス制限などの適用)
  • プログラムの実行環境のビルドやインストール、設定(例:Javaのクラスパス設定やJava VMオプション指定)
  • プログラムの開発環境(IDEやデバッガ、Webブラウザなど)のインストールと設定
  • (アプリケーションサーバを手元で動かす場合は)アプリケーションサーバをインストールし、Apacheと連携(httpd.conf設定)
  • (DBを手元で動かす場合は)DBのビルドやインストール、DBインスタンスの構築、パフォーマンス・チューニング設定

【プロジェクトごとに必要な環境構築】

  • 運用環境と同じネットワーク環境の用意(メールサーバDNSサーバ、Apache、ファイアウォールなどの設定)
  • CVSSubversionなどのファイル(バージョン)管理サーバのインストール
  • チーム内コミュニケーション用のグループウェアやWiki、バグトラッカー、メーリングリストなどの構築
  • アプリケーションサーバや各種デーモンなどの自動起動やバックアップ・スクリプト、ビルド・スクリプトを設定
  • メンバー間で共有する開発環境をはじめ、テスト用のステージング環境、本番用のプロダクション環境をそれぞれ構築
  • 個々のメンバーが実施すべき環境構築手順のドキュメント作成

“手順”のメモやWikiの限界

 こうしてあらためて書き出してみると、インフラまわりからネットワークやOS、DB、言語、ライブラリ、アプリケーションに至るまで、事細かな設定や構築作業が必要なことが分かる。

 こうした環境構築の成果は通常インストール・メモとしてWikiなどを通じてメンバー間で共有するのだが、それでも「手順のちょっとした見落としなどで開発環境の構築に時間がかかり、なかなかコーディングを始められない」「特定のバグを再現させるための環境構築の時間が取れない」「不慣れなメンバーに環境構築の手順を逐一教えるために時間を取られる」……といった経験のある方も少なくないはずだ。

 また、環境構築の手順に1カ所でも間違いがあれば、「Webアプリケーションが動かない」「バグが生じる/再現できない」「環境ごとに挙動の差異が生じる」といった現象によって足をすくわれる。「後で同じ環境を作り直すとき、メモしていない細かな作業手順をすっかり忘れて、前と同じ落とし穴にハマった」といったこともしばしばである。

保守やテストでも頭の痛い開発環境

 プロジェクトのカットオーバー後も、開発環境にまつわる悩みは尽きない。1つのOS上に複数のプロジェクトを混在させることは難しいし、開発中の作業効率(例えば、ビルドや再起動の速さ、DBやアプリケーションサーバの性能、頻繁なリブートなど)を考えると、それなりに性能の高いマシンを個々のプロジェクトの専用マシンとして割り当てる必要がある。

 また、プロジェクトがカットオーバーを迎えても、開発元としての瑕疵(かし)担保責任保守契約もあるので、しばらくは開発環境を維持する必要がある。その結果、立派なスペックを持ちながらもアイドル状態のまま放置されている開発・保守用マシンがどんどん増えていくのである。

 テスト作業においても、開発環境の構築が大きなネックとなる。例えば、「英語版OSで動作検証したい」「OSのパッチを当てる/当てないで挙動が変わった」、「古いWebブラウザでのみバグが出る」といった状況では、いつもの開発環境とは別にマシンを用意して、上述した面倒な開発環境の構築をゼロから一通り実施しなければならない。そのため、こうした厄介なバグの対応は後回しになることも多い。

 ここまでが「仮想化前」(ビフォー)の問題点である。では、「仮想化後」(アフター)にはこれら開発環境にまつわる課題をいかにして解決できるのか、次ページでは、筆者の事例を交えながら「4つの仮想化活用のコツ」を紹介しよう。

  1-2

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


Java Solution全記事一覧



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

注目のテーマ

Java Agile 記事ランキング

本日 月間