ウリドキネットでエンジニアをしている安田です!
今回はフロントエンドから入ったエンジニアがウリドキネットで1年間RubyとRuby on Railsを書いていく中で発見したこの言語とフレームワークの魅力について書いていこうと思います!
railsは、私がエンジニアになるための勉強をしていたときにドットインストールをやって、その当時
「なんか便利そう」
↓
「でも、後ろにどんな処理が走ってこういうふうにできるのかわからない」
↓
「すぐ動くけど、出来た気になってしまう気がする」
↓
「出来た気ではなく、きちんと学ぶべきことが他にある」
と
思っていました。
「なんか便利そう」
↓
「でも、後ろにどんな処理が走ってこういうふうにできるのかわからない」
↓
「すぐ動くけど、出来た気になってしまう気がする」
↓
「出来た気ではなく、きちんと学ぶべきことが他にある」
と
思っていました。
【改めて1年間書いて気づいたこと】
RubyとRuby on Railsには以下の魅力がある。
RubyとRuby on Railsには以下の魅力がある。
①「動的型付け」であるということ
自分が触ったことのある言語で静的型付けを味わった後に最初は「動的型付け」って
結局どうなの?という点を思っていた。
・その関数が何の引数をとるのか
・何を戻り値として返すのか
を意識することなく書くことっていいの?
自分が触ったことのある言語で静的型付けを味わった後に最初は「動的型付け」って
結局どうなの?という点を思っていた。
・その関数が何の引数をとるのか
・何を戻り値として返すのか
を意識することなく書くことっていいの?
「いい」という結論を今は持っている。
・型を気にしながら書くことが求められる静的型付け言語(例:java)
・型推論がついた言語(例:scala, haskell)
・部分的に型を明示的に指定する必要のある言語(例:Rust)
・型を気にしながら書くことが求められる静的型付け言語(例:java)
・型推論がついた言語(例:scala, haskell)
・部分的に型を明示的に指定する必要のある言語(例:Rust)
意識するポイントの違いなのではないかと思う。
②「動的ディスパッチ・動的メソッド」が使える柔軟さ
「メタプログラミングRuby」という本でボブが教えてくれたのは、Rubyという言語のもつ柔軟さの素晴らしさだった。この本を読んで、Rubyを使った開発が凄く楽しくなったのを覚えている。
「メタプログラミングRuby」という本でボブが教えてくれたのは、Rubyという言語のもつ柔軟さの素晴らしさだった。この本を読んで、Rubyを使った開発が凄く楽しくなったのを覚えている。
最近インフルエンザが流行っているので病院への予約を例に動的ディスパッチについて書いてみる。
Hospital
モデル、Human
モデル、Appointment
モデル を以下のように。( 【天の声】
Department
モデルがないじゃないか! 今回は割愛しています。)
ruby
# 病院(
Hospital
- id
- name
- department
Human
- id
- name
- status
Appointment
- department
- patient_id
- hospotal_id
上記の内容でやりたいのは、
教えて貰った
Google_teacher
モジュールに Human
の status
を伝え、教えて貰った
department
の Hospital
に 予約を入れる事にする。(注:現実世界はこう簡単にはなってません。
ruby
# グーグル先生(まずは皆ここで症状を調べることでしょうから
module GoogleTeacher
def list_for_my_(status)
Hospital.where(department: status)
end
end
class Human
include GoogleTeacher
def help_me_google
GoogleTeacher.list_for_my_(status)
end
def tel(to)
to.appointment(self)
end
end
class Hospital
def appointment(patient)
# 以下は動的ディスパッチの一例です!
if send("appointable__at_#{patient.status}?")
Appointment.new(department: patient_id: patient.id, hospotal_id: id)
else
return "ごめん、予約いっぱい。"
end
# 以下は地獄の入り口です。
case patient.status
when "cold" then
appointable__at_cold?
when "icu" then
appointable__at_icu?
when "injured" then
appointable_at_injured?
end
end
private
# 以下は動的メソッドの一例です!
define_method("appointable_at_#{status}") do
# do something
end
# うわ〜〜〜〜.....!!!!
def appointable_at_cold?
# do something
end
def appointable_at_icu?
# do something
end
def appointable_at_injured?
# do something
end
end
では問い合わせをしてみます。
ruby
human = Human.new(name: "nobody", status: "cold") # 風邪を引きました
hospitals = human.help_me_google # グーグル先生へ質問してみます。今回は運良く1件しかかえってきませんでした。
appointed = human.tel(hospotals.first) # 電話しました
if appointed
p "すごい!予約がとれた!"
else
p "残念。予約とれませんでした"
end
③Webにおけるurl設計を考えるきっかけをくれた。
Ruby on railsのレールに沿ったルーティング設計を続けていると、パラメータの考え方や、
CRUDモデルについて立ち止まって考える機会を貰えた。
Ruby on railsのレールに沿ったルーティング設計を続けていると、パラメータの考え方や、
CRUDモデルについて立ち止まって考える機会を貰えた。
Ruby on railsでの開発を知る前は有名所のAPIのドキュメントを読んだりするだけで、
「なんとなく」の状態で、今ほど向き合えてなかった。
まだまだ学ぶべきことは多いが、Railsに会えてよかったと思う点。
「なんとなく」の状態で、今ほど向き合えてなかった。
まだまだ学ぶべきことは多いが、Railsに会えてよかったと思う点。
④熟練者の人が学習者を育ててる
どの言語コミュニティにもいえることだと思うが、熟練者が初学者をどう支援するか
という点はその言語の将来を決める。
Rubyは「よちよち.rb」や各エンジニア間でも、よく初学者に向けてのコメントやサポートが充実していると感じた。
その根底にあるのが、きっと「Rubyへの愛情」で、その楽しさを伝えるために皆が頑張っている結果がこの充実さに出ている。
どの言語コミュニティにもいえることだと思うが、熟練者が初学者をどう支援するか
という点はその言語の将来を決める。
Rubyは「よちよち.rb」や各エンジニア間でも、よく初学者に向けてのコメントやサポートが充実していると感じた。
その根底にあるのが、きっと「Rubyへの愛情」で、その楽しさを伝えるために皆が頑張っている結果がこの充実さに出ている。
これからもRubyとRailsで楽しく開発をして、世の中を今よりちょっと良くするようなサービスを作っていこう。
では、また('ω')
Happy hacking!
Happy hacking!