シンプルになった Windows 8 の印刷機能

オンライン リソースを読み、処理することが増えているとはいえ、印刷は PC を使って最も頻繁に実行する作業の 1 つです。私たちは、よく実行されるこの作業の簡略化と機能強化に乗り出しました。Windows 8 での印刷機能の強化を実現するために、エコシステムのパートナー各社に協力していただいています。この記事は、印刷チームのリード プログラム マネージャーである Adrian Lannin が執筆しました。  

--Steven


Windows PC に接続できるあらゆる周辺機器の中で、プリンターは最もよく使われる機器の 1 つであり、最も古くからサポートされています。実際、Windows 1.0 Press Kit によると、Windows 1.0 (1985 年にリリース) は、「多数のプリンターとプロッター」をサポートし、「あるファイルの印刷中に、別のファイルの作業を可能にする印刷スプーラー」を搭載していました。以下の Windows 1.0 のスクリーンショットでは、Windows 1.0 に含まれていたファイル (Epson.drv、さまざまなフォント ファイル、および印刷スプーラー プロセス) が表示されています。印刷システムの一部は、現在このシステムの開発に携わっている人間が生まれる前から存在します。:-)

ファイルの一覧が表示された Windows 1.0 MS-DOS Executive。

長い年月をかけて、印刷システムは複雑なアーキテクチャへと進化してきました。現在では、多種多様なプリンターへの印刷をサポートし、家庭で使用するシンプルな 50 ドルのインクジェット プリンターから、数十万人のユーザーが利用し、数千件の印刷キューをホストし、数万ドルもするプリンターを動かす高可用性プリント サーバーにまで対応できるスケーラビリティを備えています。

Xerox の高度な印刷システムと Epson のシンプルな家庭用プリンター印刷システムは、Windows のさまざまなレイヤーと領域にアクセスします。印刷システムは UI を表示し、ドライバーをホストします。このドライバーも UI を表示します。印刷は本質的に画面上のコンテンツを紙面に再描画することであり、負荷の高いグラフィックス操作を実行します。USB またはネットワークが主として、印刷では下位の通信も扱います (現在、米国で購入されているプリンターの大半はネットワークに対応していますが、Windows の利用統計情報によると、Windows 8 Consumer Preview にインストールされているプリンターの 75% 以上は USB ポートに接続されています)。印刷システムは、大企業で展開されている大規模なミッション クリティカル システムに対応しながら、規模の小さいシステムでも効率よく実行できる必要があります。

このブログ記事では、できるだけ皆様にお役に立つ形で適切なデバイス サポート (英語) を提供するために、Windows 8 で印刷システムをどのように刷新しているかを説明します。ARM ベースの PC と Metro スタイル アプリで、この印刷システムがどのように機能するかを説明します。また、プリンターにアクセスするのがデスクトップからであっても、Metro スタイル アプリからであっても、Windows RT 搭載デバイスからであっても、できるだけ多くの既存のプリンターを確実に "動かす" ための取り組みについても説明します。

Windows 8 の印刷システムの刷新

Windows 8 では、バージョン 4 または V4 と呼ばれる新しいプリンター ドライバー アーキテクチャを導入しました。V4 アーキテクチャでは、さらにサイズが小さくて高速なプリンター ドライバーを生成できるほか、印刷クラス ドライバー フレームワークの概念がサポートされます。このフレームワークは、多くの場合、特定のデバイスのドライバーを探さなくても、プリンターをインストールできるシステムです。

おそらくご推察のとおり、V4 は Windows の 4 代目のプリンター ドライバー アーキテクチャです。V3 は、Windows 2000 ~ Windows 7 で使われていたアーキテクチャで、実際にはデバイスの互換性確保のために、Windows 8 でも完全にサポートされます。したがって、現在お使いのプリンターには既存のドライバーしかなくても、そのプリンターは Windows 8 でも利用できます。バージョン 1 および 2 は、Windows 1.0 ~ Windows ME で使われていたドライバー アーキテクチャです。

