シェル

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
Bashのスクリーンショット

シェル (shell) はオペレーティングシステム (OS) のユーザーのためにインタフェースを提供するソフトウェアであり、カーネルのサービスへのアクセスを提供する。それだけではなく、この用語は非常にゆるやかに応用され、特定のコンポーネントの周辺に構築された任意のソフトウェアを含むこともある。例えば、ウェブブラウザ電子メールクライアントHTMLレンダリングエンジンの「シェル」といわれることがある。OSの内部(カーネル)とユーザーの間にある外殻であることから、このように呼ばれる。

概要[編集]

とりあえず2種類に大別すると、キャラクタユーザインタフェース(CUI)ベースのコマンドラインインタプリタの形態をとる「コマンドラインシェル」と、グラフィカルユーザインタフェース(GUI)ベースでいわゆる「デスクトップメタファ」等の環境へのユーザインタフェースという形態をとる「グラフィカルシェル」に分けられる。

CLIとGUIのどちらが優れているかという議論はしばしば行われている。CLI支持派は、特定の操作(ファイル群の移動など)を行う際にGUIよりもCLIの方が早いと主張する。一方GUI支持派は、グラフィカルシェルの方がユーザビリティが高くシンプルだと主張する。しかし、そもそも「どちらが優れているか」という問いがナンセンスであり、愚かな議論である。たとえばサーバ管理はリモートのことも多く、VNCなどでGUI画面を転送してネットワーク帯域を浪費することは好ましくなかったり、そもそもセキュリティポリシー的にそのような接続は禁止されることもある。一方で、たとえば画像や映像などのデータの開発や編集にはGUIの方が適している。

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

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

歴史[編集]

最初のUnixシェルケン・トンプソンが開発したThompson Shellである[2]。その手本になったのがMulticsのシェルで[3]、さらにその手本になったのがルイ・プザンCTSS向けに開発したRUNCOMというプログラムである[4]

事実上すべての現代のOSシェルは、対話モードとバッチモードで使用でき、後者はシェルスクリプトと呼ばれるファイルの名前を指定することでその中身を解釈実行する。バッチモードでは、制御構造、条件文、変数といったプログラミング言語的要素を利用できる。バッチモードでの必要に迫られてそういった機能を追加したシェルもあるが、もともと洗練されたプログラミング言語として設計されたシェルもある。逆に一部のプログラミング言語はシェルのような対話的利用が可能である。(以上のように誤解している一般ユーザーもいるようだが、正確にはそのような、認識するコマンドが違うモードなどというものは多くのシェルにおいて、存在しない。多くのシェルで「対話モード」でも「制御構造、条件文、変数といったプログラミング言語的要素」は利用できる。Unixのシェルには「ログインシェル」と「インタラクティブシェル」という概念があり、インタラクティブモードは専ら対話的な利用のためのモードで、非インタラクティブモードは専らシェルスクリプト実行のためのモードではあるけれども、以上の説明とは全く異なったものである)

コマンドラインシェル[編集]

内部コマンドと外部コマンド[編集]

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

コマンドラインシェルの機能[編集]

以下の機能のそれぞれを持つものもあれば、持たないものもある。

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

シェルスクリプト[編集]

コマンドラインシェルの一覧[編集]

Unixシェル[編集]

歴史上有名なものやよく使われているUnixシェルとして、以下のものがある。

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

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

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

Unix以外[編集]

プログラミング言語のシェル[編集]

プログラミング言語処理系に対するコマンドラインインタプリタも、一種のシェルである。OS的な機能へのインタフェースを持つものもある。

  • LISP
  • BeanShell英語版 – Java用シェル
  • Firebug (Chromebug)[5] – JavaScript のシェル兼デバッガ環境(Firefoxプラグイン)
  • GMMLCMD - GML英語版Game Maker でのスクリプト言語)のシェル
  • irb – Rubyの対話版
  • JavaScript shell – この名前でJavaScriptの対話型実行を可能にするプログラムがいくつかある。[6]
  • PHPsh – PHP用シェル
  • Pythonの標準インタプリタはシェルモードでも起動可能
  • Wish (GUI) と tclsh (CLI) - Tcl/Tk用シェル。他に tkcon もある。
  • Windows Script Host
  • TeXLaTeX - 但し両者とも実行後すぐは“原稿読み取り態”という特殊な状態[7]にある為,\relaxという命令を実行することでコマンドラインインタプリンタとして利用できるようになる。

グラフィカルシェル[編集]

グラフィカルシェルは、グラフィカルユーザインタフェース(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である)。

Microsoft Windows[編集]

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

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

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

X Window System[編集]

前述のようにグラフィカルシェルとして捉えられている範囲が一定していないため、ここではいくつかの類型に分類して示すものとする。

その他のプラットフォーム[編集]

脚注[編集]

  1. ^ British Computer Society (2005). Pearson Education. p. 135. ISBN 0-13-147957-1. http://books.google.com/books?id=g8Bds8ssYYgC&pg=PA135&dq=%22shell+is+a+piece%22+%22expert+system%22&hl=sv#v=onepage&q=%22shell%20is%20a%20piece%22%20%22expert%20system%22&f=false. 
  2. ^ V6 Thompson Shell Port - History”. V6shell.org. 2012年8月14日閲覧。
  3. ^ Tom Van Vleck (1995年2月5日). “Unix and Multics”. Multicians.org. 2012年8月14日閲覧。
  4. ^ Louis Pouzin (2000年11月25日). “The Origin of the Shell”. Multicians.org. 2012年8月14日閲覧。
  5. ^ developer.mozilla.org/en/Setting_up_extension_development_environment
  6. ^ developer.mozilla.org/en/JavaScript_shells JavaScript shells
  7. ^ ファイル名を入力するとすぐにそのファイルの処理を開始する。これは引数を解釈できない(つまりtex hoge.texという命令が行なえない)OS上で効率良く原稿を読み取らせることが目的だった。そもそも「ファイル名」という概念字体,TeX開発の初期段階では曖昧であったようである。(「The TeX Book」では,“あなたのシステムが認識する原稿の外部の名前”等ともってまわった言い方をしている)

関連項目[編集]

外部リンク[編集]