実務未経験の初心者がRailsを学習してみた

# ① はじめに

初投稿になります🌷
IT業界に未経験で転職して約１週間が経過し、
元々HTML/CSSの知識がごく僅かしかない私が、Ruby on Railsを学習してみました。
特に重要だなと思ったところや、自分の中で引っかかったところを中心にアウトプットしていきます！

# ② 使用した教材

今回はudemyの、
[はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/?couponCode=KEEPLEARNING) を使って勉強しました。


![スクリーンショット 2024-06-10 13.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/7b404efc-7a79-8e27-f512-3662d2b67786.png)
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　（概要より引用）

この教材を使っている前提で進めていきます🙇‍♀️




# ③  AWS Cloud 9 で開発環境の構築

セクション2では AWS Cloud9 の開発環境の構築を行いました。
```
〜AWS Cloudとは〜
AWSが提供しているクラウド環境でアプリケーションの開発やデータベースなどの利用が可能な
IDE（統合開発環境）のこと。
※AWS・・Amazon Web Services の略
```

講座の手順通り、Cloud9を作成していきます。

作成後、まずはインストールしてあるRVMのバージョンをターミナルで調べます。

```
〜RVMとは〜
Rubyのバージョンを切り替えるソフトウェアのこと。
※RVM・・Ruby Version　Manader　の略
```
![スクリーンショット 2024-06-10 16.29.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/3e96ce61-2c0b-e64e-5f9d-ec0e9442a31c.png)

ターミナルに　＄ rvm -v　を入力してバージョンを確認
→ rvm 1.29.12 
すなわちバージョンは 1.29.12ということが確認できます。

今回の講座では、「Ruby 3.0.2」が推奨されているので、
rvmで切り替えることの出来るRubyのバージョンを調べます。

ターミナルに　$ rvm list　を入力
![スクリーンショット 2024-06-10 16.41.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/6b6e9293-383e-5524-e5dc-b6acbcc12c0a.png)

ruby-3.0.2とruby-3.2.2 があり、ruby-3.2.2が現在選択されています。
これをruby-3.0.2に変更するには、
ターミナルに　$ rvm use 3.0.2　を入力
→Using ruby-3.0.2 と記載があり、
ruby-3.0.2に変更されました。

![スクリーンショット 2024-06-10 16.54.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/9e0c66b3-1dd2-22d7-6a0d-f2bb763075c4.png)

これでRuby入門のための環境構築が完成しました。
ここまでで大体３時間ほどかかりました😇（かかりすぎ）

原因としては、Cloud9を作成するときに全て英語でわかりづらかったからです。😇
あと、 google chrome での作成が必須だったにも関わらず、
説明をしっかり読まなかった結果 safari から作成していたため
全てやり直すという痛い目をみました・・しっかり説明文は読みましょう(自戒）

# ④ Ruby入門
```
〜前提知識〜
Ruby・・プログラミング言語
Ruby on Rails・・Rubyで書かれたWebアプリケーションのフレームワーク
```

ーー自分メモーー

⚪︎変数名の命名規則
・アルファベットの小文字orアンダースコアで始まる
・それに続けて、アルファベット・数字・アンダースコアで記述する

⚪︎定数
・変化しない(または頻繁に変化しない)値を扱う時に使う
　ex)手数料率、消費税率、円周率

⚪︎リテラル
・Rubyのプログラムの中に直接記述出来る値のこと
　ex)数値の123や文字列の'Hello'など


⚪︎整数同士の割り算は整数になるため、
　小数点以下の値が必要な場合はどちらかの値を小数点表記にする



![スクリーンショット 2024-06-10 18.02.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/d17f2940-8a96-1e24-2dc3-476d99d5f75c.png)

⚪︎xに .to_f を付けることで、整数を小数点付きの数字で表記することが出来る
![スクリーンショット 2024-06-10 18.06.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/875be9d3-e603-b1e6-731b-a2cab252c641.png)

⚪︎文字列(＼）
・バックスラッシュを使うと改行される(下の行を参照)
![スクリーンショット 2024-06-10 19.06.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/e07f49ed-4014-f1bf-2df9-f063c021af53.png)

⚪︎演算子の優先順位がわからなくなった時
・リファレンスマニュアルを確認する
https://docs.ruby-lang.org/ja/3.0/doc/spec=2foperator.html


### if構文

![スクリーンショット 2024-06-10 20.32.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/5aac2885-4d06-5f2c-e375-c860a3b2985b.png)

if 条件1
#条件1が真の値の時に実行したい処理
elsif 条件2
 #条件2が真の値の時に実行したい処理
elsif 条件3
 #条件3が真の値の時に実行したい処理
else
 #それ以外の処理
end

### unless構文

unless 条件式
 #条件式が偽(false)の時に実行したい処理
else　条件式
#条件式が偽(false)でない場合、すなわち真(true)の時に実行したい処理
end

※elsifに相当するものはない
※elseは省略可能

### case構文
![スクリーンショット 2024-06-11 19.47.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/7158de26-7055-5e0b-7e16-78f3637d9eea.png)

case対象のオブジェクトや式
when　値1
#値1に一致する場合の処理
when　値2
#値2に一致する場合の処理
when　値3
#値3に一致する場合の処理
else
#どの値とも一致しない場合の処理
end


### メソッド構文
![スクリーンショット 2024-06-11 20.04.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/b738fa36-cb3d-d1f7-7dcc-a15721fe0670.png)

def メソッド名（引数1,引数2・・)
#実行したい処理
end