印刷システムのしくみを説明する前に、Windows 8 印刷システムで取り組んだ要件のいくつかについてお話したいと思います。

Metro スタイル アプリからの印刷

Metro スタイル アプリの開発者にどのように印刷機能を提供するかも、考えなくてはならないことの 1 つでした。win32 アプリケーションからの印刷には、GDI (グラフィックス デバイス インターフェイス) または XPS (XML Paper Specification) のどちらかのグラフィックス プログラミングの知識が必要です。Windows 8 アプリからの印刷を可能にする方法を検討するにあたり、Windows ランタイムからの印刷を可能にする方法を抜本的に見直し、HTML5 / JavaScript および XAML / C# アプリからの印刷を非常に使いやすくしました。

Metro スタイル アプリへの印刷機能の統合

Metro スタイル アプリからの印刷は、当然ながら、Metro スタイルのエクスペリエンスである必要があります。皆さんのほとんどが、何かを印刷したときに、用紙切れを知らせる、またはインクを購入する機会を提供する小さなアプレットをご覧になったことがあると思います。

用紙の種類とサイズを表示し、インク レベルを確認、Epson インクを購入、またはオンライン サポートにアクセスするためのボタンがある Epson の印刷ダイアログ。

このようなポップアップは、インクジェット プリンターで非常によく利用されています。ポップアップの中には、(インク レベルが低いなど) 関係がある場合のみに表示されるものも、印刷するたびに表示されるものもあります。これらのポップアップは、プリンター ドライバー ソフトウェア自体から表示されていて、当然ながらすべてデスクトップ UI です。しかし、たとえば Metro スタイルのフォト アプリから印刷する場合に、印刷中であることを示す UI を表示するためだけに、デスクトップに切り替えなくても済む必要があります。

Windows RT からの印刷

プリンター ドライバーは、時間と共に進化し、さまざまな機能が含まれるようになりました。サービスをインストールするものや、多数の小さなアプリケーションをインストールするものもあります。また、現在では、ドライバーの多くは、非常にサイズが大きくなっています。Windows 2000 以来使われている V3 プリンター ドライバー モデルは、非常に複雑で拡張性の高いモデルになっています。このモデルでは、プリンター メーカーがドライバー ソフトウェアと併せてインストールする内容を比較的自由にコントロールできます。印刷システムが Windows RT を実行するデバイスでも機能する方法を考えるにあたり、大がかりなアーキテクチャの変更が必要なことはわかっていました。不要なサービスを実行して ARM システムに悪影響を及ぼすことはなんとしても避け、また、できる限り多くのデバイスをサポートしながら、システム リソースの使用率を削減したいと考えました。

これまでより格段に少ないドライバーで多数のプリンターをサポート

プリンターの機能は実にさまざまですが、Windows は各種プリンターを広範にわたりサポートしています。Windows 7 とそれ以前のバージョンの Windows では、どのプリンターも特定のドライバーがなければ機能しませんでした (ユニバーサル プリンター ドライバーなど、一部の例外はありますが、この種類のドライバーはサイズが大きく、大量のリソースを消費しがちです)。つまり、適切なサポートを提供するために、Windows に付属するドライバー (インボックス ドライバーと呼びます) の数は膨大でした。もちろん、それ以上に多くのドライバーを Windows Update で提供していますが、よく使われるデバイスをサポートするインボックス ドライバーを用意し、Windows Update からドライバーをダウンロードできない、またはダウンロードしない方にも、適切な印刷エクスペリエンスを提供できることは重要だと考えています。インボックス ドライバーは Windows RT には必須です。実際、Windows RT はインボックス プリンター ドライバーしか使用しません。ここでの課題は、カバー率の高いプリンターのセットをサポートしながら、そのために必要になるリソースを削減することです。

