こんにちは、阿久津です。Internet Explorer(以下、IE)8の挙動を前バージョンであるIE7と比べますと、いくつか首をかしげてしまう部分があることにお気付きでしょうか。例えばクライアントとしてIE8を使用している際、Webサーバが管理するセッション情報が正しく送受信できない場面に出くわすことがあります。

これはIE8のプロセス管理変更に起因するトラブルと言っても過言ではありません。第76回で述べたように、IEを複数起動してもサブプロセスで管理し、メモリの効率的な理由が行なわれるようになりましたが、ここで問題となるのが、フレームプロセスの結合。IE8では起動速度を向上させるため、最初にフレームプロセスだけを起動し、以降の起動では新しいタブプロセスもしくは既存のタブプロセスを利用して新しいタブを開いています。その際に各プロセスを共有する仕組を設けることで、セッション情報の欠落を防ぐ仕組みを追加しました。

例えば、Webサイトに対するログオンリンクが用意されているとしましょう。ここで同リンクのタグにTarget="_blank"など別ウィンドウで開く設定が施されている場合、異なるタブプロセスを用いてログオンページにアクセスすることになりますので、異なるタブ間でのセッション共有が必要となり、前述の機能で問題回避しています。ちなみにIE7では、プロセス単位でセッションを管理していましたが、IE8では新規ウィンドウやタブといった操作方法によって動作は異なるようです。このあたりはまた別の機会に述べましょう(図01)。

図01: IE8では新規にセッションを張るための<新規セッション>という項目が<ファイル>メニューに用意されています

さて、利便性の良さを提供するIE8ですが、セッションが統合されますと、冒頭で述べたようにWebサイトによってはうまく動作しない可能性が発生します。Microsoftはこのようなケースを想定し、「-nomerge」というフレームプロセスの結合を行なわないオプションを用意しました。同オプションを使ってIE8を起動しますと、それまでとは異なり新しいプロセスを作成するようになります(図02~04)。

図02: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「"%ProgramFiles%\Internet Explorer\iexplore.exe" -nomerge」と入力して<OK>ボタンをクリックします

図03: こちらは通常の手順でIE8を複数起動した状態。複数のサブプロセスが起動します

図04: こちらは「-nomerge」を使用してIE8を複数起動した状態。複数のプロセスが新規作成されています

このようにオプションに応じて、フレームプロセスの結合を制御可能なIE8ですが、使用環境によっては常に統合機能を無効にしたい方もおられるでしょう。そこで今週は、IE8のフレームプロセス結合を常に無効化し、セッション情報の欠損を回避するチューニングを紹介します。

1.IE8を終了させます。
2.[Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力してから<OK>ボタンをクリックします。
3.レジストリエディタが起動したら、HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Mainまでキーをたどって開きます。
4.右ペインの何もないところを右クリックし、メニューから<新規>→<DWORD値>と選択します。
5.ステップ04で作成した値名を「FrameMerging」に変更します。
6.ステップ03と同じ手順でDWORD値「SessionMerging」を作成します。
7.[F5]キーを押して変更内容をシステムに反映させてから、レジストリエディタを終了させましょう。

これでチューニング終了です(図05~10)。

図05: IE8が起動中の場合は、<×>ボタンをクリックして終了させましょう

図06: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図07: レジストリエディタが起動したら、HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Mainまでキーをたどって開きます

図08: 右ペインの何もないところを右クリックします。メニューから<新規>→<DWORD値>と選択し、値名を「FrameMerging」に変更してください

図09: 右ペインの何もないところを右クリックします。メニューから<新規>→<DWORD値>と選択し、値名を「SessionMerging」に変更してください

図10: [F5]キーを押して変更内容をシステムに反映させてから、レジストリエディタを終了します

今度は「-nomerge」オプションを使用せずに複数起動しても、新規プロセスを作成してIE8が起動するようになります。なお、上記手順で作成したDWORD値「FrameMerging」「SessionMerging」は文字どおり、フレームプロセスの結合、セッション情報の結合を制御するエントリーで、データ値が「0」の場合は各動作が無効、「1」の場合は有効。つまり今回は各動作を無効にするチューニングを行なったことになります。また、初期状態に戻すときは各DWORD値を削除してください(図11)。

図11: 「-nomerge」オプションを使用せずにIE8を複数起動しても、複数のプロセスが新規作成されるようになります

それでは、また次号でお会いしましょう。

阿久津良和(Cactus)