VMwareによるソフトウェア開発部門の効率性改善 (20061219-1)

2/19/2008   |   原文はこちら (English)
(この記事は、virtualization.info英語版に2007/05/22に掲載された記事です。)

社内や顧客向けにソフトウェアを開発している企業なら、新製品のリリースがいかに複雑で費用や時間がかかる作業かはご存じだろう。

開発チームメンバーは、それぞれが別々にコードを開発し、必要に応じてそれを共有し、同じ、もしくは異なる環境でビルドやリビルドを行い、QA(品質保証)担当エンジニアが本番環境への最終的な導入が完了するまで複数のコンフィギュレーションやシナリオでテストを行う。ここでは、コントロールしきれない複数の要因があり、それが安定性や信頼性を損なう可能性がある。

これまでITマネージャーには、この技術的な問題を緩和したり、リリースまでの流れをスムーズにしたりすることは、ほとんどもしくは全くできなかった。ところが、サーバの仮想化がすべてを変えさせ、これがプロセス改良の向けた第一候補の1つとなった。

本稿では、VMware仮想インフラの導入が開発部門の遭遇する問題をどのように削減し、予期せぬレベルで新製品投入までの時間を短縮していく様子を見ていく。

仮想化ソリューションを用意している会社はVMwareだけではないが、幅広い製品を取りそろえ、プラットフォーム間でのシームレスな仮想マシンの移行機能を用意していることから、このシナリオには同社が最良の選択となる。

典型的な問題

ソフトウェアの開発で真っ先に遭遇する問題が環境の整合性だ。

多くのソフトウェアエンジニアにとって、日常使う自分のワークステーションに自分の開発ツールを用意しておくのはあたりまえのことだ。新しいプロジェクトが始まっても、彼らの大半は、Webをブラウジングしたり、電子メールを読んだり、ビデオやプレゼンテーションを鑑賞するのと同じ環境でコーディング作業も開始する。その環境でゲームをプレーすることも多い。

このようなシステムは、開発中の製品が稼働するであろう顧客の新しく設置される環境のように、余分なものの一切ない、完全なものでなくてはならない。ただ、そういうことは残念ながら非常に少ない。

多くの日常業務に利用されているということは、多数のソフトウェアがインストールされていているということで、ライブラリがたまっていたり、ハイレベルのパーミッションを要求していたり、環境変数が変更されていたりする。もちろんマルウェアが感染している可能性もある。

このような要因が重なって、開発したコードは簡単に動いたり動かなかったりするが、さまざまな形でOSが変更されている別のマシンにこれを移動すると、また別の結果が生まれ、そのために複雑化で時間のかかるトラブルシューティングをすることになる。

もう1つ、複雑なプロジェクトのスケジュールを頻繁に遅らせる問題が環境のポータビリティ性だ。

ソフトウェアアーキテクトやエンジニア、そしてプロダクトマネージャーは、開発プロセス全体のどこでどのように製品が成長するかを検証したり、ルーチンの改善やデバッグに向けて協力する必要がある。

1台のモニタの周辺にたくさん人を集めたり、開発環境へのリモートアクセスを許可するのは現実的とは到底言えない。また逆に、OS間でコードを移植するのも簡単ではない。

どうしても認められないが、これは環境の整合性だけではなく、コードの実行に必要なパーツをすべて提供するという単純な事実にも依存している。

たとえば、開発者が良くやるように、データベースインスタンスを自分のマシンにインストールしていたり、全員がアクセスできない専用のネットワークセグメントにあるリモートインスタンスに依存していると、データベースアクセスを基本にするアプリケーションはどれも共有するのがかなり難しい。

しかし、たとえデータベースがなくても、開発チームにはライブラリや(多層アプリケーションの場合は)コードと一緒に移動しないほかのサービスも必要になる。

3つ目の一般的な問題が物理リソースの不足だ。

ローカルにインストールされたサービスに依存しなくて良いくらいの知識がソフトウェアエンジニアにある場合は、彼らのために導入され、構成され、そして通知された、リモートからアクセスできるサービスが必要になる。

これには時間が必要だが、とりわけ、マシンが当たり前のように利用できないことが大きい。

同様に、メモリの増設やネットワークインターフェースカードの追加など、開発中にハードウェアコンフィギュレーションの変更を余儀なくされることも多い。 新しいコンポーネントの追加は、OEM各社からハードウェアを入手して在庫しておくような大企業になるほど複雑化する。

しかし、ソフトウェア開発のためのマシンの数は、必要なサービスの導入場所の数だけに限定されるわけではない。また、会社がサポートしたいシステムの数にも依存する。

QAエンジニアは、同じOSの複数のバージョンで同じコードを試用し、想定通りの動作をするかどうか確認しなくてはならない。Windowsの複数のエディションで異なるパーミッションのレベルを使ったり、複数のLinuxディストリビューションに含まれる各種ライブラリを使ってテストする。