多数のプリンターのサポートに関しては、時間と共にサポートの有用性が失われていくことも、気になる課題でした。たとえば、Windows 7 に付属しているドライバーは、2008 年と 2009 年にリリースされたデバイスのサポートには有効ですが、年々新しいデバイスがリリースされ、時間が経つにつれて、Windows 7 のドライバーのセットはカバー率が低下しています。そこで、まだリリースされていないプリンターも含めて、多数のプリンターに対応できる高度なサポートを、確実に Windows で提供することが、Windows 8 での大きな課題の 1 つになりました。

プリンターの共有

プリント サーバーを管理したことがあれば、適切なドライバーをインストールして共有をサポートすることが、プリント サーバーの管理で最も時間がかかる作業だと言うかもしれません。自宅でプリンターを共有するときも、特に 32 ビット版と 64 ビット版の両方の Windows がある場合は、このような問題に直面する可能性があります。プリント "サーバー" (実際の Windows Server ではなく、プリンターが接続されている PC のこと) は、共有プリンターに印刷をするクライアントにドライバーを提供する必要があるため、この作業は複雑です。Windows 7 では、ホームグループを使ってこの問題に対応しました。多くの場合、これは適切に機能しています。ただし、各 Windows アーキテクチャ用のドライバーを読み込む必要があるため、Windows RT から印刷することを考えると、さらに問題になります。

Windows RT 搭載デバイスから印刷をするほとんどのユーザーは、ワイヤレス プリンターに印刷すると思われますが、USB プリンターに印刷する可能性を完全に排除したくありませんでした。一方、32 ビット クライアント、64 ビット クライアント、および Windows RT クライアント用のドライバーを追加するよう求めることで、プリンターの共有をさらに複雑にしたくもありませんでした。そこで、Windows 8 では V4 モデルを基に、クライアント ドライバーをプリント サーバーに配置しなくても、プリンターを共有できる新しい方法を開発しました。

Windows 8 の印刷システム

アプリケーションを使うことで、コンテンツの作成や表示が可能になります。印刷システムの目的は、インストールされているデバイスの種類を気にかけることなく、インストールされている任意のプリンターにコンテンツを印刷する手段をアプリケーションに提供することです。ここでは、アプリケーションが印刷するしくみについて簡単に説明し、その後、印刷ページにコンテンツを出力するしくみについて詳しく説明します。

印刷可能なコンテンツの作成

アプリに印刷サポートを追加する手順は、非常に明快です。アプリから印刷するコンテンツは、アプリが指定する形式です。Metro スタイル アプリの場合、これは通常 HTML5 か XAML になりますが、Word や Photoshop などの Win32 アプリの場合は、印刷するコンテンツは特定のアプリに固有の形式になります。

したがって、アプリからプリンターに印刷する場合、印刷システムが実行する必要がある作業の 1 つは、アプリの形式からプリンターが理解できる形式にコンテンツを変換することです。残念ながら、すべてのプリンターが同じ形式を理解するわけではないので (かなり差があります)、これは非常に手間のかかる作業になります。

具体的な例を挙げると、Word などのアプリは GDI グラフィックス システムを使って、画面とプリンターの両方にコンテンツを出力します。可能であれば、印刷システムは XPS (XML Paper Specification) という高品質な中間形式を内部のコンテンツ形式に使用します。つまり、コンテンツを Word から XPS に変換しています。XPS は非常に柔軟な形式で、電子ペーパーと同様の性質であるため、印刷システムの基盤として XPS を採用しています。XPS は高性能カラーをサポートします。また、実行可能コードが埋め込まれていない XML ベースの記述であるため、アーカイブにも便利なうえ、他の形式に比べて安全です。また、Microsoft は ECMA International (欧州電子計算機工業会 (英語)) と協力して、XPS をオープン標準にするよう取り組んできました (ECMA 標準 TC46、OpenXPS)。デスクトップ ビューアーでもリーダー アプリでも、OpenXPS は表示できます。私は、オンラインの買い物の領収書をすべて、XPS ファイル形式で "印刷" しています。

