Railsとは

>Railsとは、プログラミング言語「Ruby」の上で動作する`Webアプリケーションフレームワーク`です。

https://railsguides.jp/getting_started.html#%E6%9C%AC%E3%82%AC%E3%82%A4%E3%83%89%E3%81%AE%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6:~:text=Rails%E3%81%A8%E3%81%AF%E3%80%81%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E3%80%8CRuby%E3%80%8D%E3%81%AE%E4%B8%8A%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8BWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A7%E3%81%99%E3%80%82

# Webアプリケーションフレームワークとは?
>「フレームワーク」という言葉には、「枠組み」という意味があります。開発を行う際に、頻繁に必要とされる基礎的な機能をまとめて提供してくれるものです。そのため、`「作業を効率化するための枠組みのこと」をフレームワーク`と呼びます。

https://www.sejuku.net/blog/87963#index_id0:~:text=%E3%80%8C%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%80%8D%E3%81%A8%E3%81%84%E3%81%86%E8%A8%80%E8%91%89%E3%81%AB%E3%81%AF%E3%80%81%E3%80%8C%E6%9E%A0%E7%B5%84%E3%81%BF%E3%80%8D%E3%81%A8%E3%81%84%E3%81%86%E6%84%8F%E5%91%B3%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E9%96%8B%E7%99%BA%E3%82%92%E8%A1%8C%E3%81%86%E9%9A%9B%E3%81%AB%E3%80%81%E9%A0%BB%E7%B9%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%A8%E3%81%95%E3%82%8C%E3%82%8B%E5%9F%BA%E7%A4%8E%E7%9A%84%E3%81%AA%E6%A9%9F%E8%83%BD%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E6%8F%90%E4%BE%9B%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82%E3%81%9D%E3%81%AE%E3%81%9F%E3%82%81%E3%80%81%E3%80%8C%E4%BD%9C%E6%A5%AD%E3%82%92%E5%8A%B9%E7%8E%87%E5%8C%96%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%9E%A0%E7%B5%84%E3%81%BF%E3%81%AE%E3%81%93%E3%81%A8%E3%80%8D%E3%82%92%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A8%E5%91%BC%E3%81%B3%E3%81%BE%E3%81%99%E3%80%82

>Webフレームワークとは、前述した`「ライブラリ」をまとめて提供してくれるもの`であり、`Webアプリケーションを開発するために必要な機能の詰め合わせたパッケージ`のようなものです。

https://www.sejuku.net/blog/87963#index_id0:~:text=Web%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A8%E3%81%AF%E3%80%81%E5%89%8D%E8%BF%B0%E3%81%97%E3%81%9F%E3%80%8C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%80%8D%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E6%8F%90%E4%BE%9B%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B%E3%82%82%E3%81%AE%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E6%A9%9F%E8%83%BD%E3%81%AE%E8%A9%B0%E3%82%81%E5%90%88%E3%82%8F%E3%81%9B%E3%81%9F%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82
# ライブラリとは
>Webフレームワークの説明に入る前に、`Webフレームワークに近い考え方として「ライブラリ」`というものもありますので抑えておきましょう。
>
>ライブラリとは、`よく使う機能や自分で実装することが面倒なものを「パッケージ化」して使用できる「部品`のことです。
>
>Webアプリケーションは毎回ゼロから組み上げていくのではなく、このような`パッケージ化された「部品」を組み合わせて使う`ことが一般的です。

https://www.sejuku.net/blog/87963#index_id0:~:text=Web%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE,%E3%81%8C%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%A7%E3%81%99%E3%80%82

* 便利な部品を組み合わせて早く正確に作ることができる
* railsはフレームワークのことを指すので`railsの...`のようなタイトルを見て読んでみよう理解しよう。
# Railsの思想
### CoC(Convention over Configuration)
>直訳すると「設計より規約」という意味です。例えば社員情報を表現するモデルをEmployeeモデルとした場合、Railsでは以下のような規約に則って開発することが求められます。
>* データベースのテーブル名はモデル名の複数形にする（モデル名がEmployeeの場合、テーブルはemployeesとなる）
>* /employeesというURLは社員の一覧を表す
>* 社員ID:1の社員情報を表すURLは/employees/1である
>
>このような規約に従うことで、それぞれのコンポーネントに紐付けを行う作業を省略できます。また、規約に従うことでプログラム内に規律が生まれ、以下のようのメリットを持てます。
>
>* 多くの設定ファイルを書く必要がない
>* 共通のルールがあることで他のエンジニアとスムーズなコミュニケーションが取れる
>
>規約に従うことで関心ごとがシンプルになり、本来注力すべきビジネスロジックへ集中できるようになります。

https://gihyo.jp/book/2020/978-4-297-11462-6

