Railsのエラーメッセージの日本語化

Railsにおけるエラーメッセージなどを日本語化してみました。

少し手こずってしまったのでメモとして残しておきます。

Railsのエラーメッセージなどを日本語化する方法

まずは、エラーメッセージなどのコンテンツの日本語訳ファイルが必要になります。

ファイルは自作も可能ですが、GitHubrails-i18nリポジトリに配布されていますので、そちらを利用するほうが手っ取り早いです。

ターミナルでwgetコマンドを用いてダウンロードします。

wgetコマンドのインストール

早速wgetコマンドを使おうとしましたが、Macではwgetコマンドが使えないそうです。

そのため、Homebrewを使ってwgetコマンドをインストールします。

% brew install wget

インストールできたら、wget -hを実行します。

% wget -h
GNU Wget 1.21.1, 非対話的ネットワーク転送ソフト
使い方: wget [オプション]... [URL]...

長いオプションで不可欠な引数は短いオプションでも不可欠です。

スタートアップ:
  -V,  --version                   バージョン情報を表示して終了する
  -h,  --help                      このヘルプを表示する
… 略 …

するとヘルプが表示され、コマンドが使える事を確認できました。

日本語翻訳ファイルのダウンロード

wgetコマンドが使えるようになったので、下記コマンドでファイルをダウンロードします。

●そのファイルの保存先はconfig/locales/ja.ymlです。

●日本語化したいアプリのディレクトリに移動してから、コマンドを実行します。

% wget https://raw.githubusercontent.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml --output-document=config/locales/ja.yml

アプリケーションの設定

ダウンロードが完了し、config/locales/ja.ymlに保存できたら、デフォルトで日本語のコンテンツをを使うようにアプリケーションの設定を変更します。

エディタでconfig/initializers/locale.rbというファイルを作成して、下記のように記述します。

Rails.application.config.i18n.default_locale = :ja

これで完了です。

参考文献

https://wayohoo.com/article/5242

https://webkaru.net/dev/mac-wget-command-install/

https://qiita.com/shimadama/items/7e5c3d75c9a9f51abdd5

https://k-koh.hatenablog.com/entry/2020/01/23/112106

https://www.atmarkit.co.jp/ait/articles/1606/20/news024.html

rails newでのバージョン指定エラー

Railsの環境構築が完了し、無事サーバを起動することができました。

しかし、よく見るとRails version 5.2.5で作成したいのに、Rails version 5.2.6になっていました。

エラー内容

書籍を進めるにあたり、任意のプロジェクト内において、railsのバージョン指定してrails newコマンドを実行したが、指定したものと異なるバージョンでインストールされてしまいました。

実行したコマンド

% rails _5.2.5_ new taskleaf 

その後サーバーを起動すると、Rails version 5.2.6が適用されていました。

確認

インストール済みのrailsバージョンを確認してみます。

% rails -v
Rails 5.2.6

やはり、5.2.6になってしまっています。

一応、使用できるバージョンも確認してみました。

% gem list rails
*** LOCAL GEMS ***

rails (5.2.6, 5.2.5)

今回使用したいバージョン5.2.5があることが確認できました。

原因

原因はGemfileです。

Gemfileにはインストールするrailsのバージョンが記載されています。

rails newコマンドを実行すると、Gemfileも自動的に読み込まれてしまいます。

作成したアプリのGemfileを確認すると、

gem ‘rails’, ‘~> 5.2.5’

となっていました。

これは「5.2.5以上のバージョンをインストールする」

という意味なので、結果的にバージョン5.2.6がインストールされていました。

対策

Gemfileを読み込ませずに「rails new」

※自分の場合は一度、作成したアプリを削除しました。

まずはGemfileを読み込ませずにrails newします。

下記の様に、—-skip-bundleと記述します。

% rails _5.2.5_ new taskleaf --skip-bundle

Gemfileを編集

変更前) gem 'rails', '**~>** 5.2.5'
変更後) gem 'rails', '**=** 5.2.5'

