これまでになく高速に起動する PC を設計する

私たちは、PC の電源をオフにする必要が一度もないようにし、Connected Standby (接続維持スタンバイ) 状態で実行できるように努力していますが、それでも主要なシステム コンポーネントの更新時には再起動が必要なことを認識しています。以前、Windows の起動エクスペリエンスの再構築についてと、コア ブート ローダーと選択肢がどのように最新型でタッチパネル対応になったかについてお話ししました。さらに、起動もかなり高速になりました。実際にかなり速くなったので、BIOS を操作したり、代わりの方法で読み込んだりする場合に必要となる診断ツール類を有効にするには、設計について調べる必要があります。

この記事では、ユーザー エクスペリエンス チームのプログラム マネージャーである Chris Clark が、信じられないほど高速な起動エクスペリエンスについて話します
--Steven


Windows 8 には問題があります。起動が本当に速すぎることです。

実際、かなり速いので、起動を中断するために操作する時間がまったくなくなりました。Windows 8 PC の電源をオンにしたとき、F2 キーや F8 キーなどのキーストロークを検出する十分な時間がなくなりました。まして、"セットアップするには F2 キーを押してください" などのメッセージを読む時間などありません。起動を中断して、通常行われる動作とは異なる動作を PC に指示することができなくなるのは、数十年ぶりのことです。

高速起動は、私たちがどうしても守りたい機能です。もちろん、起動を意図的に遅くして、これまで行っていたようにそれらの機能を実行できるようにするなどだれも想像できないでしょう。この記事では、これまでの操作をすべて行えるようにしながら、できるだけ高速な PC の起動を維持する新しい解決策によって、どのようにこの "問題" に対処したかについて順序立てて説明します。

速すぎて中断できない

少し時間を取って、Gabe Aul が「Windows 8 でお届けする高速な起動」という以前の記事で投稿した高速起動に関するビデオをご覧になることをお勧めします (既にご覧になった場合はもう一度ご覧ください)。このビデオでは、ソリッド ステート ドライブ (SSD) が搭載されたノート PC が 7 秒未満で完全に起動しています。この高速起動は、特別なハードウェアが必要なものではなく、新しい PC の機能です。既存のハードウェアでも起動時間がかなり向上しますが、多くの PC は BIOS 自体 (起動時に表示される BIOS ロゴとメッセージ セット) にかなりの時間を費やします。ご想像のとおり、SSD も高速起動に寄与します。

起動全体の長さが 7 秒しかないと、ブート シーケンスを構成する個々の部分が速く終了しすぎて気付くことができません (まして中断することはできません)。起動時に何を行うかに関する決定の大部分は最初の 2 ~ 3 秒で終わります。その後は、できるだけ早く Windows に移るだけで起動が終了します。これらの 2 ~ 3 秒間には、ファームウェア初期化と POST (2 秒未満) の時間、および Windows ブート マネージャーが代替起動パスを検出する時間 (システムによっては 200 ミリ秒未満) が含まれます。これらの時間は短縮し続け、現在でさえ以前のように起動を中断する十分な時間がなくなっています。

Windows チームでは、この変化の影響を最初に感じました。特に、私たち自身が作った F8 キーの動作が最もたいへんでした。以前のバージョンの Windows (Windows 95 までさかのぼる) では、起動の開始時に F8 キーを押すと、高度な起動オプション メニューにアクセスできました。このメニューでは、セーフ モードや "ドライバー署名の無効化" などの役に立つオプションがありました。私個人は、初めての PC を Windows 3.1 から Windows 95 にアップグレードしたときにこれらのオプションを使ったのを覚えています。F8 キーは、アップグレードの問題をすぐに解決して、Windows 95 を使い始めるのに役立ちました。

