はてブロ@ama_ch

https://twitter.com/ama_ch

oh-my-zshとhomesickを使ってdotfilesをGitHubで管理するようにした

今までdotfilesは会社で使ってるものがメインで、家やノートPCで使うものはそこからコピペしたりして使ってました。たまにDropboxで同期させてシンボリックリンクを作ったりもしていたけど、結局面倒であまりメンテしていませんでした。

そんな感じでなんとなくお茶を濁していたんですが、最近チームの開発環境がSubversionからgitに引っ越しました。大量の.gitconfigの設定とエイリアスができあがり、今も頻繁に更新しています。そうなると当然家のマシンでも同じコマンドを使いたくなり、そろそろ今の管理方法に限界を感じるようになりました。

そこで、いい加減やる気を出して、dotfilesをGitHubでうまいこと管理できないかと挑戦してみました。

前提条件

まずはzshの設定を見直し

今までは.zshrcにべたーっと設定を書いていて、会社と家の環境で微妙に追記したり削ったりして使ってました。この.zshrcがかなり長くなっていて手を焼いてたんですが、最近oh-my-zshの存在を知りました。

テーマ(PROMPT)は今使ってるのと結構変わるけど、必要な設定は普通に揃ってる感じ。oh-my-zshのプラグインの仕組みを使えば、今までの長い.zshrcを分割して管理できそう!というわけで、zshまわりはoh-my-zshに乗り換えることにしました。

homesick + GitHubでドットファイル管理

最近GitHub does dotfilesを見ていたら、homesickというよさげなプロジェクトが紹介されていることに気付きました。gemとして提供されていて、簡単にGitHubでドットファイルが管理できるらしいです。

さらっと紹介すると、

$ homesick clone リポジトリ

でGitHubのリポジトリをcloneして、

$ homesick symlink リポジトリ

リポジトリのhomeディレクトリ以下にあるドットファイルシンボリックリンクをローカルに作ってくれるものです。

更新するときはこれでいけます。

$ homesick pull リポジトリ

oh-my-zshとhomesickを使ったらよさそうだ!と思って、早速やってみました。

できあがったリポジトリ

ama-ch/dotfiles

インストール方法

README.mdに書いてあることそのまんまですが。事前にインストールしとくものを除けば、使い始めるまでの手順はこれだけです。

1. dotfilesをGitHubから取得してsymlinkを作成する

$ homesick clone ama-ch/dotfiles
$ homesick symlink ama-ch/dotfiles

2. oh-my-zshをインストールする

$ git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

以上で、dotfilesのインストールは完了です。

設定の書き方で注意したポイントも書いときます。

oh-my-zshの設定

oh-my-zshはホームディレクトリに.oh-my-zshというディレクトリを作成します。この中に各種プラグインやテーマを追加していきます。自分のカスタマイズ内容はデフォルトだと~/.oh-my-zsh/custom以下に追加します。

普通にリポジトリにカスタム内容である .oh-my-zsh/custom を追加すると、oh-my-zshのインストールが失敗するようになってしまいます。.oh-my-zsh以下を全部pushしてしまえばいいのかも知れないけど、お行儀が良くない。そこで、.zshrcの3行目に以下の行を追加しています。

ZSH_CUSTOM=$HOME/.oh-my-zsh-custom

ZSH_CUSTOMという変数をセットすると、~/.oh-my-zsh/customの代わりにその値が使われるようになります。これで、.oh-my-zsh自体のディレクトリとカスタム設定のディレクトリを分離できます。

環境依存設定の切り出し

Ubuntuでだけ使う設定はubuntuプラグインを作ってそこに切り出しました。Macだけの設定は今のところありません。

dotfilesを書き換えたい場合

普通に書き換えてOK。例えば~/.gitconfigを書き換えると、~/.homesick/repos/ama-ch/dotfiles/home/.gitconfigを書き換えることになります。ここは普通にcloneされたgitリポジトリなので、書き換えても問題ありません。

コンフリクトさえしなければ、

$ homesick pull ama-ch/dotfiles

で普通に更新できます。コンフリクトしてしまう場合でも、普通に解消するか別ブランチを切ったりして対応すれば問題ありません。

おわり

とりあえずこんな感じです。まだ.emacsとか整理するのが面倒でpushできてない設定もありますが、GitHubで管理すると紛失したりする心配がなくて嬉しいです。

ついでにMacPortsをやめてHomebrewにしたりして色々スッキリしました。作業環境を見直すと、人生を見直す良い機会になりますね。おしまい。