シェル

シェル () とは、コンピュータプログラムの一種で、ユーザーへのインタフェースを提供するものを指す。オペレーティングシステム（OS）を持つ高機能なコンピュータにおいて、その機能への容易なアクセスを提供する。

他にも、この用語はゆるやかに応用されることもあり、特定のコンポーネントの周辺に構築された任意のソフトウェアを含むこともある。例えば、ウェブブラウザや電子メールクライアントはHTMLレンダリングエンジンの「シェル」といわれることがある。コンピュータシステムとユーザーの間にある「殻」であることから、このように呼ばれる。

概要 
コマンドラインシェルとグラフィカルシェルの2種類の形態へ大別される：
 コマンドラインシェル：キャラクタユーザインタフェース（CUI）ベースのコマンドラインインタプリタ(CLI)
 グラフィカルシェル：グラフィカルユーザインタフェース（GUI）ベースでいわゆる「デスクトップメタファ」等の環境へのユーザインタフェース

CLIとGUIのどちらが優れているかという議論はしばしば行われている。CLI支持派は、特定の操作（ファイル群の移動など）を行う際にGUIよりもCLIの方が速いと主張する。また、CLIには複数のコマンドを組み合わせて素早く高度な処理を行えるとの主張もある。一方GUI支持派は、グラフィカルシェルの方がユーザビリティが高くシンプルだと主張する。しかし、用途により適するものは異なる。たとえばサーバ管理はリモートのことも多く、VNCなどでGUI画面を転送してネットワーク帯域を浪費することは好ましくなかったり、そもそもセキュリティポリシー的にそのような接続は禁止されることもある。一方で、たとえば画像や映像などのデータの開発や編集にはGUIの方が適している。少なくとも、多くのCLIにはソフトウェアの連携においてGUIを圧倒する柔軟性を持つパイプライン機能が備わっており、慣れれば短時間で既存のソフトウェアを繋ぎ合わせて高度な処理を記述できる事と、OSがクラッシュして最小構成でしか起動できなくなった場合にはCLIしか利用できない事から、システム開発・運用・管理の現場ではCLIスキルは重要視されている。

Multics以前のOSでは、シェル的なユーザインタフェースの機能はOS本体と渾然一体なものとして考えられ、そのように実装されていた（今日でも簡易なモニタ的なものではそういった設計も多い）。Multicsはシェルをモジュール化して独立させる設計を示した。UNIXもその影響をうけて設計され、シェルは単なる1ユーザプロセスとして動作するもので、利用者の好みにより選択もできる（また内部実装の話としては、端末デバイス等が、そのようにしてシェルを独立したプロセスとして実装できるように機能が設計されている）。MS-DOSでも、あまり一般的ではないが、COMMAND.COM 以外の、フリーソフトによるシェルなどもある。なお、MS-DOSの起動時の設定ファイルである CONFIG.SYS において「SHELL=C:\COMMAND.COM」といったようにして設定されるファイルは、その設定項目名の通りシェルであることが多いが、ブートの最後に、最初のプロセスとして実行するプログラムを指定するものであって、例えばアニメなどの架空のOSの起動画面を再現するプログラムなど、シェルでないものを指定することもある。

（エキスパートシステムにおいては、特定用途の知識ベースを入れる前の「空の」エキスパートシステムをシェルと呼ぶ）

歴史 

 Multicsのシェルが、RUNCOM（ルイ・プザンがCTSS向けに開発したプログラム）を手本として作られた。

 Unixシェルが、Multicsのシェルを手本として、ケン・トンプソンにより開発された（Thompson Shell）。

コマンドラインシェル

内部コマンドと外部コマンド 

シェル自身が持つ機能に関係しており、シェル単体で処理が完結するコマンドが内部コマンドである。それに対し、他のプログラムにより実行されるコマンドが外部コマンドである。OSの外殻としてのシェルでは普通、外部コマンドを実行する機能は必須である。また、システムに異常がある場合、外部コマンドがほとんどあるいは全く使えなくなることもあるため、そういった場合に対処できるよう、外部コマンドで実装できるものでも内部コマンドが用意されることもある（Windowsのシェルは、MS-DOS時代にフロッピィディスクでの運用では外部コマンドが全く無いこともあったCOMMAND.COMの影響で、多数の機能を抱えており、一見では似ているUnix系のシステムに移行したユーザは、DIRコマンドに相当するlsコマンドなどすら外部コマンドであることに、しばしば戸惑う）。

