プログラマから見たWindows 10 #2 ~アプリケーション互換性

開発の橋本孔明です。「プログラマから見たWindows 10」第2回は「互換性」をテーマに採り上げます。

Windowsのバージョンが新しくなるたびに必ず付いて回るのが、ハードウェアやソフトウェアの互換性問題です。 ハードウェアについてはデバイス ドライバの構造がWindows Vista以後それほど大きく変化していないため、少なくともx86プロセッサ版のWindows 7やWindows 8.1で動作するドライバが用意されているものについてはそれほど心配しなくてもよいでしょう。

ソフトウェアについてですが、これも今までのWindowsのバージョンアップ時と同様、システムに深く関与するセキュリティ系ソフトウェアなどを除けば、大半のアプリケーションがそのまま動作するようです。ただ、やはりいくつかの注意点がありますので、今回はそのあたりを中心にまとめてみたいと思います。

アプリケーションの名称と互換性

Windows 8.1までは「Windows ストア アプリ」と従来型の「デスクトップ アプリ」がありましたが、Windows 10では前回紹介したように、新たに「UWPアプリ」(Universal Windows Platformアプリケーション)が導入されます。

Windows 10を紹介するにあたって、Microsoftでは従来型の「デスクトップ アプリ」(Win32ネイティブ アプリ、.NET FrameworkのWindows FormsアプリやWPFアプリ)については「CWA」(Classic Windows Application)という名称を用いるようになり、UWPアプリを「Windows アプリ」と呼ぶようになりました。
ただ、「Windows アプリ」という名称は混乱の元なので、本稿では「UWPアプリ」の名称を引き続き使用します。

アプリが3種類(さらに従来のWindows Phone用のアプリも)あることに加え、Windows 10にはさまざまなエディションがあります。アプリの種類とWindows 10のエディションの対応表をまとめてみました。

Windows 10のエディション
for Desktop Mobile IoT
CWA × ×
Windows ストア アプリ × ×
Windows Phone アプリ × ×
UWP アプリ

CWAはWindows 10 for Desktopのみのサポートとなり、Windows 10 Mobileでは動作しません。Windows ストア アプリについても、Windows 8/8.1用のものはWindows 10 Mobileには非対応です。Windows Phone 7.5~8.1までのアプリについては、Windows 10 Mobile上でそのまま動作するようです。

Windows 8.1とWindows Phone 8.1では、その両方で動作する「ユニバーサル アプリ」の仕組みが導入されましたが、これはコードの大半を共有していたものの、アプリケーションのパッケージとしては別々にビルドするものであり、それぞれが対応するエディションのWindows 10上で動作することになります。

Raspberry Pi 2への対応で話題となった「Windows 10 for IoT」ですが、このエディションはいわゆるWindows 10のGUIは持っていません。あらかじめSDカードなどにUWPアプリを埋め込み、OSと共に起動するという動作スタイルで、基本的にUWPアプリ以外は一切動作しないプラットフォームとなるようです。

全体的な外観

ウィンドウのデザインについて、Windows Vista/7ではガラス状のウィンドウ フレーム(AeroGlass)、Windows 8/8.1ではシンプルな単色フレームが採用されていました。

Windows 10ではさらにシンプルなウィンドウ フレームとなり、Windows 10向けに設計された「UWPアプリ」の一部を除き、原則としてウィンドウのタイトル バー部分は白色となっています。タイトル バーの文字列はWindows 7までのように左寄せになりました。
アクティブか非アクティブかに関わらず白色(縁に1ドットだけ色が付きます)になってしまうため、筆者的にはちょっとウィンドウが見にくいかなとも感じています。
自前でリボンUIを実装するなど、ウィンドウのフレーム部分まで独自UI要素を描画しているようなアプリでは、このあたりの変更にも対応する必要が出てきそうです。

Windows 10のウィンドウ表示

Windows 10ではアクティブなアプリケーションのタイトル バーも真っ白で、ちょっと判別しにくくなってしまいました

UIフォントの変更

Windows 10から、ユーザー インターフェースに用いられる標準のフォント(UIフォント)が変更されています。Windows VistaからWindows 8.1まで使われていた「メイリオ」や「Meiryo UI」に代わり、新たに「Yu Gothic UI」というフォントになりました。