これらのためにはすべて専用のマシンを使うことが必要であり、また新しいアプリケーションの開発が複数同時に進むことで、作業は大きく複雑化する。

いったん開発者やスト担当者のハードウェア不足が解消されれば、次に問題を抱えるのがITマネージャーであることに注意しておきたい。

大規模プロジェクトが完了すると、次のプロジェクトが始まるまで無駄になり、時代遅れになってしまう複数のコンピュータが手元に残り、それらの一部もしくは全部の交換を余儀なくされる。

たとえ十分なリソースがあっても、ソフトウェアエンジニアやテスト担当者は、最大の脅威となる時間不足のリスクに対応せざるを得なくなる。

ロジスティック的なオペレーションが長引くと開発に大幅な遅れが出て、コーディング担当者は自分の作業に集中できなくなる。

たとえば、環境との整合性に対する必要性を認識すれば、常に新しいインストレーションでデバッグ作業を行うようになる。だが、このようなことは開発者がOS全体を毎回ゼロから再インストールしなければ不可能だ。

しかし、そこまで注意しなくても、開発されたコードにインストーラが含まれる場合は、まっさらなOSで作業をすることが重要になる。

作業時間の不足にはテスト担当者も関心を持っているが、彼らはコードの動作を検証するプラットフォームごとに複数の物理マシンが必要であるだけでなく、同じOSを何度も再インストールする必要がある。これは、前回のインストレーションが失敗だったり、単に異なる言語、サービスパック、あるいは同時に実行されるアプリケーションをテストしたりするためだ。

基本的に、テストケースはすべて専用の環境で実施する必要があり、それには相当な努力が必要だ。ディスクのバックアップソリューションが用意されていても、変化する可能性があり全く新しいイメージセットの保存を必要とする基盤のハードウェアへの依存や、レストアの回数を考えれば、これもさほど役に立たない。

開発フェーズの改善

VMwareで最も人気が高く古い製品である「VMware Workstation」は、ソリューション全体のなかで最も重要なものでもある。

Workstationは、前述のソフトウェア開発における問題で最も大きな部分に対処できる各種機能を用意している。

ソフトウェアエンジニアがこれを試し、それでもなお従来のツールを使い続ける可能性はゼロに近い。

Workstationが対処する最初の問題は環境との整合性に関するものだ。開発者とテスト担当者は、Snapshot機能に期待できる。この機能は、仮想マシンの状況を保存し、必要に応じていつでもその状態に戻すことができる。

スナップショット機能を駆使すれば、開発者は仮想マシンに全く新しいOSをインストールし、新しいコードの開発に必要なツールをすべてそろえ、それからスナップショットを保存するという使い方ができるようになる。

この操作は、毎日使うワークステーションと完全に隔離されたきれいな環境を実現する。

このシナリオでは、開発者が開発作業空間を危険にさらすことなく、自分のマシンでWebをブラウジングしたり、電子メールを読んだり、ゲームを楽しむことさえできてしまう。

セキュリティを最大限に高めるため、仮想マシンは本物のネットワークカードから完全に切り離すことができるので、リモート攻撃やウイルスの感染によって作業空間が危険にさらされる可能性はゼロになり、セキュリティ維持のためにOSに頻繁にパッチをあてたり、ウイルス対策ソフトをインストールする面倒もなくなる。

しかし、作業空間が危険にさらされなくとも、プロジェクト期間中にライブラリやユーティリティなどが増えすぎてしまう可能性はある。

このような場合は、ソフトウェアエンジニアがプロジェクト完了直後に最初のスナップショットを呼び出せば数秒でクリーンな状態に戻る。

Snapshot機能はかなり進化しており、QAにとっても必須のツールとなっている。

互換性テストの進行中は、新しいアプリケーションが自社もしくはサードパーティー製の複数の異なる製品と一緒に正しく動作することをテスターが確認しなくてはならない。

スナップショットマネージャは、同じ仮想マシンの複数の状況を保存することができるため、テスターは環境全体を毎回再インストールすることなく、アプリケーションを次々にインストールできる。

たとえば、新しい試作アプリケーションと「Microsoft Office」や複数のサービスパックとの互換性をテストしなくてはならない場合に最も適しているのは、インストールしたばかりのOSのスナップショットを保存し、サービスパック未適用のOfficeをインストールしてから次のものを保存し、サービスパックを適用してからさらにもう1つ保存する、というアプローチだ。

ここまで来たら、テスト担当者は自分のコードのインストレーションに進むことができる。

もし何らかの問題が発生したり、同じインストレーションを別のサービスパックでテストしたいような場合は、サービスパックをインストールする前のスナップショットに戻るだけでよい。

仮想化を行わず、多くの異なる物理マシンで同じことをしようとすれば、その作業は数時間から数日に及んでしまう。

このプロセスは、スナップショットの複数の分岐やリンククローンといったWorkstationの機能のおかげでさらに改善することができる。

