開発の橋本孔明です。「プログラマから見た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要素を描画しているようなアプリでは、このあたりの変更にも対応する必要が出てきそうです。
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」に合わせ、文字がぎりぎり収まる範囲に配置しているような場合は注意してください。
<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>
ランタイム ライブラリのバージョン
アプリケーションやゲームの開発において広く使われているフレームワーク、「.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のようなデバイスでは、キーボードを着脱することで自動的にタブレット モードのオンオフを行える機能も用意されています。
6月下旬リリースのビルド10158で検証したところ、互換性問題は以前のビルドよりは改善しているようで、操作不能になるといった致命的な不具合は確認されませんでしたが、場合によっては「タブレット モードでの動作は非サポートとする」などの運用面での対応が必要になるケースもありそうです。
ウェブテクノロジ製品のアプリケーションについても、タブレット モードを含むWindows 10での動作確認を入念に行い、現行製品については必要に応じて注意喚起やアップデートなどの対応を行っていく予定です。