Assyのリベラル文学研究所もご覧ください。

Ruby on Rails

Ruby on Rails

RailsMVCフレームワーク

Railsは、MVCフレームワークという考え方と規約に基づき、「少ない記述量でWebアプリケーションを可能にする」ことを目指したWebアプリケーション・フレームワークだ。
MはModelで、データベース管理システムのテーブルを表している。
VはViewで、データをどのように表示するかを表している。HTMLに若干のコードを加えることで実現される。
CはControllerで、プログラミングとしての、Webブラウザによって呼び出される、個々のリクエストに応じたアプリケーションのメソッドや処理を表し、ModelとViewを統括している。
Railsの基本理念は「同じことを繰り返さない」ことと「設定より規約」であり、一度書いたコードなどを再度、重複して書く必要はなく、また複雑な設定を編集するのではなく、ある一定の慎重に設計された決まりごと(規約)に則したシステムの構築を行うことによって、設定を無くすことができる。
Railsのコード量の少なさは画期的で、またその管理のしやすさとシステムの作りやすさは革命的だった。まるで、機関車が線路(レール)の上を走っているかのように、規約通りにすればとても簡単にWebアプリケーションを構築出来る。
また、Railsをやると、プログラミングの基本とは何なのか、ということが良く分かる。どこでもRailsはプログラミングの入門や基礎のために良いと言われる。だが、逆に「簡単すぎて技術力の習得にならない」と、Railsを敬遠する意見も一部にはある。

Railsの基本

まず、Railsにはモデル、ビュー、コントローラという3つの層がある。
モデルはデータベースのことで、SQLiteなどで作ったデータベーステーブルに対して、決められた命名規則で自動的にデータベースを操作するためのクラスが定義される。
このモデルを用いて、データベースを操作する。SQL文を用いずにRubyでデータを操作する「マイグレーション」を行う。
ビューは、HTMLの表示部分。ERBを使ってHTMLの中にRuby構文を埋め込む。<% ~ %>とした部分にRuby文を入れられる。また、<%= ~ %>とすればRuby文の中で最後に評価された値を表示できる。CSSはよりプログラマブルな計算などができるCSSであるScssを用いる。JavaScriptRubyライクな記述でJavaScriptを記述できるCoffeeScriptを使う。ビューはアクションから呼ばれるが、命名規則に決められた通りすれば、何も記述しなくても自動的に特定のビューを表示できる。また、パーシャルを使ってビューの中の特定の部分を共有できる。たとえばブログの表示画面と編集画面で同じHTMLを表示することができる。
コントローラは、ビューとモデルを取り持つ部分。Rubyインスタンス変数(@articleなど)を用いることで、コントローラ・ビュー・モデルの間で同じデータを共有・操作することができる。コントローラにはアクションを定義し、このアクションからビューが表示される。コントローラは既にあるクラスを継承し、アクションを定義することで開発を行う。また、URLからコントローラのアクションを呼ぶために最初にルーティングを行う。コントローラをプログラマが、ビューをデザイナーが担当することで、プログラマとデザイナーの間で仕事を分業しやすくなる。
Railsのジェネレータ機能であるScaffoldを使うことで、Webアプリケーションのひな形を自動作成できる。たとえばブログなどはほとんど自動作成してくれる。あとはデザイナーがCSSの修正や英語を日本語に直すだけで、簡単な日記システムなどはほとんど自動作成できる。
RailsではPumaと呼ばれるWebサーバーが付属している。またデータベース管理システムとしては、軽量なSQLiteが入門者にはおすすめな一方、MySQLPostgreSQLも使うことができる。

Railsによるプログラミング

Railsは「設定より規約」という主義に基づいてWebアプリケーションの開発を行う。これはMVCフレームワークに従うということだけではなく、たとえばディレクトリやファイル名の命名規則(英単語の単数形と複数形を使い分けるなど)にも見られる傾向で、多くのことを規約に従って用意する。コントローラの機能はクラスを継承して実装し、ビューはスケルトンとして自動作成された(HTMLファイルに当たる)ERBファイルにRubyコードを埋め込んで実装する。また、データベースは専用の簡略化されたコマンドで、必要最低限のコマンドからSQLテーブルを作成し、それに対応するモデルを実装する。
規約通り進めていけば、驚くほど簡単にWebプログラミングが出来るが、規約以外のことをやるための自由度は少ない。

Railsの開発はワークフローを分かれば単純

Railsの開発は、ソースコードやプログラム例を提示して「このように書け」というものではなく、さまざまな手順を最小限行っていく「ワークフロー」です。
なので、簡単に開発の手順を提示することは出来ません。ですが、決して難しくはなく、以下のようなサイトをきちんと読んで「自分で実行」すれば、簡単に分かります。
おすすめなのはRails をはじめようです。rails generateコマンドを使って自動的にファイルやフォルダを作成したり、*.html.erbファイルにRubyコードを埋め込んだり、ApplicationControllerやApplicationRecordなどの基本クラスを継承したり、@articles.each doで繰り返し表示したりしながら、モデル、ビュー、コントローラ、そしてルーティングやアクションなどを作成していくことで、Webアプリケーションとは何であるか、ということが掴めます。