しかし、Windows 8 におけるハードウェアとソフトウェアの改良により、Windows が F8 キーストロークを読み取って反応するために残された時間が短くなりました。SSD ベースの UEFI システムでは、"F8 時間" は常に 200 ミリ秒未満になります。どんなに速く指を動かせても、200 ミリ秒のイベントを確実に捕らえる方法はありません。ですからタップしてみましょう。私は、社内を歩いたとき、同僚が F8 時間を必死で捕らえようとしていたのを覚えています。何度も何度もタップを繰り返しても、最終的に何とか F8 時間内にタップするまで結局何回も再起動を見ることになりました。非公式な調査を行った結果、繰り返しタップした場合の間隔は、最も優秀な人でもせいぜい約 250 ミリ秒であることがわかりました。この最良のケースでさえ、200 ミリ秒の時間を捕らえるにはある程度のでたらめさが必要です。最終的にこの短い時間を捕らえた場合でも、指が痛くなったり、時間を無駄にするだけでなく、キーボードに必死に指を打ち付けているおかしな人に見えてしまいます。

F8 キーで見られた問題は、起動時に押す他のすべてのキーにも当てはまります。たとえば、Windows 8 Developer Preview リリースでは、F8 キーを押すと修復オプション、回復オプション、および高度な起動オプションすべてを利用できるようになります。別のキーを使うと、デバッグの有効化やドライバー署名の無効化など、開発者用のオプションを利用できます。さらに、ほとんどの PC では、ファームウェアにより使用される追加のキーストロークや、POST 時にメッセージにより通知される追加のキーストロークがあります ("セットアップするには F2 キーを押してください" や "ネットワーク起動するには F12 キーを押してください" など)。POST は、これらの指示が表示されるまでにほぼ終了するようになりました。そして多くの場合、キーボードは POST のかなり後半まで機能しないため、ファームウェアがこれらのキーストロークを検出する時間がほとんどありません。デバイスによっては検出しようともしません。

それでも、これらのキーストロークはそれぞれ重要な役割を果たすため、私たちはこれまで起動時の重要な中断機能を提供するためにこれらのキーストロークを利用してきました。しかし、このどれも行う時間がなくなってしまいました。

問題の分野を定義する

私たちは、これらの問題を多くの角度から見て、全体的なアプローチによって解決しました。この試みは、開発者、テスター、プログラム マネージャーによって行われ、カーネルの最も深い部分から全体的なユーザー エクスペリエンスまであらゆることが検証されました。まず、エンジニアリングの問題としてこの問題にアプローチし、起動時にキーストロークに依存する状況やシナリオを特定し、Windows 8 の各シナリオで機能を回復する、文字どおり数十もの方法を考案しました。

そのリストからいくつかの主要なシナリオを抜粋します。

  • Windows が正しく起動するときでさえ、異なる動作が必要なことがあります。たとえば、USB ドライブなどの代替デバイスから起動したり、ファームウェアの BIOS セットアップ オプションに移動したり、別個のパーティションにある保護された Windows 回復環境イメージ内からツールを実行したりする場合があります。一般に、以前は Windows を関与させず、主にファームウェア固有のキー (F2 または F12 キーや、なかなか覚えられない他のキー) を使ってこれらのシナリオを達成していました。
  • 問題が発生した後にトラブルシューティングを行う必要が生じたり、発生した状況を元に戻す必要が生じることがあります。Windows には、このような状況に役立つたくさんのツールがあり、PC を更新したり初期状態に戻したりする、システムの復元を使って復元ポイントまで戻る、これまでもよく使っていたコマンド プロンプトで手動トラブルシューティングを実行する、などの作業を行うことができます。以前は、起動の開始時に F8 キーを押すことで、主に Windows ブート マネージャーからこれらのトラブルシューティング オプションにアクセスしていました。
  • 起動時のエラーによっては、自動的に検出するのが困難です。たとえば、Windows の起動プロセスは成功しても、後で読み込まれるコンポーネント内のエラーにより Windows を使用できないことがあります。このようなケースはまれですが、ドライバーのインストールが破損しているため、ログイン画面が読み込み時に必ずクラッシュする場合などに発生します。以前の世代のハードウェアでは、キーストローク (F8 など) を使って起動を中断し、クラッシュの原因となっているコンポーネントが読み込まれる前に適切な修復オプションを表示することができました。時間の結果と共に、この方法で起動を中断するのが難しくなっていき、Windows 8 では事実上不可能になりました。
  • 主に開発者により使用される特定の起動オプションを有効にする必要がありました (Windows の内部と外部の両方)。以前は、起動の開始時に F8 などのキーを押すことでこれらのオプションにアクセスできました。開発者を対象としたこれらのオプションは現在も重要で、ドライバー署名適用の無効化、"起動時マルウェア対策" の無効化などのオプションがあります。

