トップ 最新 追記

Route 477



2012-02-03

[ruby] rvmからrbenvに乗り換えた

RubyのインストールはWindowsならASRやRubyInstaller、Macならport/brew install、Linuxならaptitude install等が定番であるが、 Ruby1.9.2と1.9.3を両方インストールしておきたいなどの特殊な用途向けに、rvmやrbenvというツールがある。

機能の違い

rvmはいろいろ機能が多い。gemsetといって、使うRubyGemsのセットを動的に変更できるとか。このためにrvmを使う人もいたが、現在はBundlerがあるから有難みが薄い。

rbenvはシンプル志向。rbenv本体にはRubyのビルド機能すらなくて、別途ruby-buildというツールを利用している。

端的な例を挙げると、rvmはプロジェクトごとのRubyバージョンを管理するのに.rvmrcというファイルを使うのだけど、これは任意のシェルコマンドが書けて、そのためいちいち 「この.rvmrcを信頼しますか?[y/n]」みたいなのをやらないといけない。

rbenvの場合は.rbenv-versionにバージョン番号を書くだけなので、「信頼」とかする必要がない。rvmの方が強力ではあるんだけど、ほとんどの人はバージョン番号だけ切り替えられればそれで十分だろう。

乗り換えた主な理由

気分転換。

いまrvmで何か困ってるのでなければ移行する必要はない(機能的に上位互換だし)。 新しく入れるとしたら、まあ、どっちでもいい。今はrvmの方が情報が多いけど、これからrbenvの情報も増えていくと思う。

rbenvで気をつけないといけないこと

rbenv rehash

railsとか、コマンドが付いてくるタイプのgemをインストールしたとき、rbenv rehashを実行する必要があります。これは~/.rbenv/shims/以下のファイルを更新します。

「gem i rbenv-rehash」しておくと、これを自動でやってくれるようです(各Rubyごとに入れておく必要があります)。

bundleしたのにrailsコマンドがnot foundなんだけど?

FAQ

Bundlerはexecutableを作らないので、bundle exec railsするか、またはgem installで改めて入れ直さないといけないらしい。

というわけで

$ gem i railties   # railsコマンドはrails gemに入ってるのではないという罠
$ rbenv rehash   # rbenv-rehahsを入れていない場合のみ
$ rehash            # /usr/binとかに他のrailsコマンドが存在する場合のみ
$ rails -v

でOK。

移行手順

まずrvmをアンインストールする。~/.rvmを全削除する(あるいはリネーム)。.zshrc、.bashrc等を開いてrvm関係の行を削除またはコメントアウトする。

screenを閉じる(ここ重要)!環境変数GEM_HOMEが残ったまま作業を進めると、rbenvのRubyでgem installしたのになぜか~/.rvm/以下にgemが入るというカオス状態になる。

念のため echo $GEM_HOME とかして何も表示されないのを確認すると良い。

あとの手順は

$ brew install rbenv
$ brew install ruby-build
$ echo 'eval "$(rbenv init -)"' >> .zshenv
$ brew install readline  #irbで日本語使うのに必要
$ brew link readline
$ CONFIGURE_OPTS="--with-readline-dir=/usr/local" rbenv install 1.9.2-p290

「rbenv init」は、.zshrcではなく.zshenvに書く。


2012-02-15

[ruby] 例のリファレンスマニュアルのやつ

いまこんな感じになってます。

右上のセレクトボックスで英語と日本語を切り替えられます。

  • 検索ボックスはまだダミーです。
  • 内容はまだいろいろバグってます。

デザインはmiyamaeさんのchm風のやつをとても参考にしています。

何をやろうとしているのか

英語・日本語のリファレンスマニュアルが両方見れるWebサイトを作ろうとしています。

Rubyのリファレンスも、php.netみたいに言語を切り替えて表示できるべきじゃね? そしたら日英以外の言語へ翻訳するモチベも上がるんじゃね?っていう話です。

Rubyのリファレンスは、歴史的経緯で、日英が全然別のツールで書かれてるんですよね。英語は、Rubyのソースコード中にrdoc形式で埋め込まれている。 日本語は、bitclustというツールを使っている(もとはRWiki上で執筆されていました。順序としては、日本語のリファレンスの方が先にありました)。

で、記法&ツールをどっちかに統一するのがシンプルな解法なんですが、大変なわりに短期的なメリットがあまりない。 ので、記述ツールはそのままにしておいて、Webから見える部分だけ統一するという作戦を採用しようとしています。

データどうすんの

  • 英語は、Rubyのソースコードに含まれるrdoc部分を使用する。
  • 日本語は、るりまプロジェクトのデータを使用する。

それ以外の言語は、当初はこのRailsアプリ上で翻訳が書けるようなものを考えてたんですが、 須藤さんがyardにgettextベースの国際化機能を付けるというプロジェクトを行ってらっしゃるので、 いまはその成果を利用することを考えています。つまり、

Rubyソースコードに含まれるrdoc
 ↓ [yardoc --output locale --format pot]
.potファイル
 ↓
.poファイル(訳文)
 ↓
本システムに取り込み

という感じ。

ソース

https://github.com/yhara/ruby_api/ です。

3/19までの目標

  • 日・英のリファレンスをちゃんと見れるようにする
    • ライブラリの扱いについて考える
    • 1.8.7, 1.9.2, 1.9.3のデータを用意する
  • 検索
    • Refeのように「Ar i」とかで検索できるようにする
  • 訳文の取り込み
    • .poファイルからデータを取り込めるようにする

それよりあとのこと

  • php.netはユーザがノート書けるようになってますが、そういうのもあるといいのかなぁ。
  • Web上から、ドキュメントの訂正を送れる機能。
  • るりまにある「Rubyの文法」などのコンテンツをどうするかについて考える。システム的には追加するのは簡単ですが、対応する英語文書を用意しないといけないですね。

2012-02-23

[ruby] Ruby Twitter gemの日本語リファレンスを更新しました

Ruby Twitter gemの日本語リファレンスを更新しました。1.1.1 -> 2.1.0になった。

古いのはgistに保存しました。

ところで、こうやって長い1ページに順を追ってより詳細な情報を提供していくメソッド、何かを思い出すと思ったが情報商材の手口だ…