極楽とんぼのロボット製作記

情報工学系大学院生がロボットとその周辺技術や身の回りの出来事について紹介するブログ

Githubでdotfilesを管理して、環境構築を一瞬で終わらせる

「プログラミングは環境構築が9割だ」
とプログラマーの方が言ってました。私は卒業研究中に操作ミスでPCのHDを吹き飛ばし、環境構築をはじめからやり直すことになったことがあります。dotfilesはPCが吹き飛ぶ恐怖と戦うための精神安定剤になること間違えなしです!これでムカついた友人があなたのPCを叩き割ってもあっという間に別のPCで環境構築できます。さあ、覚悟を決めてdotfilesを作りましょう!

dotfilesとは

dotfilesとは.vimrcや.profileといった'.'で始まる設定ファイルのことです。
dotfilesリポジトリにてこうしたdotfileを管理することで、現状の環境をすぐにマシンにコピーできるので、いつPCが飛んでも大丈夫だという圧倒的安心感が得られます。さらにdotfilesリポジトリによく使うソフトなどをまとめてインストールするシェルスクリプトなどをまとめて管理して、このリポジトリ1つですべての環境構築ができるようになります。
参考までに私のdotfilesです。
github.com
さらにもっともっと参考になる諸先輩方のdotfilesです。私にはまだ理解が及びません...。
github.com
github.com

dotfilesリポジトリの作成

Githubにdotfilesリポジトリを作成します。作り方は下記記事を参考にしてください。
www.g104robo.com
他人の目に触れるのはちょっとという方は非公開リポジトリも作成できます(下記参照)
Gitのための非公開リポジトリを作成する(Googleドライブ編) - 極楽とんぼのロボット製作記
Gitのための非公開リポジトリを作成する(Bitbucket編) - 極楽とんぼのロボット製作記


homeにdotfilesリポジトリをcloneしておきます。

ex)
$ git clone git@github.com:username/dotfiles.git

管理するファイルをdotfilesへ移動

管理したい設定ファイルをdotfilesに移動します。

$ mv ~/.vimrc ~/dotfiles/
$ mv ~/.vim/ ~/dotfiles/

# .config以下のdotfileを管理する場合はディレクトリを作成します
$ mkdir ~/dotfiles/.config/terminator/
$ mv ~/.config/terminator/config ~/dotfiles/.config/terminator/

シンボリックリンクを貼る(link.sh)

アプリケーションごとに設定ファイルの読み込み先を変更するのは大変なので、シンボリックリンク(ショートカットのようなもの)を貼ってあたかもこれまで通りのディレクトリにあるかのようにします。
1つ1つコマンドで

$ ln -snfv ~/dotfiles/.vimrc ~/.vimrc

のように設定しても良いのですが、今後管理したいファイルが増えてきた時に同じ作業をしなければならず、"dotfilesの環境構築"なる作業ができてしまうので、シェルスクリプトを作成します。

link.sh
8〜15行目で.configを除いた設定ファイルのリンクを生成しています。
dotfiles内に入っていながら設定ファイルから除きたいファイルは
[ "$f" = ".git" ] && continue
のようにして除外します。
18〜22行目で.config内の設定ファイルのリンクを生成します。
当初は.configディレクトリもまとめて管理していたのですが、.configにリンクを貼ってしまうと管理したくもない他のアプリケーションの設定ファイルが~/dotfiles/.config/に混入してしまいます。それらのファイルを1つ1つ.gitignoreに追加していくのも面倒に感じたので、.configに関してはディレクトリ内のファイルにリンクを貼ることにしました。
findコマンドを使用してしまうと、どうしても出力結果に./が含まれてしまい、これに対処するのに時間がかかりました。結果的に21行目のようにfile:2とすることで最初の2文字を飛ばして出力することができるとわかり、この方法で実装しています。もっとスマートな方法がありましたらご教授願います。

  • maxdepth 8 はfindコマンドが探索するディレクトリ階層の深さです。流石に設定ファイルで8階層を超えることはないと考え、この値にしました。
  • type f は探索する種類をファイルに限定するオプションです。-type dでディレクトリを探索します。詳しくは $ man findしてください。

シェルスクリプトを作成したら

$ chmod 755 link.sh

として権限を変更しましょう。その後、

$ ./link.sh

してリンクが正常に貼れたか確認しましょう。うまく実行できていれば

link home directory dotfiles
'/home/username/.vim' -> '/home/username/dotfiles/.vim'
'/home/username/.vimrc' -> '/home/username/dotfiles/.vimrc'
link .config directory dotfiles
'/home/username/.config/redshift.conf' -> '/home/username/dotfiles/.config/redshift.conf'
'/home/username/.config/terminator/config' -> '/home/username/dotfiles/.config/terminator/config'
'/home/username/.config/fcitx/config' -> '/home/username/dotfiles/.config/fcitx/config'
linked dotfiles complete!

のように表示されます。

必要なソフトをインストールする(install.sh)

よく使うソフトをインストールするためのスクリプトを作成します。

install.sh
インストールしたいパッケージをpackagelistに""で囲って入れておきます。
あとはapt-get installするだけです。

リポジトリ毎にユーザ名とメールアドレスを設定

dotfilesは様々なPCを行き来することが予想されるので、リポジトリにGitのユーザ名とメールアドレスを設定しておけば、うっかりいつもと違う名前でcommitしてしまうなんてことがなくなるので便利です。実はいつもの設定から--globalを除くだけです。--globalのほうが先に入ってきてしまうので私も調べるまで知りませんでした。

$ git config user.name username
$ git config user.email useremail@example.com

参考:特定のGitリポジトリだけAuthorを変更する - Qiita

さて、これで晴れてPC環境が吹き飛ぶ恐怖からお別れですね。これからは安心して環境を壊せます!

参考サイト
ナウなヤングのためのgithub入門講座 -基本機能からdotfiles管理まで- - tumblr
『GitHub+dotfiles』は環境構築を一瞬で終わらせるすごいやつ | vdeep
qiita.com
qiita.com
qiita.com

参考dotfiles
github.com
github.com