OSX Yosemite だインストールした古いRubyGemsをアンインストールして再インストールする方法

最近、Open Source Swift を使って、サーバーサイドSwiftの技術調査を行っています。Swift 3.0のブランチが二週間に1度くらいアップデートして、それに合わせて、フレームワークも書き換わるので、あのライブラリはこのSwiftで動くけど、このライブラリは動かないというエキサイティングな状況です。この時期に多くのフレームワークが開発されていますが、Linux、OSXで動かすためにはFoundationライブラリさえ使えないという状況の中、HTTPサーバーを頑張って開発している、Zewoという会社のフレームワークで、テスト版のSlackBotを作成しています。

その際にRubyGemを使ってツールをインストールしようとしたところ、
ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/gem

のエラーが出て、gemをインストールできませんでした。sudoをつけてもできなくて、調べてみたところ、どうもgemが、/usr/bin/gemにあるのが悪いようでした。Ruby Version Managerを入れても、結局/usr/bin/gem/のgemが優先されて呼ばれていまいました。それもOSX El Capitan で Rootlessという機能がデフォルトで有効になって、sudoでも、/usr/bin領域が書き換えられなくなりました。ただ、意図して書き換えることができるように、

  1. Command+Rを押しながら起動して、Utility – Terminalを起動
  2. 以下のコマンドでRootlessを無効にする
  3. csrutil disable; reboot
     

  4. 再起動して以下のコマンドで、Gemを削除
  5. rm -rf /usr/bin/gem

  6. 以下のコマンドで、RVM(Ruby Version Manager)をアンインストール
  7. rvm implode

  8. Command+Rを押しながら再起動して、Rootlessを再度有効にする
  9. csrutil enable; reboot

  10. RVMをインストール
  11. \curl -sSL https://get.rvm.io | bash -s stable

  12. RVMの設定
  13. rvm get head
    rvm --auto-dotfiles
    ram reload
    rvm list known
    rvm install 2.3
    rvm docs generate-ri
    which gem

    最後のコマンドで、どのgemが参照されるか確認すると、

    MBPR:~ tomohisa$ which gem
    /Users/tomohisa/.rvm/rubies/ruby-2.3.0/bin/gem

    と正しいgemが参照されました。sudoが必要ないエリアにインストールできたので、
    gem install cocoapods
    gem install zewo-dev

    のようにsudo なしで、gemを使用できるようになりました。

GUIの統合環境ばかりで久しぶりにCUIの環境で開発していますが、慣れてくるとこちらも楽しいですね。