dotfiles
homesick
homeshick

[2017/01時点] 現状最善のdotfiles管理方法

TL;TR

dotfilesの管理は現時点ではhomeshick(not homesick)が最もおすすめ

dotfilesの管理がしたい背景

ノートPCとデスクトップPC、あるいはプライベートのPCと会社PCなど2つ以上のOSを使用している場合にdotfilesを一括で管理したい。

立ち上がる問題

  • 場合によってはいくつものサーバで実行する必要があるので、なるべく手間を掛けたくない。理想はコマンド1発でプロンプトなし
  • どこを接点(ハブ)としてファイルを同期させる?
    • 今時ならだいたいgithubでOK
  • 秘匿情報(ユーザー名・メールアドレス・パスワード)はgithubに置きたくない。どうする?
    • homeshickのforkがやっているredact/unredactの仕組みを使うてもあるが、別でファイルを持ってくる必要があって結局手間がかかる
    • 現状での最善策はおそらくGoogle DriveやOneDriveのようなプライベートファイルホスティングサービスを使うこと。自分の場合Dropboxを使用している https://www.dropbox.com/developers
  • こちらの記事でいうイニシャライズをどうするか
    • イニシャライズをそもそも全自動でするべきか、という問題がある
    • というのはそれほどその場で作業するつもりのないところでもとりあえずzsh用の設定を入れておきたい、ようなケースでいちいちvim, tmux, gitなどすべてをビルドするのはいくらなんでもリターンが見合わないから
    • あと後述の環境差異の問題もある
    • よってイニシャライズは基本的に手動で行うものとする。ただし頻繁に実行するようなものはシェルスクリプト化してcastleに含ませる
    • イニシャライズ(ビルド)をdotfilesセットアップですることは別の問題もある。イニシャライズは多くの場合sudo権限を必要とするが(ま、なくてもできるけど自分でコンパイルする必要があったりして成果以上にしんどい)、dotfilesの設置自体は極めてユーザーローカルな作業なので、root権限で作業するようなことと分離したい
  • vimやzsh、tmuxなどのプラグインのダウンロードはどうするか
    • 前述の通りdotfilesのセットアップでコンパイルや大量のプラグインのインストールなど、重い処理はしたくない。
    • これは時間がかかる + 容量を食うの2つの意味でそれらの浪費は後回しにしたいという意味
    • なので、これらのアプリケーションのプラグインのインストールは後回し、具体的に言うとアプリケーションの初回起動時に行う
    • こうすることでdotfilesを置いたけど使うつもりない(あるいはroot権限がなくてアプリケーションを入れられないため使えない)ようなケースで時間や容量を無駄にすることがなくなる
    • zshやvimは設定ファイル自体にロジックがかけるので初回起動時にプラグインがまだなければインストールの処理を走らせる。tmuxについてもif-shellを使って同様のロジックを書く
  • もうひとつ出てくる問題がアプリケーションと設定ファイルのバージョン差異の問題。zshやvimはだいぶ枯れてきているためか4,5年前から設定ファイルフォーマットの大きな変更がなく、centos6でもubuntu 16.10でも同じ設定ファイルが使えるが、1.7.10から設定ファイル分離に便利なincludeが使えるようになったgitや、マイナーバージョンアップ毎に破壊的な変更を加えるtmux(1.9, 2.0, 2.1, 2.2の設定ファイルをすべて共通で扱おうとするとほぼエラーが出る)など、バージョンによってvalidな設定ファイルは異なる。
    • これについては正直なところクリーンな回答は現状思いついていない
    • 理論的に最善なのは最新バージョン向けに設定ファイルを書いてログインする環境すべてで最新バージョンのアプリケーションを手動で入れることだがそれほど長居するつもりのないcentos6環境でzsh, tmux, gitとビルドしてインストールするのは明らかに不毛である。
    • 現在の自分の環境としてはcentos 6.5, 6.4, 7.2, mac osx, ubuntu 16.10を使っている。このうちよく使うのにOS標準のバージョンが古すぎるのはcentos 6.5, 6.4のtmuxとgitである。よって暫定的にこれら旧バージョン向けには専用のcastleを用意することにする
      • git-noninclude-castle
      • tmux-1.8-castle
    • デプロイ部分でバージョン判定をして云々ってのも考えたがdotfilesの設置をする部分にロジックを書くのはやり過ぎ感があると思い中止(そうやった結果の状態がわかりにくくなるのもデメリット)。
    • 理論的に最善であることを愚直にするのも悪くない。特にcentos 6.x系向けにtmux, gitの最新バージョンのrpmを用意できればあとはそれをインストールするだけで済む。そこまですれば古い設定ファイルを維持する必要はない

homesickよりhomeshickをおすすめする理由

homesickはRuby(gem)に依存していますがhomeshickはシェルスクリプトだけで完結します。
新しいサーバにログインするたびRubyの環境を用意するのは手間なので後者のほうがよりお手軽です。
機能的にも現時点ではそれほど大差はありません。