スナップショットの複数の分岐機能を使えば、既に取得済みのスナップショットをオリジナルの仮想マシンイメージとして設定することができ、そこから新しいスナップショットを取得できるようになる。

リンククローンも同じように機能するが、オリジナルの仮想マシンのイメージがある場所から新しいスナップショットを分離する。

いずれの機能も、オリジナルの仮想マシンに既にあるものはコピーせず、将来の作業に向けて参照するだけなのでQA作業には特に有益だ。

より明確にするため、先の例を再考する。新しいアプリケーションとMicrosoft Officeの複数のバージョンやサービスパックとの互換性を検証しなくてはならないテスト担当者は、全く新しいOSのスナップショットを取得する。

このスナップショットの上からOffice 2003をインストールしたら、QAエンジニアは、まっさらなOSのインストール後に取得したスナップショット上で新しい出発点を設定できるようになる。

ここまでくれば、「Office 2003」に「Service Pack 2」を適用したり、「Office 2000」に「Service Pack 1」を適用する前に、分岐ごとに新しいスナップショットを呼び出せる。

アプリケーションは、これらすべての環境でテストすることができ、「Snapshot Manager」がスナップショットやリンククローンの作成や削除を容易にする。

スナップショットとリンククローンは、新しい開発やテスト環境の準備に必要な時間を劇的に短縮するだけでなく、既に解説した物理リソース不足の重要な問題にも対処する。

これらがあれば、QAエンジニアがテスト環境ごとに新しい仮想マシンを用意する必要はなくなり、スナップショットの複数の分岐やクローンを格納するのに十分なハードディスク容量だけでよくなる。

Workstationが搭載するもう1つの優れた機能が、開発とテストの両方で便利な「Teaming」だ。

Teamingを使えば、複数の仮想マシンを論理的にリンクさせ、これらを同時に起動することができる。

またユーザは、シミュレートされたスピードで、仮想マシンの間で仮想的な接続を確立できるようにもなる。

したがって、多層アプリケーションを開発中のソフトウェアエンジニアがモデムやブロードバンド回線を使ったときのコードの動作をコントロールしたり、ユーザビリティのテスト担当者がユーザーエクスペリエンスを損なわずにネットワーク対応アプリケーションを動作させるのに必要な帯域幅を検証できる。

ポータビリティへの対応

前述の通り、VMwareソフトウェア最大の利点は、異なる製品間でシームレスに仮想マシンを共有する機能だ。

これにより、開発者が修正したものを持たずに移動したり、自分の作業を別のチームメンバーやプロダクトマネージャーに見せることができるだけでなく、アプリケーションを別の仮想化環境に移植して、そこでコードをテストしたり、本番環境に投入できるようにもなる。

新しいソフトウェアの入った仮想マシンは、フォルダをコピーするのと同じくらい簡単にWorkstationからServer(VMwareが無償で提供しているエンタープライズ仮想化製品)へ移動できる。

そこでは、互換性やユーザビリティのテストを行ったり、負荷テストを実施してパフォーマンスを検証することもできる。

QAフェーズが終了したら、データセンタ用途向けの「ESX Server」に同じ仮想マシンを再度移動して本番環境に組み入れる。

問題が発生したら、これらのプラットフォーム間で仮想マシンを移動し、不具合にパッチをあてたり、新しいコンフィギュレーションをテストすることができる。

また、もし顧客が現場で新製品のデモを見たいような場合は、同じ仮想マシンを再び移動してVMwareのデスクトップ用無償仮想化製品である「Player」に入れ、これを世界中のセールスマネージャに配布できる。

結論

仮想化が革命をもたらしているのは、データセンタのプラニングや導入の側面だけではない。IT業界で最も重要なアプリケーション開発にも影響を与えているのだ。

VMwareは競合各社より先にこれに気付き、エコシステム全体の構築を進め、非生産的な時間を短縮することでソフトウェアエンジニアの効率性を改善している。

副次的な利点として、仮想技術を完全採用する企業は、より安全な環境と、新規顧客の獲得に向けた柔軟な手法を手に入れることになる。しかし、これはほんの始まりに過ぎない。以前の作業はすべて手動で行われていたが、VMwareは「Virtual Lab Manager」と呼ばれる製品でこれらの一部を自動化してきた。

これにより、大企業におけるソフトウェア開発フェーズのコントロールと最適化が簡略化される。これらの大企業では、複数の部署が別々の開発ツールを選定しているが、仮想マシンのイメージを必須のテスト用と本番用の両方の仮想インフラで活用するべきだ。

完全な自動化もすぐそこに迫っており、ソフトウェア開発のライフサイクルも新たな時代を迎えつつある。

本稿は当初SearchServerVirtualizationに掲載されたものです。

*ご注意:本稿は、昨年英語版サイトで最も閲覧されたニュースのうちの一つとして掲載しております。そのため一部情報が古い可能性もございます。 なお、原文はこちらをご参照ください。