[[dotfiles]] の `setup.sh` でパッケージをインストールするとき、スクリプト内に手続き的なコードを書くのではなく、宣言的な設定ファイル (リスト) に分離する。 ## 問題: 手続き的なコードは冗長になる ```bash # setup.sh にパッケージが増えるたびにコードが増える if ! brew list zsh-autosuggestions &> /dev/null; then brew install zsh-autosuggestions fi if ! brew list fzf &> /dev/null; then brew install fzf fi ``` ## 解決策: 設定ファイルに分離 **`Brewfile`(何をインストールするか):** ```ruby brew "zsh-autosuggestions" brew "fzf" ``` **`setup.sh`(どうインストールするか):** ```bash brew bundle --file="$DOTFILES_DIR/Brewfile" ``` ## メリット | 観点 | 手続き的 | 宣言的 | |------|----------|--------| | 可読性 | ロジックに埋もれる | 一覧で見える | | 変更時 | コードを編集 | リストに 1 行追加 | | 責任 | 混在 | 分離 (何を / どうやって) | ## 関連ノート - **[前提]** [[dotfiles リポジトリはシンボリックリンクで設定ファイルを管理する]]: 本ノートの宣言的管理はこの運用の上に積む工夫 - **[派生]** [[dotfiles ではパスをハードコードせず環境変数を使う]]: 本ノートの宣言的管理と並ぶ、dotfiles のポータビリティ向上策 - **[派生]** [[R はツールをグローバルにインストールし、分析ライブラリは renv で管理する]]: 同じ宣言的管理パターンを R 言語のグローバルパッケージに適用した別ドメインの例