>Convention(規約）とは、要は名前づけのルールのことです。

https://gihyo.jp/book/2022/978-4-297-13062-6

### DRY(Don't Repead Yourself)
>`「同じことを繰り返さない」という思想`です。情報の重複をなくし、`一つのことは一箇所だけに記述`します。
　例えば、Railsの場合はモデルが参照すべきカラム名を手動で定義する必要はありません。Railsを起動時するタイミングで`モデルに対応するテーブルで定義されているカラム名の一覧を取得することで暗黙的にカラム名に対応するメソッド`などを利用できるようになります。
 DRY原則を守ることによって、変更が生じた際に何箇所もコードの修正することがなくなり、メンテナンス性が高まります。

https://gihyo.jp/book/2020/978-4-297-11462-6

* カラムの名前によって対応するメソッドを利用できる
* 同じことを繰り返さないようにどうしているのか？

> Railsでは、これらDRY、CoC原則によって、開発者が最小限の労力で、しかも、保守しやすいアプリケーションを自然と開発できます。Railsとは、あるべきアプリケーション開発のレール（手順）を提供するフレームワークであるとも言えます。

https://gihyo.jp/book/2022/978-4-297-13062-6

*　開発が最小限の労力で作れるように名前の原則の元にモデル、テーブル、メソッドを関連づけている

### REST(Representational State Transfer)
>RESTとはWebアプリケーションの設計概念の一つで、`「すべてのリソースに一意となる識別子（URI）がある」` `「URIを通してリソースを操作する手段を提供する」`といった考え方を基盤としています。
具体的を挙げると、前述のような`/employees/1というURIが指す内容を「リソース」`と呼び、`社員情報を取得`する処理は`/employees/1へHTTPのGET`メソッドでアクセスして取得します。同様に`/employees/1に対してHTTPのDELETE`メソッドでアクセスすると`社員情報を削除`できます。
　このように`リソースと操作するための動詞を中心に考える`と、機能追加のしやすい自然な設計になります。

 https://gihyo.jp/book/2020/978-4-297-11462-6

* /employees/1を「リソース」
* HTTPリクエストを動詞
* リソースをどうするかという目的語と動詞を考えて設計する
* 機能を追加するときは言語化できていないとダメそう

### 自動テスト
>RubyやRailsでは`自動テストを行う文化を重要視`しています。Rails本体もそうですが、Railsのプロジェクトを作成すると雛形の一部として`テストを実行する環境`や`テストコードのひな形の生成`が行われ、Railsプロジェクトを作成した直後からテストが実行できるようになっています。
　テストフレームワークとして、デフォルトではMinitestが選択されています。その他によく利用されているRSpecを利用するように設定することも可能です。

https://gihyo.jp/book/2020/978-4-297-11462-6
 
* `テストコードのひな形の生成`とはどういうことをするのか？
# Model-View-Controllerパターンを採用
>アプリケーションをModel(ビジネスロック）、View(インターフェース）、Controller(ModelとViewの制御）と言う役割で明確に分離しようという設計モデルです。
Model:汎用的に再利用可能なビジネスロジック。データの操作などを担当
View:最終的な出力の生成を担当
Controlle:リクエストの処理、ビジネスロジックの呼び出し、出力への振り分け（＝全体の管理）
１、リクエスト
２、ビジネスロジックの呼び出し
３、処理結果をもとに出力を生成
４、レスポンス
それぞれの構成要素が明確に切り離されていることから、以下のような利点があります。
>* ロジック/デザインへの修正がお互いに影響しにくい（＝保守が容易）
>* プログラマ/デザイナが並行して作業を行いやすい
>* 機能単位にテストを独立して実行できる（＝テストを自動化しやすい）

https://gihyo.jp/book/2022/978-4-297-13062-6

* 汎用的に再利用可能なビジネスロジック、データの操作とは？
* 保守が容易とはどう言うことか？
* 機能単位にテストができるとは？

# Railsはフルスタックのフレームワーク
>フルスタックとは、アプリケーション開発のためのライブラリはもちろん、コード生成のためのツール、動作確認のためのサーバなどをひとまとめにした、「全部入り」のフレームワークの開発・実行に必要な環境はすべて揃っています。`ライブラリ同士の相性やバージョンの不都合を意識する必要も、基本的にはありません`。
　また、Railsでは`Modularity(モジュール志向)が強化`されており、必要に応じて目的に合った`コンポーネントへの差し替えが簡単`に行えるようになっています。

 * モジュール思考とは？
 * コンポーネントの差し替えが簡単とは？
 
# 感想
rails、rubyの使い方を理解していなければその他の知識を活かすことができず発展できないのでこの２つの関して理解を深めたい。実践するために理解したい。
理解できていないこともあるがそのうちできると思う。
ディレクトリの意味やgem,bundleコマンドに関して知りたい。