Rails環境の構築はDockerを使うのが楽ちん

Rails環境の構築は、Docker Hubを使ってdocker runで入れるのが楽。

$ docker pull rails
$ docker run -it rails /bin/bash

NginxもMySQLも全部Dockerでコンテナとして起動してしまおう。注意点は、MySQLコンテナを削除するとデータも消えること。MySQLコンテナとデータコンテナを分けてデータの永続化を行う必要がある。
後日注記:複数のDockerイメージを連携させて動かす場合(たとえばRailsMySQL)は、docker-composeというコマンドを使うと複数のイメージを楽に連携・管理できる。

Webフレームワークとは

Ruby on Railsの登場を受けて、最近のWebアプリケーションやWebサービスの開発には、「フレームワーク」と呼ばれるものを用いて行う機会が増えてきた。
Webフレームワークは各Web言語(Java, Perl, PHP, Python, Rubyなど)に存在し、「MVCモデル」と呼ばれる枠組みを使って、効率的・生産的にサービスを開発することができる。


MVCモデル

Model

Model(モデル)は、MVCフレームワークの中でデータベース用のロジックを担当する部分。
基本的に、ViewやControllerはModelの内容と対応するように記述される。

View

View(ビュー)は、MVCフレームワークの中で表示されるテンプレートの作成を担当する部分。
WebフレームワークではHTMLがこの部分に当たる。
PHPやERB(埋め込みRuby)などを用いて、HTMLテンプレートに最小限のコードを埋め込むことで開発する。

Controller

Controller(コントローラ)は、MVCフレームワークの中で
さまざまなアクションイベントに応じたコントロール(処理の割り振り)を担当する部分。
特に、モデルとビューの橋渡しとサービスの上での総合的なやりとりを行う。

Webフレームワークの前夜

まず、Perl/CGIがある。Perl/CGIでは、Apacheを用いてサーバー側で処理を行う。Perlスクリプトを簡単に作ることで、掲示板やカウンターなどのWebサービスを作ることが出来た。
次に、PHPがある。PHPでは、HTMLタグの中にスクリプトを埋め込むことで、さらに簡単にプログラミングが出来た。
次にあるのは、JavaサーブレットJSPである。プロセスをいちいち立ち上げるのではなく、ひとつのプログラムのスレッドとして管理することで、効率的にサーバーサイドプログラムが出来た。
そして、いよいよWebフレームワークの夜明けが来る。Rubyはとても少ないコードで簡単なプログラミングが出来た。
さあ、Railsが登場した。Railsの登場は革命である。全てのコードをRubyで書き、MVCと呼ばれる生産的な「フレームワーク構造」を使うことで、革命的なほど簡単にWebサービスを作ることが出来た。
Railsを模したWebフレームワークとして、CakePHPDjangoなどが登場した。「PHPPythonでもRuby on Railsのようなことがやりたい」という声が多く、誰もが同じようなMVCフレームワークを作った。
同時に、クライアントサイドでも革命が起こった。JavaScriptフレームワークである。JavaScriptフレームワークでは、クライアントサイドでもMVCと良く似た構造のプログラミングを可能とした。
しだいに、「RailsRailsで難しくて複雑だ」という意見が増えた。このことから、もっと簡単で、もっと短いコードで作るフレームワークは作れないか、という声が増えた。これが、マイクロフレームワークである。

簡単な説明

Webフレームワーク

  • Webフレームワーク

MVCフレームワーク

ルーティング

Webサイトにアクセスした時に、URLに基づいてどのページを表示するかを案内する

アクション

アクションは、コントローラで定義されるメソッドのこと
ルーティングによって適切なコントローラとアクションが指名され、Railsはコントローラのインスタンスを作ってアクションを実行する
Webサイトのさまざまな機能(たとえばリスト表示やフォローなど)はアクションに実装する

ビューテンプレート

RailsではHTMLにRubyコードを埋め込めるERBを使ってビューテンプレートを記述する

パーシャル

パーシャルは、複数のビューテンプレートの共通する部分を分割し、自動で読み込んでくれる機能

マイグレーション

SQLで直接データベースを操作しなくても、Rubyからデータベースにテーブルを作成できる
SQLコマンドを打つことなく、データベーステーブルを自動作成する

バリデーション

ユーザーがWebサイトのフォームに入力した時、その入力内容のデータにあらかじめ制限をかける
たとえば数値だけ有効、空文字列は無効など

フレームワークの独自作成

Webフレームワークは、簡単なものであれば自分で独自に作成することもできる。書籍「パーフェクトPHP」などを読んでほしい