はじめに
パソコンの初心者ではない限りは、新しいOSを入れるまたはOSの再インストールするときにアプリのインストールや好みの設定をつけるなど環境構築をやっているでしょう。技術が大好きな人間として、VMを立てたり、色んなOSを試したりするので環境構築作業を結構やっていました。
しかし、去年の12月頃に環境構築の作業が面倒だと感じていましたので、何か良い方法があるかググってみて、dotfilesという手段を見つけました。
dotfilesって何?
ターミナルでls -la ~
を実行してみれば、
ファイル名の前に.
がついているファイルはdotfileと呼ばれています。大抵dotfileのなかにアプリごとの設定が書いてあるので、これがあればアプリのコンフィグレーションを簡単に再現できます。
dotfilesをつくりましょう!
今回は二つのやり方を紹介したいと思います。
レベル1:コピペ+symlink
これはQiitaで検索すると色んな手法が出てくるので、詳しいやり方は省略させてもらいます。基本は、
- 管理したいdotfilesを一つのフォルダにまとめる
- 各dotfileのsymlinkを作る(手動では面倒なのでbashスクリプトがオススメ)
- フォルダーをどこかのクラウドにアップして常に同期する(Dropbox、Githubなど)
問題点
1. bashスクリプト
僕自身あまりbashスクリプトを書かないので、数ヶ月も経つと「これ、なにやってんの?」となることが多いです。
# -fってなんでしたっけ?-Lは?
if [[ -f $HOME/.zshrc && ! -L $HOME/.zshrc ]]; then
echox " "
echox ".zshrc exists. Renaming to .localrc..."
mv $HOME/.zshrc $HOME/.localrc
fi
2. 柔軟性がない
仕事用の端末でbashスクリプトを実行したときに、プライベートでしか使わないソフトの設定が入ってしまいました。もちろんスクリプトを修正すればなんとかできますが、そういう修正は同期したくないので困っていました。
3. symlinkを管理するのが難しい
dotfilesが増えるほど管理するのが大変です。特に間違えてsymlink作ったファイルは、いちいち削除や修正が必要です。しかも、
$ ln -s [リンク元] [登録名]
or
$ ln -s [登録名] [リンク元]
って何回も覚えられないんだよ!
レベル2:GNU Stowを使う
dotfilesの管理ツールGNU Stowを紹介します。元々はパッケージを導入するときに環境を汚さないようにsymlinkで管理するパッケージです[1][2][3]が、dotfilesの管理にもかなり役に立ちます。
例として、zsh
のコンフィグファイルを導入するときに:
$ stow -v zsh
また、git
のコンフィグファイル:
$ stow -v git
複数コンフィグを導入する場合:
$ stow -v zsh vim tmux
コンフィグの削除も楽:
$ stow -vD tmux
なんて素晴らしいツールですわー
Stowの使い方
1. ファイル構成を建築
Stowを使う前に、特定のファイル構成を作らなければならないです。ソフトごとにフォルダーを作り、関連なdotfilesを入れることが必要です。そして、現状のdotfilesのフォルダー構成を合わせることも必要です。例:
dotfiles/
├── fuga/
│ └── .config/
│ └── .fuga
├── hoge/
│ └── .config/
│ └── .hoge
├── vim/
│ └── .vim/
│ ├── theme.vim
│ └── .vimrc
└── zsh/
├── .zshrc
└── .zsh/
├── alias.zsh
├── keybindings.zsh
├── plugins.zsh
└── prompt.zsh
2. Stowを入れる
macOSを使う場合はhomebrewで入れましょう:
$ brew install stow
3. 既存のdotfileが削除されたか確認
既存の場所にすでにファイルが存在する場合はstowが上書きせずに中止するという安全対策があると安心ですが、削除しないとsymlinkが作れないので確認しましょう
4. Stowを実行
いよいよ本番です。上記の例に続いて、以下のコマンドを実行したら:
$ cd dotfiles
$ stow -v fuga hoge vim zsh
結果はこうなります:
~/
├── .config/
│ ├── .fuga
│ └── .hoge
├── .vim/
│ ├── theme.vim
│ └── .vimrc
├── .zshrc
└── .zsh/
├── alias.zsh
├── keybindings.zsh
├── plugins.zsh
└── prompt.zsh
結論
Stowを使うと、
- bashスクリプトを書かなくてよくなる
- 必要なコンフィグだけを導入できる
- symlinkの管理が楽になる
dotfilesの初心者でも上級者でも、オススメできるやり方じゃないかなって思っています。
最後に、実例を見たい方は僕のdotfilesのGithubリポーを是非参考にしてください!