Rails Tutorialで学べることメモ-第4章-
Rails Tutorial を改めてしっかりやり直してのメモ第 4 章編
https://railstutorial.jp/chapters/rails_flavored_ruby?version=7.0
知識
rails console と irb
Rails のコンソールは irb(Interactive RuBy)の拡張のため、Ruby の機能も全部使える。
- Ctrl+C:コンソールで実行中の捜査の中止
- Ctrl+D:コンソールそのものの強制終了
Rails の環境
Rails はデフォルトで 3 つの環境を定義している。console にアクセスすると development 環境が立ち上がる。
- development
- test
- production
Ruby の API ドキュメント
Ruby の基本的なオブジェクト
文字列
"foo"
のようにダブルクォート"
で囲んだテキストを文字列リテラルと呼ぶ。
**式展開(interpolation)**という方法では宣言的に文字列の結合が行える。
name = "sake master"
"Hello! #{name}"
=> "Hello! sake master"
シングルクォート'
でも文字列は定義できるが、式展開はできない。
nil
何もないことを表す Ruby の特別なオブジェクト
Ruby においてオブジェクトそのものの論理値がfalse
になるのは、false
自身とnil
のみ。
つまり、他の言語では一見 false になりそうな値もtrue
になる。
>> !!false
=> false
>> !!nil
=> false
>> !!""
=> true
>> !!0
=> true
メソッド
Ruby のメソッドには暗黙の返り値がある。
つまり、メソッドで最後に評価された式の値が返り値になる。
モジュール
関連するメソッドをひとつにまとめるための仕組み。
モジュールにまとめた処理はinclude
メソッドを使って読み込むことができる。
このように、モジュールに処理をまとめてinclude
で読み込むことをミックスイン(mixed in)と呼ぶ。
Rails は規約により、helper モジュールを勝手に読み込むのでinclude
を明示的に書く必要がない。
ブロック
Ruby の慣習として、短い 1 行のブロックは{ }
、複数行のブロックはdo...end
記法で記述される。
単にブロック内変数に対してメソッドを呼び出すだけの場合、symbol-to-proc と呼ばれる記法も利用される。
これは元々 Rails の記法だったが、人気が出たので Ruby に逆輸入されたらしい。
%w[a, b, c].map { |c| c.upcase } # 通常のブロックの記法
%w[a, b, c].map(&:upcase) # symbol-to-proc記法
ハッシュ
ハッシュのキーには文字列とシンボルのどちらでも利用できる。
Ruby では一般的にシンボルの方が利用される。文字列は 1 文字ずつの比較でキーマッチ処理が必要だが、シンボルは一度に全体を比較できるらしい。
参考にあったこの記事は必要な時に見返したい。→Ruby にシンボルがある理由(翻訳)
string_hash = { "name" => "Taro", "age" => 20 }
symbol_hash = { :name => "Taro", :age => 20 }
symbol_hash2 = { name: "Taro", age: 20 }
リテラル
Ruby はあらゆるものがBasicObject
というクラスを継承している。
文字列や数値も例外ではないが、これらは一般的なインスタンス生成の命令new
なしに記述できる。
このようなnew
メソッドなしに直接記述できる値のことをリテラルと呼ぶ。
組み込みクラスの変更と Rails
一般的に独自機能を持ったクラスを作るには、1 から実装するか継承を利用してカスタムクラスを実装する。
しかし、Ruby のクラスはオープンで変更可能であるという特徴がある。
Rails は Web アプリケーションフレームワークとして必要な独自メソッドを、これを利用して実装している。
Rails のクラス
例えば Controller はコード内で一度もnew
していないが、機能している。
Rails はこのような処理を隠蔽しているので、Ruby の一般的な知識とはある意味分けて習得が必要になる。
細かな知識
- コメントの
#
はアッシュマークやオクトソープと呼ばれる - 配列の数値が 0 始まりのことを「ゼロオリジン」という
- オブジェクト自体を変更する「破壊的メソッド」には Ruby の慣習で
!
がつく - クラスメソッドは
.
、インスタンスメソッドは#
を用いて表現されることが多い - ハッシュ引数を使って一気に情報を渡すテクニックをマスアサインメントと呼ぶ
まとめ
Ruby の基本的な文法や考え方を整理しつつ、Rails 独特の部分がわかる章だった。
リテラルのような他言語でも使われ得る言葉の意味や Ruby の組み込みクラスがオープンであることなど、Rails に止まらない基礎知識が得られる。