1年ほど前、作業の自動化をもっと進めるべきと思った。 なんども同じ作業をしているのが原因の負担が大きいと感じたため。 それから自動化できそうなところを自動化する、というのをぼちぼち やってた。
あるとき、自動化のためには捨てられる環境を意識するのが 大切ではないかと考えた。
捨てられない環境:
- たいていの環境は捨てられない
- 環境に依存してしまう
- 環境を失うと復旧が大変
- 維持コストがかかる
作業を自動化して環境を作ったとしても、それが捨てられないと、 管理対象がどんどん多くなって、維持コストがどんどん増えて、 大変になってくる。
もし環境が、必要な時に構築して、必要なくなったら捨てられるなら。
捨てられる環境:
- 環境を失う心配がない
- 維持コストがかからない
- 状態を持たないので、毎回同じ結果を期待できる
いいところが多そう。関数言語的な美しさを感じる。
それ以来、意識的に「捨てられる環境化」をすすめてきたところ、 結構いい感じになったことが多いので、共有します。
- 以前
- 新しいPC使うときは、使ってるプラグインを手動インストール
- 設定をやりなおし
- ブックマークをコピー
- 今
- chromeでプラグイン、設定、ブックマークを同期してくれる。
- 同期に必要な作業はgoogleアカウントでログインするだけ。
- 履歴も共有してくれて、便利になった。
- OS変わっても問題ないので快適
- まとめ
- chrome使ってるだけで恩恵を受けられる。便利になりました。
-
screen便利だけど、一回各ウインドウで作業すると、もう一回同じ状態に復旧するのが大変なので、ずっと開きっぱなしにしてた。
-
サーバ再起動した時に大変
- ウインドウ毎にディレクトリ移動、プログラム起動を手動でやらないといけない
-
tmuxinatorで解決
- tmux起動時の設定を、.tmuxinator/hoge.yml に書いておける
- mux hoge すると、hoge.ymlの設定にしたがってtmux起動。
- 定型的に必要な状態まで復元
- 標準以外の場所にcdする、rails console、rails s -p 3002、など)
- 問題なくtmuxを終了できるようになった。
-
railsで小さいプロジェクトを作って挙動を試したいが、面倒
- なにが面倒?
- 使い慣れたGemをGemfileに書くのが面倒
- rspec使うのに、何しなきゃいけなかったっけ?
- なにが面倒?
-
rails application templateを使うようにした
- Gemfile, rake install などを、rails new 時に自動でやってくれるように
- railsのアプリなら設定はほぼ共通なので、rails new new_appすると、.tmuxinator/new_app.yml を自動で作るようにした。すぐにコーディングに掛かれる。
- デスクトップPCで、vimをいっぱい開いてそこにメモを書いてた。
- メモの種類はいろいろあるので一つのファイルではまかなえない。デバッグ用の使い捨てもメモもあれば、Todoリストもある
- 適当なファイル名でメモ用ファイルを生成するコマンドを使ってた
- 問題
- -> windows updateでマシンが勝手に再起動されて、vimが閉じられる。どれが開いておくべきメモかわからなくなる。
- タスクバーがvimだらけになる
- -> windows updateでマシンが勝手に再起動されて、vimが閉じられる。どれが開いておくべきメモかわからなくなる。
- evernote使うようにして解決
- Evernoteのデスクトップアプリを使う。
- 「メモ」というノートブック(ディレクトリみたいなもの)を作って、そこにメモを貯めこむ
- 帰宅後もずっとvim開いてる必要なくなって、デスクトップが綺麗になった
- 良い副作用
- どのPCでもメモを共有できるようになった。iphoneからでも確認できる。
- Todoメモにチェックボックス付けておくと捗る
- chrome extension入れておくと、google検索した時にメモも検索結果に出てくる
- タイトル、サマリが一覧できるので、タスクバーより何についてのメモなのか判別しやすい
- 最近使ったメモは一番上に来てくれるのが便利。
- 不満点
- vimではない。入力がvimほど快適にできない。
- vimのevervimプラグインで、vimからも一応編集できるようになった。snippetの置き場所に使ってる。
- vimではない。入力がvimほど快適にできない。
- まとめ
- vimではないのが不満点だが、それを補って余りあるほど便利。イラッとすることもほぼない。快適になった。
- 会社のデスクトップPCに来なくても、作業メモに常にアクセスできるので、どこでも仕事ができるようになった。
- メモだけではなく、デスクトップPC環境まで捨てられた。
- ドットファイル入れたディレクトリをmercurialで管理してる。新サーバを作ったら、このディレクトリをcloneして、ドットファイル配備スクリプト実行すれば、使い慣れたCUI環境を戻せる。
- リポジトリサイズが大きくなってきたし、作りなおすつもり。
- できればgithubで管理したい。秘密情報と公開情報の使い分け、復元手順が必要
- 履歴も共有したい
- ボチャンした。
- iCloudにバックアップしてたので、機種交換した次の日には、まったく同じiPhoneが使えるようになった。
- 機種変更した。
- iCloudにバックアップしてたので、機種交換した次の日には、速くなっただけでまったく同じiPhoneが使えるようになった。
- iPhone楽。
- 開発環境構築の仕組みが必要
- 何の開発環境があるか、一覧する仕組みもあると便利そう
-
捨てられるデスクトップ環境とは何か?
- 新しいPCを使う -> コマンド実行すれば、自動で旧PCと同じ状態を構築でき、すぐに移行できる。
-
timecupsuleや、boxenが候補。できればboxenみたいに、環境をコーディングできる方が便利そう。
-
あたらしいPC使う時に、手間0で使ってる環境を構築できるのが理想
-
データをどこに保存する?dropbox?
-
捨てられるデータと共有したいデータの区別が必要そう
-
なぜサーバを捨てられないのか?
- サーバのセットアップは時間と手間がかかる。
- そのため、稼働したサーバを新しくリプレースすることはほとんどない
-
問題
- セキュリティパッチを適切に当てられない (yum updateかけられない)
- サーバに障害が起きると復旧に時間がかかる
- 冗長化も、サーバの寿命をのばすことを念頭に行う。なので、構成が複雑化しがち。
-
考え方
- どのサーバなら捨てられるか?捨てられそうか?
- 捨てられないリソースを、あるサーバに集約して、他のサーバは捨てれるようにする
- 捨てられないリソース
- リポジトリ
- ログ
- DB
- 捨てられないリソース
-
immutable inflastructureが今年来そう
環境をその都度作りなおすのは、覚えておかないといけないことを減らせて楽。 環境維持コストを無くせるのは、時間や手間だけじゃなくて、精神衛生上の メリットもある。 また、捨てること自体が快感。これが断捨離ブームの理由ではないか。
環境が単に捨てられるだけで、手間や時間が余分にかかってしまうのなら、 ムリに環境を捨てても意味が無い。 捨てられる環境を考えるときは、以下の点に気をつける。
- 環境構築のコストが少ない。(自動化を徹底する。時間もかからないように)
- 状態が残ってなくても困らない仕組みを作る。(状態を自動で永続化。作業開始に必要な条件まで自動化する)
- 環境を捨てるのに躊躇してしまう作りだと、実質なかなか環境が捨てれなくなってしまう。日常的にストレスなく環境を捨てれるようなしくみを作り、習慣づける。
全体を捨てれる化できないなら、一部だけ捨てる化できないか検証する。 捨てられない情報を洗い出して、それを局所化し、他の部分を捨てれる化する。
捨てられる環境を作ることで、自動化にいい影響を与えられることがわかった。 自動化できるものの発見にも役立つし、自動化をシンプルにもしてくれる。 Cloud, Immutable Inflastructureなどの最近流行りのインフラ周りの技術も、 環境の捨てれる化という流れに乗ったもので、今後主流となる潮流。 今後重要になってくる概念だと思う。