Help us understand the problem. What is going on with this article?

GNU Stowでdotfilesを管理する

More than 1 year has passed since last update.

はじめに

パソコンの初心者ではない限りは、新しい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リポーを是非参考にしてください!

qnote
猫と音楽とITをテーマにiOS/Android/Unity/Web/デザインの受託開発をやり続けて13年目の町工場的会社です。従業員の大半は猫です。
http://www.qnote.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした