電波ビーチ

☆(ゝω・)v

Ruby事始

Rubyをやります。とりあえず駆け足で周辺知識と言語仕様の浅いとこまで

ドキュメント

rubyの特徴として第一に日本産だから日本語情報いっぱいあるというのはよく目にする。確かに公式ドキュメントをのぞいてみると、これほどまでにこなれた日本語(これが原文だろうし当然だが)で網羅されている(ふつうは訳がどこかで息切れるのが多いイメージ)。

用語

読んでいくうちに当たり前のように使っているところに遭遇したよく出てくる用語。初学者が遭遇してわかりにくいかつ重要そうな用語を網羅した記事がほしい。

環境に関しての用語

rbenv

rubyのバージョン管理ツール。昔はRVMたらいうのがあったらしい。condaのcreateとかのようにディレクトリとバージョンと環境名とかを指定して開発環境を一発で作ってくれるのではなく、単に本当にバージョンをグローバル/ローカルで管理してくれるだけらしい。

gem

rubyのライブラリ・パッケージ管理ツール。使い方はよくわからん

Bundler

gemの依存関係をいい具合にしてくれるツール。requirements.txtみたいなもん?よくわからん

Rake

makeのruby版。makeがなんなのかは知らなかったが、ソースコードをビルドするためのコマンドらしい。よくわからん。

Shim

なんかrubyを実行したり操作したりするときのrubyコマンド集が入ってるらしいんだけどまったくわからん。user/.rbenv/shimsにある。shim自体はruby固有の概念じゃなくて(こういうツールは総称してなんていうのか知らないが)他のプログラミング言語でも便利に使われているらしい。

ruby-build

ruby installを提供するrbenvのプラグイン。なのでrbenvを入れたら一緒に入ってくる(入ってきた)。どう使って何が嬉しいのかわからん

irb

interactive ruby。対話的に実行できる。rubyインストールしたら入ってきた。

言語に関しての用語

ruby独特の文法とかクセがあるので注意。とくに気になったやつなど

シンボル

オブジェクトが作られる際に振られる固有のIDみたいなもんで実態は数値。ハッシュのキーとして使うと探索効率良くなる。immutable。

特異メソッド

インスタンス単位で追加したメソッド(多分)

unless文

条件式が偽の場合に処理する。forの裏みたいなやつ。elsifとかは使えない。

until文

条件式が義の間処理する。whileの裏みたいなやつ。

case~when

whichに相当するやつ。

範囲オブジェクト

大小比較できる値を任意の範囲で順につくってまとめたオブジェクトで実態はRangeクラスのオブジェクト。リテラルは、たとえば1..4は1から4まで、1...4は1から3まで。同様にRange.new(1, 4, true)も1から4まで。アルファベットもいける。ただし試したところ降順はオブジェクトとしては作れるしエラーとかは出ないがfor文でイテレーションとかはできない

eachメソッド

Rangeクラスに使える。イテレーションする。

for i in 1...5
    puts i
end

(1...5).each do |i|
    puts i
end

は同じ。

times, upto, downtoメソッド

いずれもIntergerクラスのメソッドで、for文の代わりみたいなのができる。それぞれ1単位での繰り返し、インクリメント、デクリメントみたいな感じ

stepメソッド

IntergerクラスやFloatクラスの上位クラスであるNumericクラスのメソッドで、for文の代わりみたいなのができる。limitを越えるまでオブジェクトにstepを加算する感じの使い方

loopメソッド

Kernelクラスのメソッドで、無限ループする。抜けるにはたぶんbreakしかない

next

いわゆるcontinue

redo

nextはそのタイミングで次のループに移るやつだが、redo今の処理の初めに戻る

Array.nitems

rubyでは配列のサイズはArray.lengthで取れるが、これは要素nilを含んだものになる。含まない場合はArray.nitemsを使う

アクセスメソッド

setter, getterのリテラルみたいなもん。
attr_reader:変数名, attr_writer:変数名, attr_accessor:変数名みたいな感じでやる。

その他

$から始まるのはグローバル変数@から始まるのはインスタンス変数、@@から始まるのはクラス変数。

メソッド名には最後に?をつけてもいいことになっている(構文自体に意味はない)。条件演算子でも使われるのでちゃんと空白あける。

インスタンスメソッドは.(ドット)だけでなく::(コロン二つ)でも使える

インストール

公式のやつを参考に。

  1. デフォルトのバージョンを確認

    ruby -v

    2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]

    なるほど。

  2. brew install rbenv なんか依存しているopensslruby-buildも一緒にインストールされる

  3. rbenv init 初期設定に必要らしい。打ち込んだら、

    ``` # Load rbenv automatically by appending # the following to ~/.bash_profile:

    eval "$(rbenv init -)" ```

    などと出て、これ自動でやってくれてるのかなとcat ~/.bash_profileしたら無かったので手動でやりました。

  4. echo 'eval "$(rbenv init -)"' >> ~/.bash_profile これでちゃんと設定完了かな

  5. 設定を反映するためターミナル再起動。もしくはsource ~/.bash_profile 自分は公式に沿って再起動しましたが。
  6. ちゃんと設定できてるか検証のためcurl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash すると、なんか大丈夫そうです。

  7. 実際にいれてみます。ここからはinstalling-ruby-versionsを参考に。 rbenv install -lでrbenvで設定できるrubyのバージョンの一覧がでるらしいのでやってみると、jrubyとかmaglev, mrubyとかの文字が並んでいます。調べるとJavaによる実装だったり組込み用だったりするらしい。そういうのも一元的に扱える懐の深さがすごい。一覧は

    .
    .
    .
    2.5.0-rc1
    2.5.0
    2.5.1
    2.6.0-dev
    2.6.0-preview1
    2.6.0-preview2
    jruby-1.5.6
    jruby-1.6.3
    .
    .
    .

となっていたので、公式の最新verは2.5.1っぽい。

rbenv install 2.5.1

それなりに時間がかかる。

チュートリアル

公式ドキュメントのチュートリアル20分ではじめるRuby」をやってみます。インタラクティブモードから入り、クラスやら条件分岐やらを経て.rbファイルを作ってrubyコマンドで実行というところまで。プログラミング用語とか文法とか概念は特に詳しく説明されてないのでまったくの初心者は20分ではきかないと思われる。 Ruby入門はインストールは最新版をおっているが、チュートリアルの中身が古い箇所がある($KCODEruby1.9で廃止になっている、等)。ざっと読んで概要をつかんでおく。

文化

まだわからん

参考

rbenv + ruby-build はどうやって動いているのか

rbenvは何をしているのか?

Library Rake

Ruby 2.5.1 リリース