印刷システムによるコンテンツの処理が始まると、コンテンツはプリンターが理解できる形式に変換されます (XPS を直接理解できるプリンターは多いので、必要に応じて)。印刷システムがこれを正しいオプションのセットと合わせてプリンターに送り、このジョブが印刷を実行します。

すべての Metro スタイル アプリは Direct2D を基本の描画形式として使用し、Direct2D と XPS は同じ XML ベースのグラフィックス "言語" を使用しているため、Windows 8 では、この一連のプロセスのパフォーマンスが目に見えて向上しています。したがって、また別の具体例としては、リーダー アプリが挙げられます。リーダー アプリは、コンテンツの画面へのレンダリングに Direct2D を使用していますが、同じコンテンツを印刷システムに出力する場合も、Direct2D を使用します。リーダーのコンテンツは、負荷の高い GDI からの変換をせずに、XPS 形式で容易に印刷システムに送ることができます。

アプリが画面レイアウトとは異なる印刷レイアウトを必要とする場合は、スタイル シートや XAML を使ってこれを実現できます。つまり、"ページの印刷用バージョンを表示するためにここをクリック" する必要がありません。XPS をサポートするプリンターがあれば、アプリからプリンターまでのパスには変換がまったく含まれず、印刷は非常に高速に処理されます。

アプリから印刷情報が印刷システムに送られるしくみについて概要を理解していただけたところで、次は、印刷システムによる印刷情報の処理の内容、印刷システムが提供するサービス、および Windows 8 でのその他の変更点について説明します。

多数のプリンターのサポート

Windows がアプリに提供する大きなメリットの 1 つは、アプリに対して特定のプリンターを抽象化することです。したがって、アプリのプログラマは、インストールされているプリンターの種類を気にかける必要がありません。Windows は、Windows Update やメーカーの Web サイトで提供されているドライバーによってサポートされるプリンターも含めて、合計で数万種類のプリンター モデルをサポートしています。プリンターが機能しない場合、その原因の多くは、メーカーのソフトウェアがインストールされる Windows のバージョンを認識できない場合、インストールを阻止するようにメーカーが設定していることです。私たちはプリンター メーカーと協力して、このようなパッケージを更新するように取り組んでいますが、これには時間がかかります。

新しいプリンターを Windows に接続したら、ドライバーを探しに行かなくても、すぐに使用できることが理想です。

それにはどうしたらよいのでしょうか。これまでは、Windows に多数のプリンター ドライバーを含めてきました。Vista には約 4500 種類のドライバーが、Windows 7 には約 2100 種類のドライバーが含まれていました。Windows 7 のドライバーは Vista の半数ですが、Windows 7 の方が市場を広くカバーしています。つまり、Windows 7 の方が、よく使われるプリンターのドライバーが付属している可能性が高いということです。これはなぜでしょうか。信じられないほど多種多様なプリンターが使用されています。Vista では、古くてあまり使われなくなったデバイスも多数サポートしていたため、サポートされるデバイス セットの有用性は Windows 7 ほど高くありませんでした。

余談ですが、Windows の新しいバージョンをリリースするときには、前のバージョンに付属していたドライバーを Windows Update で公開します。これらのデバイスは以前ほど使われなくなっている可能性があっても、ユーザーがデバイスを接続するだけで自動的に使用できる状態にするためです。

以下の写真は、これが問題なく機能することをテストしているプリンター ラボの 1 つ (複数のラボがあります) にあるベンチの 1 つを撮影したものです。メーカーの違う小型のインクジェット プリンターとレーザー プリンターがいくつか並んでいます。私の耳にとっては嬉しいことに、最近ではドット マトリックス プリンターをテストすることは、それほど多くありません。

プリンターのテスト

