Skip to content
Latchkey

Bashとは何か? Bourne Again Shellを解説する

Bashは広く使われるUnix shellおよびスクリプト言語であり、ほとんどのLinuxシステムとほとんどのCIランナーでのデフォルトのコマンドインタプリタです。

Bashは「Bourne Again SHell」の略で、CIパイプラインのほとんどのstepを含め、世界の大多数のshell scriptを実行するプログラムです。古いBourne shellと互換性がありますが、配列、より良い文字列処理、多くの利便性を追加しています。あまりに一般的なため、「shell script」と「Bash script」はしばしば互換的に使われます。

Bashの由来

Bashは、Unixの元のBourne shell (sh) のフリーな代替として書かれました。後方互換性を保ちながら機能を追加し、ほとんどのLinuxディストリビューションでデフォルトのログインshellになりました。

Bash対sh

素のshは最小限のPOSIX shellであり、Bashは配列、[[ ]]テスト、プロセス置換などの追加機能を持つスーパーセットです。Bash固有の機能を使うscriptはshで実行すると壊れ、これは「ローカルでは動くがCIで失敗する」バグのよくある原因です。

Bashが追加するもの

  • 構造化データのための配列と連想配列。
  • パターンマッチング付きの[[ ]]テスト構文。
  • file.{js,css}のようなbrace展開。
  • より安全なパイプラインのためのset -o pipefailオプション。

スクリプト言語としてのBash

Bashはプロンプト以上のものです。変数、ループ、関数、条件分岐を持ちます。CIパイプラインは、buildツールをつなぎ、テストを実行し、出力を整形するためにこれに大きく依存するので、少しのBash習熟が大きく役立ちます。

なぜCIでBashが重要か

ほとんどのworkflowのrun: stepは、Linux上でデフォルトでBashを通じて実行されます。BashのCI scriptを最初のエラーで大きく失敗させる信頼できる方法は、set -euo pipefailで始めることです。これは静かな失敗を停止したjobに変えます。

管理型ランナーでのBash

Latchkeyのランナーは標準のBashを搭載しているので、同じscriptが毎回同一に実行されます。厳格さは依然として制御できます。stepの先頭にset -euo pipefailを追加することが、信頼できるパイプラインのための最もレバレッジの高い習慣です。

重要なポイント

  • BashはほとんどのLinuxシステムとCIランナーでのデフォルトのshellです。
  • POSIX shのスーパーセットなので、Bash固有の機能は素のshでは壊れることがあります。
  • scriptをset -euo pipefailで始めると、BashはCIで素早く大きく失敗します。

関連ガイド