TOP
連載一覧
@IT Special
セミナー
eBook
ブログ
アットマーク・アイティ ITエキスパートのための問題解決メディア
Loading
@IT総合トップ >
@ITspecial
Tweet
このエントリーをはてなブックマークに追加

pr

『Windows XPからWindows 7
アプリ移行実践ガイド』
を参考に、実際にアプリの移行を試してみた
Windows XP登場から約10年、ハードウェアとOSは飛躍的に進化した。2011年現在、より高い業務生産性が発揮できる最新OS「Windows 7」に、企業内PCをリプレイスする動きが加速している。その際に検討される課題が、既存のソフトウェアが正常に動作するのか、という点だ。アプリケーション開発者はこの課題にどう取り組めばよいのか? 本稿では、『Windows XP から Windows 7 アプリ移行実践ガイド』(日本マイクロソフト提供)に従って実際のアプリケーションを移行し、その過程と結果をレポートする。

 開発者ニーズから生まれたサイト

 日本マイクロソフトでは開発者を対象にしたアンケート調査を年に数回実施しており、直近の調査結果によると、2番目に多いコメントは「Windows XP時代に開発したアプリケーションが、Windows 7でも正常に動作するのか分からない」であったという。これを受けて新たに作成されたのが『Windows XP から Windows 7 アプリ移行実践ガイド』(以下、『ガイド』)である。『ガイド』では、(MSDNオンライン各所に分散していた)Windows 7への移行時に役立つ情報が使いやすくまとめられている。『ガイド』が示すステップを順に実施していくことで、アプリケーションをスムーズにWindows 7へ移行できるようになっている。

『Windows XP から Windows 7 アプリ移行実践ガイド』のサイト表示例

 本稿では、この『ガイド』に従って既存のアプリケーションを実際に移行してみる。リアルな活用例をレポートするために、実際に筆者が開発したオリジナルのアプリケーション*1を使用する(『ガイド』の使い勝手が分かりやすくなるように、あえてOSに依存度が高いアプリケーションを選んだ。比較的シンプルでコードが短いアプリケーションではあるが、『ガイド』の基本的な使い方を示すには適しているだろう)。

*1 このアプリケーション(YenInput)は、筆者が以前に個人的な用途で開発したもので、(日本語版ではなく)英語版キーボードを使った場合に入力しにくい文字を簡単に入力するためのものである。文章入力中に[Caps]キーを2回連打するとダイアログが表示され、さらに[F]キーを押すと「\」という文字が、[J]キーを押すと「_」が、[H]キーを押すと「|」が入力されるという機能を持つ。また、タスク・バーの通知領域アイコンからオプション設定などが行える。プログラム内では、キー・フックによりWindows上のすべてのキー操作を取得して、ほかのアプリケーションのテキスト入力機構に文字を送出する処理を行っている。

 移行ステップ1:検証、調査

 まずは「移行ステップ1:検証、調査」の内容から順に実施していこう。

『Windows XP から Windows 7 アプリ移行実践ガイド』の「移行ステップ1:検証、調査」の表示例

●ツールで検証

 『ガイド』によると、「まずは、ツールを使ってアプリケーションを検証する」とある。このツールとは「ACT(Application Compatibility Toolkit:アプリケーション互換性ツールキット) 5.6」である。

 Windows 7には、(主に、旧来のWindows 2000/XP/Vista向けに作成されたアプリケーションがWindows 7では動作しない場面で)旧来のWindowsの一部機能をシミュレートして応急的に動作させる「互換モード」という機能が標準搭載されている。この機能は、基本的に実行可能ファイル(=.EXEファイル)のプロパティ・ウィンドウの[互換性]タブから利用できるが、より詳細に互換モードを設定する場合には、どの「shim」(=アプリケーションとOSを仲介する追加コード)を使うかを決めるためのツールであるACTが必要になる。

 つまりACTは、アプリケーションを改修せずに移行したい場面で使うツールである。本稿では、改修を行って移行を実現したいので、この手順はスキップする。