プリンターは平均して 5 ~ 7 年間維持される傾向があるため、サポートを追加するときは、「どのデバイスが使われているか」、「この数年間で最もよく使われているデバイスはどれか」、「将来最もよく使われるデバイスはどれか」を考える必要があります。この最後の質問は、Windows をリリースして間もなく、私たちが知らなかったデバイスをプリンター メーカーがリリースするため、簡単には答えられません。つまり、時間の経過と共に、Windows の特定のバージョンでサポートしているデバイス セットは有用性が薄れます。

どのようなときでも、約 100 種類のプリンター モデルが、インストールされているプリンター全体の約 50% を占めています。現在使われているモデルの 75% をサポートする場合は、約 300 種類のモデルをサポートする必要があります。以下の図は、このことを表しています。

デバイスの種類の数と市場カバー率

95% のカバー率を達成するには、1000 種類を超えるモデルをサポートする必要があります。しかし、100、300、または 1000 種類から成るこのプリンターのセットの構成内容は、常に変化するため、問題はさらに難しくなります。"現在" の市場の 50% を占めている 100 種類のプリンターは、"来週" または来月の 50% を占める 100 種類のプリンターとは異なり、来年になればさらに内容は変わっているでしょう。毎日、多くのユーザーが新しいプリンターを買って、インストールしています。

前述のとおり、これまでは、基本的に総当たり的な方法でこの問題を解決してきました。大手プリンター メーカーの方が、Microsoft 本社に駐在して Microsoft と直接協業し、自社のソース コードを Windows に組み込んでいます。この方々が、Windows の新しいリリースが出されるたびに、まったく新しいインボックス ドライバーのセットを作成します。これは、効率的とは言えません。

Windows 8 では、抜本的に異なる方法を取り、Windows に多数のプリンター ドライバーを含めて提供することをやめ、"印刷クラス ドライバー フレームワーク" を構築しました。このフレームワークは拡張性が高く、既存のデバイスへの印刷をサポートするだけでなく、設計さえされていなかった、新しいデバイスのサポートをメーカーが組み込むこともできます。

印刷クラス ドライバー フレームワークを使うことで、ドライバーを実際に探しに行かなくても、プリンターが Windows 印刷システムとすぐに連携できる、ドライバー不要の印刷に近いエクスペリエンスを提供できます。本当にドライバー不要の印刷エクスペリエンスを実現するには、ほとんどのプリンターの設計方法を変える必要があり、印刷クラス ドライバー フレームワークはこの概念をサポートしていますが、できるだけ既存のデバイスのサポートを提供することも非常に重要だと感じています。

新しいプリンターや開発が予定されているプリンターをサポートできるため、Windows 8 の印刷クラス ドライバー フレームワークによってサポートされるプリンターの数は、時間の経過と共に増加します。

カバーするデバイスの数が大幅に増えるだけでなく、このカバー率を達成するために使用するリソースを削減することもできています。

まず、Windows Vista では 768 MB だったプリンターとイメージング デバイスのサポートに必要なディスク容量を、Windows 8 では約 184 MB に削減しています。この数字は、Windows 8 のすべてのエディションとアーキテクチャの平均です。次の図は、Windows Vista 以降で、使用する容量がどの程度削減されたかを示しています。

プリンターとイメージング デバイスのサポートに必要なディスク容量

Windows 8、Windows 7、および Windows Vista でプリンターとイメージング デバイスのサポートに必要なディスク容量の比較

また、使用するディスク容量が削減されただけでなく、Windows によって直接サポートされるデバイスの有用性も向上しています。次の表は、どの程度インボックスでのカバー率が向上し、ディスク使用率が削減されているかを示しています。

 

インボックスでサポートされるデバイス数 (概算)

インストール ベースに占める割合 (概算)

使用するディスク容量

Windows Vista

4200

55-60%

768 MB

Windows 7

2100

60-65%

446 MB

Windows 8

2500

リリース時は 70%、80% まで拡大

184 MB

