現在、Ruby on railsを覚えるためにRubyの勉強中です。
普段の仕事ではシェルスクリプトやバッチスクリプト、たまにVBAを書く程度です。
簡単な物なら、PHP、HTML、CSSも読み書き出来たりしますが本職にするにはまだ遠い実力です。
そこで備忘録も兼ねてRubyの勉強方法について紹介したいと思います。
ひと昔前は、Perlの方が使い手が多かったような気がしますが、今ではPythonとRubyの方が圧倒的に需要が高いです。
Pythonは主にビッグデータ系が飛躍的に伸びたため、演算に強いPythonは一気に技術者を増やした印象です。
RubyはChefの普及もそうですが、やはりRuby on railsというフレームワークが出てきてさらに注目度が上がったように思えます。
私もWebサイトをRuby on railsで構築したいと思いRubyの学習をスタートしています。
前座はこのくらいで早速紹介していきたいと思います。
同じようにRubyを学習する人の役に立てばと思います。
Rubyの学習をする
まずは学習するための教材です。
私はProgateの有償アカウントとCODEPREPを利用しています。
先にProgateを終わらせてから、Ruby on railsの演習に入る前にCODEPREPで学習した知識の振り返りや、Progateでは出てこない問題などもあるので知識を補てんしています。
プログラムもスクリプトも書かない時間が長くなるほど、忘れてしまい身につかないのが難点です。
本業はインフラエンジニアですが、アプリケーションにシフトしていきたいと思っています。
ProgateのRuby
Progateではたくさんのプログラミング言語やITの学習が出来ます。
有償アカウントを利用しているのも、サービス全てを受けられるようにするためで、2019年10月より増税で少し価格ががりますが約月額1000円なので苦でもありません。
とても優しい内容でWebですべての学習が行えます。
逆に言えば、優しすぎて少し物足りなさも感じると言うのが本音でしょうか。
しかし、知識ゼロであれば基礎の基礎は全て学習することが出来ます。
これはRuby教材だけに言える事ではないですね。
CODEPREP
完全に無料で学習できる貴重なサイトがCODEPREPです。
内容としてはProgateよりも難易度は少し高くなる気がします。
問題に対するヒントや、課題を解くためのスライドを見つけないといけません。
CODEPREPで課題を解くときは、結構、構文やメソッドをググったりします。
CODEPREの演習問題は回答が間違っていなければOKなパターンもあり教材外の方法でも成否判定が出来たりします。
ただし、「ディスカッション」で利用者のコードや質問、回答が見れてしまうので、ディスカッションの見過ぎは注意ですね。
ほぼカンニングに等しいので、考える力を養うなら見ない方がいいです。
2サイト使うメリット
2つの学習サイトを使うと、足りない知識が補えたり、それぞれの教材で出てくる問題も少し違っているので知識の幅も少し変わってくる印象です。
特にCODEPREPの方は知識の確認にはかなり有効かなと思います。
全ての演習を終わらせればそれなにりに自分でコードを書けると思います。
あとは自分のやりたいことがRubyで出来るか確認です。
ここが結構重要で、やりたいことがないと少し目標設定が難しくなります。
Rubyコードの確認
Rubyのコードは私の場合は「Visual Studio Code」か「Linux」で確認しています。
どちらかと言えば、コードはVisual Studio Codeで書いてLinuxで実行かもしれません。
楽に確認できるのはLinux環境です。
実行権限を付けて、シェルスクリプトと同じようにパスを指定すれば使えます。
参考までに記載しておきたいと思います。
#!/usr/bin/ruby
puts "Hello World!"
これを./ファイル名で実行すればHello World!が表示されます。
Rubyの基礎サンプルコード
実際にCODEPREPの演習ベースですが、学習して書いたサンプルコードを紹介していきます。
簡単な部類なので、ほとんどの人が同じコードになるかもしれません。
また、人によって書き方の違いなどもあるので、ご参考までに
Ruby 配列・Hash・Class 操作演習(1-3)
配列の中央値を返すインスタンスメソッドのコーディングです。
array.lengthで配列の数をカウントし、今回は条件は偶数の場合は-1した要素を取り出すため、要素数を2で割りif分で分岐させています。
def middle(array)
count = array.length
rem = count % 2
if rem == 0
index = (count / 2) - 1
return array[index]
elsif rem != 0
index = (count / 2)
return array[index]
end
return array[0]
end
余りが無い場合は、偶数となるのでindexの値から1を引いた要素を返します。
この課題くらいであれば、Progateを終えていれば比較的簡単に書く事が出来ます。
Ruby 配列・Hash・Class 操作演習(1-7)
この課題は、クラスでInitializeメソッドを利用する演習です。
インスタンスの生成など初期化時に速さを設定し、インスタンスメソッドtimeを実行する際に距離を引数にして実行し、時間を計算して返します。
class Car
attr_accessor :speed
def initialize(speed)
@speed = speed
end
def time(distance)
if speed != 0
return distance / speed
end
end
end
簡単な演習で、これもProgateできちんとInitializeメソッドを学習していれば書けました。
Ruby 配列・Hash・Class 操作演習(2-2)
ここではArrayクラスの継承です。
継承したクラスをMyArrayとして、配列の要素をインスタンスメソッドmultiplyにて引数nの数だけ配列の要素を乗算して返します。
class MyArray < Array
def multiply(n)
self.map{|e| e * n}
end
end
これも簡単で、継承した配列をselfメソッドで参照してmapで配列を操作します。
個人的にはもっとmap,reduceを使いこなせるようになった方が良いと思っています。
まとめ
ProgateとCODEPREPで基礎的なコードは書けるようになりました。
他にも実用的なメソッドなどをたくさん覚えていけば、何とか使いこなせそうな気もします。
どちらも教材がしっかりしており、手を動かして学習する分机上での学習よりは知識が身につやすいですね。
Rubyの勉強をしたい人や始めたい人、同じようにゆくゆくはRailsでサイトを作りたい人は参考にして頂ければと思います。
日頃から勉強する時間を確保して、毎日少ない時間でも勉強していければと思います。