Gemfileを開いて、インストールするrailsのバージョンを5.2.5に固定します。

bundle installを実行

作成されたアプリのディレクトリに移動して、bundle installを実行します。

% bundle install

バージョンを確認

指定したバージョンをインストール出来ているか確認します。

% rails -v
Rails 5.2.5

無事インストール完了です。

サーバを起動し、ブラウザも確認してみるとRails version 5.2.5になっていました。

参考文献

https://qiita.com/nozomi_nozomi/items/01f9471c1c82faf63cb3

https://techtechmedia.com/rails-new-version-error/

rbenvを使ったRubyとRailsの環境構築

自分の環境

macOS big sur 11.4

zsh

Ruby 2.6.3

注意点

rbenvのインストールは自分のターミナルのシェルがbashzshかでコマンドが変わります。

そのため、まずは自分のターミナルのシェルの種類を確認します。

下記コマンドで確認出来ます。

% echo $SHELL

実行すると、

# bashなら
/bin/bash

# zshなら
/bin/zsh

と表示されます。

zsh環境でのrbenvのインストール方法

rbenvとはRubyのバージョン管理を切り替えるツールのことです。

①rbenvのインストール方法の選択

rbenvのインストール方法は、Githubから直接ダウンロードしてインストール方法と、MacOSのパッケージマネージャーであるHomebrewを使ってインストールする方法があります。

今回はこの、Homebrewを使ってrbenvをインストールしました。

②Homebrewをインストール

まずはHomebrewをインストールします。

インストール方法はこちら

③Homebrewをアップデート

まずはHomebrewをアップデートします。

下記コマンドでアップデートできます。

% brew update

最新版の場合、

% brew update
Already up-to-date.

と表示されます。

また、バージョン確認は下記コマンドで確認出来ます。

% brew -v
Homebrew 3.1.9
Homebrew/homebrew-core (git revision a589318ffa; last commit 2021-06-03)

④Homebrewでrbenvをインストール

Homebrewのインストールとアップデートができたら、rbenvとruby-buildをインストールしていきます。

ruby-buildとは、UNIX系のシステム上で異なるバージョンの、Rubyコンパイルしインストールするための、 rbenv installコマンドを使えるようにするプラグインです。

下記コマンドで、rbenvとruby-buildをインストールできます。

% brew install rbenv ruby-build

インストールできたら下記コマンドで確認します。

% rbenv -v
rbenv 1.1.2

% ruby-build --version
ruby-build 20210526

正しくインストールできていたら、それぞれのバージョンが表示されます。

これでrbenvとruby-buildのインストールか完了です。

rbenvでRubyをインストール

rbenvがインストールできたらRubyをインストールしていきます。

①インストールしたいRubyバージョンがあるか確認

下記コマンドで確認できます。

% rbenv install -l

②欲しいバージョンのRubyをインストール

今回はRuby 2.5.1が欲しいので、下記のようにrbenv installコマンドでバージョンを指定してインストールします。

% rbenv install 2.5.1

③globalバージョンを指定

バージョンは任意のものを選びます。今回は2.5.1

globalは、コマンドを実行したディレクトリ以外にも指定したrubyのバージョンが適用されます。

% rbenv global 2.5.1

④localバージョンを指定

バージョンは任意のものを選びます。今回は2.5.1

localはカレントディレクトリのみで適用されます。

% rbenv local 2.5.1

また、localバージョンを解除するには下記のコマンドを実行します。

% rbenv local --unset

⑤インストールされたバージョンを確認

無事にRubyがインストールできたら、バージョンを確認します。

% rbenv versions
system
* 2.5.1 
  3.0.1
% ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin20]

RubyGemsのアップデート

RubyGemsとはパッケージ管理ツールです。

gemのインストールや管理に必要なものです。

RubyGemsRubyに同梱されているが、最新バージョンではない可能性があります。

下記コマンドでアップデートします。

% gem update --system

RubyGemsのバージョン確認方法

% gem -v