これは、Windows 8 での大きな改善点の 1 つです。一部の Windows RT コンピューターは物理的な記憶域が少ないことが特徴になると思われますが、この使用容量の削減は、即、このような記憶域スペースが限られているハードウェアのユーザーにとって、利用可能な記憶域の増加につながります。

Windows 8 のプリンター ドライバー モデルでは、メーカー パートナーに、Windows のバージョン間で変更が少ないコードを開発することに集中してもらうことができます。その結果、このリソースをより有効に活用し、ドライバー セットを絶えず組み込み直す作業ではなく、品質とパフォーマンスを向上する作業に割り当てることができます。

印刷クラス ドライバーのアーキテクチャ

Windows RT と Metro スタイル アプリのニーズに応えるアーキテクチャを構築するだけでなく、既存のデバイスでも利用でき、プリンター メーカーになじみのあるテクノロジを使用することで、メーカーにとって新しいドライバー テクノロジを実装しやすいモデルにしたいとも考えました。

プリンター ドライバーは、次のようないくつかの重要な処理を実行します。

  • 構成: ユーザーが設定を変更できるようにします。たとえば、両面印刷を有効にするという指定を、プリンターがそれを行うために必要とする具体的なコマンドに変換します。構成は、ユーザー インターフェイスによって、ユーザーに提示されます。
  • レンダリング: Windows の印刷システムが使用する形式からプリンターが理解できる形式に印刷するコンテンツを変換します。プリンターが直接ネイティブの Windows の印刷フォーマット (XPS) を理解する場合があり、そのようなデバイスでは、(1 枚の用紙に複数のページを印刷する場合など) 追加のレンダリングを必要としない限り、実行すべき作業はありません。レンダリングを行うドライバーの部分は、"レンダー フィルター" と呼ばれます。
  • イベント: ジョブが完了した、紙詰まりが発生した、プリンターのインクが切れたなど、発生した出来事についてプリンターがユーザーに通知できるようにします。

UI の構成

古いドライバー モデルと Windows 8 のドライバー モデルの大きな違いの 1 つは、UI を提供する方法にあります。古いプリンター ドライバー モデルでは、構成 UI がドライバーに組み込まれていました。以下は、典型的なプリンターの UI の例です (現在私のデスクにある Epson NX430 の UI)。

印刷品質、用紙、インク レベル、印刷の向きなどのオプションがある Espon NX430 の印刷設定ダイアログ

前述のとおり、プリンターの設定を変更する場合に、Metro スタイルの UI を表示できる方法を見つける必要がありました。

Windows 8 のドライバー モデルでは、メーカーの UI は完全にドライバーから独立しています。このアーキテクチャが採用されたことは、さまざまな理由から、非常に有効だと言えます。プリンターを制御する UI は、Metro スタイル アプリから印刷する場合でも、デスクトップ アプリから印刷する場合でも、起動できるアプリになりました。これにより、プリンター メーカーははるかにリッチなエクスペリエンスをユーザーに提供できます。プリンターのセットアップ方法やインク カートリッジの取り付け方法を説明するビデオが表示されることを想像してみてください。

以下は、Epson が Epson NX430 用に開発した Metro スタイル アプリの例です。

インク レベル、用紙の種類、Epson ショーケース、使い方のオプションを提供する全画面の Metro スタイル アプリ

この UI は、プリンターの UI ですが、Metro スタイル アプリの特徴をすべて備えていることがわかります。プリンターのインク レベルが美しく表示され、特にタッチ スクリーン デバイスで、格段に使いやすくなっています。

デスクトップ アプリから印刷している場合はデスクトップ プリンター UI、Metro スタイル アプリから印刷している場合は Metro スタイル UI と、Windows によって自動的に適切な種類の UI が表示されます。

