Hebikuzure's Tech Memo

2009年7月12日

互換表示と “スマート デフォルト”

Filed under: Internet Explorer — hebikuzure @ 7:21 AM

Compatibility View and “Smart Defaults”
http://blogs.msdn.com/ie/archive/2009/06/17/compatibility-view-and-smart-defaults.aspx


ある所でこの試訳が役に立っているというお話を伺いました。大変ありがたい事です。また 1 本できあがりましたので、掲載します。

以下の文章は IE Blog の 6/17 の記事 Compatibility View and “Smart Defaults” を hebikuzure が私的に試訳したものです。翻訳については Microsoft Corporation およびマイクロソフト株式会社とは無関係に hebikuzure が公開情報に基づき独自に行ったものであり、この文書の内容についての文責は公開者である hebikuzure にあります。翻訳の内容および技術的内容については正確を期すよう十分な注意を払っておりますが、誤りや不正確な部分が含まれている可能性がありますので、本文書を利用される際には原文も併せてご確認ください。


互換表示とスマート デフォルト

Internet Explorer 8 が既定ではページを最も標準に準拠したモードで表示するという、相互運用性を重視した設定になっている事について、いくつか過去投稿で触れてきました。この事は既存の Web コンテンツへの互換性においていくつかの課題を発生させました。

現在の Web ページの一部は相互運用性に乏しい以前の IE の動作を前提としており、その結果 IE8 の標準準拠の既定のモードでは期待通り動作しない場合があります。この問題に対処するため、ユーザーや Web 開発者がブラウザーを既存のコンテンツに互換となるよう設定するため機能として、互換表示‘EmulateIE7’ X-UA-Compatible タグなどの機能を作りました。この記事では賢明な既定値 (smart defaults) によってユーザーにより互換性の高いアウトオブボックス エクスペリエンスを提供する状況について述べています。