私たちが焦点を当てたキー設計の原則の 1 つは、解決策が Windows 8 の残りの部分とどのように調和するかという点でした。私たちは、これらの各種起動オプションは異なるというよりは似ているため、Windows 内の異なる場所に配置してはならないと考えました。これを逆から考えると、あるタスクをどこから実行できるかを知るために、だれも Windows が見えないところでどのように構築されているかを知る必要はありません。最も簡単に言うと、私たちは "動作すればよい" と考えました。

3 つの解決策による 1 つのエクスペリエンス

最終的に、3 つの解決策を組み合わせてこれらの問題を解決しました。解決策を組み合わせることで、エクスペリエンスが 1 つにまとめられ、キーストロークを使って起動を中断しなくても問題が解決されます。

  1. すべてのオプションを 1 つのメニュー (起動オプション メニュー) にまとめました。このメニューでは、すべてのトラブルシューティング ツール、開発者用の Windows 起動オプション、ファームウェアの BIOS セットアップへのアクセス手段、USB ドライブなどの代替デバイスで起動する直接的な方法を利用できます。
  2. PC が正常に起動して Windows に移行できない問題が発生した場合に必ず起動オプション メニューを自動的に表示する (かなり堅牢で検証された環境で) フェールオーバー動作を実現しました。
  3. 最後の点として、Windows または起動に何も問題がない場合でも起動オプション メニューを簡単に表示できる直接的な方法をいくつか用意しました。これらのメニューやオプションを "中断駆動型" にする代わりに、かなり簡単に実行できる意図的な方法でトリガーされるようにしました。

これらの各解決策により、中核となる問題のさまざまな側面が解決され、組み合わせることでエンド ツー エンドの 1 つのエクスペリエンスにまとめられました。

起動オプションごとに 1 つのメニュー

起動オプション メニューの背景にある中核的なビジョンは、Windows 8 PC の起動動作に影響を与えるすべてのオプションを 1 か所から使えるようにすることです。このメニューの一部については、「Windows の起動のエクスペリエンスを再構築する」という以前のブログ記事で詳細に説明しました。この記事では、タッチ操作、Windows 8 の外観、起動を構成する多くのサーフェイスでまとめられたユーザー エクスペリエンスを実現するために起動メニュー内に加えられた根本的変更についてかなり詳細に説明されています。私の UEFI ベース PC における起動オプション メニューのスクリーンショットを以下に示します。

[オプションを選択してください]: [続行]、[Use a device] (デバイスを使用)、[別のオペレーティング システムの使用]、[トラブルシューティング]、[PC の電源を切る]

代替デバイス (USB ドライブやネットワークなど) での起動は、これまでキーストロークで起動を中断する必要があった最もよくあるシナリオの 1 つです。Windows 8 UEFI ベースのファームウェアでは、ソフトウェアを使ってこれをトリガーできるようになりました。これらのデバイスでは、起動オプション メニューに [Use a device] (デバイスを使用) ボタンが表示されるようになり、この機能を直接利用できます。上の画像からわかるように、この機能は他の起動オプションと並んで表示されます。Windows では、代替デバイスから起動する場合にキーストロークで中断する必要がなくなりました (ここでは、起動時にキーストロークを使わなくても起動オプション メニュー自体を表示できると仮定してください。この点についてはすぐに説明します)。

これと同じメニューに、UEFI ファームウェアの BIOS セットアップ (これがサポートされる Windows 8 UEFI ハードウェアの場合) で直接再起動できる新機能を追加しました。以前の世代のハードウェアでは、BIOS セットアップに入るための指示は POST で "セットアップするには F2 キーを押してください" などのメッセージとして表示されていました (これらのメッセージは、多くの場合他のどの種類の UI よりも長く PC に表示されていました)。これは、Windows 8 より前に作られたシステムにも当てはまり、これからも機能し続けます (主に、これらのデバイスの POST には数秒かかるためです)。一方、Windows 8 UEFI ベースの PC では、このようなキーストロークを使えるほど POST が長く続かないため、新しい UEFI ベースの機能ではこのオプションが起動オプション メニューに追加されています。このメニューの他の項目を調べた後、私たちは PC を UEFI ファームウェアの BIOS セットアップで再起動するボタンを [トラブルシューティング] ノードの [詳細オプション] グループ内に配置することにしました。

