Persistence

技術メモなど

node.jsの環境構築メモ

Yeomanを使ってみようと思って、Macにインストールされているnode.jsをすごい久しぶりに触ろうとしたらエラーが起きたので、nodebrewを使って再構築したメモ。

node.jsのアンインストール

まずはじめに、Macにインストールされているnode.jsをアップデートし、npmパッケージを入れていこうと思ったら、node.jsをアップデートした後にnpmコマンドが使えなくなってしまいました。node.jsをアップデートする前から使えてたかどうかは不明です。(かなり長い間使っていなかったので。)

$ node -v
v0.8.16

$ n stable

     install : v0.12.2
       mkdir : /usr/local/n/versions/0.12.2
       fetch : http://nodejs.org/dist/v0.12.2/node-v0.12.2-darwin-x64.tar.gz
   installed : v0.12.2

$ node -v
v0.12.2

$ npm
module.js:338
    throw err;
          ^
Error: Cannot find module 'are-we-there-yet'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/usr/local/Cellar/node/0.8.16/lib/node_modules/npm/node_modules/npmlog/log.js:2:16)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)

npmコマンドを叩くと上記のエラーが起きます。モジュールが足りないと言われるがそもそもnpmコマンドが使えないのでモジュールを入れる事ができませんでした。また、npmをアンインストールするにもnpmコマンドを使うので詰んでしまった。。

なので、node.jsから入れなおすことにしました。

ところで今使っているnode.jsはどうやって入れたものか?それがわからないと消し方もわからないのですが、まず一番ありそうなところで、Homebrewを確認してみます。

$ brew list node
...

brew経由でnodeが入っていた事は分かりましたが、フォルダ名が現在使っているバージョンとは違いました。これはアップデートする前のバージョンが表示されるのかもしれませんが、この時のログが流れてしまってもう確認できません。なんにせよもう必要がないのでアンインストールします。

$ brew uninstall node

もう一つの方法として、nodeをインストーラからインストールした場合の削除方法というのもありましたので、念のためこちらもやっておきます。また、あわせてnpmのグローバルでインストールしたパッケージも削除しました。手順は以下のサイトを参照しました。

http://whiskers.nukos.kitchen/2014/09/25/nodebrew.html

これでもまだnodeの実行モジュールが残っていてパスが通るので、手動で実行モジュールを削除しました。(たぶん正しい手順ではないです。)

$ which node
/usr/local/bin/node

$ sudo rm /usr/local/bin/node

nodebrewのインストール

nodebrewはnode.jsやio.jsのバージョン管理ツールです。Rubyでいうrbenvみたいなものですね。他にもnode.jsのためのバージョン管理ツールが色々とありますが、nodebrewが一番環境をクリーンに保てて良いというのを目にしたのでこれにしました。実際、使うのは~/.nodebrewだけで、あとはパスを通すだけです。とってもクリーンですね!

インストール方法もこちらのサイトを参考にしたので、自分が改めて書くまででもないですね。

http://whiskers.nukos.kitchen/2014/09/25/nodebrew.html

基本的なコマンドだけメモしておきます。

  • nodebrew ls-remote
  • nodebrew install-binary [バージョン]
  • nodebrew uninstall [バージョン]
  • nodebrew list
  • nodebrew use [バージョン]

nodebrew install [バージョン]でもインストールできますが、ソースからコンパイルするため非常に時間がかかります。通常はinstall-binaryを使うといいですね。

参考

ちなみに、今から使うんだったらio.jsじゃない?って思ってちょっと調べてみたら、こんな記事が見つかりました。内容は記事を見ればわかるのでここには書きませんが、自分は特に最新機能が必要でない限りはnode.jsを使いつつ様子見しようと思います。

http://yosuke-furukawa.hatenablog.com/entry/2015/03/05/171527

Macの環境構築メモ(ターミナル/シェル)

『エンジニアたるもの使う道具にはこだわりを持て』ということでMacの開発環境を色々といじってみました。こういうのは書いておかないとすぐ忘れてしまうので備忘のためにメモしておきます。

iTerm2

今までターミナルはMacのデフォルトのを使っていました。カラースキームとかも綺麗で特に不満は無かったのですが、定番のiTerm2を使ってみることにしました。

http://iterm2.com/

今のところ使っている機能としてはこのくらいです。