企業内のイントラネット (例えば http://myPortalSite のようなローカル ネットワーク) にある多くのサイトは現在 Internet Explorer 7 互換であり、“IE” とは IE7 の動作である事を想定しています。こうした業務用の Web サイトやアプリケーションとの互換性を保つため、IE8 はコンテンツが ‘ローカル イントラネット’ ゾーンにある場合は既定で互換表示を行います。この動作の例外は ‘Localhost’ とループバック アドレス (127.0.0.1 や Ipv6 での同様のアドレス) です。インターネットでの利用 (IE8 は既定で標準モードです) を目的としたページのテストをローカル Web サーバーで行う事が多い Web 開発者とデザイナーのニーズに適うよう、これらのアドレスは既定で IE8 標準モードで表示されます。

‘local intranet’ への設定は ツール -> 互換表示設定にある ‘互換表示でイントラネット サイトを表示する’ で変更できます。

IT 管理者はこの設定をグループ ポリシーを使い構成できます。同様に IT 管理者は互換表示で表示するのが適しているイントラネットとエクストラネットのサイトのリストを構成し管理できます。このポリシーを、例えばイントラネットで IE8 標準モードを有効にするなど ‘ローカル イントラネット’ のポリシーを “オフ” にする事と同時に利用すれば、企業はインフラストラクチャーの要素を段階的に IE7 標準から IE8 標準に移行する事ができます。

これとは別に IE が賢明な既定値を利用するのは、WebOC レイアウト モードです。Trident とも呼ばれる WebBrowser コントロールを利用する Windows アプリケーションは、これまでも、そしてこれからも多数存在するでしょう。CorelDraw Graphics Suite や Encarta、Microsoft Office、Nero などはその一例です。ご推察の通り、ユーザーが自分のコンピュータにインストールしているソフトウェアのアップデートは複雑な作業です (例えば、開発元はシステムの更新を作成する必要があり、ユーザーはアップデートに同意する必要があり、さらに更新を入手してインストールする必要があります) 。これは特に “箱入り” のソフトウェアで顕著で、多くの場合 “ライブ” な Web アプリケーションに比べて – 販売店の棚に CD や DVD を並べるのに対して Web からのダウンロードができるので – 大きなコストがかかります。またこうした Windows アプリケーションは Internet Explorer によって特定の動作が設定されていると見做しています。互換性を維持するため、IE8 の WebOC を利用するアプリケーションでは既定で互換表示を使いページを表示します。アプリケーションは以下のレジストリ値を設定して IE8 標準モードを有効にする事もできます:

[(HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE)\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
“MyApplication.exe” = dword 8000 (Hex: 0x1F40)

さらに、“hard asserts” により IE が互換表示に切り替えられるような状況もあります。この概念に親しみの無い方は、Wikipedia に基本的な領域をカバーする優れた解説があります –

アサーションはプログラマが前提条件としていたことがプログラム実装中にも保持され、プログラム実行時でも正しいことを保証するのに使われる。

この技法の主な利点は、問題が発生したときにそれを即時かつ直接的に検出できる点であり、後から検出しても様々な副作用によって真の原因がなかなかつかめないことがある。アサーション違反はコード上の位置を表示することが多いので、煩雑なデバッグ作業なしで問題点を即座に発見することができる。

IE8 に含まれるまったく新しいレイアウト エンジンを構築した際、アサーションのロジックによる一般的なコード パスの計測を標準的な手法を用いました。この計測手法は IE8 の開発期間中、新しいレイアウト エンジンの実装の際に不完全なロジックや不正な仮定を見つけ出すのに非常に貴重でした。例えば、あるサイズ設定のアルゴリズムについての元々の実装は、オブジェクトに取り込まれた実際の高さを追跡する内部的な構造である ‘消費された高さ’ でしたが、負の値になる事ができませんでした。こうした仮定は、特定の top margin 値によってそうした状況になる事ができるため、誤っている事がわかりました。消費された高さの許容される値に結び付けられたアサーションにより、エラーを識別し修正できたのです。

多くの部分で、出荷用のコードからアサーションを削除しています。とは言え、新しいレイアウト エンジンにはエラーが発生した際にスムーズに回復できないようなコード パスがあり、こうしたパスではアサーションが残されています。IE8ベータ版では、こうしたレイアウトでの “ハード アサート” が発生すると空白のページが表示されていました。壊れていたり明らかに不正に表示されているページでの操作ができるよりは何も表示しない方が良いだろうと考えたからです。このエクスペリエンスは出荷版の IE8 で修正され、“ハード アサート” からの回復には互換表示が使われるようになりました。言い換えれば、まったく何も表示しないより IE7 のようにページを表示する方が、より良いユーザー エクスペリエンスを提供できると信じています。

新しいインターネット オプションのコントロールパネルで以下の設定ができます: ツール -> インターネット オプション -> 詳細設定 -> ブラウジング -> ページ レイアウト エラーから互換表示で自動的に回復 (有効または無効)

エラーが発生すると、そのページだけあるいはサイトの一部だけではなく、ドメイン全体が互換表示で復旧します。これはユーザーが互換表示ボタンを押した場合のエクスペリエンスと同様で、ユーザーが同じサイトをブラウズする際に繰り返し “空白のページ” で煩わされる事を防いでいます (サイトのすべてのページに表示されているバナーがアサーションの原因となる場合を考えてみてください) 。新しいバルーン ヒントのメッセージにより、ページが互換表示に切り替えられた事とその理由が示されます。

自動的に回復する際に切り替えられた互換表示は、IE のセッションの期間中だけ有効です – この動作は InPrivate モードの際に互換表示ボタンを押して切り替えた場合のエクスペリエンスと同様で、通常のブラウジング セッションで互換表示に切り替えた場合 (ドメインごとの互換表示の情報はブラウザーを再起動しても残ります) とは異なります。言い換えると、後から同じサイトを (新しいセッションで) 訪問すると、IE8 標準モードの動作に復帰します。

あるドメインで自動回復が発生すると、互換表示ボタンが (非表示や押されていない表示ではなく) 押されたように表示されます。回復されたドメインで互換表示ボタンを押すと、ページを IE8 モードで強制的に再読み込みします。ここで注目すべきなのは、アサーションの原因となるコンテンツで互換表示のオン/オフを切り替えると、自動回復のループが生じる事です: サイトのコンテンツが引き起こした自動回復により互換表示が行われ、ユーザーが互換表示ボタンを押してページを IE8 標準モードに戻し、IE8 のレイアウト エンジンにサイトのコンテンツが再び与えられると自動回復が発生して互換表示に戻り…

自動回復したドメインはユーザーの互換表示リスト (ツール -> 互換表示設定) でカッコつきで表示されます。

カッコつきのドメインは恒常的なものではありません。自動回復されたドメインのリストを “恒常的な” 項目 (カッコのない項目) に追加して置き換える作業をしないと、これらの “一時的な” ドメインは削除されます。

IE8 の IE8 X-UA-Compatible タグまたは HTTP ヘッダー (例: ‘IE=8’ または ‘IE=EmulateIE8’ + 標準の DOCTYPE) が存在すると、クライアントの自動回復の設定値に関わらず強制的に IE8 モードになります (レイアウトでの ‘ハード アサート’ が発生するとユーザーは空白のページを目にする事になります) 。開発者は空白のページが表示される問題を、開発者ツールバーでページを IE8 ドキュメント モードに強制的に切り替える事でデバッグできます。開発者ツールバーも自動回復を抑止します。

レイアウト エンジンの回復不可能なエラーの原因となる既知の問題が出荷前に修正できるよう全力で取り組みました。実運用環境で予期せず発生する問題について、IE は Windows エラー報告 (WER) を通じてエラー レポートを生成します。このレポートにより、エラー時のコール スタックが得られ、最終的には現象を再現し、調査し、報告されたクラッシュやハングと同様アサーションの問題を修正します。

まとめ

IE8 の標準を既定とする構成は開発者とデザイナーが次世代の Web ページとアプリケーション、エクスペリエンスを創造する助けとなります。同時に、この決定は古いバージョンの IE で動作するよう設計された既存のコンテンツとの互換性に関する挑戦である事をすぐに認識しました。この記事で説明した動作は相互運用性と互換性を両立させ、開発者とエンドユーザー両者に利益をもたらします。互換性についてのフィードバックをお待ちしております。コメントを残し、IE8 と訪問し利用するコンテンツやアプリケーションのエクスペリエンスをお知らせください。

Scott Dickens
プログラム マネージャー

広告

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com Blog.

%d人のブロガーが「いいね」をつけました。