2011年10月26日水曜日

アプリ仮想化の成功率を上げる5つのポイント


アプリ仮想化の成功率を上げる5つのポイント
ThinApp App-V


アプリケーションを仮想化した後に、動作検証を行うと思います。


一発でうまく動く場合もたくさんありますが
世の中そんなに甘くないです。

うまく動かない。。。


そんな事があると思います。
では、どうやったら成功率を上げることができるのかについて書きたいと思います。

アプリ仮想化は、こうやったら絶対に成功する!というよりも
こうしたら失敗する可能性が高まる。というように
不確かで不安な事をいかに排除していくかということになります。
「成功率を上げる=失敗率を下げる」です。

【5つのポイント】
  1. クリーンなOSを利用する
  2. アプリのインストール方法を熟知する
  3. リハーサルを必ず行う
  4. 動作検証をステップ毎に実施する
  5. 仮想マシンを活用する



その1.クリーンなOSを利用する
アプリを仮想化するための環境(パッケージング環境と呼びます。)
App-V ではSequencer
ThinApp ではSetupCapture

その環境はクリーンなOSでないとダメダメです。

クリーンな環境とは?
ざっくり定義すると、Windows OSをセットアップして
サービスパックやパッチをインストールしただけの状態です。

ダメな例)
MS-Office がインストールされているとか、
Adobe Reader がインストールされているとか
プリインストールPCを使うとか
普段使っている Windows をそのまま、使うとか、ありえないです。

例外)
仮想マシンの便利ツール類は、今のところインストールされていても大丈夫そうです。
VMware Tools や Hyper-V の統合機能など。

また、一度でもアプリをインストールしてしまった後に
アンインストールしても元のクリーンな環境には戻らないと思いますので
ダメです。(ものにもよりますが)

細かい話だとOffice2007のCD-ROMをドライブに入れると
AutoRun経由でSetup画面が自動的に起動してしまうと思います。
なんと、レジストリにOfficeの情報の一部を既に書きこんでしまっています。
なので、これもダメな環境です。気をつけましょう。
最近は自動起動が無効になっていることも多いですが。

なぜクリーンな環境が必要なのか?
それは、仮想化したアプリが正常に動作しない確率が飛躍的に高まるからです。

アプリのパッケージングは、ざっくりと言うと
・ファイルの変更
・レジストリの変更
を監視して、変更箇所を収集します。

Windows のアプリはランタイムライブラリ等を様々なアプリで共通で利用していたりします。
一見関係ないようなアプリも実は、同じランタイムなどを利用していることがあるのです。

例えば、自前のVB6アプリを仮想化するからMS-Officeがインストールされている環境でも
大丈夫。というのは、危ない発想です。
もちろんそのアプリの事を全て把握していて、絶対にMS-Officeと関係する部分がないから
大丈夫。という場合は除きますが。

色々なアプリがインストールされている環境でパッケージングすると
仮想化したいアプリのインストーラーが既にインストールされているファイルがあると
変更をスキップしたり、レジストリ設定を行わなかったりという事が起こりえます。

そうすると、結果的にアプリが動作するために必要なファイルや設定が
キャプチャされずに中途半端な物が出来上がります。

その2.アプリのインストール方法を熟知する
そもそも仮想化するアプリのインストール方法がわかっていない物を
一発勝負で仮想化して正常に稼働できたら、かなりの強運の持ち主です。

インストールに必要な、
・メディア
・インストールオプション
・そのアプリのパッチやサービスパック
・各種設定
これらを「熟知」している必要があります。

当然といえば当然ですが、インストール手順書がメンテナンスされていなくて
その手順では、不足があり、実は動かない。
ということが現場では、たくさんあります。
クリーンなOSにそのアプリをインストールするので手順書だけでは
正常に動作しない事が多々あります。

理由は様々ですが、例えばMS-Officeがインストールされている前提の手順書だったり
unlha32.dll(圧縮・解凍モジュール)が実は必須だったり環境変数が必要だったりと色々とあります。

標準で利用するWindowsマシンではOSのセットアップ後にそれらの
設定が既に実施済みインストール済みの状態で、配布され
追加でアプリをインストールする手順に特化した「インストール手順書」が作成されているからです。

アプリのインストール方法を「知っている」から「熟知している」になる必要があります。

その3.リハーサルを必ず行う
その1.2を経た上で、ほんとにクリーンな環境でアプリのインストールを熟知してるかを
確認するために、必ずリハーサルを行います。

リハーサルのやり方は、簡単です。
・クリーンなOSを用意します。
・アプリのインストールを行います。
・アプリの動作確認を行います。

その1.2が正しくできていれば、普通にアプリが動くはずです。
これで動かない場合は、アプリのインストールを熟知していない事になりますので
その2に戻ってがんばります。

また、正常に稼動したこのインストール済み環境は仮想アプリの動作を比較するときに
利用することもあるので、できれば取っておく方が良いでしょう。

その4.動作検証をステップ毎に実施する
仮想化したアプリの動作検証には以下のステップが必要です。
必要な物:
WindowsXP環境 3つ
Windows7環境  2つ (マイグレーションの場合)

