oh my zshを使えば便利なzsh環境をパパっと作れる!と知り、テキトーに使い続けてきた。
が!遅い!遅いよ!!Terminal起動するのに何秒かかるんだよ!2秒って!!
ノッている時や、急いでいる時に2秒手を止められるのはもの凄いストレス。
と、言うことで便利に、そして速く使える環境を目指す。
ボトルネックを探す
まず、zsh起動時に行っているタスクのうち、何が遅いのか調べなければどうしようもないので、原始的にecho
コマンドを並べてボトルネックを探したところ、下記3つのタスクに時間を要しているもよう。
- oh my zsh の起動
- nvm の起動
- tmuxinator の起動
このうちtmuxinatorの起動はテキトーすぎて使いづらい所もあったので、単純に排除する事にした。
oh my zsh をアンインストール
oh my zshのforkとして始まったpreztoなるものがあるらしい。という事を知り、思い切ってoh my zshをアンインストール。
oh my zsh にはアンインストール用のスクリプトが付属しているので、これを実行するだけ。
念のため処理内容を確認したが、oh my zshのディレクトリが削除されるだけでzshrcファイルはそのまま残るもよう。
とりあえず uninstall_oh_my_zsh
を実行しアンインストール!
さよなら、oh my zsh。
nvm の代替ツール
node.js活用のため、nvmを利用しており、.zshrc
に source $(brew --prefix nvm)/nvm.sh
などとして起動スクリプトを実行していた。
このスクリプトが遅い!
Githubにissueもあげられており、コメントを参考に工夫してみたが、そもそもスクリプトが遅いので根本的な解決にはいたらない。
何か代替となるツールは無いかと検索し、候補が2つ見つかりました。
以下、それぞれについてメモ。
N
- npmパッケージとして配布
- 中身はbashスクリプト
- 各バージョンのnode.js/io.jsのバイナリーを保持し、使用時に実体を置き換える事でバージョンのスイッチを実現
- 実行ファイルコピーするらしく、都度root権限が必要
- 実行ファイルのコピーなので、バージョンによってnode_moduleが動かなくなる可能性もあるとか
- シンプルだが…うーん
nodebrew
- perl実装
- 日本人の方が開発しているらしい
- Github上のStar数がnvm/nに比べて少ない
- 英語圏の情報にはなかなかヒットしなかった
- 使ってみない事にはどんなものか想像もつかない
と、いうことでnodebrewを使ってみる事にした。
(結果から言うと、最高!)
nodebrewをインストール & セットアップ
README.mdに丁寧に記載されているが、formulaが提供されていたので、homebrewを使ってインストールした。
$brew install nodebrew
$echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc
以上。これで本体のインストール、設定完了!
nodebrewもその他のツール同様、独自の環境変数NODEBREW_ROOT
を設定してホームディレクトリを設定できる。デフォルトで$HOME/.nodebrew
となっているので、ここはいじらず。
nodebrew実行時、NODEBREW_ROOT
に指定されたディレクトリが存在しない場合、自動で作成してくれるので、ディレクトリを作成する必要もなし。
必要なnode.jsの実体をインストールする
最新の安定版と、利用しているv0.10.36をインストールしました。
nodebrew install-binary stable # v4.0.0
nodebrew install-binary v0.10.36
あとはnodebrew use v4.0.0
などとすることでnvmと同様に活用できる。
nodebrewの起動時間
nvmのnvm.shが遅い問題の解消が目的なので、多少使いづらくても…と思っていたのですが、使い勝手は全く問題なし。
そして問題の起動時間は、まったくのストレスフリー!!
速い!体感 ゼ ロ 秒!
続く…(かも)
oh my zshのアンインストール, nvm → nodebrewへの乗り換えでストレスは無くなったが、oh my zshの便利な機能郡も同時に失われたので、これを補いたい。
気分が向いたらブログにのこす。