また、インストール済みのgemを一覧表示するには下記のコマンドで確認できます。

% gem list

Bundlerのインストール

Bundlerとは、gemのバージョンやgemの依存関係を管理してくれるgemです。

必要なgemを一括管理出来ます。

下記のコマンドでインストールします。

% gem install bundler

Gemfileを作成

プロジェクトのカレントディレクトリにGemfileを作成します。

作成したいディレクトリに移動して下記コマンドで作成します。

% bundle init

Railsのインストール

今回はバージョン「5.2.5」をインストールします。

% gem install rails -v 5.2.5

インストールできたら、ターミナルを再起動し、下記コマンドでRailsのバージョンを確認します。

% rail -v
Rails 5.2.5

インストール完了。環境構築終了です!

参考文献

https://qiita.com/zaburo/items/29fe23c1ceb6056109fd

https://mae.chab.in/archives/2612#post2612-4

https://dev.classmethod.jp/articles/build-ruby-environment-by-rbenv/

https://izumii19.hatenablog.com/entry/2019/05/09/125959#Bundler

https://qiita.com/jiko797torayo/items/0cf40f100b5e3354fd67

配列で便利なメソッド

 

頻繁に出てくるメソッドたちですが、基礎を抑えるために簡単にまとめました。

今後も新しく学んだ配列メソッドを追記していきます。

mapメソッド

mapメソッドとは、配列やハッシュの要素に対して、ブロック内の処理を繰り替えし、作成された要素で新たに配列を作るメソッドです。

元の配列は上書きされません。

mapメソッドの書き方

do endを用いた書き方

配列.map do |変数|
	変換処理
end

{}を用いた書き方

配列.map{|変数|変換処理}

使用例

result = [100, 200, 300]
p result.map{|x|x*2} 
#=> [200, 400, 600]

p result 
#=> [100, 200, 300]

配列の各要素100, 200, 300が変数xに代入され、変数処理x*2が実行されます。

その結果で新たに配列を作成し、変数resultへ代入しています。

また、p resultで元のresultの配列が書き換わっていない事がわかります。

また、下記の様に要素を他のオブジェクトに変換する時も使えます。

result = [10, 20, 30]
p result.map{|x|"#{x}円"} 
#=> ["10円", "20円", "30円"]

p result 
#=> [10, 20, 30]

変換xを使って、文字列へ変換しています。

map!メソッド

元の配列の値を処理結果に書き換えます。

使用例

fishes = ["tuna", "salmon", "whale"]
p fishes.map!{|fish|fish.length} 
#=> [4, 6, 5]

p fishes 
#=> [4, 6, 5]

元の配列も書き換わっていることがわかります。

joinメソッド

joinメソッドは配列の要素を結合して一つの文字列にできるメソッドです。

配列の各要素を文字列に変換し、引数(メソッドへ渡すオブジェクト)を区切り文字とします。

使用例

puts ["マグロ", "サーモン", "ハマチ"].join("と")
#=> マグロとサーモンとハマチ

splitメソッド

splitメソッドは文字列を区切り文字で分割して配列にするメソッドです。

区切る文字は引数で渡します。

使用例

p "マグロ,サーモン,ハマチ".split(",")
#=> ["マグロ", "サーモン", "ハマチ"]

p "マグロとサーモンとハマチ".split("と")
#=> ["マグロ", "サーモン", "ハマチ"]

それぞれ引数で渡した文字で1つの文字列を分解して、3つの文字列を作っています。

sortメソッド

sortメソッドは配列の要素を並び替えるメソッドです。

配列の要素が数値のときは小さい順に並び替えられます。

文字列のときはabc順に並び替えられます。

使用例

p [1, 6, 2].sort
#=> [1, 2, 6]

p ["tuna", "salmon", "saury"].sort
#=> ["saury", "salmon", "tuna"]

文字列は先頭の文字で比較し、同じであれば2文字目で比較します。

配列の要素を逆順にする

要素を逆順にするにはreverseメソッドを使います。

