その他

初心者のためのRuby道場

その他
この記事は約8分で読めます。

押忍! ここはRuby道場だ!
最近のエンジニアは、やれTypescriptだのなんだのと軟弱(※個人の感想です)でダメだ!
ここはひとつ、漢の言語(※個人の意見です)であるRubyで精神を鍛え直してくれる!

Rubyってどんな言語?

うむ、基礎から入ろうといういい質問だな!
日本生まれのオブジェクト指向言語だ! Ruby on RailsというWebフレームワークが有名で、様々なサイトで使われているぞ。例えば、クックパッドやfreee会計、かつてはTwitter(※現X)もRuby on Railsで動いていた。
また、gemと呼ばれるライブラリが充実しているのもRubyの魅力だな。DBへの接続やAPI通信なども、SQLや非同期通信について詳しくなくても簡単な書き方で実装できるgemがある。そういった機能実装部分以外にも、コードを静的解析してくれるgemのように、開発を助けてくれるgemも存在する。

とりあえずインストールしようと思うんだけど……

やる気があって大変良いぞ! プログラミングはまず手を動かすところからだ!
MacであればRubyがデフォルトでインストールされていると思うが……Homebrewなどのパッケージ管理ツールを利用して、最新版をインストールするのが一番いいだろう。
なに? 開発を始めたばかりでHomebrewも入っていない? ならばまずは、ターミナルで下のコードを実行して、Homebrewをインストールしてくれ。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

インストールできたか? 以下のコードで、Homebrewのバージョンが出たら成功だ。

brew -v

そうしたら、今度はいよいよRubyのインストールだ。まずはRubyのバージョン管理ツールである「rbenv」をインストールするぞ。

brew install rbenv ruby-build

rbenvがインストールできたら、以下のコマンドでrbenvの設定をする。

echo 'eval "$(rbenv init -)"' >>  ~/.zshrc
source ~/.zshrc

これでrbenvの設定は完了だ。次に、インストールできるRubyのバージョンを確認していく。

rbenv install --list

ズラッとバージョンが並んだと思う。とりあえず現在(※23/12/3)最新のバージョン3.1.3をインストールしよう。以下のコマンドを実行してくれ。

rbenv install 3.1.3

これでインストールは完了だ。ただ最後にもうひとつやっておかねばならないことがある。
利用するRubyのバージョンを、デフォルトでインストールされているRubyから、このインストールした最新バージョンに変更してやらねばならん。

rbenv global 3.1.3

これを実行すれば、Ruby 3.1.3が実行可能な環境となる。どうだ、できたか?

なにかお手軽に文を書かせて!

ははは、そうはしゃぐな。だがいいだろう、せっかくだからirbのことを教えてやろう。
ターミナルで、以下のコマンドを実行しろ!

irb

ターミナルのプロンプトがirb(main):001:0>のような形に変化したのがわかるか? これは、irb(Interactive Ruby)といって、ターミナル上でRubyを実行できる機能だ。試しに、Hello, World!と表示させてみるか。JavaScriptでいうところのconsole.logはRubyではputsという。irbの中で以下のコードを実行してくれ!

puts 'Hello,World'

どうだ? 画面にHello,World!と表示されたか?
そしてその下に=>nilという表示が見えると思うが、これは返り値だ。簡単なコードはこうやって実行してみることができると、覚えておいてくれ。

実際に動くプログラムを見てみたい!

そうこなくてはな! というわけで、吾輩が問題を用意した。
FizzBuzz問題の改訂版、ナベアツ問題だ! それを解くプログラムを実際に書いていくのを、見て言ってくれ。

問題:1から100までの数字を出力し、その際に3の倍数か3を含む数字のときは、アホになれ。

まずは、1から100までを出力するプログラムを書こう。

number = 1 # 初期値
# while (条件) do 〜 endで、条件を満たす限り〜の処理を繰り返す
while number <= 100 do
  puts number
  number += 1 # numberに1を加算
end

これをnabeatsu.rbと命名して保存。Rubyプログラムを実行するときは、ターミナルから以下のコマンドを実行すればよい。

ruby nabeatsu.rb

どうだ? まずは1から100までの数字が確認できたと思う。
それでは次は、3の倍数の条件分岐を書くぞ!

