[[dotfiles]] でパスを指定するとき、`/Users/tanu/` のような絶対パスをハードコードしてはいけない。代わりに `$HOME` などの環境変数を使う。 ## 問題: ハードコードされたパスは移植できない ```bash # NG: 特定のユーザー名がハードコードされている if [ -f '/Users/tanu/google-cloud-sdk/path.zsh.inc' ]; then . '/Users/tanu/google-cloud-sdk/path.zsh.inc' fi ``` このコードは `/Users/tanu/` でしか動作しない。別のユーザー名や Linux 環境 (`/home/tanu/`) では失敗する。 ## 解決策: 環境変数を使う ```bash # OK: 環境変数で動的に解決 if [ -f "$HOME/google-cloud-sdk/path.zsh.inc" ]; then . "$HOME/google-cloud-sdk/path.zsh.inc" fi ``` `$HOME` はシェルが自動的に現在のユーザーのホームディレクトリに展開する。 ## パスの種類 | 種類 | 例 | 用途 | |------|-----|------| | ハードコードされた絶対パス | `/Users/tanu/foo` | 避けるべき | | 環境変数を使ったパス | `$HOME/foo` | dotfiles で推奨 | | 相対パス | `./foo` | 実行場所に依存するため設定ファイルには不向き | ## 関連ノート - **[前提]** [[dotfiles リポジトリはシンボリックリンクで設定ファイルを管理する]]: 本ノートのパス指定はこのリンク管理の文脈で意味を持つ - **[派生]** [[Shell のシングルクオートとダブルクオートの違い]]: 本ノートで使う `$HOME` を展開するにはダブルクオートが必要なため併読する - **[派生]** [[dotfiles ではインストール対象を宣言的な設定ファイルで管理する]]: 本ノートのパス方針と並ぶ、dotfiles のポータビリティ向上策