

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
pipefailとは何か
パイプラインの話をする前に、まずは基本をおさえましょう。pipefailは、シェルのオプションの一つです。パイプラインとは、複数のコマンドを | でつなぐ処理のこと。例えば ls | grep “.txt” などがそれにあたります。
通常、パイプライン全体の終了ステータスは「最後のコマンドの終了ステータス」になります。つまり、最後のコマンドが成功していれば 0、失敗していれば非ゼロの値になります。
しかし pipefail を有効にすると、どのコマンドが失敗してもパイプラインの終了ステータスを正しく検出できるようになります。これは script や自動化スクリプトで「どこかの段階で失敗したら止める」基準を作るときに役立ちます。
使い方と仕組み
有効化の方法はシェルによって少し違いますが、最も一般的なのは set -o pipefail です。これを実行しておくと、以降のパイプラインは pipefail の設定に従います。別の表現として、set -o nounset や set -e と組み合わせるケースもありますが、pipefail 自体は単独で有効化しても問題ありません。
具体的な挙動の違い
以下の例は、3 つのコマンドをパイプでつなぐ状況を想定しています。実務ではデータの整形やファイル検査など、途中でエラーが起きやすい処理をパイプラインで回すケースが多いです。
例1: 通常の挙動(pipefail 無効)
コマンド A | コマンド B | コマンド C を実行したとき、パイプラインの終了コードは「C の終了コード」になります。A が失敗しても B が成功しても、最終的には C の結果次第です。
例2: pipefail を有効にした場合
set -o pipefail を実行してから同じパイプラインを走らせると、A、B、C のうち最初に非ゼロとなった値がパイプラインの終了コードとして返されることがよくあります。実際には「最後に現れた非ゼロの値」が返ることが多いですが、シェルの実装によって細かな挙動に差があるため、公式ドキュメントを確認するのが安全です。
表で見る挙動の違い
| 状況 | 通常のパイプライン | pipefail 有効時 |
|---|---|---|
| 全て成功 | 0 | 0 |
| 途中のコマンドが失敗 | 最後のコマンドの終了コード | 最後に現れた非ゼロの値 |
実務でのポイントと注意点
- ポイント1 パイプライン全体の挙動を正しく知るために pipefail を有効化しておくと、失敗箇所を見逃さずデバッグが楽になります。
- ポイント2 ただし pipefail を有効にすると、従来は成功していたはずのケースで失敗フラグが立つことがあるので、スクリプト全体のエラーハンドリングを見直す必要があります。
- ポイント3 CI/CD の設定や自動化スクリプトでは pipefail を前提にテストを増やすと、失敗の原因特定が早くなります。
結論
pipefail は、パイプラインの信頼性を高める強力な機能です。有効化の手順は簡単 なので、初級者でも簡単に導入できます。日常のスクリプト運用やデバッグ作業で「どの段階で失敗しているのか」をすぐに知りたいときには、set -o pipefail を試してみましょう。
pipefailの同意語
- pipefail
- bash の set -o pipefail の効果を指す用語。パイプラインのいずれかのコマンドが非ゼロの終了コードを返した場合、パイプライン全体の終了コードも非ゼロにする挙動。
- パイプフォール
- pipefail の日本語の音写表現。パイプラインの失敗を伝搬させ、全体の終了コードに影響を与える設定。
- パイプライン失敗伝搬
- パイプライン内のどのコマンドが失敗しても、パイプライン全体の終了コードにその失敗を伝える性質。
- パイプラインエラーステータス伝播
- エラー終了コードをパイプライン全体へ伝える挙動を指す別表現。
- シェルオプション pipefail
- bash のオプションの名称。set -o pipefail で有効化する機能を指す。
- set -o pipefail
- このコマンド。パイプラインのエラー伝搬を有効化する設定を適用するもの。
- パイプラインエラー伝搬設定
- パイプラインでのエラー伝搬を有効化する設定の総称。
- 非ゼロ終了コード伝搬
- パイプラインのどのコマンドが非ゼロ終了した場合、その非ゼロをパイプライン全体の終了コードへ伝える挙動。
- パイプライン全体を非ゼロで終了させる挙動
- パイプラインの結果として、全体の終了コードを非ゼロにする性質。
pipefailの対義語・反対語
- pipefail無効
- パイプライン全体の終了コードを、最後のコマンドの終了コードだけで判断する挙動。途中のコマンドが失敗しても、パイプライン全体が非ゼロになるとは限らないことがある。
- set +o pipefail
- このコマンドで pipefail をオフにします。実質的に pipefail 無効と同じ挙動になり、デフォルトの挙動(最後のコマンドの終了コードのみを返す)に戻ります。
- no pipefail
- pipefail が設定されていない状態の呼び方。デフォルトの挙動と同じく、パイプラインの終了コードは最後のコマンドの終了コードだけを返します。
- デフォルト挙動( pipefailなし )
- 特別な設定をしない状態。パイプラインの終了コードは通常、最後のコマンドの終了コードだけを返す挙動です。
- Pipefail OFF
- 英語表現。set -o pipefail をオフにした状態と同義で、パイプラインの失敗を全体で検知せず、最後のコマンドの終了コードだけを返します。
pipefailの共起語
- bash
- Unix系の標準的なシェルで、pipefail はこの Bash のシェルオプションとして実装されています。set -o pipefail の形で有効化します。
- set -o pipefail
- パイプラインのいずれかのコマンドが非ゼロ終了(失敗)した場合、パイプライン全体の終了ステータスをその非ゼロ値にする Bash の挙動を有効にするコマンド。
- pipefail
- パイプライン実行時の失敗判定を制御する機能・オプションの総称。具体的には Bash で set -o pipefail として有効化します。
- 終了ステータス
- コマンドの終了時に返される値。0 が成功、0 以外がエラーを示す指標で、pipefail はこの値の扱いを変えます。
- 非ゼロ終了ステータス
- 0 以外の終了コード。パイプライン内のいずれかのコマンドが失敗した場合の典型的な値です。
- パイプライン
- 複数のコマンドを「|」で結んだ連鎖。前のコマンドの出力が後続のコマンドへ渡されます。
- パイプ
- コマンド同士をつなぐ記号「|」。パイプラインを形成してデータを通し合います。
- PIPESTATUS
- Bash が実行したパイプラインの各コマンドの終了ステータスを格納する配列。デバッグや挙動理解に役立ちます。
- シェルオプション
- シェルの挙動を変更する設定。set -o 形式や、-o の後に続く文字列で指定します。
- set
- シェルの組み込みコマンド。オプションを使って挙動を切り替える基点です。
- bashオプション
- Bash が提供する個別の挙動制御。pipefail もその一つです。
- POSIX
- Unix系の標準仕様。pipefail は POSIX の標準には必ずしも含まれず、互換性を確認する必要があります。
- zsh
- 人気のある別のシェル。pipefail 相当の機能や挙動は Bash と異なるため、設定を見直す必要がある場合があります。
- dash
- 軽量で POSIX 準拠を重視するシェル。pipefail の挙動は Bash とは異なることがあります。
- エラーハンドリング
- エラーを検知・処理する設計・実装。pipefail の活用でパイプライン全体のエラーチェックが容易になります。
- 標準出力
- コマンドの通常の出力先。パイプの前後で次のコマンドの入力として渡る場合があります。
- 標準エラー出力
- コマンドのエラーメッセージの出力先。 pipefail の理解にはエラーメッセージの把握が役立ちます。
pipefailの関連用語
- pipefail
- パイプラインの終了ステータスの決定方法を変更する Bash 系シェルのオプション。set -o pipefail を有効にすると、パイプライン内のいずれかのコマンドが非ゼロを返した場合、右端の非ゼロ終了コードがパイプライン全体の終了コードとして返され、全てが成功なら 0 になります。
- set -o pipefail
- pipefail オプションを有効化する Bash のコマンド。典型的には set -o pipefail と書き、パイプライン全体の終了コードの決定に影響します。
- setopt pipefail
- zsh で同等の機能を有効にする設定。setopt pipefail を使うと、パイプラインのいずれかのコマンドが失敗したときにパイプライン全体の非ゼロ終了コードを返します。
- PIPESTATUS
- Bash が提供する配列変数で、直前に実行したパイプラインの各コマンドの終了コードを格納します。PIPESTATUS[0] が最初のコマンドの終了コード、PIPESTATUS[-1] が最後のコマンドの終了コードです。
- 右端の非ゼロ終了コード
- パイプライン内で最後に発生した非ゼロの終了コードのこと。pipefail が有効なとき、パイプライン全体の終了コードとしてこの値が返されます。
- exit status
- コマンドやシェルが終了時に返す整数値。0 は成功、0以外はエラーを示します。
- パイプライン
- 複数のコマンドを | でつなぎ、前のコマンドの出力を次のコマンドの入力として受け渡す仕組み。
- Bash
- Unix 系OS で広く使われるシェル。pipefail は Bash の機能で、set -o pipefail によって有効化します。
- zsh
- 別のシェルで、pipefail 相当の機能を setopt pipefail で有効化します。動作は Bash に近いですが細かな挙動が異なることがあります。
- POSIXシェル
- POSIX 基準に準拠した sh 互換シェル。pipefail は標準機能としては未定義であり、実装はシェルごとに異なります。
- set -e
- エラー時にシェルを終了させるオプション。pipefail と組み合わせるとパイプラインのどこかが失敗したときに素早く検知できます。
- errexit
- set -e と同等の機能を指す総称。Bash のドキュメントでは errexit を指すこともあります。
- trap ERR
- ERR トラップを設定して、コマンドが失敗した際に任意の処理を実行する仕組み。pipefail と併せてエラーハンドリングを強化できます。



