●互換性チェックリスト

 次に、「チェックリストに該当する項目がないか、確認する」とある。そこで、互換性チェックリストのページを開き、各チェックリスト項目の内容を確認して、その項目に該当する場合は[当てはまる方はご覧ください]のリンクを開いて、1つ1つ問題を解決していく。

互換性チェックリストのページの表示例

 筆者の場合は、例えば「SDKでは公開されていない関数、データ構造体、レジストリなどを使用していないか」というチェックリスト項目を確認するために、ソース・コード内にあるすべてのWin32 API(AttachThreadInput関数やSetWindowsHookEx関数など)を念のためMSDNライブラリでチェックした。

 また、「OSのバージョン・チェックを行っているか」というチェックリスト項目を確認するため、「OSVersion」というキーワードでソリューション内のすべてのソース・コードを検索して、ヒットした個所の処理内容を調べた。その該当個所のコード(C#)は下記のとおりで、いずれもWindows 7以降には影響しない内容だった。C++やVB6の場合は「GetVersion」というキーワードでも検索するのがいいだろう。

// Windows 2000(NT 5.0)以降のみグローバル・ミューテックス利用可
OperatingSystem os = Environment.OSVersion;
if ((os.Platform == PlatformID.Win32NT) && (os.Version.Major >= 5))
{
  strAppConstName = @"Global\" + strAppConstName;
}
public KeyboardHook()
{
  if (Environment.OSVersion.Platform != PlatformID.Win32NT)
  {
    throw new PlatformNotSupportedException("Windows 98/Meではサポートされていません。");
  }
……省略……
}
OSバージョンをチェックしているコード

 ここでもしWindows 7以降が処理されないようなコードになっている場合は、[当てはまる方はご覧ください]の[サンプルコード]リンクをクリックする。これにより、「移行ステップ2:開発サンプル・コード」の「OSのバージョン・チェック」(詳細後述)が表示される。

 このほかの主要なチェックリスト項目としては「マイドキュメントなどのフォルダ・パスをハード・コーディングしているか」や「システム用の領域へのファイルの書き込みをしていないか」「ファイル名やバージョン情報に「setup」「update」「install」という文字列が含まれていないか」などがある。

●互換性問題を調査

 互換性チェックリストをすべて確認し終わり、すべての問題が修正できたら、次に、互換性問題のページを開く。このページの内容を参考に、Windows 7の新機能や機能変更に(互換性の)影響を受けていないかを調べる。

互換性問題のページの表示例

 互換性問題のページには、「一般的な互換性問題」と「新機能や機能変更に伴う互換性問題」という2つのテーマがあり、それぞれのタイトルの右端にある をクリックすると、その詳細情報をまとめているページが表示される。いずれのページの内容も、その大半が先ほどのチェックリストですでにチェック&修正済みのはずなので、確認程度に一読すればよいだろう。

 筆者が特に(一般的な業務アプリケーションにおいて)注意が必要だと感じた項目は「新フォント環境」である。Windows XP(JIS90環境)とWindows 7(JIS2004環境)では字体の異なる文字がいくつか存在するので、姓名や地名など厳密な文字表記が要求されるアプリケーションでは、これらの字体の違いを解決するために何らかの対処が必要になる可能性がある。

 また、「長音表記の変更」という項目は、大半のアプリケーションにかかわる仕様変更である。Windows 7以降ではダイアログやメニューなどで使われる、(外来語に由来する)カタカナ用語の末尾の長音表記が(従来の長音表記から)変更されている。具体的には「エクスプローラ」は「エクスプローラー」に、「フォルダ」は「フォルダー」になっている。Windows 7との親和性を高めるには、この長音表記にすべて合わせるとよいだろう。

 以上で、「移行ステップ1:検証、調査」は完了だ。

 移行ステップ2:開発サンプル・コード

 次に「移行ステップ2:開発サンプル・コード」の内容を実践していく。

『Windows XP から Windows 7 アプリ移行実践ガイド』の「移行ステップ2:開発サンプル・コード」の表示例

●OSのバージョン・チェック/ファイルやフォルダのパスの取得

 前述したように、互換性チェックリストにある[サンプルコード]リンクをクリックすると、「OSのバージョン・チェック」や「ファイルやフォルダのパスの取得」にあるサンプル・コードのリンク集部分に到着する。実際にコードの修正が必要な場合は、各言語のアイコンをクリックして説明ページを開き、サンプル・コードを参考にアプリケーションのソース・コードを適切に修正すればよい。サンプル・コードは、5種類もの開発言語で提供されている。具体的には、「Visual Basic」「C#」「Visual C++」「Visual Basic 6.0」だけでなく、(MSDNオンラインでは情報が不足しがちな)「Java」のサンプル・コードも提供されているので、Java開発者もぜひチェックしてみてほしい。

サンプル・コード説明ページの表示例

●Windows 7特有の機能を実装

 「Windows 7特有の機能を実装」での実施内容は、「移行」というよりも、「Windows 7への対応」になる。各項目をクリックすると、「タスク バー」「ガジェット」「ライブラリ」「DirectX」「リボン」「マルチタッチ」「センサー」などのWindows 7新機能に対応する際に役立つ情報にアクセスできる。特にタスク・バーとリボンは、一般的なアプリケーションでも対応しやすいWindows 7機能なので、移行実施を機に対応するのもよいだろう。

 まとめ

 以上の移行対策を実施してソリューションをリビルドし、Windows 7上で本稿のサンプル・アプリケーションを実行してみたのが次の画面である。

Windows 7上でのサンプル・アプリケーションの実行例

 筆者はこれまでも多数の.NETアプリケーションをWindows 7上に移行してきた。そして、これまでWindows 7で修正が必要なアプリケーションはほとんどなかったと記憶している。実際、今回のサンプル・アプリケーションでは数多くのWin32 APIを使っており、Windows OSに強く依存したアプリケーションであったわけだが、何も改修する必要がなかった。

 今回のように、通常の.NETアプリケーションであれば、Windows 7への移行といってもそれほど苦労しないはずだ。しかし実際の現場では、何世代も前の環境を対象に開発された古いアプリケーションであったり、誰がどのように開発したのか分からないアプリケーションだったりするものだ。このように、必ずしも状態のよくないアプリケーションの移行では、思わぬ問題に出くわすこともある。そういったアプリケーションに対しても今回の『ガイド』を活用すれば、典型的なトラブルを組織的かつ系統的にチェックすることができる。

 これまでMSDNオンライン各所に分散していた移行に関する情報が、この『ガイド』に集約されており、Java開発者のための情報など多くの開発者に向けた情報が提供されているので、移行の際にはまず『Windows XP から Windows 7 アプリ移行実践ガイド』を訪れてみてほしい。

提供:日本マイクロソフト株式会社
アイティメディア営業企画
制作:@IT 編集部
掲載内容有効期限:2011年03月31日

関連リンク(日本マイクロソフト)
Windows XP から Windows 7 アプリ移行実践ガイド
アプリケーション開発者向け Microsoft Windows 7 対応アプリケーションの互換性
互換性チェックリスト
新機能や機能変更に伴う互換性問題
Windows 7 新機能
Windows 機能リスト
Windows 7 における Visual Basic 6.0 のサポート
Microsoft Services - クライアント移行 「デスクトップ互換性調査支援」
Windows 7 ホワイト ペーパー


関連記事(@IT)
VB6アプリのWindows Vista対応
XP/Vista→Windows 7 完全移行マニュアル
Application Compatibility Toolkit(ACT)とは?
連載:Windows 7新時代
業務アプリケーションに最適なUI/UXを考える
Visual Studio 2010に本当に乗り換えるべきか?
Windows VistaでVB6アプリケーションは本当に使えるのか?
Windows 7に標準で含まれる.NET Frameworkのバージョンは?
Windows 7の新機能をC#やVBで利用するには?
機種依存文字のJIS90字体とJIS2004字体を同時に表示するには?



@ITトップ|@IT Special インデックス|会議室|利用規約|プライバシーポリシー|サイトマップ


Copyright © ITmedia, Inc. All Rights Reserved.