number = 1 # 初期値
# while (条件) do 〜 endで、条件を満たす限り〜の処理を繰り返す
while number <= 100 do
    if number % 3 == 0 # 3で割った余りが0なら
        puts number.to_s << '!' # !をくっつけて出力
    else
        puts number
    end
    number += 1 # numberに1を加算
end 

これを実行すると、以下のような結果が得られるはずだ。

1
2
3!
4
5
6!
...

puts number.to_s << '!'の部分だけ少し解説を入れておこう。まず、<<だが、これは文字列を結合するときの演算子だ。+でも代用可能だ。
そして、.to_sだが……これは、型を変換するメソッドのひとつで、String型に変換してくれるものになる。
仮に、puts number << '!'と書くと、`<<': no implicit conversion of String into Integer (TypeError)というエラーが出る。文字列型の’!’を数値型のnumberにくっつけようとした結果、型変換がうまくいかず失敗したぞ、と言われている。なので、numberを一度文字列型にしてやる必要があるので、.to_sメソッドで変換したというわけだ。

ではいよいよ仕上げだ! 3を含む数字でもアホになるようにするぞ!

number = 1 # 初期値
# while (条件) do 〜 endで、条件を満たす限り〜の処理を繰り返す
while number <= 100 do
    if number % 3 == 0 # 3で割った余りが0なら
        puts number.to_s << '!' # !をくっつけて出力
    elsif number.to_s.include?('3') # 文字列として見て3を含むなら
        puts number.to_s << '!'
    else
        puts number
    end
    number += 1 # numberに1を加算
end

これを実行すると……こうだ!

1
2
3!
...
11
12!
13!
...

見事、世界のナベアツをRubyで実装することに成功したな!

少しだけ今回追加したコードの解説をする。まず、elsifだが……これは、if文の分岐を追加できるものだ。なお、elsifを複数使用することもできる。elseifではないことだけ気をつけてくれ。
ついで、number.to_s.include?('3')についてだが……Rubyでは(※他の言語にもあるが)メソッドチェーンといって、あるメソッドの結果をさらに次のメソッドに繋いでいく書き方が許されている。ここでは、numberをまず.to_sで文字列にしたあと、文字列に対して使えるメソッドの.include?を使って「3」という文字が含まれているかどうかを確かめている。

これからRubyをどうやって学べばいいでしょうか?

うむ! Rubyは日本発のプログラミング言語ということもあり、日本語のドキュメントも多い。好きに学べばいいと思うが……いくつかおすすめを教えておこう。

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

Qiitaでユーザーランキング1位(※23年1月時点)の伊藤淳一氏の著書だ。少し難しいかもしれないが、これを一通り理解できればすぐに業務で戦力になれるだろう。氏はQiitaやブログで積極的にRubyの記事をアップロードしているので、そちらにも目を通すとより理解が深まる面もあるだろう。仮に難しすぎだとしても、また後で戻ってきて学習するには素晴らしい本なので、ひとまず買ってみてはいかがか。
https://gihyo.jp/book/2021/978-4-297-12437-3

Ruby on Rails チュートリアル

最初に少し触れた、RailsのチュートリアルをWeb上で行ってくれるサイトだ。RailsのみならずHTMLやCSSの基本からやってくれるので、Web開発が初めてという人も安心だ。AWS上でコードを書くので、開発環境を考えなくても良いのがひとつメリットとなる。ちなみに、買い切り型の講座だ。
https://railstutorial.jp/

ruby-jp

とはいえ一人で学ぶのは不安だ……と貴様の顔に書いてあるな。というわけで、このruby-jpを紹介する。ruby-jpはslack上のRubyコミュニティで、多くのRubyエンジニアたちが参加している。様々なイベントや情報交換が行われているほか、newbieという初心者向け質問チャンネルが活発なのが特徴だ。開発したり勉強したりする上で何かわからないことがあれば、ここで聞けば有識者が答えてくれるだろう。もちろん吾輩も参加しているぞ!
https://ruby-jp.github.io/

さあ、これで貴様はもうRubyエンジニアとしての第一歩を踏み出したわけだ!
これからの躍進に、期待しているぞ!