p [1, 6, 2].reverse
#=> [2, 6, 1]

また、文字列も逆順にできます。

p "マグロサーモンサンマ".reverse
#=> "マンサンモーサログマ"

大きい順にするには

大きい順にするには、sortメソッドと、reverseメソッドを用います。

p [1, 6, 2].sort.reverse
#=> [6, 2, 1]

sampleメソッド

sampleメソッドとは配列からランダムで要素をひとつ取り出して返すメソッドです。

また、引数に数値を指定すると、その数だけ要素を選択して配列として返します。

sampleメソッドの書き方

配列オブジェクト.sample

配列オブジェクト.sample(n)

使用例

p ["マグロ", "サーモン", "サンマ"].sample
#=> "サーモン" ※ランダム

p ["マグロ", "サーモン", "サンマ"].sample(2)
#=> ["サーモン", "マグロ"] ※ランダム

shuffleメソッド

sampleメソッドと似たメソッドとしてshuffleメソッドがあります。

shuffleメソッドは配列の要素をランダムに並び替えるメソッドです。

p ["マグロ", "サーモン", "サンマ"].shuffle
#=> ["サーモン", "サンマ", "マグロ"] 

・sampleメソッドは配列からランダムに要素を取得する

・shuffleメソッドは配列の要素をランダムに並び替える

sizeメソッド

sizsメソッドは配列の要素の数を取得するメソッドです。

使用例

puts ["マグロ", "サーモン", "サンマ"].size
#=> 3

配列から、3つの文字列(要素数)を返しています。

Rubyにおける配列

配列

配列とは複数のオブジェクトをまとめる部品です。

配列の書き方

●[ ]の中にカンマ区切りで書きます。

[オブジェクト, オブジェクト]

使用例

●変数に代入することもできます。

fishes = ["マグロ", "サーモン", "ハマチ"]

※配列を代入する変数は複数形にします。

要素の取得

[n],[-n]で要素を取得できます。

fishes = ["マグロ", "サーモン", "ハマチ"]
puts fishes[0] #=> "マグロ"
puts fishes[-1] #=> "ハマチ"

●先頭はfirstメソッド、末尾はlastメソッドでも取得できます。

fishes = ["マグロ", "サーモン", "ハマチ"]
puts fishes.first #=> "マグロ"
puts fishes.last #=> "ハマチ"

要素の追加・削除

要素の追加

●配列の先頭に要素を追加する場合は、unshiftメソッドを使います。

fishes = ["マグロ"]
fishes.unshift("タイ")
p fishes #=> ["タイ", "マグロ"]

●配列の末尾に要素を追加する場合は、pushメソッドを使います。

fishes = ["タイ", "マグロ"]
fishes.push("ハマチ")
p fishes #=> ["タイ", "マグロ", "ハマチ"]

要素の削除

●配列の先頭から要素を削除する場合は、shiftメソッドを使います。

fishes = ["タイ", "マグロ", "ハマチ"]
fishes.shift
p fishes #=> ["マグロ", "ハマチ"]

●配列の末尾から要素を削除する場合は、popメソッドを使います。

fishes = ["マグロ", "ハマチ"]
fishes.pop
p fishes #=> ["マグロ"]

配列の繰り返し(ループ)処理

●eachメソッドとブロックを使うと、配列の全要素を繰り返し処理できます。

●各要素が変数に代入されます。

eachメソッドの書き方

配列.each do |変数|
	繰り返し実行する処理
end

使用例

fishes = ["マグロ", "サーモン", "ハマチ"]
fishes.each do |fish|
	puts fish
end
#=> マグロ
# サーモン
# ハマチ

ループを途中で終わらせる break

breakを使うと、ループのブロック中の処理を途中で終わらせます。

●ループそのものを終わらせてeach文のendまで飛びます。

fishes = ["マグロ", "サーモン", "ハマチ"]
fishes.each do |fish|
	break if fish == "サーモン"
	puts fish
end
#=> マグロ

