


ウィンドウマネージャは、グラフィカルユーザーインターフェイスのウィンドウシステム内でウィンドウの配置と外観を制御するシステムソフトウェアです。[ 1 ]ほとんどのウィンドウマネージャは、デスクトップ環境を提供するように設計されています。これらは、必要な機能(グラフィックハードウェア、ポインティングデバイス、キーボードのサポート)を提供する基盤となるグラフィカルシステムと連携して動作し、多くの場合、ウィジェットツールキットを使用して記述および作成されます。
ウィンドウ システムとウィンドウ マネージャーを明確に区別して設計されているウィンドウ マネージャーはほとんどありません。ウィンドウ メタファーに基づくすべてのグラフィカル ユーザー インターフェイスには、何らかの形のウィンドウ管理機能があります。実際には、この機能の要素は大きく異なります。[ 2 ] ウィンドウ マネージャーに関連付けられている要素により、ユーザーは実行中のウィンドウを開いたり、閉じたり、最小化したり、最大化したり、移動したり、サイズ変更したり、ウィンドウ デコレータを含めて追跡したりできます。多くのウィンドウ マネージャーには、タスク バー、プログラム ランチャー、画面上でウィンドウを半分または 4 分の 1 に分割するためのドック、ウィンドウをグループ化するためのワークスペース、デスクトップ アイコン、壁紙、選択したウィンドウを前面に表示する機能、ウィンドウを「巻き上げて」タイトル バーのみを表示する機能、ウィンドウをカスケード表示、ウィンドウをグリッド状に積み重ねる機能、スペースを節約するために同じプログラムのウィンドウをタスク バーにグループ化する機能、オプションのマルチ行タスク バーなど、さまざまなユーティリティと機能も備わっています。[ 3 ] [ 4 ] [ 5 ] [ 6 ]
1973年、Xerox Altoは、動作するWIMP GUIを搭載した最初のコンピュータとして出荷されました。重ね合わせウィンドウを可能にするスタッキングウィンドウマネージャを使用していました。[ 7 ]しかし、これは時代をはるかに先取りしていたため、その設計パラダイムが広く採用されるのは10年以上後のことでした。Microsoft WindowsにAppleのクラシックMac OSからコピーされた設計が含まれているかどうかは不明ですが、スタッキングウィンドウを使用したGUIを最初に作成したのがどちらもではないことは明らかです。1980年代初頭、Altoの後継機であるXerox Starは、ほとんどのメインアプリケーションウィンドウにタイル表示を使用し、重ね合わせはダイアログボックスのみに使用して、スタッキングの必要性をほとんどなくしました。[ 8 ]
クラシックMac OS は、QuickDrawを介した一種のスタッキング ウィンドウ管理を使用した GUI の初期の商業的に成功した例の 1 つです。その後継であるmacOS は、 Mac OS X 10.0以降コンポジットをサポートする、やや高度なウィンドウマネージャを使用しており、Mac OS X 10.2ではQuartz Compositorを介したハードウェア アクセラレーションによるコンポジットをサポートするように更新されました。[ 9 ]
Digital ResearchのGEM 1.1 は、すべてのウィンドウを重ね合わせることができるスタッキング ウィンドウマネージャを含むオペレーティング環境でした。1980 年代初頭にリリースされました。 [ 10 ] GEM は、 Atari TOSを実行するAtari STで使用されたメイン GUI として含まれていたことで有名であり、 Microsoft Windows が広く使用される以前のMS-DOSの人気 GUI でもありました。Appleの訴訟の結果、Digital Research は GEM 2.0 でスタッキング機能を削除せざるを得なくなり、ウィンドウマネージャはタイル型ウィンドウマネージャになりました。[ 11 ]
1980年代半ば、Amiga OSにはIntuitionと呼ばれる初期の合成ウィンドウマネージャが搭載されていました(AmigaOSの低レベルライブラリの一つで、AmigaシステムROMに含まれていました)。Intuitionは、どのウィンドウまたはその一部が覆われているか、どのウィンドウが前面にあり完全に表示されているかを認識し、更新が必要な画面部分のみを描画することができました。さらに、Intuitionは合成機能もサポートしていました。アプリケーションはまず、現在の表示領域外のメモリ領域をビットマップとして要求することができました。すると、Amigaのウィンドウシステムは、システムのハードウェアブリッターを使用して一連のビットブリットを実行し、これらのアプリケーションのビットマップとボタンやスライダーをディスプレイメモリ上に合成しました。これにより、アプリケーションはビットマップを再描画する必要がなくなりました。
1988年、Presentation ManagerがOS/2のデフォルトシェルになった。最初のバージョンでは、コマンドラインインターフェイス(CLI)のみを使用していた。IBMとMicrosoftは、DOSとWindows for DOSの後継としてOS/2を設計した。しかし、Windows 3.10の成功後、MicrosoftはWindowsを優先してこのプロジェクトを放棄した。その後、将来のOS/2バージョン3のためのMicrosoftのプロジェクトはWindows NTとなり、IBMはOS/2のシェルを完全に再設計し、OS/2 1.xのPresentation Managerを、OS/2 2.0で初登場したオブジェクト指向のWorkplace Shellに置き換えた。 [ 12 ]
X Window Systemを使用するシステムでは、ウィンドウマネージャとウィンドウシステムは明確に区別されています。厳密に言えば、Xウィンドウマネージャはビデオハードウェア、マウス、キーボードと直接やり取りすることはありません。それらはディスプレイサーバの役割です。
デスクトップ環境には通常、デフォルトのウィンドウマネージャが組み込まれています。例えば、GNOME 2 はMetacityを使用し、KDE Plasma Workspaces はKWinを使用しています。しかし、X Window System のモジュール設計により、ユーザーは別のウィンドウマネージャに切り替えることができます。例えば、 3D 効果が必要な場合はCompiz (3D合成マネージャ) を使用できますが、Sawfishやawesomeはより精密なウィンドウ制御を提供します。異なるウィンドウマネージャのコンポーネントを組み合わせて使用することも可能です。例えば、KWinのウィンドウ装飾をGNOME のデスクトップおよびドックコンポーネントと組み合わせて使用できます。
X ウィンドウマネージャには、アプリケーションの親を変更する機能もあります。つまり、最初はすべてのアプリケーションがルートウィンドウ(実質的には画面全体)に採用されますが、ルートウィンドウ内で起動されたアプリケーションを別のウィンドウに採用(つまり、そのウィンドウ内に配置する)することができます。X Window System のウィンドウマネージャは、ルートウィンドウからアプリケーションを採用し、親を変更してウィンドウ装飾(タイトルバーの追加など)を適用します。親の変更は、あるウィンドウの内容を別のウィンドウに追加するためにも使用できます。たとえば、Flash Playerアプリケーションをブラウザーウィンドウに親を変更すると、ユーザーにはそのプログラムの一部であるかのように表示されます。したがって、親の変更を行うウィンドウマネージャは、同じウィンドウ内に 1 つまたは複数のプログラムを配置でき、タイル表示とスタッキングをさまざまな方法で簡単に組み合わせることができます。
Microsoft Windows はWindows 2.0以降、統合スタッキング ウィンドウ マネージャーを提供してきました。Windows Vista では、オプションのハードウェア アクセラレーションによる代替手段として、コンポジットデスクトップ ウィンドウ マネージャー(dwm.exe) が導入されました。Windows では、 GDIがカーネルの一部であるため、[ 13 ]ウィンドウ マネージャーの役割はカーネルのグラフィカル サブシステムと密接に結合しており、サードパーティ ユーティリティを使用してそのようなシステムの上にタイル ウィンドウ マネージャーをシミュレートすることはできますが、ほとんど置き換えることができません。Windows のウィンドウ管理は、WindowBlindsやResource Hackerなどのサードパーティ ツールで強化することもできます。Windows 8以降、Direct3Dベースのデスクトップ ウィンドウ マネージャーは無効にできなくなりました。[ 14 ]ホット キーの組み合わせ Ctrl+Shift+Win+B でのみ再起動できます。[ 15 ]
Windows エクスプローラー(explorer.exe) は、現代の Windows システムではデフォルトでシェルとして使用され、タスクバーやファイル マネージャー、およびウィンドウ マネージャーの多くの機能を提供します。Windows のさまざまな側面は、付属の構成ユーティリティ、Windows レジストリの変更、またはWindowBlindsやResource Hackerなどのサードパーティ ツールを使用して変更できます。
Cygwin/Xを介して、マルチウィンドウモード(およびその他の X Window System 実装)でも、Unix 系環境から移植されたウィンドウマネージャを使用できる完全な X Window Server を Microsoft Windows 向けに提供することも可能です。これにより、例えば、同じマシン上の同じ Cygwin 環境、またはネットワーク経由で Linux、BSD Unix などのシステム上で X Window System クライアントプログラムを実行し、Microsoft Windows 環境上にその GUI のみを表示して使用することが容易になります。
Microsoft と X Window System は、類似の概念を説明するために異なる用語を使用していることに注意してください。たとえば、 Microsoft ではウィンドウマネージャという用語はほとんど言及されません。これは、ウィンドウマネージャが統合されており、交換不可能であり、シェルとは区別されているためです。 [ 16 ] Windowsシェルは、他のグラフィカル ユーザー インターフェイス システムにおけるデスクトップ環境の概念に類似しています。
2021年以降、ChromeOSにはAshと呼ばれる独自のウィンドウマネージャーが同梱されています。[ 17 ] Chromiumとashは共通のコードベースを共有しています。[ 17 ]以前は、google-chrome --open-ash互換性のあるシステムであればどれでも使用して実行できました。
ウィンドウマネージャは、ウィンドウの描画方法や更新方法を規定する3つ以上のクラスに分類されることが多い。
コンポジット型ウィンドウマネージャは、各ウィンドウを個別にレンダリングしてから統合表示することで、幅広い2次元および3次元の視覚効果を実現し、インターフェースの外観において大きな柔軟性をもたらします。
ウィンドウが重なり合うウィンドウマネージャで、かつ合成ウィンドウマネージャではないものはすべてスタッキングウィンドウマネージャですが、必ずしも同じ方法を使用しているとは限りません。スタッキングウィンドウマネージャは、まず背景ウィンドウを描画することでウィンドウの重なりを可能にします。これは「ペインターアルゴリズム」と呼ばれます。変更によっては、すべてのウィンドウを再スタックまたは再描画する必要がある場合があり、通常はすべてのウィンドウを再描画する必要があります。しかし、背景ウィンドウを前面に表示するには、通常1つのウィンドウを再描画するだけで済みます。これは、背景ウィンドウに他のウィンドウの一部が描画されている場合があり、その場合、覆われている領域が効果的に消去されるためです。
タイル型ウィンドウマネージャは、ウィンドウを画面上に並べて表示したり、上下に配置したりすることで、どのウィンドウも他のウィンドウを覆い隠さないようにします。Microsoft Windows 1.0ではタイル型ウィンドウマネージャが採用されており、X用のタイル型ウィンドウマネージャとしては、 i3、awesome、dwmなど、さまざまなものが利用可能です。
動的ウィンドウマネージャは、タイル表示とフローティング表示のウィンドウレイアウトを動的に切り替えることができます。X 用のさまざまな動的ウィンドウマネージャが利用可能です。

