パパッと楽に理想の環境を手に入れるやつ
dotfilesの展開だけではなく環境構築までを行います。環境を壊さず、OS/shellごとの差分を吸収し、(ソースを読まなくても)カスタマイズできるようにしています。既に環境が出来ているとしてもインクリメンタルにインストールできます。
好きな方法でインストールしてください。 個人的にはどれもあんまり好きではないので、良い方法があれば教えてください。
bash's Good point 👍
- ワンコマンドで環境構築できる
- 正規表現などのロジックが得意
- 何もインストールしなくても実行できる
- 標準入力を受け付けられる
bash's Bad point 👎
- 冪等性がない
のでdotfilesを環境に応じて展開したり、ロジックを書きたいときに使います。冪等性を保持できないので、セマンティクスでまとめてansibleに任せて冪等性を保持しています。セマンティクスに依頼する条件は依存関係を包括するような独立のものと見なせる構成とします(それ以外は自由です)。
curl "https://raw.githubusercontent.com/anko9801/dotfiles/master/setup.sh" | bash
Makefile's Good point 👍
- 豊富なルールを書けてカスタマイズ性が高い
Makefile's Bad point 👎
- 冪等性がない
- ルール同士に不明瞭な依存性があると原因の切り分けが難しい(ソースを全て読まなければならない)
- makeを入れないといけない
ので脳死でinstall/updateできるインターフェースとして使います。中身はshell scriptを実行するだけです。
make install
make update
ansible's Good point 👍
- 冪等性がある
- ssh先でも環境構築できる
- ログが予測可能で何をしているのかわかりやすい
ansible's Bad point 👎
- 冪等性を保持する分、カスタマイズ性が低い
- ansibleを入れないといけない
ので冪等性を持たせながら環境設定する為に使います。読者にとってフローを追うことは本質ではなく、良くないものを修正することが本質ということを念頭に設計を行いました。具体的にroles分けせずファイルで依存関係を分離し、tagsでセマンティクスを与えるようにしました。
ansible-playbook playbook.yml
途中でfailしたり、部分的にupdateしたいときはタグを指定して実行すればよさです。
標準はzshとなります。zsh以外も基本的な設定は行います。その日の気分でシェルを変えても良さです。
chsh -s /usr/bin/bash
chsh -s /bin/zsh
chsh -s /usr/bin/fish