メーカーからデバイスの構成 UI が提供されていない場合は、Windows がどのプリンターにも使用できる標準の UI を提供します。ただし、プリンター メーカーが自社のデバイス用にカスタマイズしたエクスペリエンスを提供することにした場合は、標準の Windows UI を置き換えるアプリを提供できます。メーカーからアプリが提供されている場合、ユーザーがデバイスの構成を変更する場合や、印刷中にデバイスの構成が変わった場合 (紙詰まりなど) に、Windows は標準の UI ではなく、メーカーのカスタマイズされたアプリを表示します。

レンダリング

プリンター ドライバーの最も重要な機能の 1 つは、ユーザーから印刷の指示が出された場合に、アプリが生成するコンテンツを取得し、それをプリンターが理解できるものに変換することです。これは、Windows 8 印刷クラス ドライバーを構築するうえで、最も難しい領域の 1 つでした。ここでは、この機能について、少し詳しく見て行きましょう。

前述のとおり、Word や Photoshop などのデスクトップ アプリは、グラフィックス コマンドを使って、コンテンツを画面やプリンターに出力します。アプリがコンテンツを出力すると、印刷システムがコンテンツを受け取り、これを必要に応じて XPS 形式に変換してから、プリンターのドライバー (さらに具体的には、ドライバーの "レンダー フィルター" の部分) を呼び出してコンテンツを適切な形式に変換します。これがプリンターに送られて、ファイルが印刷されます。

非常に広範にわたりプリンターをサポートする場合に、最大の課題の 1 つになるのは、おそらく、レンダリングをどう処理するかです。高価なプリンターの中には、PostScript、PCL、XPS など、標準の "ページ記述言語" (PDL) をサポートするものもあります。しかし、より価格の低い、コンシューマー向けのデバイスは、価格を抑えることを念頭に製造されていて、その多くは、ページ情報をプリンターに送る方法に、メーカー独自の方法を採用しています。自社の製品ライン全体でいくつかの言語しか使用していないメーカーもあれば、プリンター ハードウェアの機能を最大限に引き出すために、モデル間で言語を調整しているメーカーもあります。

このため、プリンター ドライバーとプリンター ハードウェア間に 1 対 1 の関係が生まれます。

PDL1 が Fabrikam 1000 プリンターに、PDL2 が Fabrikam 2000 プリンターに、PDL3 が Fabrikam 2010 プリンターに対応することを示す図

各 PDL が完全なプリンター ドライバーであった場合、プリンターのサポートが増えるに従い、着実にドライバーの数が増えることも容易に想像できます。もちろん、これは少し単純化していますが、複数のデバイスをサポートするドライバーを作成することもでき、実際に複数のプリンターをサポートするドライバーもよく目にします。しかし、ここで重要なポイントは、Windows 7 とそれ以前のバージョンの Windows では、この設計アプローチをサポートするための対応がまったくなされていないことです。

Windows 8 のプリンター ドライバー モデルは、1 つの PDL (またはドライバー) を複数のデバイスに関連付けることができるという概念をサポートします。

3 種類のプリンターにマップされている PDL X を示す図

私たちはプリンター メーカーに働きかけて、各デバイスに、汎用的なサポート方法を示す識別子を含めてもらうようにしています。私たちはこれを "互換性 ID" と呼んでいます。したがって、デバイスに XPS をサポートすることを示す互換性 ID がある場合、印刷システムは、そのデバイスのモデル固有のドライバーを見つける必要がなく、単に汎用の XPS ドライバーをインストールできることがわかります。Windows は、そのデバイスが汎用 XPS プリンターであることを理解し、そのように扱います。もちろん、Windows はこれが Fabrikam 1000 プリンター (または任意のデバイス) であることを理解しているので、モデル固有のドライバーがある場合は、それをインストールします。ただし、提供されているドライバーがない場合でも、Windows はクラス ドライバーを使ってこのプリンターに印刷できます。

