本文へスキップ
BecomeCoder

シェルスクリプトコース · 第2章 変数とクォート · レッスン9

環境変数と設定の置き場所 ― 直書きをやめる

ブラウザで完結

導入

スクリプトを他の人に渡す、別のサーバーに置く、GitHub に上げる。そのとき困るのが「自分の環境でしか通らないパス」と「絶対に見せてはいけないパスワード」です。設定の置き場所を分けるだけで、この2つは解決します。

説明

シェルには、最初から入っている変数があります。環境変数です。

#!/bin/bash

echo "ユーザー: $USER"
echo "ホーム: $HOME"
echo "シェル: $SHELL"

# 環境変数がなければ既定値を使う(安全な書き方)
LOG_DIR=${LOG_DIR:-/home/user/logs}
echo "ログ置き場: $LOG_DIR"

env と打つと、いま設定されている環境変数の一覧が見られます。

自分で作った変数を、そのスクリプトから起動する別のコマンドにも渡したいときは export を付けます。

export API_URL=https://example.com

そして重要なのが ${変数:-既定値} という書き方です。「その変数が空なら、代わりにこの値を使う」という意味で、渡されていなくても壊れないスクリプトの書き方の基本です。

flowchart TD
    A["LOG_DIR は設定されている?"] -->|"はい"| B["その値を使う"]
    A -->|"いいえ・空"| C["既定値 /home/user/logs を使う"]

パスワードやAPIキーは、スクリプトに直接書かないのが鉄則です。書いてしまうと、そのファイルを見られた瞬間に漏れますし、Git に入れれば履歴から永久に消えません。代わりに環境変数で渡すか、権限を絞った別ファイルに置いて読み込みます(読み込みは第6章の source で扱います)。

# 悪い例(絶対にやらない)
DB_PASSWORD=hunter2

# 良い例(環境変数から受け取る。なければ止める)
DB_PASSWORD=${DB_PASSWORD:?パスワードが設定されていません}

やってみよう

スクリプトを実行して $USER$HOME が最初から入っていることを確かめましょう。次に端末で env と打って一覧を眺め、export MY_NAME=太郎 を実行してから echo $MY_NAME で読み出してみてください。

演習

環境変数 APP_ENV が設定されていなければ development を使う、という書き方で 環境: development と表示してください。

ヒント1を見る

既定値つきの取り出しは ${変数:-既定値} です。

ヒント2を見る

echo "環境: ${APP_ENV:-development}"

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。