LoginSignup
31
18

More than 5 years have passed since last update.

GNU Stowでdotfilesを管理する

Last updated at Posted at 2018-12-04

はじめに

パソコンの初心者ではない限りは、新しいOSを入れるまたはOSの再インストールするときにアプリのインストールや好みの設定をつけるなど環境構築をやっているでしょう。技術が大好きな人間として、VMを立てたり、色んなOSを試したりするので環境構築作業を結構やっていました。

しかし、去年の12月頃に環境構築の作業が面倒だと感じていましたので、何か良い方法があるかググってみて、dotfilesという手段を見つけました。

dotfilesって何?

ターミナルでls -la ~を実行してみれば、
image.png
ファイル名の前に.がついているファイルはdotfileと呼ばれています。大抵dotfileのなかにアプリごとの設定が書いてあるので、これがあればアプリのコンフィグレーションを簡単に再現できます。

dotfilesをつくりましょう!

今回は二つのやり方を紹介したいと思います。

レベル1:コピペ+symlink

これはQiitaで検索すると色んな手法が出てくるので、詳しいやり方は省略させてもらいます。基本は、

  1. 管理したいdotfilesを一つのフォルダにまとめる
  2. 各dotfileのsymlinkを作る(手動では面倒なのでbashスクリプトがオススメ)
  3. フォルダーをどこかのクラウドにアップして常に同期する(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リポーを是非参考にしてください!

31
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
18