このフォントは「游ゴシック」という「字游工房」社製のフォントから派生したもののようですが、游ゴシックそのものはWindows 8.1やMacOS X Mavericksからプリインストールされるようになっていたものです(その前にもWindows Phoneで「Yu Gothic」という名前のカスタマイズ版フォントが搭載されています)。主に電子書籍などで利用されることが多かったフォントらしく、読みやすさに定評があります。

Yu Gothic UIと游ゴシックを比較すると、漢字はほぼ同じようですが、ひらがな・カタカナの字体が結構違う上に少し狭幅になっています。狭幅な点は「MS UI Gothic」や「Meiryo UI」といったこれまでのUIフォントと同じ特徴ですが、字体についてはどちらかというとMeiryo UIに似ているようにも見えます。また、英数字については「Segoe UI」と同じ字体になっているようです。Segoe UIは英語版(などのラテン アルファベット言語版)Windows Vista以降で標準的に用いられているUIフォントで、これにより、英語版アプリケーションを日本語Windows 10で動かした場合、テキストの外観が英語版Windows上と統一されることになりそうです。

話を戻しますと、このUIフォント変更により、従来のアプリケーションでOSのUIフォントが自動的に選択されるようにウィンドウやダイアログ ボックスなどを設計していると、場合によってはデザイン崩れなどの問題が発生するかもしれません。フォントを明確に指定していないWPFアプリやWindows ストア アプリなどもすべて該当します。

WindowsのListViewやTreeViewといった標準コントロールは、UIフォントが可変であることを前提に設計されているので問題ないと思われますが、特にラベル(Staticコントロール)を従来の「メイリオ」や「Meiryo UI」に合わせ、文字がぎりぎり収まる範囲に配置しているような場合は注意してください。

各フォントの見た目の違い

各フォントの違いです。Yu Gothic UIと游ゴシックでは漢字は同じですがひらがな・カタカナがかなり異なることと、Yu Gothic UIの英数字はSegoe UIと同じであることがわかります

<Window x:Class="Win10TestApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
	<Grid>
		<Label Content="株式会社ウェブテクノロジ"
			   HorizontalAlignment="Center"
			   VerticalAlignment="Top"
			   FontSize="30" Margin="0,81,0,0"/>
		<Label Content="あいうえおかきくけこ"
			   HorizontalAlignment="Center"
			   VerticalAlignment="Top"
			   FontSize="30" Margin="0,181,0,0"/>
		<Label Content="ABCDEFGHIJK0123456"
			   HorizontalAlignment="Center"
			   VerticalAlignment="Top"
			   FontSize="30" Margin="0,131,0,0"/>
	</Grid>
</Window>
WPFアプリケーションにおけるデフォルトUIフォントの変化を確かめるため、このようなシンプルなXAMLを用いたサンプル アプリケーションを作成しました。
Windows 8.1で実行した画面

上記のWPFアプリケーションをWindows 8.1で実行した画面。表示フォントは「Meiryo UI」

Windows 10で実行した画面

上記のWPFアプリケーションをWindows 10で実行した画面。表示フォントが「Meiryo UI」から「Yu Gothic UI」に変更されています

ランタイム ライブラリのバージョン

アプリケーションやゲームの開発において広く使われているフレームワーク、「.NET Framework」および「DirectX」についてです。

.NET Frameworkは「4.6」を搭載、4.0および4.5を使用しているアプリはこの上でそのまま動作します。3.5以前についてはWindows 8.1と同様、未インストールであればインストールするよう促される仕組みになっています。

DirectX(Direct3D)は、確認した限りではWindows 8.1同等の9・10・11に加え、新バージョンの12が搭載されているようです。また、11には12向けの新機能の一部がバックポートされるそうです。

Windows ストア アプリの動作

Windows 8.1までのWindows ストア アプリについては、Windows 10で「チャーム」が廃止されたため、操作性が一部変化しています。