[システムの復元]、[イメージでシステムを回復]、[自動修復]、[コマンド プロンプト]、[UEFI ファームウェアの設定]、[Windows Startup Settings] (Windows 起動設定)

以前の非 UEFI デバイスについて簡単に述べると、Windows 8 より前に作られた従来のハードウェアには、UEFI によるこれらの新しいメニュー機能 (ファームウェア設定での起動とデバイスでの直接起動) は搭載されません。これらのデバイスのファームウェアでは、これまでと同様に POST 画面からこの機能を利用できます ("セットアップするには F2 キーを押してください" などのメッセージを使用)。これらの従来のデバイスには、Windows 8 PC の POST を 2 秒未満で実行できる機能強化がないため、引き続きこのようなキーストロークが機能する時間があります。

次の項目は、すべての Windows 8 デバイスで表示されます (UEFI も非 UEFI も同じです)。上の画像では、 [Windows Startup Settings] (Windows 起動設定) が追加されているのがわかります。新たに追加されたこの項目により、開発者用の Windows 起動オプションのエントリ ポイントが、統一された起動オプション メニューにまとめられ、これまで起動時に別個のキーが必要であったシナリオに対応できます。これには、"ドライバー署名の無効化" や "デバッグ モード" などの項目に加え、セーフ モードや他の複数のオプションが含まれています。これらのオプションの情報ページの拡大表示を以下に示します。

[再起動して、次のような Windows オプションを変更します]: [ドライバー署名を強制しない]、[起動時マルウェア対策をしない]、[システム障害時に自動的に再起動しない]、[低解像度ビデオ モードを使う]、[Enable debuggng mode] (デバッグ モードを使う)、[ブート ログを使う]、[セーフ モードを使う]

起動オプション メニューでは、Windows 8 PC の起動動作に影響を与えるすべてのオプションを 1 か所から使うことができます。これらのオプションを 1 か所にまとめることで、起動オプション メニューは、これらの関連する項目を使うことができる、わかりやすくてとても使いやすい、統一された場所となりました。起動オプション メニュー自体を表示できるので、Windows の起動設定の変更、UEFI ファームウェアの BIOS セットアップの表示、USB ドライブでの起動などのタスクを実行する場合に、キーストロークを使って起動を中断する必要がなくなりました。では、メニューを表示する方法を見てみましょう。

問題がある場合に起動オプション メニューを (自動的に) 表示する

Windows 8 PC で起動オプション メニューを表示する必要がある状況は、主に 2 つあります。1 つ目のケースは、問題が起きたため、PC を完全に機能する状態に復元するために修復操作が必要な場合です。2 番目のケース (次のセクションで説明します) は、問題は起きていないが、起動動作やファームウェア構成のある側面を変更したり、通常とは異なるデバイスから起動したりする場合です。

1 つ目のケースでは、何らかの問題が発生したため修復が必要です。PC ハードウェアの以前のモデルでは、起動時にいずれかのキーストロークを押すことで、ユーザー (または信頼している他のユーザー) がこのトラブルシューティング プロセスを開始する必要がありました。たとえば、Windows Developer Preview リリースでのオプションは、Shift + F8、F8、および F2 や F12 などのファームウェア依存キー (多くの場合 PC ごとに異なります) に分割されていました。

これらの各キーストロークは、トラブルシューティングの最初の手順を表しており、その後修復を行います。これらのキーストロークをすべて 1 つの起動オプション メニューにまとめることで、利用可能な多くのオプションに複数のキーを使う必要がなくなります。この利点をさらに活かすため、Windows の起動を正常に完了することができなくなったときに起動オプション メニューを自動的に読み込むことで、この残りの 1 つのキーストロークさえなくしました。

