Ruby on Railsについて　～学習する前に一度まとめてみた～

#はじめに
この記事では、Ruby on Rails（以下Railsと呼称）を本格的に勉強する前に一度Railsについて纏めてみようと思います。
参考にさせていただいたサイトなどは、最後の「参考資料」の項にまとめておきます。
#Railsとは？
一言で言うならRailsは、**Rubyで使うwebアプリケーションフレームワーク**です。

では、webアプリケーションフレームワークとは？
これは、**動的なウェブサイト、Webアプリケーション、Webサービスの開発をサポートするために設計されたアプリケーションフレームワーク**のことを指します。

かみ砕いていうと、【web関連の開発をするときにめっちゃ役に立つフレームワーク】、ということです。

さて、そもそもフレームワークとは何ぞ？、という話です。
フレームワークは日本語では、「骨組み」とか「枠組み」とかの意味があります。
この名前の通り、フレームワークはプログラミングで使う「枠組み」です。

フレームワークは、**アプリケーション全体の枠を提供し、開発者の作ったプログラムを読み込んで動作する環境**のことを指します。

分かりやすく言い換えると、【使用頻度の高い機能を集めたひな形】といったところです。

まとめると、Railsは、**Rubyを使ってweb関連の開発をするときにめっちゃ役に立つ、使用頻度の高い機能を集めたひな形**という感じの意味合いになります。
大分、分かりやくなったように思います。

#Railsの歴史
RailsはRuby on RailsはデンマークのプログラマであるDavid Heinemeier Hansson（通称DHH氏）により、作られたました。
以下に大まかなRailsの変遷をまとめておきます。

・2004年7月 最初のバージョン公開
・2005年12月13日 バージョン1.0リリース
・2007年12月7日 バージョン2.0リリース
・2010年8月29日 バージョン3.0リリース
・2013年6月27日 バージョン4.0リリース
・2016年6月30日 バージョン5.0リリース

#Railsを使うメリット、デメリット
tech boostの記事に分かりやすくメリット、デメリットがまとめられているものがあったので、そこから抜粋、引用して書いてあります。
サイトのURLは一番下の「参考資料」の項にあります。

###メリット
**1:シンプルなコードで書ける**
Railsはコードが短く、シンプルな書き方ができます。
これによりコーディング量が少なくなります。

**2:初心者でも簡単**
Ruby自体が、日本発祥の言語なので日本語の情報が書籍やオンラインで豊富にあるため、初心者でも学びやすい環境が整っています。

**3:メンテナンスがしやすくなる**
先述したように、フレームワークは【使用頻度の高い機能を集めたひな形】なので、コードの書き方やコードを書いたファイルの場所なども決まりがあります。
このため、メンテナンスがしやすいです。

**4:開発期間が短くなる**
Railsは、特にアジャイル開発と呼ばれる開発期間の短い開発手法を使う会社で活用されています。
短期間で開発ができるので、1人でもそれなりのWebシステムを構築する事ができます。

**5:汎用性が高い**
汎用性が高いためWeb開発以外でも利用する事ができます。
マルチプラットフォームなのでさまざまな環境で動作できます。

**6:バグが少なくなる**
システムは複数の機能が集まってできており、1つの機能を変更すると他の機能に影響して別のところでバグが出る場合があります。
フレームワークは各機能の関係をわかりやすくしたりする効果もあるので、バグを事前に減らすことができます。

また、デバッグ用の機能も提供されています。

###デメリット
**1:便利すぎる**
便利すぎるので、基本的な技術を知らないままアプリケーションを作成できてしまう場合があります。
基本的な技術がわからないと、不具合が発生した場合に対処できなかったりします。

**2:処理速度が遅い**
Rubyでの構築サイトは一部で処理速度が遅いなどのデメリットが指摘され、大規模サイトには向いていないといわれています。

ただし、設計段階で考慮した作りを行うことで処理速度の低下を抑えることができます。

#Railsにおいて重要な事項
###Railsの9つの基本原則
RailsにはRailsの生みの親のDHH氏がRailsの基本理念として８つの基本原則を示しました。
後に、これにもう一つ理念が加わった９の基本原則がRailsにはあります。

この９の基本原則をまず見ていきましょう。
ただし、この内容は、これを自分なりに解釈したものです。

**Optimize for programmer happiness(開発者の幸せのために最適化する)**

Rubyのフレームワークである、RailsもRubyの売りの一つである、「開発者の幸せ」に力点を置いているということです。

**Convention over Configuration(設定よりも規約を尊重する)**

設定を無暗にいじるのではなく、Railsが用意した規約を守ることで、シンプルなコードを書くことができます。

**The menu is omakase(Railsにおまかせする)**

Railsには、先人たちが作った便利な機能がたくさんあります。全ての機能を自作しようとせず、Railsの便利な機能をフルに活用しましょう。