コマンドラインシェルの機能 
以下の機能のそれぞれを持つものもあれば、持たないものもある。
 プログラム名（プログラム出力）を指定してアプリケーションを起動
 プログラムを終了する、フォアグラウンド・バックグラウンドを切り替えといった、ジョブ制御
 プログラムの出力をファイルに出力する（リダイレクト）、他のプログラムの入力とする、といったパイプ制御
 プログラムの動作環境の設定に使用する環境変数、シェル変数の設定・参照
 入力コマンドライン中の特別な記法で指定した部分をファイル名としてパターンマッチさせて展開する機能（ワイルドカードの展開）
 入力履歴を呼び出す（コマンド入力ヒストリ）
 コマンドに別名をつける（エイリアス）
 繰り返しコマンドを実行したり、条件に応じて実行させたりするための制御構造
 入力時のファイル名などの補完機能
 まとまった一連の入力をシェルスクリプトとして実行する（次節）

シェルスクリプト 

多くのコマンドラインシェルが、対話的に利用するだけでなく、テキストファイルないしパイプからのテキストをコマンドとみなして処理できる。これにより、ある種のプログラミング言語のインタプリタのように利用できる。そのようなシェルスクリプトで利用する場合に便利な多くの機能は、対話的にも利用できることが多い（たとえば Bourne Shell ではそうなっている）。いっぽうで C Shell のように、設計時に対話的利用に重点が置かれすぎたため、シェルスクリプト・プログラミングが推奨されないとされているシェルもある（Csh Programming Considered Harmful）。逆にスクリプト言語としての設計が重視された Microsoft PowerShell のような例もある。あるいは、プログラミング言語のインタプリタとして、Lispなどの処理系でREPLと呼ばれるものもシェルに近い。

その他 
なお、Unixのシェルには「インタラクティブシェル」と「ログインシェル」という概念がある。インタラクティブモードは専ら対話的な利用のためのモード、非インタラクティブモードは専らシェルスクリプト実行のためのモードで、一般にそのシェル自身の入出力が端末か否かなどにより変化するが、利用できるコマンド等がこれらで変化するわけではない。/bin/sh に -i というオプションを付けると強制的にインタラクティブモードで起動されるが、主な違いは一部のシグナルを無視するようになること、というようなシステム的な違いである。

一方ログインシェルとは、端末などにおいてログインした直後などの、最初のプロセスとしてのシェルのことである。通常の利用法ではログインシェルはインタラクティブシェルだが、そうでないこともある。たとえば ssh のコマンドライン引数で指定されたコマンドを実行しているだけの、リモートマシンにおけるシェルはログインシェルだがインタラクティブではない。

具体例として bash の場合、インタラクティブシェルでは起動時に ~/.bashrc を読み込み、ログインシェルでは起動時に ~/.bash_profile を読み込む。以上について理解が適切でなかったりすると、モードによる違いがあるように見えるかもしれない。

コマンドラインシェルの一覧

Unixシェル 

歴史上有名なものやよく使われているUnixシェルとして、以下のものがある。
 Bourne Shell (sh)
 Almquist Shell (ash)
 Debian Almquist shell (dash)
 Bourne-Again shell (bash)
 KornShell (ksh)
 Z Shell (zsh)
 Yet another shell (yash)
 C Shell (csh)
 TENEX C shell (tcsh)
  - Microsoft Windows 向け
 Emacs shell (eshell)
 Friendly interactive shell (fish)
 rc shell (rc) – Plan 9 from Bell Labs および Unix 向け
  (Scheme Shell)
  (sash)
 BeanShell
 Rhino shell
 rsh - 各種システムで使用可能なリモートシェル。一部システムでは Restricted shell を意味する。
  - Perlベースの汎用シェル
  - 対話型SQLクライアントとしてデータベースアクセスも可能なシェル

上述の一覧の一部は、DOSやWindowsでも利用可能であり、Unixとの相互運用性を様々なレベルで可能にする。主な例として、MKS Toolkit（sh, bash, ksh, csh, tclsh, rsh を利用可能）、UnxUtils、UWIN、Cygwin、、Interix などがある。Windows Services For Unix はほとんどのバージョンで KornShell と C Shell を提供しており、Perlもコマンドラインとして利用できる。

