最近、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領域が書き換えられなくなりました。ただ、意図して書き換えることができるように、
- Command+Rを押しながら起動して、Utility – Terminalを起動
- 以下のコマンドでRootlessを無効にする
- 再起動して以下のコマンドで、Gemを削除
- 以下のコマンドで、RVM(Ruby Version Manager)をアンインストール
- Command+Rを押しながら再起動して、Rootlessを再度有効にする
- RVMをインストール
- RVMの設定
csrutil disable; reboot
rm -rf /usr/bin/gem
rvm implode
csrutil enable; reboot
\curl -sSL https://get.rvm.io | bash -s stable
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の環境で開発していますが、慣れてくるとこちらも楽しいですね。