【今日のQ&A】フレームワークと言語の関係 【Ruby】

こんにちは、@codeship_techです。

今回は、RubyとRuby on railsの関係についてより専門的に勉強するためにはどちらを優先して勉強すべきかという質問に対するエンジニア講師の回答をピックアップしました!

概念的な話にはなりますが、皆さんもぜひ呼んで今後の参考にしてみてください!

Ruby on Railsでの開発力を高めたいと思っています。
RailsはRubyの「上位の技術」ですから、Railsの勉強を集中して行うべきですよね?

いいえ、RailsとRubyに技術的な上下関係はありません。
また、ある程度まで上達してなおRailsの開発力を高めたかったらむしろRuby言語の勉強を優先して行ってください。

  •  フレームワークについて

Ruby on Railsを構築するプログラミング言語Rubyは、Webアプリを作る以外にも以下のような様々なことができます。

  • チャットボット
  • スマホアプリ
  • ゲーム
  • Webスクレイピング
  • Webクローリング

Ruby on Railsは「Webアプリケーションを」「決まった流れに従って」構築することに特化したフレームワークです。

Ruby on RailsとRubyの関係は、料理における「インスタント食品」と「生の食材」との関係に近いと私は考えます。
Railsのようなフレームワークは、インスタント食品に該当します。

例えばインスタント食品であるカップラーメンは

  1. お湯を沸かす
  2. お湯を注いで数分待つ

の手順を踏襲するだけで、我々は

  • お湯を注いだときカップラーメン内部で何が起こっているか
  • カップ麺にはどのような具材が入っているか
  • 調味法はどうするのか
  • 麺はどのように作られたのか

を「食べる側は一切気にする必要がなく」美味しく食べることができます。
Railsフレームワークの良いところの一つは、「決まりきった方法に従って実装を行うのであれば、開発者側が内部構造を深く理解する必要がない」ことです。

なぜこのようなことが可能かというと「Railsの設計者が内部で、開発者側が深く実装を意識しなくて済むよう親切に」設計をしてくださっているからです。

Ruby言語そのものは生の食材に該当します。
生の食材で料理をしようと思うと、例えば肉じゃがを作るときに

  • 何の具材を入れるか
  • 調味料の割合
  • 具材の切り方
  • 煮込む時間
  • 盛り付け方

などを逐一考慮しなければならず相応の手間がかかります。
加えてその過程で包丁や火の扱い方、栄養素についての知識が必要とされるかもしれません。

Ruby言語そのものは「多様なことができる」故に、「用途によって深い基礎知識を持って逐一考慮し開発者側が設計を行う」必要があります。

Railsの開発力をあげようと思ったら、Rails内部でどのような実装が行われているかを理解する必要がありますが、それはRailsライブラリ内のRubyコードを読むことに他なりません。
当然Ruby言語の文法知識が要求されます。

料理に例え直すと、「食材であるジャガイモ本来の性質を理解し、具材の切り方や煮込み時間などを考慮する」ことでより美味しい肉じゃがを作れる、といったところでしょうか。

また、インスタント食品と生の食材に上下関係が無いように、フレームワークと言語に上下関係はありません。
あくまで言語の用途特化機能群がフレームワークです。

Rubyの勉強が必要なのは分かりました。
参考になる書籍等はありますか?

それなら「プロを目指す人のためのRuby入門」がおすすめです。

この本は、現役Railsエンジニアである著者により「Railsの深い理解のためにRubyの基礎文法を掘り下げる」ことを目的として書かれているため非常に実用的かつ、幅広い内容を網羅していてオススメです。

授業日記についてのご意見

CodeShipの授業について「こんな事が知りたい・紹介して」というご意見・ご提案がありましたら、CodeShip公式Twitterアカウント(【CodeShip】プログラミングスクール)までDMまたはリプライにてお寄せください。