5つのステップを行う必要があります。

アプリを仮想化する、目的として多いのが
WindowsXP で動作している、アプリを Windows7 で動作させる
マイグレーションです。

マイグレーションの場合にいきなり、 Windows7 で動作検証をしたくなると思いますが
その前に、作った仮想アプリが WindowsXP でキッチリと動作しないと
Windows7 では動きません。
焦って、先走ると良いこと無いです。

テストステップについて:

  1. WindowsXP ダーティーテスト
  2. WindowsXP ウォッシュドテスト
  3. WindowsXP クリーンテスト
  4. Windows7 クリーンテスト
  5. Windows7 プロダクションテスト

各ステップの詳細:
1) WindowsXP 環境:ダーティテスト( Dirty Test)
OSに仮想化したアプリをインストールした環境でのテスト
物理OS環境にアプリをインストールしているため、
仮想アプリケーションが最も動作しやすい環境です。
ダーティテストをクリアできないと、他のPC環境では、ほぼ動作しません。

2) WindowsXP 環境: ウォッシュドテスト( Washed Test)
ダーティテスト環境から、アプリケーションが必要とするモジュールを
アンインストールしながらの動作確認テスト。
仮想アプリケーション内に必要なコンポーネントが含まれていれば、
OSから様々なコンポーネントを削除しても動作します。
ウォッシュドテストをクリアできないと、
他のPC環境では動作しない可能性が高いです。
3) WindowsXP 環境: クリーンテスト( Clean Test)
OS標準以外のアプリケーションがインストールされていない
Windows上での動作確認テスト。
仮想アプリケーション内に必要なコンポーネントが含まれてることで、
OSに何も入ってない環境でも動作します。
クリーンテストをクリアできない仮想アプリケーションは、
他のPC環境では動作しない可能性が高いです。
4) Windows7 環境: クリーンテスト( Clean Test)
OS標準以外のアプリケーションがインストールされていない
Windows 上での動作確認テスト。
仮想アプリケーション内に必要なコンポーネントが含まれてることで、
OSに何も入ってない環境でも動作する、可能性が高まります。
クリーンテストをクリアできない仮想アプリケーションは、
他のPC環境では動作しない可能性が高いです。
※ WindowsXP クリーンテストがOKで Windows7 クリーンがNGな場合は
OSの違いによる影響の可能性が考えられます。
UAC の問題や、プロファイルのパスが違うなどなど。
WindowsXP クリーンの動作がOKならば動かない原因を特定し
対処できる可能性も高まります。
5) Windows7 環境: プロダクションテスト( Production Test)
実際に業務で利用するPC環境
業務で利用する様々なアプリケーションがインストールされている環境での
動作確認テスト。
問題が発生した場合は、クリーンテスト環境との違い
特にインストールされているアプリケーションについての
違いを中心に調査します。
その5.仮想マシンを活用する
最低でも Windows7 マイグレーションの場合は5つの Windows 動作確認環境が必要に
なったり試行錯誤する事が多いため、検証・パッケージ作成環境は
仮想マシンで作成することがほとんどです。

年に1回位、物理PCに Windows をインストールして、「一発勝負」をすることも
ありますが、あんまりやりたくないです。

という訳で、仮想マシンをうまく利用しつつ、スナップショット機能を駆使して
効率的に環境を整備できると、それだけ時間を有効に使えます。
私は、VMware Workstation 、 vSphere をよく使ってます。
クリーンな環境も複数スナップショットを持っていたりします。
例)OSをインストールした直後
サービスパックを入れた直後
2011年8月までの Windows Update を行った直後
2011年9月まで。。。等々

初物を仮想化するときは、インストール途中のオプション設定画面で
スナップショットを取ったりと、たくさんスナップショットを撮りまくります。
HDDの空き容量には注意を。

まとめ
「成功率を上げる=失敗率を下げる

そのために、時にはクリーンな環境に戻して、心機一転やりなおす事も重要です。
とにかく、迷ったり、悩んだり、自信が持てないようなときは、
自信が持てるまで繰り返す事がとても重要です。

自信をもってインストール出来ないものを、仮想化して動かせるわけない。。。
それが大事なマインドではないかなと思います。
後は簡単に諦めない。
これに尽きます。

最後にアプリ仮想化「鬼十則」より

四、インストール手順にミスは、ないのか
  自信が無いなら、確信できるまで繰り返せ。

五、クリーンな環境なのか
  端末、作成環境は本当にクリーンなのか
  自信が無いなら、入れ直せ。

九、仮想化中は八方に気を配って、一分の隙も
  あってはならぬ、仮想化とはそのようなものだ。



参考:
http://blogs.vmware.com/thinapp/2010/10/thinapp-troubleshooting-methods.html
http://support.microsoft.com/kb/932137/ja

今回も長くなってしまった。。。
燃え尽きない程度にがんばります。
アプリ仮想化鬼十則はオリジナルですが電通さんの鬼十則に影響を受けてます(笑)
http://ja.wikipedia.org/wiki/%E9%9B%BB%E9%80%9A#.E9.AC.BC.E5.8D.81.E5.89.87