機能 ショートカット
検索する Ctrl+f
ペインを水平分割する Ctrl+d
ペインを垂直分割する Ctrl+Shift+d
ペインを移動する Ctrl+Option+方向キー
ペインを閉じる Ctrl+w
タブを移動する Cltr+Shift+[またはCltr+Shift+]

まだまだ機能はたくさんあるので使っていて不便を感じたら調べるといいですね。ちなみに私は前回入力したコマンドを再入力する際にキーを連打するのですが、押す回数が多いのでもっと簡単に履歴を探せる機能がほしいなと思ったんですが、これはターミナルではなく別の機能で実現できました。

iTerm2のカラースキームはここにたくさん(たくさん!)あるので、好きなモノをダウンロードしてインポートできます。

https://github.com/mbadolato/iTerm2-Color-Schemes

oh-my-zsh

oh-my-zshzshの設定を管理するためのツールです。zshは今までも使っていたのですが、カスタマイズはほとんどしていませんでした。入力補完とかは何もしなくてもついてくるので超便利ですけどね!

https://github.com/robbyrussell/oh-my-zsh

oh-my-zshには「テーマ」と「プラグイン」という2つの便利な機能があります。

テーマ

テーマは見た目の表示をカスタマイズしたテンプレートで、あらかじめたくさん(たくさん!)の種類が備わっていて、設定を変えるだけでそのテーマが使えるようになります。また、テーマはシェルスクリプトで書かれているので、ちょっとしたカスタマイズなら簡単にできます。

https://github.com/robbyrussell/oh-my-zsh/wiki/themes

私は"wedisagree"というテーマを使っているのですが、現在時刻は行ごとに出力しなくてもいいので削除しました。このテーマはカレントディレクトリのgitリポジトリの状態を表示してくれるので、ブランチの切り替え忘れとかを防げて便利ですね。

ZSH_THEME="wedisagree"

プラグイン

プラグインはコマンドのショートカット集のようなものです。

https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins

例えばbundlerというプラグインを入れてbeと打つと、bundle execが実行されます。今まではわざわざaliasを書いて設定していました。プラグインもあらかじめたくさん(たくさん!)備わっていて、設定に書くだけで使えるようになります。なお、各種プラグインの設定は、~/.oh-my-zsh/pluginsの中にある設定ファイルを見ると分かります。

plugins=(git osx brew bundler rails)

autojump

autojumpはディレクトリ移動を高速にするためのツールです。移動したことのあるディレクトリを記録し、次回以降はフルパスを入力しなくても、j [移動したいディレクトリの一部の文字]と入力するだけで移動できます。

インストールはHomebrew経由で入れてしまうのが簡単です。

brew install autojump

あとは、お使いのシェルのrcファイル(私は.zshrc)に以下を追加します。

[[ -s $(brew --prefix)/etc/profile.d/autojump.sh ]] && . $(brew --prefix)/etc/profile.d/autojump.sh

しかし、私の環境ではこのままでは以下のエラーとなりました。

$ j
usage: autojump [-h] [-a DIRECTORY] [-i [WEIGHT]] [-d [WEIGHT]] [--complete]
                [--purge] [-s] [-v]
                [DIRECTORY [DIRECTORY ...]]
autojump: error: unrecognized arguments: -l

jエイリアスが本来ならばjobsになるはずなんですが、なぜかjobs -lとなるためエラーとなります。おそらくoh-my-zshの影響かと思うのですが、なぜこのようなエイリアスになるのかは分かりませんでした。対処として、先ほど追加したautojumpの設定の下に、alias j="jobs"を追記することでエイリアスの上書きができました。

他にzという同様のツールがありますが、こちらは[移動したいディレクトリの一部]が充分でない(候補がたくさんある)時でも、優先順位が一番高いディレクトリへ移動してしまうので、autojumpの方が使い勝手が良さそうです。

percol

percolは"対話的なgrepツール"だそうです。

https://github.com/mooz/percol

これを使って色々と便利なカスタマイズをしているブログ記事が見つかりましたが、今回はコマンド履歴の検索をしてみました。設定方法は以下のサイトで説明されている通りです。

http://blog.zoncoen.net/blog/2014/01/14/percol-autojump-with-zsh/

例えば、20回前に入力した長いコマンドを再度入力したいとき、今まではを20回押してましたが、これを使うとCommand+rインタラクティブモードになった後にコマンドの一部を入力して検索すると絞り込まれていきすぐに見つけることができます。

参考

http://qiita.com/bird_nitryn/items/bd063f0d7eb18287fec1