Homeshickでdotfilesを管理することにした

森裕介(プログラマー)
無念

2014年は インフラ構築自動化 して仕事をさぼる 、とふんわりした目標を立てた森です。

GitHub ❤ ~/

ドット柄のOctocatが可愛い

2013年年末大掃除で dotfiles の整理を始めたのですが、 整理するついでに単純にgitレポジトリに追加するだけでなく管理する手法を変えてみようかなと思いいたりました。

(現状はレポジトリに登録されている 各種ファイルを$HOME直下にコピーするだけのシェル をつかってるですがイケてない…せめてシンボリックリンクにしたい…。)

自分で作ってもいいけどなにか便利ツールないかな、とググり GitHubにおけるdotfiles非公式ガイド に出会いました。

ここでbootstrapとして紹介されているレポジトリからdotfilesを管理するツールの homeshick がしっくり来たので使っていくことにしました。 使い方をまとめておきます。

homeshickを選んだ理由

もともとこの記事は homesick について書くつもりでした。

homesickgem で提供されています。 rbenv などを使っていればインストールが簡単ですがそうでない環境 (ユーザーにsudo権限ないとか今どき気にする機会もすくないんですけど…レンタルサーバーとかそんな環境)で gemをインストールするためにまずrubyをインストール、makeするために依存ライブラリをインストール…という作業が必要で、 gemをインストールするための依存性解決が簡単じゃない… と感じてしまいました。

その点 homeshick は homesick (ややこしい) と同様の実装を bash で行っています。 たいていのLinux(BSD)系環境ならばbashが入っているのでインストール、使用に苦労しませんでした。 ということでhomeshickを使っていきます。

homeshickの概要

homeshick (homesickもですが) はdotfilesを管理するためのシンプルなツールです。 シンボリックリンクを生成する際に特定環境で別名にするとか自動でアップデートしたいとか欲張ったことはできませんが、 シンプル故に割り切って使えます。

使い方概要は以下のとおりです。

  1. インストールする
  2. castle と呼ばれるdotfiles管理用Gitレポジトリを作成する
  3. castle にdotfilesを追加していく
  4. castle を git commit, push, pull をする
  5. castle に新規ファイルが追加されていたら link する

homeshickのREADMEwiki を一読するとより理解しやすいですので是非。

homeshickのインストール

wiki を参照しつつさっそくbash環境にインストールします。 zsh環境の説明は省きますがほとんど差異はないのでwikiを見ながら確認してください。

1
$ git clone git://github.com/andsens/homeshick.git $HOME/.homesick/repos/homeshick

つづいてhomeshickコマンドの設定です。

1
2
3
4
5
6
# homeshickコマンドを使うための設定を追加
$ printf '\nsource "$HOME/.homesick/repos/homeshick/homeshick.sh"' >> $HOME/.bashrc
# bashでの補完設定を追加
$ printf '\nsource "$HOME/.homesick/repos/homeshick/completions/homeshick-completion.bash"' >> $HOME/.bashrc
# 設定読み込み
$ source $HOME/.bashrc

これでhomeshickコマンドが使用できるようになりました。

1
2
3
jiska:~$ homeshick
homeshick uses git in concert with symlinks to track your precious dotfiles.
...

castleの作成

homeshickコマンドを利用してdotfilesを管理するためのレポジトリを生成します。このレポジトリのことを castle と呼ぶそうでその流れに乗っておきます。今回は dotfiles_castle という命名にしておきます。

1
2
$ homeshick generate dotfiles_castle
     generate dotfiles_castle

これで $HOME/.homesick/repos/dotfiles_castle が生成されます。

1
2
3
4
$ ls -l $HOME/.homesick/repos
total 0
drwxr-xr-x   4 jiska  staff  136 Jan  2 18:11 dotfiles_castle/
drwxr-xr-x  13 jiska  staff  442 Jan  1 15:54 homeshick/

castleにファイルを追加する

さっそくcastleにdotfileを追加していきます。例えば .bashrc を追加したい場合は下記のとおりです。

1
2
3
4
$ cd
$ homeshick track dotfiles_castle .bashrc
$ homeshick track dotfiles_castle .ssh/config
...

コマンド1つで

  1. castleレポジトリにファイルが移動する
  2. 元あったファイルがcastleレポジトリへのシンボリックリンクへ置き換わる
  3. ファイルが git add される

この3つの動作が行われます。

シンボリックリンクが生成される際には $HOMEからのパス で生成されるのでtrackするまえにあらかじめ$HOMEへ移動しておいたほうがいいです。

あとはcastleレポジトリにて git commit するだけです。 castleレポジトリへの移動もhomeshickコマンドで出来ます。

1
2
3
4
5
6
7
$ homeshick cd [castle_name]

$ pwd
jiska:~/.homesick/repos/dotfiles_castle

$ git commit -m "Initial commit"
...

あとはcastleレポジトリをGitHubなりにpushすればOKです!

まとめ

このつぎは他ユーザーの環境でcastleレポジトリの内容を同期するための手順をまとめますが、長くなってきたのこのへんでいったん終わりにします。

みなさんも一度homeshickを使ってみてください。

余談

なんで homes h ick なのかよくわからないので誰か知っている人は教えて下さい…