したがって、この例では、クラス ドライバー モデルの一部としてインボックスのレンダー フィルターのセットがあり、これらは対応する互換性 ID を実装しているデバイスであればどのデバイスに対してもインストールできます。この概念を論理的に拡大すると、まだ設計も構築もされていない将来のデバイスにも、Windows 8 の印刷クラス ドライバーと互換性を持たせることができるでしょう。私たちはプリンター メーカーと協力して取り組んでおり、どのメーカーも互換性 ID を自社のデバイスに実装することを計画しています (多くのメーカーは既に実装済み)。この機能のおかげで、Windows 8 でサポートされるプリンターの数は、時間の経過と共に減るのではなく増えていき、ドライバーを探しに行かなくても、すぐにプリンターを使用できる Windows 8 のエクスペリエンスをますます多くの方に体験していただけます。

しかし、メーカー独自のレンダリング言語を使用しているデバイスはどうなるのでしょうか。印刷クラス ドライバーは、そのモデルもサポートしますが、それぞれの独自言語を使用するモデルのセットごとに、個別のレンダリング フィルターが必要になるというデメリットがあります。これを回避する方法はなく、Windows 8 では、よく使われるモデルのセットに対応するフィルターをいくつか用意しています。ただし、この件についても、私たちはプリンター メーカーと協力してこの状況の改善に努めており、将来は、クラス ドライバーをさらに簡単に使用できるプリンターが製造されるものと期待しています。

Windows RT からの印刷

印刷クラス ドライバーが使用するリソースの削減は、即、Windows のフットプリントの縮小につながります。これは、特に、Windows RT では非常に重要です。また、V3 プリンター ドライバー アーキテクチャは、拡張性が高く、長年にわたって進化した結果、サイズが大きく複雑なプリンター ドライバーの開発を助長するモデルになりました。中には、常時実行されるサービスをインストールして、バッテリ電力を消費し、プロセッサ時間を使うドライバーもあります。また、1 つのデバイスしかサポートしないのに、Windows 8 のプリンター ドライバー セット全体のサイズを超えるドライバーも目にしています。

Windows RT からの印刷をサポートする必要があり、また、一般的なニーズとして印刷の効率化を図った結果、ドライバーの動作をより厳密に制御するアーキテクチャを開発しました。既にお話したとおり、印刷エクスペリエンスの UI の部分は、完全に独立したコンポーネントになり、ドライバーの一部ではなく 1 つのアプリとして提供されます。つまり、UI を提供するかどうかは任意になり、ドライバーは標準の Microsoft 印刷 UI を使って機能します。また、サービスの依存関係を取り除き、ドライバーに追加のソフトウェアが付属する可能性を抑えることで、ドライバー アーキテクチャを簡素化して、電力効率を高めています。

Windows 8 ドライバー モデルを基に、プリンター ドライバーのインストール方法も大幅に変更しました。Windows 7 とそれ以前のバージョンの Windows では、すべてのプリンター ドライバーが "ドライバー ストア" (全種類のドライバーのデータベースのようなもの) に格納されていました。プリンターを接続すると、ドライバー ストアから適切なドライバーが検索され、スプーラーがプリンターに対してドライバーを使用できる特別な場所に、そのドライバーがコピーされます。Windows 8 では、この余分なコピー処理を排除し、ディスク I/O を大幅に削減しています。印刷スプーラーは、ドライバー ストアからドライバーを検索できるようになっています。

具体的な例では、Epson Artisan の Windows 7 へのインストールにかかった時間と、Windows 8 へのインストールにかかった時間を比較しました (Windows 7 では比較的小さいドライバーを使用しました)。結果は、Windows 7 ではインストールに 14 秒かかりましたが、Windows 8 では 2 秒未満でした。

まとめ

ご覧のとおり、Windows 8 のプリンター ドライバー アーキテクチャは、大幅に進歩しています。既にユーザーが所有しているプリンターの多くをサポートするだけでなく、サイズが小さく高速な組み込みのクラス ドライバー フレームワークによって、将来のデバイスもサポートします。優れたパフォーマンスを誇りながら、必要なディスク容量はわずかです。

皆様のフィードバックをお待ちしております。

-- Adrian Lannin