アクティブウィンドウとは、現在使用しているウィンドウマネージャでフォーカスされているウィンドウのことです。ウィンドウマネージャによって、現在アクティブなウィンドウの表示方法や、ユーザーがウィンドウを切り替える方法が異なります。たとえば、Microsoft Windowsでは、メモ帳とMicrosoft Paintの両方が開いている場合、メモ帳ウィンドウをクリックすると、メモ帳ウィンドウがアクティブになります。Windowsでは、アクティブなウィンドウはタイトルバーの色が異なることで示されます。ただし、アクティブウィンドウを選択する方法はクリックだけではありません。一部のウィンドウマネージャ(FVWMなど)では、マウスカーソルの下にあるウィンドウがアクティブになるため、マウスを動かすだけでウィンドウを切り替えることができ、クリックは不要です。
ウィンドウマネージャでは、マウスの代わりにキーボードを使ってアクティブウィンドウを選択する方法がよく提供されています。代表的なキーの組み合わせとしては、WindowsやKDEでよく使われるAlt+Tab(デフォルト設定ですが、ユーザー設定で変更可能)や、 Macintoshで使われるAppleキー+チルダキーなどがあります。適切なキーの組み合わせを押すと、通常は表示されているすべてのウィンドウが順番に切り替わりますが、他の操作も可能です。
すべてではありませんが、多くのウィンドウマネージャは、画面上の各ウィンドウに対して、何らかの視覚的なコントロール(多くの場合ボタン)を含む画面領域を提供します。各ボタンには通常、ウィンドウのタイトルが表示され、アイコンが含まれている場合もあります。この画面領域は、どのウィンドウがアクティブであるかを視覚的に示す役割を果たします。たとえば、アクティブなウィンドウのボタンが「押し込まれた」ように表示されることがあります。また、適切なボタンをクリックすることで、アクティブなウィンドウを切り替えることも通常可能です。Microsoft Windowsでは、この画面領域はタスクバーと呼ばれ、Apple Macintoshシステムではドックと呼ばれます。
アクティブウィンドウは、画面上の他のすべてのウィンドウの手前に常に表示されるとは限りません。アクティブウィンドウとは、キーボードで入力されたキーが送信されるウィンドウのことです。他のウィンドウによって視覚的に隠される場合もあります。これは、アクティブウィンドウの切り替えにクリックを必要としないウィンドウマネージャで特に顕著です。たとえば、FVWM はマウスカーソルの下にあるウィンドウをアクティブにしますが、そのZ オーダー(背景から前景までを基準としたウィンドウの表示順序) は変更しません。代わりに、ウィンドウの境界をクリックして前景に移動させる必要があります。Microsoft Windows のようなクリックしてフォーカスするウィンドウマネージャでも、アクティブウィンドウが隠される状況がありますが、これははるかにまれです。