**No one paradigm(複数のパラダイムを適用する)**

より広い範囲の機能を持たせたり、機能同士が衝突したりしないようにRailsには多くの考え方や、機能が採用されています。

**Exalt beautiful code(美しいコードを称える)**

美しいコードにすることで、コードの可読性を高めたりできるので、美しいコードを書くことを意識しましょう。

**Provide sharp knives(切れるナイフを提供する)**

自由度の高い機能は開発者にとっては諸刃の剣であるということです。
ただし、失敗を恐れず使っていく勇気も時には必要です。

**Value integrated system(統合システムを尊重する)**

Railsは1つの統合システムになっているので、開発者に余計なタスクを負わせないようになっています。

**Progress over stability(安定よりも進歩を尊重する)**

Railsは時代のニーズに合わせてバージョンアップしていくので、互換性のない変更がまま起こり得ます。開発者はこのことを肝に銘じておくべきです。

**Push up a big tent(大きなテントを張る)**

たくさんの人に使ってもらえるように、学習コストを可能な限り低くし、コードや機能をオープンにするようにしましょう。

###MVCとルーティング
Railsの中でも重要な概要の一つであるのが、MVC構造（MVCアーキテクチャとも言う）です。
MVCは以下の三つイニシャルから取られています。

・Model(モデル)
・View(ビュー）
・Controller(コントローラー)

この三つ(とルーティング)の役割を見ていきましょう。

**Model(モデル)**
モデルの仕事はデータベースの管理です。データベースには様々なデータが格納されています。
より詳しく説明するならば、モデルはコントローラーから出された指示に従ってデータベースにテーブルを作ったり、カラムを追加したり、データの保存や取り出しなどを行います。

**View(ビュー）**
ビューの仕事はwebアプリケーションのユーザーが操作するフロント部分の管理です。
主にRailsのテンプレート(「ERB(Embedded Ruby)」など)をHTMLに訳して、ブラウザに表示させています。
Railsのテンプレートがブラウザに表示できるのは、ビューのおかげです。

**Controller(コントローラー)**
コントローラーの仕事は、ユーザーからのリクエストを受け取り、リクエスト通りの仕事をモデルとビューに実行させるように命令を出すことです。
具体的には、データベースから値を取り出すように、モデルに指示、取り出した値をビューに命令して、ブラウザで表示させるといったような形です。

**ルーティング**
リクエストはURLで送られてきますが、コントローラーはURLをそのまま理解することはできません。
そこで、ルーティングが受け取ったURLをコントローラーが理解できるように変換します。
つまり、ルーティングは受け取ったリクエストを適切なコントローラへ案内させるための「ルール」のことです。

#終わりに
Railsを学ぶ前に自分なりにRailsについて、まとめてみました。
まだまだ足りない知識が沢山あると思いますが、現時点での知識やRailsについての認識を整理できました。
今回の記事も活用しつつ、Railsの学習を進めていきたいです。

#参考資料
[今さら聞けない！Ruby on Railsとは【初心者向け】| TechAcademyマガジン]
(https://techacademy.jp/magazine/7011)

[フレームワーク (framework)とは |「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word12470.html)

[デイヴィッド・ハイネマイヤー・ハンソン - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%A4%E3%83%B4%E3%82%A3%E3%83%83%E3%83%89%E3%83%BB%E3%83%8F%E3%82%A4%E3%83%8D%E3%83%9E%E3%82%A4%E3%83%A4%E3%83%BC%E3%83%BB%E3%83%8F%E3%83%B3%E3%82%BD%E3%83%B3)

[Ruby on Rails - Wikipedia](https://ja.wikipedia.org/wiki/Ruby_on_Rails)

[Ruby on Railsのメリットって何？徹底解説！ - Tech-Boost-magazine](https://magazine.tech-boost.jp/Programming-languages/ruby/1073144)

[Railsの基本理念 : Railsの生みの親が掲げる8つの原則 | POSTD](https://postd.cc/rails-doctrine/)

[画像で図解！サルでもわかるRailsにおけるMVC入門 - 28歳からはじめるフリーランスLIFE!](https://www.yuta-u.com/programing/rails_mvc)

[DIVE INTO CODE | Railsのルーティングを学ぼう①](https://diveintocode.jp/tips/routing01)

[現場で使えるRuby on Rails5 速習実践ガイド
大場寧子、松本拓也、櫻井達生、小田井優、大塚隆弘、依光奏江、銭神裕宜、小芝美由紀[著]
株式会社万葉[監修]　発行所　株式会社マイナビ出版
2018年10月15日　初版第1刷　発行](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1DKGPREQT2U8A&keywords=%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B+ruby+on+rails+5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89&qid=1558722164&s=gateway&sprefix=%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%2Caps%2C268&sr=8-1)