（上の段落の記述は、シェルのレベルではなく、それらのシステム上でOSのレベルでUnixを模擬するもの、システムコールを読み替えるもの、などを全て混同している）

Unixシェルは OS/2 や OpenVMS といった他のOSでの利用可能である。また、VMSのシェルであるもDOS、Windows、OS/2、Unix系OSで利用可能となっている。

DOSや Windows NT のシェルもUnix系システムで利用可能となっているバージョンがある。

Unix以外 
 、4OS2、4NT – JP Software が開発販売していた（それぞれ）MS-DOS、OS/2、Windows NT 用のシェル。後継の Take Command は互換性を保ちつつGUIを使用したシェルである。
 Amiga CLI/AmigaShell - AmigaOS本来のグラフィカルシェルである Workbench の代替となるコマンドライン方式のシェル
 BASIC-PLUS – RSTS/E
 CANDE MCS – バロースのOS MCP 上のシェル兼エディタ
 CCP (console command processor) – CP/Mのユーザインタフェース
 COMMAND.COM – MS-DOSのシェル。
 cmd.exe – OS/2、Windows CE、Windows NTのシェル。
 Commodore DOS Wedge – コモドール64のBASIC 2.0を拡張したもので、主なディスク操作の省略表現を使用可能
  – OpenVMS用標準シェル。DECの初期のOSが発祥
 DDT – DEC製PDP-10用デバッガだが、MITのIncompatible Timesharing Systemでコマンドシェルとして使用
 DROS – Java MEプラットフォームをベースとしたスマートフォン向けのDOS風シェル
 EFIシェル – オープンソースのUnified Extensible Firmware Interfaceコマンドシェル
 Google Shell – Google検索のオンラインのフロントエンドで、UNIXシェル風に検索などが行える。
 iSeries QSHELL – IBM OS/400でのUNIX風シェル
 Macintosh Programmer's Workshop – Classic Mac OSでソフトウェア開発に使われていたコマンドライン環境
 Microsoft BASIC – かつての8ビットコンピュータでよく採用されていたオペレーティング環境
 REXX – IBMのスクリプト言語
 Singularity shell – Singularity用標準シェル
 Windows PowerShell – cmd.exeの後継のオブジェクト指向型シェル
 YouShell – YouOSのJavaScriptベースのコマンドプロセッサ
 回復コンソール – Windows 2000、Windows XP、Windows 2003 にある機能

プログラミング言語のシェル 

プログラミング言語処理系に対するコマンドラインインタプリタも、一種のシェルである。OS的な機能へのインタフェースを持つものもある。
 LISP系
 REPL (Read-Eval-Print Loop)（）
 Common Lisp 用の
 BeanShell – Java用シェル
 Firebug (Chromebug) – JavaScript のシェル兼デバッガ環境（Firefoxプラグイン）
 GMMLCMD - （Game Maker でのスクリプト言語）のシェル
 irb – Rubyの対話版
 JavaScript shell – この名前でJavaScriptの対話型実行を可能にするプログラムがいくつかある。
 PHPsh – PHP用シェル
 Pythonの標準インタプリタはシェルモードでも起動可能
 Wish (GUI) と tclsh (CLI) - Tcl/Tk用シェル。
 Windows Script Host
 一部例外を除くTeX処理系但し実行後すぐは“原稿読み取り態”という特殊な状態にある為，という命令を実行することでコマンドラインインタプリタとして利用できるようになる。

グラフィカルシェル 
グラフィカルシェルは、グラフィカルユーザインタフェース（GUI）による and・or デスクトップ環境などといったGUI環境へのユーザインタフェースとしてのシェルである。コマンドラインシェルと違い、形態がそれほど明確には固まっていない。

たとえば、X Window Systemなどのグラフィックシステムなどを含んだかなり広い範囲を含んで捉えられることもあれば、GNOMEデスクトップ環境のGNOME Shellのように、その提供するUIのほとんどの機能は他のプログラムを通じて提供される本当にごく薄い「シェル」に徹しているものもある。また、X Window Systemの環境ではウィンドウマネージャをデスクトップ環境も兼ねたシェルとして使うこともあったり（Xウィンドウマネージャ）、Windows 3.x時代のプログラムマネージャや、Mac OSにおけるFinderのように、ランチャーやファイルマネージャがベースのグラフィカルシェルもある（Windows shell（:en:Windows shell）も、プログラム自体はExplorerである）。

