Rails Tutorial 0章：事前基礎知識学習5

#事前基礎知識学習:Ruby

<b>[Rails Tutorialの内でオススメされているPROGATE](https://prog-8.com/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/808789/ea2a374d-5d52-51f7-ef1a-119b7452f1a9.png)

>Railsチュートリアルでは、初心者向けプログラミング学習サービス「Progate」と提携し、日本語でWebの基礎知識を学べるコースも用意しました。
同サービスは環境構築不要かつブラウザ上でコーディング体験ができるため、特にプログラミング未経験者にうってつけです。
このまま本チュートリアルを読み進めてももちろん大丈夫ですが、
もし読んでいて「難しい」と感じたら、本文中の「関連」で示されているコースで基礎知識を学んでみることをおすすめします。
特にプログラミングの経験がほとんどない場合は、Railsチュートリアルを読み進める前に、Progateの「Web開発パス（Ruby on Rails）」から始めてみることをオススメしています。
引用 : [Rails Tutorial 第1章] (https://railstutorial.jp/chapters/beginning?version=6)

Progateは『説明スライドを読む』⇒『コードを書く』の繰り返しです。
私も使った事ありますが、非常に分かりやすくて手軽にチャレンジできます。
月額980円の価値は確実にありますね。

ただ個人的には、まずは4章迄は進めてみる事をオススメします。

自分に学習経験があるからかもしれませんが、
今まで学んだ内容の中でRails Tutorialの第四章 Rails風味のRubyが一番分かりやすかったです。
Progateでもそうだったんですが、
オブジェクト指向という概念が出てくるあたりから(。´・ω・)ん?って感じになるんです。
どうしてこんな書き方するの？って疑問を抱えながら取り合えずコードを覚えて不完全燃焼です。
今回、Rails Tutorialをやってオブジェクト指向的な書き方をする理由がやっとなんとなく分かりました。



## Ruby基礎
```ruby
#STEP1: 文字列の表示 |文字列は必ず""(ダブルクォーテーション)または''(シングルクォーテーション)で囲む|
puts ("Hello World")　:Putsは自動で改行される(こっちの方がよく使う)
print ("Hello World") :Printは改行されない。
```

```ruby
#STEP2: 変数の理解1 |変数は一時的に保管する箱|
a = "Hello World"
print(a) 
-> Hello World

#STEP3: 変数の理解2 |もちろん数字も入る|
a = 3

#STEP4: 変数の理解3 |1個しか保管できない＆最後に入れたデータが保管される|
a = "Hello World"
a = "Hello Japan"
puts(a) 
-> Hello Japan

#STEP5: 文字列操作 | + を使った文字列の結合|
a = "Hello"
b = "Japan"
puts(a + b) 
-> HelloJapan

puts(a +" "+ b) 
-> Hello Japan
```

```ruby
#STEP6: 配列1 |モノを複数入れたい場合は配列を使う|
a = ["Hello World", "Hello Asia", "Hello Japan"]
puts(a) 
-> ["Hello World", "Hello Asia", "Hello Japan"]

puts(a[0]) 
-> Hello World 

puts(a[1]) 
-> Hello Asia 

puts(a[2]) 
-> Hello Japan 

#STEP7: 配列2 |配列にモノを追加していく|
a = [] #これで空の配列を作る
a.append("Hello World")
a.append("Hello Asia", "Hello Japan")
puts(a[0]) 
-> Hello World 

puts(a[1]) 
-> Hello Asia 

puts(a[2]) 
-> Hello Japan
```

```ruby
#STEP8: ハッシュ |名前付き配列|
user = { "name"=>"Michael Hartl","email"=>"michaelhartl@example.com" }
puts(user)
-> { :name=>"Michael Hartl", :email=>"michaelhartl@example.com" }

puts(user["name"]) 
-> "Michael Hartl"

puts(user["email"]) 
-> "michaelhartl@example.com"

#STEP9: ハッシュ2 |記述法は1個だけじゃない・・・|
user = { name:"Michael Hartl", email:"michaelhartl@example.com" }

puts(user[:name]) 
-> "Michael Hartl"

puts(user[:email]) 
-> "michaelhartl@example.com"

#STEP10: ハッシュと配列の複合技| マトリョーシカみたいにしてよく使う |
user_data = []
user = { name:"Michael Hartl", email:"michaelhartl@example.com" }

user_data.append(user)
puts(user_data) 
-> [{:name=>"Michael Hartl", :email=>"michaelhartl@example.com"}]

user = { name:"Michael Jacson", email:"michaeljacson@example.com" }
user_data.append(user)
puts(user_data) 
-> [{:name=>"Michael Hartl", :email=>"michaelhartl@example.com"}
{:name=>"Michael Hartl", :email=>"michaelhartl@example.com"}]

puts(user_data[0][:name]) 
-> "Michael Hartl" #0番目の配列にある"name"を取り出す
```

```ruby
#STEP11 lengthメソッド |文字数・配列の中身の個数を返す|
a = "length"
puts(a.length)
->　6 #文字の個数を返す

user_data = [{ name:"Michael Hartl", email:"michaelhartl@example.com" },
{ name:"Michael Hart", email:"michaelhart@example.com" },
{ name:"Michael Har", email:"michaelhar@example.com" },
{ name:"Michael Ha", email:"michaelha@example.com" }]

puts(user_data.length)
-> 4 #配列の中に入っているハッシュ数を返す
```

```ruby
#STEP: ループ処理|eachをよくつかう|
user_data = [{ name:"Michael Hartl", email:"michaelhartl@example.com" },
{ name:"Michael Hart", email:"michaelhart@example.com" },
{ name:"Michael Har", email:"michaelhar@example.com" },
{ name:"Michael Ha", email:"michaelha@example.com" }]

user_data.each do |user| 
  puts("お名前: " user[:name] + " メールアドレス: " + user[:email])
-> お名前: Micheal Hartl メールアドレス: michealhartl@example.com
-> お名前: Micheal Hart メールアドレス: michealhart@example.com
-> お名前: Micheal Har メールアドレス: michealhar@example.com
-> お名前: Micheal Ha メールアドレス: michealha@example.com

#処理の内容を理解しよう(^_-)-☆
1 user_dataの一行目を　|user|で定義した変数userに格納する
  #user = { name:"Michael Hartl", email:"michaelhartl@example.com" } が入る。
2 puts("お名前: " user[:name] + " メールアドレス: " + user[:email]) 形を整えて表示
  #お名前: Micheal Hartl メールアドレス: michealhartl@example.com
3 .eachは配列がなくなる迄繰り返せというメソッド
```

for文・・・？ while文・・・？ あんまりお目に掛からないです。
誰かがfor文などを使ってeachメソッドを作ってくれているんですよね。
学生時にプログラミングを学んだ時はfor文を使って一個づつ取り出す処理を記述をしてました。
eachメソッドのおかげで便利になっているけど実際の処理内容は見えないですよね
これがもや～っとする原因なんだと思います。
一方で複雑な処理を理解できるかというと（　＾ω＾）・・・。
処理が複雑化しているので便利メソッドでさくっと利用できるのは本当にありがたいですね。

##余談 : 数年前にProgateもチャレンジしたよ。
Progateは『説明スライドを読む』⇒『コードを書く』の繰り返しです。
非常に分かりやすいので月額980円の価値は非常にあると思いました。
私がProgateで学習したのはHTML/CSS/Python/JavaScript/jQueryです。

Progateで勉強すると、コードの書き方は分かるようになるんです。
静的なウェブサイト・少し動きの付いたウェブサイトを作れるレベルに到達します。

[デザインの参考になるステキなシングルページサイト1](https://ristorante-due-mamme.com/)
本当に頑張ったら、素敵な静的ウェブサイトを作れると思います。

それでもやっぱりProgateだけだと知識的に足りない部分が出てきます。

* ウェブサイトをインターネットにどうてって公開するの？
* qiita.comみたいな独自ドメインってどう取得する？
* Google Mapをどうやってウェブサイトに埋め込む？
* データベースと連携したWEBアプリ作りたいどうすればいいの？

いざ何かを作ろうとしたときにやっぱり知識が足りない・・・。
情報が溢れているのでカオス化してどうすりゃいいの？ってなるんですよね。
自分が作りたいモノを詳しい方に聞きながら作れる環境がベストなんだろうなと思います。