【Ruby/Ruby on Rails】重要用語・基礎知識まとめ【プログラミング学習開始128日目】

# 　新年のご挨拶
明けましておめでとうございます。

エンジニアになることを決意し早4ヶ月が経ちました。

2019年はエンジニアに転向し、爆速で成長する1年にすべく日々継続してスキルアップに努めます。

# はじめに
1週間後に、志望しているWeb系企業の実技面接があります。

実技面接にてどのようなことを問われるのかは分かりませんが、Rails初学者でも最低限これだけはしっかりと答えなければ落ちるだろうと想定される重要用語を抜粋し、まとめを作成することで、面接にてきちんと用語の要点を説明できるようにすることがこの記事の目的です。

# 確実に押さえておくべき用語30選
## 1. オブジェクト指向
「モノ」を組み立てるように表現して、コンピュータに動作をさせるという概念。
　
## 2. オブジェクト 
便利な命令を色々持っているデータ型。
Rubyでは、配列やHash、数字や文字列など全てのデータはオブジェクトである。

## 3. クラス 
データと処理をひとまとめにした、インスタンスの元となるオブジェクト指向の設計図のようなもの。

## 4. インスタンス
クラスという設計図からnewメソッドで生成されたメモリ上の領域のことをインスタンスと呼ぶ。

## 5. メソッド
何度も使うような処理をいつでもすぐ実行できるように複数の処理をひとつにまとめて定義しておくもの。

```ruby:定義
def メソッド名(引数名1,...)
  処理1
  処理2
  ...
end
```

## 6. 配列
データ（要素）を格納した入れ物。

```ruby:配列の例
animals = [“dog”, “cat”, “bird”]
```

## 7. ハッシュ
ハッシュは配列と同じく複数のオブジェクトへの参照をまとめて管理することが出来るオブジェクト。
配列と大きく異なる点は、配列がインデックスを使って要素を区別していたのに対し、ハッシュではキーと呼ばれるものを使用する。

```ruby:ハッシュの例
scores = {"test" => 200, "sample" => 400}
scores = {:test => 200, :sample => 400}  # シンボルオブジェクト、動作が高速
scores = {test: 200, sample: 400}
```

## 8. シンボル
見かけは文字列だが、内部では数値として扱われるもの。
比較、検索に関して速度面で有利であるメリットがあるため、データの名前に使われることが多い。
`:test`のようにコロンを前置して定義する。

## 9. インスタンス変数
また、Railsにおけるテンプレート変数のことをインスタンス変数と言う。
インスタンス変数はアクションメソッドとビューでデータを受け渡しするための橋渡し役となるものである。

## 10. インスタンスメソッド
インスタンスオブジェクトから実行できるメソッド。
（インスタンスオブジェクト：newメソッドで生成されるオブジェクト）

```Hoge.rb
# インスタンスメソッドの定義
def hoge
  p "test"
end

# インスタンスメソッドの呼出し
h = Hoge.new  # インスタンスオブジェクトの生成
h.hoge        # インスタンスオブジェクトを経由してインスタンスメソッドを呼び出す必要がある
```

## 11. モジュール
クラスと同様、メソッドの格納場所となり得るもの。
一方で、オブジェクトを作成することができない点がクラスとは異なる。
Rubyは単一継承と呼ばれる言語設定になっており、モジュールを使用することで擬似的に多重継承を行うコードが記述可能。

```ruby:定義
module モジュール名
  ・・・
end
```

## 12. フレームワーク
問題を一般化し、解決のための定石をまとめた枠組み。
使用するメリットとして、開発生産性が向上出来る点やメンテナンス性に優れる点、先端のトレンドに対応しやすい点などが挙げられる。

## 13. ライブラリ
汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたもの。

## 14. MVC
アプリをModel(ビジネスロジック)、View(ユーザーインターフェイス)、Controller(ModelとViewの制御)という役割で明確に分離する設計モデル。

## 15. ルーティング
リクエストURLに応じて処理の受け渡し先を決定すること、または、その仕組み。
Railsではルーティングによって呼び出すべきコントローラとアクションを決定する。

## 16. REST
アプリケーションの状態を進行させる手段としての、状態の表現（ドキュメント）のクライアント／サーバー間の転送をベースとした、APIのアーキテクチャスタイル。

## 17. DRY
ソフトウェア開発全体において情報を重複させないという原則。 

## 18. CoC
Convention of Configuration
設定には適切なデフォルト値を用意し、余計なプログラミングや設定を省いて効率化するという思想。 

