Railsとは
Rails(Ruby on Rails)とは、プログラミング言語であるRubyを使用してWebアプリケーションを構築するフレームワーク(枠組み)の一つです。フレームワークには、先人の知恵と経験が凝縮されています。特にRailsは、Rubyのオブジェクト指向の考えを踏襲し、非常に洗練されたアプリケーション開発の仕組みを提供してくれます。
一般的に、一からWebアプリケーションを構築する場合には、さまざまな課題をすべて自分で解決しなければなりません。しかしRailsのフレームワークは、誰でもどこでも必要とする「基本的で標準的な機能の枠組み」を、自由に、かつ効果的に利用できるようにしています。経験の長い優れたエンジニアが「こうありたい」と願う仕組みをことごとく現実のものにしている、といっても良いでしょう。
したがって、初めてWebアプリケーションの開発に携わる方でも、その仕組みを正しく理解して実践できれば、先人たちの考えた優れたスマートで洗練された仕組みを素早く取り込むことができます。その結果、わかりやすい、品質の高いWebアプリケーションを素早く柔軟に構築でき、構築したあとの機能の拡張や改善を含むアプリケーションの保守・運用管理も容易になるはずです。
Railsは簡単にWebアプリケーションを構築できるツールを提供し、Webアプリケーション構築の初心者でも一気に高みに連れて行ってくれます。しかし、前述したようにさまざまな先人の優れた考え方、仕組みを取り込んでいるため、その仕組み・意義をしっかりと理解しなければ、効率的で現実的に優れたアプリケーションを構築することはできません。
それらの仕組みや意義を理解することは決してやさしいことではありませんが、今後、開発環境がどのように変遷したとしても、一度学んだ技術やノウハウは決して無駄になりません。
まったくの初心者であっても、志ある誰もがRails バージョン5(Rail 5)を使ってRailsの仕組みを正しく理解し、より良いWebアプリケーションを構築できるよう、本書はその導入口になることを大きな目的としています。
Ruby on Rails誕生の経緯
Rubyは、日本人のまつもとゆきひろ氏が作成したプログラミング言語です。また、現在、日本発の言語としては唯一、国際標準規格に認定された言語でもあります。
Railsは、Rubyプログラム言語の良さにほれ込んだデンマーク人のDavid Heinemeier Hansson氏(通称:DHH氏)によってRubyを使って作成された、RubyによるWebアプリケーションのためのフレームワークです。
2016年にリリースされたRails バージョン5には、WebSocket通信を利用したサーバー・クライアント間の双方向通信(チャットなど)が可能になるActionCableや、モデルの属性の持ち方を大きく拡張するAttributes API、タイプオブジェクトなどが追加されました。さらに、マイナーバージョンといえるRails 5.2には、ActiveStorageなどの新しい機能も追加されました。これらは近い将来予定されている、Rails 6以降におけるフロントエンド周りの機能拡張の布石と考えられます。他にもRails 6では、メール受信をよりスマートに実現させる機能やスケーラビリティ(規模拡張)を支援する機能が組み込まれる予定です。このように、Railsはより高度な機能を取り込みながら、使いやすい形に進化を続けています。
日本国内では、Rubyの資格認定制度として、シルバー/ゴールドという2種があります(https://www.ruby.or.jp/ja/certification/examination/)。また、Railsについても、Railsブロンズ/シルバーという認定制度があり、さらにRailsゴールド資格もRailsシルバー資格取得者向けに用意されています。
Ruby on Railsは、今後もより使いやすく便利に、よりフレキシブルな最先端のアプリケーション開発ツールとして大きな可能性を与えていくでしょう。
Railsの基本理念
Railsは、長年の経験による最良の開発方法を推進するために、Rails流(the Rails way)というべき次のような理念が存在します。また、その理念に従って、あらゆるものが構成され、またそれに従って開発を行うことが最良の開発であることを推奨しています。
同じことを繰り返すな(Don't Repeat Yourself: DRY)
当たり前ともいえるのですが、一般的なソフトウェア開発では、やむを得ない事情によって、あるいは意図せずに、多くの重複するようなコードや仕組みが至るところに積み重なるリスクを負っています。その結果、効率的な改善を阻む要因となります。
「システムを構成するあらゆる部品は、常におのおの重複することなく1つであり、明確であり、信頼できる形で表現されていなければならない」のが本来あるべき姿です(図1.1)。その指針に従って、同じプログラムコードを繰り返し書くことを徹底的に避け、プログラムコードを保守しやすく、容易に拡張でき、バグ(隠れた不具合)をとにかく減らすことを目指しましょう。
設定より規約を優先する(Convention Over Configuration:CoC)
Railsでは、Webアプリケーションで行われるさまざまなことを実現するための最善の方法を、過去の経験や慣習に基づいて明確に描き出し、Webアプリケーションにおいて最適と考えられるものを規約としてデフォルト(あらかじめ決められた)設定にしています。
これは一見、開発者の自由を奪うようですが、反面、優秀な開発者が誰でも当たり前に行う部分をルール化し、それ以外の創造的な作業に集中できる環境を作っているともいえます。つまり言葉を変えると、Railsの規約に従うことは、開発者自らが当たり前の準備に時間を割くことから解放され、より高機能で、自由な開発環境を手に入れられることだといえます(図1.2)。
Railsフレームワークのベースとなる3つの考え方
Railsのフレームワークは、長年蓄積された洗練された考え方に基づいており、次の3つの柱を軸に構成されています。
(1)リソースフルルーティング
リソースフルとは、リソース(データ資源)を満たす、あるいはリソースを中心とするという意味だと考えてください。ルーティングは、ここでは、リソースに対するアクセス(やり取り)の道筋を決めることを意味します。
Railsでは、図1.3のように、処理の対象となる目的を持った情報のかたまりをリソース(データ資源)として捉え、このリソースに対するCRUD操作を基本にしたアクセス処理の流れを構成していきます(CRUD操作については「5.4 CRUD操作と標準装備のメソッド」で解説します)。なお、本書では、リソースの意味をより明確にするため、データリソースという言葉を多用しています。
(2)オブジェクト指向
ベース言語であるRubyが持つオブジェクト指向性を活用して、フレームワークは、洗練された各オブジェクト(対象物)で構成されています。開発者は、このフレームワークをベースに個別のオブジェクトを生成していきます。その際、個々のリソースは、舞台に立つ役者のようにオブジェクトとして表現されます。なお、オブジェクト指向については、Chapter 2で説明していきます。
(3)MVCモデル
Railsは、アプリケーション内部の処理内容に基づいて、3つの役割を担うモデル、ビュー、コントローラーから構成されるMVCモデルをフレームワークの基礎にしています。
図1.4に、MVCモデルの概要を示します。それぞれの詳細はChapter 4以降で後述します。
Railsは、これら3本の柱を軸にして図1.5のようなフレームワークを構成しています。図に示すように、1つのRailsフレームワークの中には複数の機能が実装されます。
Railsフレームワークでは、ブラウザーからリソースへの要求は、リソースフルルーティングというものを経由してまとめて扱われます。その要求に応じて、コントローラー(C)というオブジェクトを司令塔とするMVCモデルで処理が行われます。データベースのリソースは、モデル(M)を通してオブジェクトとして扱われます。