なんで急にそんなことを言い出したのか 別にzshrcでもprofileでもいいじゃない・・・・ いや、全然よくないね

zshrcを読みこむまでには、順番がある!!!

以下に一般的なzshの設定ファイルの読み込み順序を示します。ただし、特定の環境や設定により異なる場合があることに注意してください。

/etc/zshenv: このファイルはzshが起動するたびに読み込まれます。ここには、全てのユーザと全てのシェルセッションに適用される環境変数などを設定します。 ~/.zshenv: このファイルもzshが起動するたびに読み込まれますが、各ユーザのホームディレクトリに配置されるため、特定のユーザの設定を記述します。 /etc/zprofile -> ~/.zprofile: これらのファイルはログインシェルが開始される際に読み込まれます。ここでは、ログインシェルにのみ適用される設定を記述します。 /etc/zshrc -> ~/.zshrc: これらのファイルはインタラクティブシェルが開始される際、あるいは新しいターミナルウィンドウが開かれる際に読み込まれます。 ここでは、エイリアス、関数、シェルオプションなど、インタラクティブシェルに適用される設定を記述します。 /etc/zlogin -> ~/.zlogin: これらのファイルはログインシェルの開始時、具体的には全ての設定ファイルの読み込みが完了した後に読み込まれます。 ここでは、主にメッセージの表示や一部の環境の設定などを行います。

この流れにより、環境変数やエイリアス、関数などの設定は、適切な場所とタイミングで設定されます。 したがって、これらの設定を調整する場合は、その用途と適用範囲に応じて適切な設定ファイルを選択し、その内容を編集することが必要になります。

この流れで先に設定したものは、後の工程で設定したものは反映されません。

未来の自分に無責任な開発

一般的に将来のことを山ほど考えてやりやすいだろうと思いながら開発を行うことは基本的にありません。 ものにはよりますが、必要でないことは必要になったときにやるのです。 なぜなら時間が無限にはないから。 zshrcなどのPATHの設定はたまにややこしいことをやるくせに、一覧で管理できずに何度も 「あれなんでか反映されないな」ってことになりがちです。

対応

.envを作成し、なるべくそこにまとめるようにします。この対応が一般的なものなのかはわからないですが いいツールや手法があったら教えてほしいくらいです。 zshrcに以下ように.envに対して読み込みを行います。他の設定ファイルもあれば全て.envを参照するようにします。

# Load environment settings from a separate file
if [ -f ~/.env ]; then
    source ~/.env
fi

懸念

もともとなんの為にシェルがこんなに細分化して読み込まれるのかがわからない。 けど昔は、かなり細かく権限の管理をインフラで環境ごとにやってたから、必要だったような違うような。