Windows 8 では、PC に Windows が読み込まれない問題が発生した場合、必ずこの自動フェイルオーバー動作により起動オプション メニューが直接表示されます。これには、起動が成功したように見えるが (Windows から見て)、実際には PC を使用できないケースも含まれます。この状況の例として、ドライバーのインストールに欠陥があるため、メイン ログオン画面が完全に空白で表示される場合などがあります。Windows は画面が空白であることを認識できませんが、画面を見ればだれでもこの点にすぐに気付きます。私たちは、複数回の起動にまたがってこの状況が発生したことをアルゴリズムにより検出し、起動時に Windows 回復環境 (WinRE) 内で起動オプション メニューを直接自動的に表示するようにしました。WinRE のソース イメージには、Windows のメイン インストールとは別に保持されたドライバーやファイルが含まれているため、ソフトウェアの変更の影響を受けず、起動オプション メニューからトラブルシューティングを開始するための信頼できる環境となります。

そもそも、この動作により、何も問題がない場合に Windows RE で起動オプション メニューが表示される可能性があるでしょうか。2 つの状況が連続して発生する必要があるため、この可能性は確かに低くなっていますが、もちろん可能性はあります。この点を念頭に置いて、起動オプション メニューの最初の位置に目立つ [続行] ボタンが表示されるように設計し、実際には Windows 8 PC で問題が発生していない場合に抜け出すことができるようにしました。私たちは、ユーザビリティ ラボでこの機能を調査し、この起動オプション メニューが意図せずに表示された場合にユーザーが何を行うかを調べました。 [続行] ボタンが役目を果たし、誤検出の場合の重要な回避方法となっていたのを見て安心しました。

[続行]: [Exit and continue to Windows 8 Consumer Preview] (終了して Windows 8 Consumer Preview に続ける)

状況によっては、Windows 8 は問題の内容に応じてより具体的な処理を行うことがあります。たとえば、コア ブート シーケンス自体が完了しなかった場合、自動的にもう一度試行されます。2 回目も成功しなかった場合、Windows RE が自動的に読み込まれ、特殊な起動修復ツールが起動されます。このツールは、起動プロセスの多くの問題を修正できるようにカスタマイズされていますが、起動修復ツールが成功しなかった場合のため、他のすべてのトラブルシューティング ツールを使うことができる手段も起動オプション メニューに用意しています。

これらの自動検出動作により、Windows 自体を正しく読み込むことができない場合でも、Windows 内の修復および回復ツールを常に利用することができます。キーを押したり、何らかの操作を実行しなくても、必要な場合に Windows RE が自動的に読み込まれるため、起動オプション メニュー自体からトラブルシューティング ツールを使って修復および回復することができます。

必要な場合に起動オプション メニューを表示する (問題が起きていない場合も含む)

エラーがない状況でも、Windows 内から起動オプションに移動できる簡単な方法が必要でした。メニュー項目の多くは、すべて正常に機能している場合でも必要です (代替デバイスでの起動、ファームウェア構成の変更、開発者用の Windows 起動設定の変更など)。

十分に機能する Windows 8 に論理的に適合する方法で、必要なときにいつでも起動オプション メニューを簡単に表示できるようにしたいと思いました。

一般に、私たちが好む方法は、特定のことを行う 1 つの手段を作り、その手段をできる限り良いものにする方法です。あることを行う方法が複数ある場合でも、常に主要な手段 (通常は大部分のケースに対応できる、最もよく使用される手段) があります。特定のことを行う 1 つの方法を選択することで、この方法を特定の使用シナリオ セットに合わせて設計することができるので、シナリオが変わっても有用かつ便利で望ましい方法となることをある程度期待できます。ときには、主要な手段で対応できない他のケースもあります。それらのケースを解決する必要性がそれほど高くない場合、その主要な手段が唯一の方法である可能性があります。

しかし、私たちのケースでは、主要な手段を作成し、さらに 2 つの方法を追加しました。1 つ目は、必要なすべてのシナリオに対応できるようにするためで、2 つ目は既存の Windows コンポーネントとの一貫したパターンを維持するためです。

起動オプションを表示する主要な手段は、 [PC 設定][全般] タブで [PC の起動をカスタマイズする] を選択する方法です。 [PC 設定] は、設定チャームから、または特定の検索語 (起動、セーフ モード、ファームウェア、BIOS など) を使ってスタート画面から検索することで表示できます。[全般] タブには、起動オプション メニューで使用可能なオプションの簡単な説明と、 [今すぐ再起動する] ボタンが表示されます。この画面に表示される説明は完全に動的で、Windows 8 PC ごとに使用可能なハードウェア、ファームウェア、ソフトウェアに応じて変化します。

