Rubyの設定の手順と勉強の仕方。
Ruby
MacOSXには ruby が入っているが、2.0.0 は古いので、 rbenv を使っていく。
rbenv で適当なバージョンをインストールして、指定して、.bash_profile に追記して終わり。
$ which ruby
/Users/user/.rbenv/shims/ruby
- Ubuntu 16.0.4 LTS では、
apt install rbenv ruby-build
で問題なし。 - CentOS だと
yum install
で楽できない。
yum でインストールするもの
順番に.
- git
- git clone rbenv
- git clone ruby-build
以下のパッケージがインストールされていれば、ruby-install できたが、 すでに入っているパッケージもあるので十分条件ではないはず。
- bzip2
- libffi-devel (for fiddle, link)
- zlib-devel (installing bundle gems でこけた, 下のメッセージ参照.)
- openssl-devel, readline-devel (Ruby openssl extension, Ruby readline extension, 親切にもインストーラーでメッセージが出してくれた)
ログ: zlib-devel が必要みたい.
installing bundle gems: /home/yappy/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0 (build_info, cache, doc, extensions, gems, specifications)
/tmp/ruby-build.20161031223808.17897/ruby-2.2.0/lib/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- zlib (LoadError)
エディタ
エディタをVisual Studio Code使おうかと思ったけど、Emacs + Robe にする。
Robe はコードアシスタントでコードジャンプとかメソッド名とか見れる。
ここら辺は Slime と同じで C-c l
でファイル読み込んで実行できるし、
M-.
で関数定義へジャンプできる。
pry が必要なので、あらかじめ gem でインストールする。
M-x robe-start
で補完が効くようになった。ここら辺は auto-complete 周りの設定も必要みたい。
irbで日本語でマルチバイトエラーが起こる
"あ".each_byte{|b| puts "%x" % b}
multibyte error が irb で出たので、inf-ruby の設定で -U
を irb のコマンドラインオプションに足す。
参考
次のステップ
- リファレンスマニュアル
- Ruby Koans
- Ruby on Rails
- Capybara
リファレンスマニュアルを読む
目次の制御構文まで流し読み程度。
rosscript も #!
が使えない環境では ruby -S
で書いてあることと同じことやってる。
話題はそれるけど、こんなのもあった。 Why do some scripts start with #! … ?
よくわかっていないところ
- セキュリティモデル
- オブジェクトの汚染
- セーフレベル
- 制御構文
- redo
- retry
見直しが必要
- 変数の宣言・定義
- 変数の違い
- リテラルの書き方
Ruby Koans
チュートリアルで構文を勉強していく。Koansは日本語で、禅の公案のこと。 小さい問題を積み重ねて、知識を身につけていこうというスタイル。 Ruby Koansのページには、 The Little Lisperのスタイルにインスパイアされましたと書いている。
ところどころにどうしてか考えてねっていうポイントもあって面白い。 たとえば、about_constants.rb にある下のコメント
# QUESTION: Now which has precedence: The constant in the lexical
# scope, or the constant from the inheritance hierarchy? Why is it
# different than the previous answer?
こういう問題に対して、My answer is … のように考えて書いておく。
どうやって正しいことを確認するかというと、マニュアルを見たり、IRC/MLでたずねたりで解決する。 定数参照の優先順位に、答えが書いてある。