パイプ (コンピュータ)
以下が典型的なパイプの利用例である。|(バーティカルバー) はシェルにパイプを指示する記号である。
これは
ファイル Address.txt から "札幌市" が含まれる行を出力し
その出力を入力として受け取って a2ps コマンドを用いて整形し
その出力を印刷する
といった処理を指示している。
パイプを使用する方法に対して、中間ファイルを利用する方法
もあるが、パイプを利用する方法に比べ記述が冗長になるだけでなく、一般に処理が遅くなる。
なぜならば、このように中間ファイルをつくる場合1つ目のプログラムがすべてのデータを処理し終えるのを待って、2つ目のプログラムが動き、さらに2つ目のプログラムが終了して初めて、3つめのプログラムを動かす必要があるためである。しかしパイプを使えば、3つのプログラムをマルチタスクにより同時に動かし、I/Oなど時間がかかる処理の待ち時間を有効に使うことができる。
パイプを使うと、複数のプログラムを組み合わせることができるようになり、多様かつ複雑なデータ処理を効率よく柔軟に実行できる。また、現有のソフトウエア資産の再利用が可能になるため、プログラム生産性の面でも利点もある。
シェルにおける具体的な利用の例は #シェルからの使用を参照。
次にUNIX系OSとpipeとの関係について説明する。
データ処理の一連の過程を一般化すると、入力データ、これを処理するプログラム、出力データの3つの要素で構成される。特に処理が煩雑な場合、プログラムは複雑になり、バグや保守性の悪化を誘発する傾向にある。また特定の複雑な処理のみに特化したプログラムは再利用性も悪く生産性の観点でも劣る。
この問題を解決するために、「1つだけの仕事をうまくやる、道具のようなソフトウェア」(Software Tools)をパイプラインによって組み合わせる、というアイデアがUNIXやUnix系のOSにある。これはまず、ユーザーが複雑なデータ処理を機能毎に小さく分割する事から始まる。次に、この分割された比較的単純な処理を小さくシンプルなソフトウエアで処理させる。ソフトウエアの出力データは、中間結果として、次の小さなソフトウエアの入力データにパスされる(パイプで繋ぐ)。