★メソッド
 ・複数の処理を1つにまとめて、扱いやすくしたもの
 ・クラス内に定義する

### 配列

・複数のデータをまとめて格納できるオブジェクトのこと
・配列内のデータ(要素)は順番に並んでいて、添字(インデックス)を指定することでデータを取り出せる

[要素1,要素2,要素3]　のように作成

### ハッシュ
・キー(key)と値(value)の組み合わせでデータを管理するオブジェクト

{キー１=> 値1,キー2 => 値2, キー3 => 値3}　のように作成


### 繰り返し処理：each
![スクリーンショット 2024-06-11 20.35.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/1737d2a6-2060-0836-e348-c2b9c1914b69.png)

配列やハッシュ.each do |変数|
#繰り返し実行したい処理
end

### 繰り返し処理：for  (原則使わない）

for 変数 in 配列やハッシュ do
#繰り返し実行したい処理
end


### 繰り返し処理：times

・配列を使わずに、単純にn回処理を繰り返したい場合に使う

![スクリーンショット 2024-06-11 20.47.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/4f8fa705-17ef-9d14-2058-3bf778f87167.png)

繰り返し回数.times do |i|
#繰り返し実行したい処理
end
※|i|は省略可能

### 繰り返し処理：while

![スクリーンショット 2024-06-11 20.49.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/c32d867a-0659-879d-b995-d41a5d5525b5.png)

while 条件式　do
#繰り返し実行したい処理
end

### 繰り返し処理：upto

・nからmまで数値を1ずつ増やしながら、何かしらの処理を実行したい場合に使う

![スクリーンショット 2024-06-12 9.16.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/cc54ff4b-a6e4-6a8e-130b-63f9b0caaa14.png)

開始値.upto(終了値){繰り返し実行したい処理}

### 繰り返し処理：downto
・nからmまで数値を1ずつ減らしながら、何かしらの処理を実行したい場合に使う

開始値.downto(終了値){繰り返し実行したい処理}

### 繰り返し処理：step
・nからmまでxずつ値を増やしながら、何かしらの処理を実行したい場合に使う

![スクリーンショット 2024-06-12 9.20.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/2610f1db-84ff-b558-6fac-8f987669566e.png)

開始式.step(上限値,一度に増減する大きさ){}

### モジュール
・クラスのようにメソッドや定数をまとめられるもの
・クラスとの違いは、「インスタンスを作ることができない」「継承ができない」


module モジュール名
#モジュールの定義（メソッドや、定数など）
end

-------

★rubyの入門セクションの内容を整理するためにメモをしましたが、
　正直今はまだあまり理解度が深くないです・・
 　でも、初めて見るものと１回でも見たことがあるものとでは
  　全然違うと思うので、今は頭に入ってなくても良しとしています


# ⑤ Ruby on Rails入門
```
⚪︎MVCアーキテクチャ
・Model
　　データベースアクセスなどデータ関連処理
・View
　　画面表示
・Controller
　　リクエストやレスポンスを制御
  　ViewとModelの橋渡し

⚪︎ERB
・Embedded RuBy の略
・htmlの中にrubyのプログラムを埋め込むことが出来る
```

# ⑥ミニ Q&A サイトの開発

```
CRUDとは？

・Create・・作成
・Read・・表示
・Update・・更新
・Delete・・削除

ウェブアプリケーションの大半はこの４つの機能の組み合わせで成り立っている
```

講座通りに進めていましたが、「115.質問モデルを作成しよう」で
初めてエラーが出てしまいました。

![スクリーンショット 2024-06-12 10.59.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/d2ff5db3-bc65-0ddc-c5c1-3a2b0334699b.png)

これはインデントが半角になっていなかったことが原因でした🙇‍♀️
気をつけて入力したいと思います！

------------

そのまま進めていくとまたもやエラーが・・

![スクリーンショット 2024-06-12 11.11.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/745d1051-6f8b-c0e3-e7c5-c0ae5f8e757c.png)

講座の通りにやっていましたが、「content」ではなく「contect」なのでは？と
言われてしまっています涙

会社の方にアドバイスを貰いましたが、それでもエラーが解消されなかったため、
泣く泣く1からやり直しました。

原因をしっかり突き止めてからやり直したかったのですが、
時間もなかったため止むを得ず・・

やり直したところ、無事にエラーは発生せず😢
殆どのエラーが誤字が原因だったため、少し気持ち悪い感じに終わりました。

----

そのまま進め、完成することができました✨

![スクリーンショット 2024-06-12 11.41.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/44abea44-09a9-c4eb-1f07-b81357fcb821.png)
![スクリーンショット 2024-06-12 11.41.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/0f694f37-44cb-1261-bda0-0a30547ccb53.png)

　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　（一部抜粋）


# ⑦ 学習してみた感想

・誤字には十分注意する
・エラーが出てきた時はどこが原因かすぐわかるようにこまめに確認する
・今回は一通りやって作る！という目標が達成でき、自信が少しついた（未経験者的思考）
・何がなんの意味を持っているのか、あまり理解出来なかった
　→２週目は理解を深めるためにも、１つ１つ意味を調べながら学習する
・構文やメソッドの意味が多すぎる
・環境構築が大変
・完成した時は素直に嬉しかった😊


----

次はログイン機能を学べる教材で学習していきます✏️