LoginSignup
0
0

Homebrewのインストールコマンドがやっていること

Posted at

コマンドは何をやっているの?

コンピューターの操作に慣れているものの、ターミナルからの操作に慣れていない人にとっては、コピペして実行するだけだとしても、不安です。

そのため、Homebrewのインストールコマンドだけではなく、ターミナルを使った操作への抵抗感の払拭になればと思います。

Homebrewとは

MacOSやLinuxでよく利用されるパッケージマネージャーです。新しくコンピュータを買ったら、まずインストールすることになる必須のツールですね。

Homebrewインストール方法

インストールは非常に簡単で、下記のコマンドをターミナルを起動してコピペ、実行するだけです。

Homebrewのインストールコマンド
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

ここまでは公式ドキュメントにも記載された内容に従うだけで、インストールが完了します。

インストールの流れ

このコマンドは、https://raw.githubusercontent.com/Homebrew/install/HEAD/install.shというURLからシェルスクリプトをダウンロードし、その内容をBashシェルで実行します。

実行されるスクリプトは、Homebrewのインストールに必要な手順を自動で行うように書かれているので、全体コマンドをコピぺするだけで良かったんですね。

1.Bashシェルを起動
2.Homebrewのインストールスクリプトをダウンロード
3.スクリプトが実行され、Homebrewが自動的にインストールされる。

シェルって何?

下記の動画では、約6分と短い時間で非常に分かりやすくまとめてあるので、シェルやカーネルという単語に馴染みがない人は見てください。

IT入門チャンネル様:【6分で解説】Linux入門|シェル&カーネルを説明できますか?(sh、bash、tcsh)

コマンドの説明

コマンドを前半と後半に分けて説明してきます。

前半:Bashシェルを実行している部分
後半:スクリプトをダウンロードしている部分

コマンドの構成:前半
/bin/bash -c "$([command])"
コマンドの構成:後半
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh

前半:Bashシェルを実行している部分

この前半のコマンドは、主にBashと呼ばれるシェルを起動する役割があります。また、直後に-cがオプションとして指定されているので、後続の文字列をBash上で実行します。

前半部
/bin/bash -c "$([command])"

/bin/bashBashシェルの実行
-c:直後の文字列をコマンドとして実行
$([command]):コマンド置換を表し、中のコマンドを実行します。

例1.Bashで任意の文字列を出力するコマンド

最小限の例として、次のコマンドを実行して挙動を確認できます。

"Hello,World" と出力するコマンド
/bin/bash -c "echo Hello, World"

1.Bashシェル を起動
2.echoコマンドで"Hello, World"を出力

例2.任意の文字列の出力コマンド

ちなみに、上記の文字列部のみでも任意の文字列を出力できます。

Bashを使わない場合
echo Hello, World

前半のまとめ

前半部では、Bashシェルを起動して、直後の文字列を実行していることがわかりました。

後半

この後半コマンドは、"https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh" というURLからシェルスクリプトをダウンロードし、出力します。

後半:スクリプトをダウンロードしている部分
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh

curl:URLからデータを取得したり、データを送信したりするために使用されます。
-fsSLcurl用のオプションを合体させたものです。
- -f: HTTPリクエストが失敗した場合にエラーを出す
- -s: サイレントモード(プログレスメーターやエラーメッセージを表示しない)
- -S: -sと一緒に使うと、エラーがあった場合にエラーメッセージを表示する
- -L: リダイレクトをたどる

もし、後半部だけ実行したら?

別に後半部だけでも、インストールスクリプトがダウンロードされるので、いいじゃないか。という気持ちもわかります。

しかし、実行してみると挙動が違うことを確認できます。Homebrewインストールスクリプトが、出力されるだけという結果になります。

後半部だけ実行してみる
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh
ターミナルに出力された内容
#!/bin/bash

# We don't need return codes for "$(command)", only stdout is needed.
# Allow `[[ -n "$(command)" ]]`, `func "$(command)"`, pipes, etc.
# shellcheck disable=SC2312

set -u

abort() {
  printf "%s\n" "$@" >&2
  exit 1
}

# Fail fast with a concise message when not using bash
# Single brackets are needed here for POSIX compatibility
# shellcheck disable=SC2292
if [ -z "${BASH_VERSION:-}" ]
.
.
.
EOS

install.shの中身をターミナルに出力しているだけでした。これが実行される訳ではありませんね。

後半まとめ

後半部では、curlコマンドで指定したURLからインストール用スクリプトをダウンロードして出力していることがわかりました。-fsSLをオプションに指定することで、問題発生への配慮もありました。

まとめ

前半と後半に説明した内容を組み合わせることで、Homebrewを自動的にインストールしていることがわかりました。

コマンド構成

前半:Bashシェルを実行している部分
後半:スクリプトをダウンロードしている部分

コマンドの構成:前半
/bin/bash -c "$([command])"
コマンドの構成:後半
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh

実行の流れ

1.curlコマンドでインストールスクリプトをダウンロードして出力

Homebrewインストールスクリプトを出力
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh

2.その出力がコマンドとして置換

イメージ
[command] = Homebrewインストールスクリプト(install.shの中身)

3.コマンドを'Bash'シェルで実行

Bashを起動しスクリプトを実行
/bin/bash -c "$([command])"

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0