大“仮想”!! 開発環境の
劇的ビフォーアフター
【特集】プログラマが仮想化でラクをするための4つのコツ
有限会社 スティルハウス
吉川 和巳
2008/11/18
仮想化ソフトは開発環境を生み出す“打ち出の小づち”
今回の主な内容 ・ 仮想化ソフトは開発環境を生み出す“打ち出の小づち” ・ 【ビフォー】開発環境の構築は難しくて面倒だ! ・ プログラマはこうして仮想化でラクできる ・ 【アフター】さまざまな問題を解決してくれた「仮想化」 |
プログラマの日々の開発作業に欠かせない「7つ道具」として、あなたなら何を挙げるだろうか?
使い慣れたエディタやIDE、機能豊富なWebブラウザ、参考になるサイトや書籍、Wikiとバグトラッカー(バグ管理システム)、Instant Messanging(以下、IM)やSkype、打ちやすいキーボード、疲れにくい椅子などなど……無数にあることだろう。
筆者にとっての最も重要な道具の1つは「仮想化ソフトウェア」だ。なぜなら、「仮想化ソフトウェアは、開発環境をポンポンと生み出すことのできる“打ち出の小づち”だからだ」といっておこう。
■ 構築にとても時間のかかる開発環境を簡単にコピー
筆者が仮想化ソフトウェアを使い始めたのは4年ほど前。仮想化ソフトウェアの導入によって、OSをクリーン・インストールした真っさらなPC(仮想マシン)を用意したり、構築にとても時間のかかる開発環境をいくつもコピー(クローン)したりといったことが、ほんの数回のクリックであっという間に実行できた。
■ 仮想化による“タイムカプセル効果”
予想外だったのは、仮想化による“タイムカプセル効果”である。
例えば、2〜3年前に開発したシステムについて突然のトラブル対応依頼があったときでも、慌てる必要はない。OSや実行環境、IDEの構成はもちろん、デスクトップのアイコン配置やブックマークさえタイムカプセルのごとく残されているので、素早くスムーズな対応が可能となった。
■ 手抜きのレガシー・マイグレーション
また、Windows 2000やRed Hat Linux 7といった古いOSしかサポートしないシステムも、仮想マシンに載せておけば最新のPC上でいつまでも継続運用できる(つまり、“手抜きのレガシー・マイグレーション”である)。
■ 仮想化ソフトを使わないのは“不便”
このように筆者の場合、仮想化ソフトウェアを使わずに開発環境を構築するという“不便”なことは、あまり行わなくなった。「仮想化ソフトウェアは、プログラマの開発環境構築を助ける画期的な発明品であり、7つ道具としての殿堂入りにふさわしい……」というのが、導入後4年を経た結論だ。
そこで本稿では、仮想化ソフトウェアの導入によって開発環境の構築作業がいかにラクになるか、そのビフォー・アフターを紹介したい。
【ビフォー】開発環境の構築は難しくて面倒だ!
オープンソース・ソフトウェアに大きく依存する現在のシステム開発では、アプリケーションの実行環境を整えるための「インテグレーション」の作業に大きな負担が掛かる。そのため、プロジェクトの初期に実施する開発環境の構築は、高いスキルが要求され、時間もかかる面倒な作業だ。
例えば、典型的なWebアプリ開発を想定すると、ざっと以下のような作業が必要となるだろう。
■ 【メンバーごとに必要な環境構築】
- 運用環境と同じバージョンおよび構成のOSをクリーン・インストールおよび設定(必要なパッチやアップデート、アクセス制限などの適用)
- プログラムの実行環境のビルドやインストール、設定(例:Javaのクラスパス設定やJava VMオプション指定)
- プログラムの開発環境(IDEやデバッガ、Webブラウザなど)のインストールと設定
- (アプリケーションサーバを手元で動かす場合は)アプリケーションサーバをインストールし、Apacheと連携(httpd.conf設定)
- (DBを手元で動かす場合は)DBのビルドやインストール、DBインスタンスの構築、パフォーマンス・チューニング設定
■ 【プロジェクトごとに必要な環境構築】
- 運用環境と同じネットワーク環境の用意(メールサーバやDNSサーバ、Apache、ファイアウォールなどの設定)
- CVSやSubversionなどのファイル(バージョン)管理サーバのインストール
- チーム内コミュニケーション用のグループウェアやWiki、バグトラッカー、メーリングリストなどの構築
- アプリケーションサーバや各種デーモンなどの自動起動やバックアップ・スクリプト、ビルド・スクリプトを設定
- メンバー間で共有する開発環境をはじめ、テスト用のステージング環境、本番用のプロダクション環境をそれぞれ構築
- 個々のメンバーが実施すべき環境構築手順のドキュメント作成
■ “手順”のメモやWikiの限界
こうしてあらためて書き出してみると、インフラまわりからネットワークやOS、DB、言語、ライブラリ、アプリケーションに至るまで、事細かな設定や構築作業が必要なことが分かる。
こうした環境構築の成果は通常インストール・メモとしてWikiなどを通じてメンバー間で共有するのだが、それでも「手順のちょっとした見落としなどで開発環境の構築に時間がかかり、なかなかコーディングを始められない」「特定のバグを再現させるための環境構築の時間が取れない」「不慣れなメンバーに環境構築の手順を逐一教えるために時間を取られる」……といった経験のある方も少なくないはずだ。
また、環境構築の手順に1カ所でも間違いがあれば、「Webアプリケーションが動かない」「バグが生じる/再現できない」「環境ごとに挙動の差異が生じる」といった現象によって足をすくわれる。「後で同じ環境を作り直すとき、メモしていない細かな作業手順をすっかり忘れて、前と同じ落とし穴にハマった」といったこともしばしばである。
■ 保守やテストでも頭の痛い開発環境
プロジェクトのカットオーバー後も、開発環境にまつわる悩みは尽きない。1つのOS上に複数のプロジェクトを混在させることは難しいし、開発中の作業効率(例えば、ビルドや再起動の速さ、DBやアプリケーションサーバの性能、頻繁なリブートなど)を考えると、それなりに性能の高いマシンを個々のプロジェクトの専用マシンとして割り当てる必要がある。
また、プロジェクトがカットオーバーを迎えても、開発元としての瑕疵(かし)担保責任や保守契約もあるので、しばらくは開発環境を維持する必要がある。その結果、立派なスペックを持ちながらもアイドル状態のまま放置されている開発・保守用マシンがどんどん増えていくのである。
テスト作業においても、開発環境の構築が大きなネックとなる。例えば、「英語版OSで動作検証したい」「OSのパッチを当てる/当てないで挙動が変わった」、「古いWebブラウザでのみバグが出る」といった状況では、いつもの開発環境とは別にマシンを用意して、上述した面倒な開発環境の構築をゼロから一通り実施しなければならない。そのため、こうした厄介なバグの対応は後回しになることも多い。
ここまでが「仮想化前」(ビフォー)の問題点である。では、「仮想化後」(アフター)にはこれら開発環境にまつわる課題をいかにして解決できるのか、次ページでは、筆者の事例を交えながら「4つの仮想化活用のコツ」を紹介しよう。
1-2 |
INDEX | ||
Page1 | ||
仮想化ソフトは開発環境を生み出す“打ち出の小づち” 【ビフォー】開発環境の構築は難しくて面倒だ! |
||
Page2 | ||
プログラマはこうして仮想化でラクできる 【アフター】さまざまな問題を解決してくれた「仮想化」 |
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|