[PC をリフレッシュする] ボタン、[Get started] (開始する) と [Reset your PC and start over] (PC を初期状態に戻して起動する) ボタン、[Get started] (開始する) と [PC の起動をカスタマイズする] ボタン、[今すぐ再起動する] などの複数のオプションが表示されている

[PC の起動をカスタマイズする][今すぐ再起動する] ボタンを押すと、完全に機能するシステムで起動オプションを表示する主要な手段が開始されます。システムで通常の再起動プロセスが開始されます。次に、Windows がシャットダウンを完了し、完全に再起動して POST に入るすぐ前に、プロセス全体が一時停止し、起動オプション メニューがビューに表示されます。これは、シャットダウン/再起動プロセス中でも UI を表示できる最後のポイントです。私たちは、PC が別の POST を実行する前に目的のオプションを選択できるように、この中間ポイントで再起動プロセスを一時停止することにしました。POST が発生する前に目的の起動オプションを選択することで、再起動と POST をもう一度実行しなくても、ファームウェア セットアップやデバイスの起動に直接移動できます (選択した場合)。このメニューを使うと、必要な場合は 2 つ目の Windows インストールをすばやく起動できます。Windows により、再起動シーケンスが一時停止されて起動オプション メニューが表示されるため、これは 2 つ目の OS を起動する最も高速な方法です。

さらにすばやくアクセスするには、シャットダウン メニュー内から起動オプション メニューを表示します。Shift キーを押したまま [再起動] をクリックすると、 [PC 設定] 内から [PC の起動をカスタマイズする] をクリックした場合と同じイベント シーケンスが実行されます。設定チャームを使うと Windows 8 のどの部分からもシャットダウン メニューを開くことができるので、これは起動オプション メニューを直接表示する特にすばやい方法です。この記事の最後にあるビデオを見るとわかるように、マウスを使って直線的なフロー (Windows 7 より要求が少ないフロー) でこれらのオプションを表示できるように、このコマンドを移動しました。

[電源] ボタンの上のメニュー: [スリープ]、[シャットダウン]、[再起動]

この Shift + [再起動] オプションをシャットダウン メニューに追加したのは、PC にサインインしているユーザーがいない場合でも起動オプションを使えるようにする必要があるためでした。起動時にキーストロークを使うことができる以前のハードウェア モデルでは、PC に物理的にアクセスできるユーザーがキーを押して起動を中断し、利用可能な起動オプションを使うことができました。これらのシナリオを維持するため、サインインしていない (ただし、PC を物理的に使っている) ユーザーが起動オプション メニューを使う方法が必要でした。

シャットダウン メニューは、この要件を完全に満たします。サインインしているユーザーがいない場合でも、ログイン画面からいつでも使うことができます。さらに、[再起動] での Shift キー修飾子の使用は、同じメニューの他の項目で Shift キーを使うパターンとも一致します。サインインしていないユーザーだけでなく、サインインしているユーザーの場合、他の多くの場所にもシャットダウン メニューが表示されることがあります。これらのどの場所でも、同じ Shift + [再起動] 動作が機能します。私たちは、シャットダウン メニューが表示されるときはいつでも、一貫した予測可能な方法で動作することが重要であると感じていました。

シャットダウン時に起動オプション メニューをトリガーする方法がもう 1 つあります。この方法には、コマンド プロンプトから機能するというおまけがあります。shutdown.exe に新しいフラグ /o を追加しました。/o フラグは、/r (再起動) と組み合わせた場合のみ機能するので、完全な構文は以下のとおりです。

Shutdown.exe /r /o

C:\Windows\system32\cmd.exe C:\Users\Chris 右矢印 shutdown.exe /r /o

この新しいフラグを shutdown.exe に追加したのは、Windows のこの部分の一貫性と予測可能性を維持するためでした。すべてのユーザーが Shutdown.exe を使うわけではありませんが、使う場合は、すべてのシャットダウン関連タスクをこのコマンドで行うことができます。

- Chris Clark

お使いのブラウザーでは HTML5 ビデオがサポートされていません。

ビデオをダウンロードしてお好みのメディア プレーヤーで再生することができます:
高画質 MP4 | 低画質 MP4