## 19. CRUD
ほとんど全てのコンピュータソフトウェアが持つ永続性の4つの基本機能。
Create（生成）、Read（読み取り）、Update（更新）、Delete（削除）のイニシャルを並べた用語。

## 20. Active Record 
ビジネスデータとビジネスロジックを表すシステムの階層であり、モデルがデータベースとやり取りする際に使用されるメソッドなどが用意されている。

## 21. ORM
オブジェクト指向言語とリレーショナルデータベースとの橋渡しをする役割を持つライブラリ。

## 22. バリデーション
入力された値が不正な値でないかを検証するための機能。

```ruby:構文
validates :検証対象, 検証名: 検証パラメータ

ex.) validates :email, presence: true
```

## 23. アソシエーション
主キーと外部キーを利用することでテーブル間の関係性をモデル上の関係として操作できるようにする仕組み。

## 24. ストロングパラメータ
あらかじめ設定可能なパラメータを明示することでマスアサインメント脆弱性を回避する仕組み。
（マスアサインメント：モデルに対するフィールドのまとめ設定）

```ruby:構文
params.require(モデル名).permit(属性名1, 属性名2, …)
```

## 25. Gem
Ruby用のパッケージ管理ツール。

## 26. ヘルパー
ウェブ開発を効率化するためにRailsのビューで使用するためのメソッド集。
`link_to`や`form_with`など、あらかじめ組み込まれているものに加え、機能を自作し追加することも可能。

## 27. マイグレーション
テーブルレイアウトを作成／変更するための仕組み。
マイグレーションを利用することで、テーブル保守の作業を半自動化できるのみならず、途中で属性の追加や変更なども容易に行える。

## 28. Cookies
クライアント側に保存される簡易なテキストファイルのこと。
クッキーによって、複数のページにまたがる形で、ユーザーの識別やクライアント単位の情報を管理できるようになる。 

## 29. 単体テスト（Unitテスト）
アプリを構成するライブラリ（主にモデル）が正しく動作するかチェックするためのテスト。

## 30. 統合テスト（Integrationテスト）
複数のコントローラにまたがって、ユーザーの実際の操作を追跡することでそれぞれのステップが正しく動作するかをチェックするためのテスト。 

# まとめ
- 実技面接に向けて、Rails初学者でもきちんと答えられるようにしておくべき重要用語の概念や定義についてまとめを作成した。
- 改めて勉強してみると、何となくのイメージでしか理解していなかった用語について言語化でき、概念や定義の理解の深化に繋がった。

# 参考URL
- [【Ruby】ドットインストールRuby入門編の内容まとめ【プログラミング学習75日目】](https://qiita.com/fuku_tech/items/3f6804c98678ee397c2e)
- [概念を理解！Rubyのオブジェクトとは【初心者向け】](https://techacademy.jp/magazine/18767)
- [クラスの概念を理解しよう！Rubyのclassとは【初心者向け】](https://techacademy.jp/magazine/9720)
- [メソッドの基本！Rubyで関数を使う方法【初心者向け】](https://techacademy.jp/magazine/7853)
- [Ruby 配列が初心者でもわかる！７個の重要なメソッドも紹介](https://udemy.benesse.co.jp/development/ruby-array.html)
- [ハッシュ - Ruby入門](https://www.javadrive.jp/ruby/hash/)
- [Rubyの文字列とシンボルの違いをキッチリ説明できる人になりたい](https://qiita.com/Kta-M/items/53a13ef60e14fcb41193)
- [【Ruby入門】コロン記号の意味とシンボルのやさしいまとめ！](https://www.sejuku.net/blog/13094)
- [【Ruby】クラスメソッドとインスタンスメソッドについてザクッと分かりやすく説明してみる](https://qiita.com/amidara/items/27221675638cdc9bde6b)
- [はじめてのRuby！モジュール(module)の使い方を解説！](https://www.sejuku.net/blog/15408)
- [クラス・モジュールの概念 Ruby](https://qiita.com/fukumone/items/2dd4d2d1ce6ed05928de)
- [Ruby on Rails 5アプリケーションプログラミング](https://www.amazon.co.jp/Ruby-Rails-5%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%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B-ebook/dp/B071YC72X1/ref=sr_1_2?ie=UTF8&qid=1546339693&sr=8-2&keywords=rails+5)
- [Ruby on Rails 初心者必見！パッケージ管理ツール『gem』を徹底解説](https://blog.codecamp.jp/rails-gem)
- [【Rails入門】helperの使い方まとめ](https://www.sejuku.net/blog/28563)
- [ヘルパー(カスタムヘルパー)ってなんぞ？](https://qiita.com/sanstktkrsyhsk/items/67e9d88b939ccdcf46e8)