プログラミング備忘録

プログラミングの学習状況をメモしています

16日目

今日の学習

Ruby

プロを目指す人のためのRuby入門

こちらの本で学習。今後、当ブログではRuby本といえばこの本を指すことにする。

第2章の、Rubyの基礎を理解するという章を読み進めているが、小ネタ集を見ているような気分になるほど、知らない知識だらけで驚いた。

メソッド呼び出しの表記

オブジェクトの内容を文字列化するメソッドであるto_sメソッド

1.to_s  #-> "1"

今まで、引数がない場合はこのように記述をしてきたが、

1.to_s()  #-> "1"

このように、かっこがついていても同じような意味合いを持つ。

JavaScriptの学習時に、引数を渡さない場合もかっこを書いていたが、Rubyは単純にかっこが省略できるだけのようだ。

また、かっこの中に引数を入れる形が馴染み深いが、

オブジェクト.メソッド(引数)

オブジェクト.メソッド 引数

引数をかっこに入れていなくても良いということを初めて知った。

かっこに入れる方が分かりやすいし、いまだに後者の書き方を見かけたことはないので、超重要な知識ではないかもしれないが、頭の片隅にしっかり入れておきたい。

数値には_を含めることができる

price = 10000000
#ぱっと見では位が分かりにくいが、_を含めることで区切ることができる
price = 10_000_000
#_は無視される

戻り値

Rubyでは、最後に評価された式がメソッドの戻り値になるという特徴がある。

他の言語では、returnと書いて戻り値が出てくるようにしていたのだが、Rubyだとそれがないため、いまいち戻り値の概念をしっかり理解できていないように思う。

プログラムにおける「評価」という単語も、やや理解が難しい。入力された値の計算結果という認識で合っているだろうか。

テストの自動化

プログラムを作動させて、期待通りの出力をしているかどうか、実行結果を自動でチェックしてくれる機能。

Minitestを利用したテストの自動化を学習した。

テスト用のコードファイルを作成し、requireを使用してMinitestを利用する。

Minitestが提供しているassert_equalメソッドをはじめとした、様々な検証メソッドを用いて、期待する結果とテスト対象になるものを比較する。

有名なFizzBuzzで検証をすると、

require 'minitest/autorun'

class FizzBuzzTest < Minitest::FileTest
  def test_fizz_buzz
    assert_equal '1', fizz_buzz(1)
    assert_equal '2', fizz_buzz(1)
    assert_equal 'Fizz', fizz_buzz(3)
  end
end

このようになる。

検証メソッド 期待する結果, 検証したいもの

とする。

他にも、RSpectest-unitというテスティングフレームがある。

Ruby on Rails

deviseでログイン機能を実装

deviseというgemを使って、ログイン機能を実装してみる。

deviseを利用する場合は、modelを作成する際に、

rails g devise User

と入力するので、間違えないように注意する。

user_signed_in?のように、deviseを導入しないと使えないメソッドを利用して、ログイン時、非ログイン時の表示を変えたりする。

user_signed_in?は、ログインしているかどうかを真偽値で返してくれるため、if文に利用するとよい。

他にもauthenticate_user!メソッドがある。

これは、ログインしていないときにはトップページにリダイレクトさせるメソッドで、before_actionと組み合わせて使用することで、ログインしていないときにアクセスされると困るページにアクセスできないようにすることができる。

i18nを利用して、日本語化する

他言語に対応できるgem、rails-i18n, devise-i18nを利用して、deviseで作られる英語のページを日本語化する。

Gemfileに、

gem 'rails-i18n', '~> 6.0'
gem 'devise-i18n'

と記述する。(Rails 6なので、6.0で記述)

bundle installを実行後、configディレクトリにあるapplication.rbファイルに、

module DeviseSample
  class Application < Rails::Application
   ....略...
    config.i18n.default_locale = :ja

と設定することで、日本語にすることができる。

タイムゾーンを変更したい場合も、以下のように記述をする。

config.time_zone = 'Asia/Tokyo'

i18nを導入し、これを利用して新しくビューファイルを作成する場合は、i18nに対応したコマンドを入力しなければならないことに注意。

rails g devise:i18n:views

今日のやらかし

text_fieldにして、テキスト入力をさせたい部分を、間違えてemail_fieldにしてしまっていた。

入力形式に気をつける。