変数fishに各要素が代入されており、要素"サーモン"が代入されたときにbreakが実行されます。したがって、ループが強制的に終了し、endまで処理が飛びます。結果的に"マグロ"だけが表示されます。

ループ処理の次の回に進む next

●nextを使うと、ループ処理のその回を終わらせて、次の回へ進ませます。

●ループそのものは終わらずに次の代入へ進みます。

fishes = ["マグロ", "サーモン", "ハマチ"]
fishes.each do |fish|
	next if fish == "サーモン"
	puts fish
end
#=> マグロ
# ハマチ

変数fishに"サーモン"が代入された時点で、nextが実行されます。したがって、puts fishまで行かずにその回は終了し、"ハマチ"の代入の回へ進みます。結果的に"マグロ"と"ハマチ"だけ表示されます。

Rubyにおける条件分岐 unless文

unless文とは

条件分岐で使うif文とは逆の意味となります。

unless文の書き方

unless 条件式

 実行する処理

end

または

実行する処理  unless 条件式

使用例

●条件を満たさないときに実行されます。また、条件を満たさないときは処理を実行しません。

x = 100
unless x == 500
	puts "100ではありません。"
end
#=> 100ではありません

上記の場合、条件x == 500が満たされていないので、条件式以降~endまでの処理が実行されて、"100ではありません"が表示されます。

Rubyにおける条件分岐 if文

if文とは

if文とは条件を満たしたときに処理を実行させます。

if文の書き方

if 条件
	条件が成立したときの処理
end

使用例

●ifの条件を満たしたときは、ifの次の行からendの前の行までの処理が実行されます。

score = 90
if score > 80
	puts "Good!"
end
#=> Good!

上記の場合、条件scoreが80以上のときにendまでの処理が実行されて、Good!が表示されます。

●ifの条件が満たされなければ(nilまたはfalseのとき)endまでの処理は行われず、endの次の行に行きます。

score = 50
if score > 80
	puts "Good!"
end
#=> 何も実行されません。(エラーにはならない)

●条件がnilまたはfalse以外のときは満たします。

score = 50
if score 
	puts "Good!"
end
#=> Good!

後置きif(if修飾子)

後置きifを使うと、ifからendまでの式を一行で書くことができます。

score = 90
	puts "Good!" if score > 80
#=> Good!

また、endを書く必要がありません。

条件を満たしたときの処理が一行であるときに使うと、コードが短く読みやすく書けます。

条件を満たさないときの処理 else

条件を満たしたときと、満たさなかったときの2つに処理を分岐させることができます。

else文の書き方

if 条件
	条件を満たした場合の処理
else
	条件を満たさない場合の処理
end

使用例

●ifの条件を満たした場合ifの次の行から、elseまでの処理を実行します。

●ifの条件を満たさない場合はelseからendまでの処理を実行します。

score = 50
if score > 90
	puts "よくできました"
else
	puts "がんばりましょう"
end
#=> がんばりましょう

複数の条件の組み合わせ

aまたはb ||

if 条件1 || 条件2
	条件を満たしたときの処理
end

aかつb &&

if 条件1 && 条件2
	条件を満たしたときの処理
end

複数の条件から1つに分岐

条件によって分岐させる方法はif文の他にcase文もあります。

case文

●変数の値によって複数の条件から一つに分岐する処理です。

「二択のときはif文」

「三択以上のときはcase文」

という様に使い分けます。

case文の書き方

case 変数
when 候補1
	変数の値と候補1が一致するときの処理
when 候補2
	変数の値と候補2が一致するときの処理
・
・
・
end

使用例

color = "赤"
case color
when "赤"
	puts "赤信号です"
when "青"
	puts "青信号です"
when "黄"
 puts "黄色信号です"
end
#=> 赤信号です

●どの候補に合致しない場合の処理 elseとの組み合わせ

color = "白"
case color
when "赤"
	puts "赤信号です"
when "青"
	puts "青信号です"
when "黄"
	puts "黄色信号です"
else
	puts "ありません"
end
#=> ありません