Mac OS 

Mac OS では、System Software（あるいは単に "System"）と呼ばれていた Classic Mac OS 時代の、68k Macintosh 用のバージョン1から、2017年現在の現行版である macOS のバージョン10.13（High Sierra）に至るまで一貫して、Finder がグラフィカルシェルである。

Microsoft Windows 
現代の Microsoft Windows のシェルは Windows shell である。ファイルマネージャとしての Windows Explorer の他、デスクトップ環境（スタートメニュー、タスクバー等）を含めた全体を指して Windows shell という用語が使われている。古いバージョン（Windows 3.x、NT 3.x）ではプログラムマネージャ (progman.exe) がデフォルトのシェルであり、デフォルトでなくなった後もしばらくは残っていてシェルを切り替えることもできた。

iTVmediaPlayerなどのデスクトップアプリケーションも、サードパーティのエンジンを使っているという意味でシェルと呼ばれることがある。同様に Windows Explorer のインタフェースに不満を持つ多くの個人や業者が機能や外観を変更するソフトウェアや代替のグラフィカルシェルを開発してきた。前者（外観改善）の好例として WindowBlinds がある。後者（代替）の例としては、LiteStep、SharpE、Emerge Desktop などがある。

相互運用プログラムや特定用途のソフトウェアにより、Windows上で後述のUnix系GUI環境を使用することもできる。また、Windows NT の一部バージョンにはOS/2サブシステムがあり、OS/2のプレゼンテーションマネージャと同等の環境を提供していた。

X Window System 
前述のようにグラフィカルシェルとして捉えられている範囲が一定していないため、ここではいくつかの類型に分類して示す。
 ウィンドウマネージャ（Xウィンドウマネージャの記事も参照。単独で動作するものもあれば、GNOMEやKDEの環境が前提のものもある）
 uwm（:en:Ultrix Window Manager）〜X11R3における標準
 twm X11R4〜における標準
 mwm（:en:Motif Window Manager）MotifおよびCDEの標準
 FVWM
 qvwm（:en:Qvwm）Win95風（qvのqを9、vは5の意）ないしWin98風（漢数字の八を上下ひっくり返すとv）のデスクトップ画面を提供する
 Blackbox
 Fluxbox
 Ratpoison
 Xmonad
 dwm
 Beryl/Compiz
 KDE環境用
 KWin
 GNOME環境用
 Sawfish（:en:Sawfish (window manager)、〜GNOME2.2）
 Metacity（GNOME2.2〜GNOME2.x）
 Mutter（GNOME3〜）
 デスクトップ環境
 CDE
 GNOME
 KDE
 Xfce
 LXDE
 Unity（著名なゲームフレームワークとは無関係）
 デスクトップ環境のシェル
 GNOME
 GNOME パネル（GNOME 2）
 GNOME Shell（GNOME 3）
 KDE
 KDesktop（:en:KDesktop、〜 KDE 3）
 Plasma（KDE 4 〜）
 その他
 Enlightenment（デスクトップ環境と言えるほどにまで拡張されたウィンドウマネージャ）
 Cinnamon（GNOME Shellからのフォークで、GNOME3のようにGTK+3ベースだが、GNOME3と違いごく軽量なデスクトップ環境を提供することが目標）

その他のプラットフォーム 
 Amigaの環境
 Ambient (MorphOS)
 Directory Opus
 ScalOS
 Wanderer (AROS)
 Workbench
 DOS Shell
 OS/2の環境
 Presentation Manager （OS/2 1.1 およびそれ以降、eComStation）
 ワークプレース・シェル （OS/2 2.0 およびそれ以降、eComStation）

脚注

注釈

出典

関連項目 
 POSIX
 擬似端末
 バッチファイル
 MS-DOS Shell
 IEコンポーネントブラウザ - Internet Explorer shell とも
 シェルスクリプト
 Unixシェル

外部リンク 
 Bourne Shell自習テキスト

コンピュータのユーザインタフェース
UNIX
UNIXのソフトウェア
システム管理
デスクトップ環境