タイトル バー左上に三本線のいわゆる「ハンバーガー メニュー」ボタンが新設され、これを選択することで「アプリ コマンド」「検索」「共有」「設定」といった項目を呼び出せるようになりました。
また、ウィンドウ モードで動かすことができるようになり、これにより複数のストア アプリを並列動作させることができます。

並列動作している場合、それぞれのアプリは最小化しない限り休止状態にならず、複数のアプリが同時に動作したままとなります。アプリケーションのライフサイクルが少し変化することになり、基本的に問題ないはずですが、ライフサイクルを厳密に管理している場合は確認が必要になるかもしれません。

タブレット モード

おそらく、従来アプリケーションのWindows 10での動作時に一番問題となるであろうポイントが「タブレット モード」です。

タブレット モードへの切替ボタン

Windows 10 for Desktop(デスクトップPC、ノートPC、8インチ以上のタブレット向けの、もっとも一般的なエディション)には、「タブレット モード」にワンタッチで切り替えられる機構が備わっています。

タブレット モードに切り替えると、Windows全体がタッチ操作に最適化された状態となります。具体的にはタスクバーやスタート画面のデザインがタッチ操作向けに変化するほか、メニュー類の幅が広がってタッチミスしにくくなります。現在アクティブなアプリケーションのウィンドウが全画面表示に固定となり、アクティブでないアプリケーションのウィンドウやデスクトップはすべて隠されます。
この「全画面表示に固定」というのは一番大きな特徴で、UWPアプリやWindows ストア アプリのみならず、従来のデスクトップ アプリ(CWA)に対しても適用されます。

以前のビルドでは、ウィンドウ サイズが固定(リサイズ不可)のアプリであっても強制的に全画面化されてしまい、デザインが崩れたり隠れていたコントロールが見えてしまうといった問題がありましたが、6月下旬にリリースされたビルド10158では修正され、元のウィンドウサイズで表示されるようになっていました。また、ひとつのアプリケーションが複数のウィンドウを同時に表示しているような場合についても、いずれかのウィンドウが全画面固定化されるわけではなく、それぞれのウィンドウを操作できるようになっているようです。ただし、それらの場合でも、他のアプリケーションのウィンドウを同時に見ることはできません。

タブレット モードへの変更をアプリケーション単位で許可・禁止するといったオプションは無く、ユーザーがタブレット モードへ移行することをアプリ側のプログラム上で防止することはできないようです。

ちなみに、Microsoft Surfaceのようなデバイスでは、キーボードを着脱することで自動的にタブレット モードのオンオフを行える機能も用意されています。

Windows 10の従来モードの画面

従来モードでウィンドウ サイズが固定のアプリケーションを動作させたところ。Windows 8.1以前と特に変化はありません

Windows 10のタブレット モードの画面

タブレット モードを有効にするとアクティブなアプリケーションだけが見えるようになります。他のアプリケーションやデスクトップは見えなくなり、タスクバーのデザインもタッチ操作向けに変化します。 この例ではウィンドウ サイズが固定のアプリのため、最大化は行われずウィンドウ サイズは変化していませんが、後ろにデスクトップや他のウィンドウは表示されていません

Windows 10 タブレット モードで「ペイント」を実行したところ

タブレット モードでは、クラシック Windowsアプリである「ペイント」もこのように全画面化。 ウィンドウ右上の「最大化を元に戻す」ボタンは表示されているものの、押しても何も起こりません

Windows 10 タブレット モードで、単一アプリが複数ウィンドウを表示している画面

ひとつのアプリで複数ウィンドウを表示するサンプル プログラムを作って動かしてみたところ。メイン ウィンドウが全画面化されることはなく、両方のウィンドウを操作できるようになっていました

6月下旬リリースのビルド10158で検証したところ、互換性問題は以前のビルドよりは改善しているようで、操作不能になるといった致命的な不具合は確認されませんでしたが、場合によっては「タブレット モードでの動作は非サポートとする」などの運用面での対応が必要になるケースもありそうです。

ウェブテクノロジ製品のアプリケーションについても、タブレット モードを含むWindows 10での動作確認を入念に行い、現行製品については必要に応じて注意喚起やアップデートなどの対応を行っていく予定です。

タグ , , , , , , , | 2020/06/16 更新 |