プログラミング学習記録19〜突っ走る力〜

##今日やったこと
- Udemyの「Web開発入門完全攻略コース - プログラミングをはじめて学び創れる人へ！未経験から現場で使える開発スキルを習得！」のセクション12の139~150
- セクション13の151~194

以下、パートごとに書いたメモです。

###セクション12AWS Cloud9による開発環境構築
####139.イントロダクション-AWS Cloud9による開発環境構築-
AWS Cloud9を使うとwebアプリケーションの開発がwebブラウザでできるようになります。
１年間無料で利用できます。

※ローカルPC上に環境構築して運用する方法もあります。

AWS Cloud9利用に必要なものは、

- メールアドレス
- クレジットカード
- ユーザー認証用の電話番号

です。

実行環境はGoogle chromeで行います。


####140.AWSの無料利用枠について

>具体的に結論としては、
新規アカウント作成から12ヶ月。月間750時間まで無料利用枠で利用可能。

1年間の無料期間が終わってからは、（ドル円相場にもよるが）1ヶ月に90時間あたりだいたい210円くらいかかるみたいです。安いですね。


詳細は以下のページで確認してください。
AWS クラウド無料利用枠 | AWS(https://aws.amazon.com/jp/free/)

よくある質問 - AWS クラウド無料利用枠 | AWS(https://aws.amazon.com/jp/free/faqs/)


####141.AWS利用時の注意事項！！必ず確認してください！！
アカウント情報の管理は厳重にしましょう。

以下のような被害も実際に出てきています↓
***『AWSで不正アクセスを受けたので、そのときの対応を記録しておく(返金されました)』***
https://qiita.com/kojiro_ueda/items/503d24b313a3a80b8ecc

あと、知識がない状態でAWSのいろいろなサービスを利用するのは、セキュリティ面や費用の面で危険だということです。

知識をつけてから、わかるものから少しづつ手をつけていきましょう。


####142.AWSアカウント作成
AWSアカウント作成についてです。

以下のページに具体的な流れが書かれています。
AWS アカウント作成の流れ | AWS(https://aws.amazon.com/jp/register-flow/)


####143.IAMの設定

>AWS Identity and Access Management (IAM) は、ユーザーに対して AWS へのアクセスを安全に制御するための仕組みです。

AWS Identity and Access Management (IAM - ユーザのアクセスを安全に制御）| AWS（https://aws.amazon.com/jp/iam/） より引用

この講座ではIAMユーザーとしての利用で進めていくようです。

####144.無料利用枠の使用のアラートの受信設定
AWSの不正な請求を防ぐためにあらかじめ行っておくべき設定です。

####145.Cloud9のセットアップ
IAMユーザーでCloud9のセットアップを行いました。

これでIDE(統合開発環境)の準備ができました。

####146.Cloud9の画面説明
linuxコマンド
`$ ruby -v`
でインストールされているrubyのバージョンを確認しました。



####147.補足：AWS Cloud9のテキストエディタの設定について

AWS Cloud9の設定に関する補足資料です。
AWS Cloud9のテキストエディタの設定について
(https://programmingnavi.com/1690/)

Tabキーでスペース2個作れるようにするのと、不可視文字を表示する設定です。


####148.新・Rubyのバージョン管理１
複数の開発案件を抱えていると、複数のrubyのバージョンを扱うことがあります。

なので、複数のrubyのバージョンを管理する方法を学びましょう、という話です。

Rubyのバージョン管理ソフトウェアはいくつかありますが、この講座ではrvmを使って進んでいきます。

Cloud9にインストールされているrvmのバージョンを確認しました。


`$ rvm help`

でrvmのヘルプを出すことができ、コマンドを調べることができます。


####149.Rubyのバージョン管理２
鍵のインストールについてです。

####150.Rubyのバージョン管理３
Rubyの最新バージョンは2.6.0ですが、動画に合わせてrvmで2.5.0をインストールし、デフォルトに指定しました。

このパートで実際に入力したコマンドです↓

`$ rvm list`
でインストールされているrubyのバージョンが確認できます。

`$ rvm install 2.◯.◯`
で指定したバージョンのrubyがインストールできます。

`$ rvm use rubyのバージョン`
でインストールされているrubyの中から使いたいバージョンを選ぶことができます。

`$ rvm remove rubyのバージョン`
で指定したバージョンのrubyをアンインストールできます。

`$ ram —default use rubyのバージョン`
でインストールされているrubyの中から指定したいものをデフォルトに指定することができます。


###セクション12AWS Cloud9による開発環境構築　全体の感想

Cloud9についてより詳しくなれました。

Cloud9を使うのは初めてではないのですが、複数のバージョンを管理する方法等は知らなかったので、知れてよかったです。

とりあえず開発環境構築まで来れて一安心という感じですね。

いよいよ次のセクションではRubyに入ります。

楽しみです。

ということで、気を引き締めて次のセクションに進みたいと思います。


<br>
###セクション13Ruby入門
####151.イントロダクション-Ruby入門-
このセクションの概要。

####152.Rubyとは
Rubyはプログラミング言語でruby on railsはフレームワーク。

詳しい情報は公式HPで確認できます。
Rubyとは
（https://www.ruby-lang.org/ja/about/）

####153.動作確認環境について 
この講座ではAWS Cloud9でRubyのバージョンは2.5.0で行います。


####154.はじめてのRubyプログラミング
Rubyを動かす方法はirb（対話型評価環境）を使う方法とファイルに保存したプログラムを実行する方法の２つがあります。

このパートでは両方の方法を試してみました。

Irbはコマンド
`$ irb`
で起動します。

元の画面に戻るときは
`exit`
です。


ファイルに保存したプログラムを実行する方法ではProgateのコマンドラインでやったコマンドを使いました。


`kinu:~/environment/ruby_projects $ pwd
/home/ec2-user/environment/ruby_projects
kinu:~/environment/ruby_projects $ ruby hello.rb
Hello World!`


Rubyのファイルは実行したいファイルの親ディレクトリに移動してから$ ruby 〇〇.rb で実行します。


####155.コメント
Atomと同じようにCloud9でもcommandキー+/キーでコメントアウトします。

####156.ローカル変数
price1=100や_price=100のような変数は原則使わないようにしましょう。

price_costのように_で区切るのは使われますが、priceCostのような書き方はあまり使いません。

あと、Rubyの予約語として指定されているものは変数名に使えません。

Ruby 予約語


####157.定数
定数は全て大文字で書くことが多いです。

例

`TAX=1.08
TAX_RATE=1.08`

定数への代入は一度きり。


####158.リテラル
Rubyのプログラムの中に直接記述できる値のことをリテラルと言います。

数字や文字列、配列、ハッシュはリテラルです。


####159.オブジェクト指向プログラミング言語イントロ
オブジェクトとは、データや処理の集まりのことです。

今は言葉をざっくり知っていればいいそうです。

クラス、インスタンス、メソッドについてのざっと学びました。

####160.数値（Numeric）
基本的な計算方法と数値を扱うメソッドのついての動画です。

####161.文字列(String)
文字列を途中で改行したい場合は、\nを間に入れてダブルクオーテーションで囲む必要があります。

特殊文字や式展開を行うときは、ダブルクオーテーション。それ以外はシングルクオーテーション、という使い分がオススメらしいです。

####162.空白文字について
出力結果は変わらないが、10 + 1 - 3 のように空白を入れると見やすくなるので、空白を入れて書きましょう。

####163.演算子による値の比較
2つの値の大小や同じかどうかを調べる方法についてです。
関係が成り立つ場合は真（true)、成り立たない場合は偽（false)が返ってきます。

例えば、
`puts 1<2`
と書いたら、trueが返ってきます。

####164.演算子の優先順位
どの順番で計算されるのか？という話です。

詳しくはこちらでご確認ください。
演算子の優先順位(https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html)

####165.数値と文字列は暗黙的に変換されない
原則、数値と文字列をつなげることはできないので、.to_iや.to_f、.to_sを使って変換する必要があります。

####166.インクリメントとデクリメント
インクリメントとは、値に１を足すことです。

デクリメントとは、値から１を引くことです。

Rubyには、JavaScriptでいうところの++、—はありません。

なので、インクリメントはn=n+1、n+=1のように、デクリメントはn=n-1、n-=1のように表現します。

####167.真偽値

>Rubyの真偽値のルール
・falseまたはnilであれば偽（false)
・それ以外は全て真（true)

その他真偽値に関係するメソッドにも軽く触れました。

####168.条件分岐if
点数によって異なる評価を示すプログラムと動物の種類によって、ターミナルに出力する鳴き方を変えるプログラムを作りました。

####169.条件分岐 unless
unlessは条件式がfalseの時に実行したい処理を書きます。

unlessにelsifに相当するものはないので、無理に使う必要はありません。

```ruby
n=1
unless n.zero?
  puts ‘0ではありません’
end
```

を実行すると「0ではありません」が出力される。


####170.条件分岐 case
複数の条件を指定する場合は、elsifを何個も使うよりもcaseを使った方がわかりやすくなります。

誕生石から、誕生月を出力するプログラムをcaseを使って作りました。

```ruby
stone = 'ruby'
case stone
when 'ruby'
  puts '7月'
when 'peridot'
  puts '8月'
when 'sapphire'
  puts '9月'
else
  puts 'データが登録されていません'
end
```

####171.演習：条件分岐
年齢によってテーマパークの入場料を出し分けてターミナルに出力するプログラムを作る演習です。

これは簡単でした。

####172.演習回答：条件分岐
模範回答と同じでした。

```ruby
age = 5
if age >= 12
  puts "5000円"
elsif age >=6
  puts "2500円"
else
  puts "1000円"
end
```

####173.メソッド
メソッドは複数の処理をまとめて、扱いやすくしたものです。

Progateでは戻り値にreturnを使っていたのですが、この講座ではreturnを使っていません。

returnを使わなくても、大丈夫みたいです。


####174.演習：FizzBuzz
有名な問題ですね。
会社の採用面接で問われることもあるそうです。

なんとかクリアできてよかったです。

####175.演習回答：FizzBuzz
ポイントは先に15で割り切れる数の処理を書くことですね。

```ruby
def fizz_buzz(n)
  if n%15==0
    'FizzBuzz'
  elsif n%3==0
    'Fizz'
  elsif n%5==0
    'Buzz'
  else
    n.to_s
  end
end
puts fizz_buzz(1)
puts fizz_buzz(2)
puts fizz_buzz(3)
puts fizz_buzz(4)
puts fizz_buzz(5)
puts fizz_buzz(6)
puts fizz_buzz(7)
puts fizz_buzz(8)
puts fizz_buzz(9)
puts fizz_buzz(10)
puts fizz_buzz(11)
puts fizz_buzz(12)
puts fizz_buzz(13)
puts fizz_buzz(14)
puts fizz_buzz(15)
```

3でも5でも割り切れない数字は文字列に変えて出力してください、ということで、n.to_sにしてます。

参考

- to_i→文字列を数字に変えるメソッド
- to_s→数字を文字列に変えるメソッド

####176.puts,print,p
putsは改行されてnulになりますが、printは改行されずにnulが出ます。

Pメソッドはデバック用のメソッドです。

####177.配列
配列の基本と配列に関する様々なメソッドについて学習しました。

具体的に、どの場面でどのメソッドを使うかはわからないので、さらっと流して次に進みます。

(0..25).to_a
で0から25の数字を含んだ配列を作ることができます。


####178.ハッシュ
連想配列とも呼ばれるものです。

each文の書き方がProgateでやったものとは違っていましたが、基本的な考え方に大きな違いは’ないので、このまま突き進みます。


####179.繰り返し処理
繰り返し処理の概要。

####180.繰り返し処理 each, for
原則、for文は書かないそうです。

配列とハッシュそれぞれでeach文を書いてみました↓

```ruby
numbers = [1,2,3,4,5]
numbers.each do |number|
  puts number
end


scores = {nakamura:90,sato:80,suzuki:70}
scores.each do |name,score|
  puts "#{name},#{score}"
end
```

####181.繰り返し処理 times
配列を使わずに指定した回数繰り返したい時に使います。

```ruby
5.times do
  puts 'hello'
end

5.times do |i|
  puts "#{i}.hello"
end
```

この時、iは1からではなく、0から始まります。

####182.繰り返し処理while
指定した条件が真である限り繰り返す処理です。

条件を指定せずに無限ループにならないように注意しましょう。

####183.繰り返し処理 upto,downto
Uptoは数値を1ずつ増やしながら何かしらの処理をしたい時に使い、downtoは1ずつ減らしながら何かしらの処理をしたい時に使います。

####184.繰り返し処理 step
指定した数字から指定した数字まで指定した数字ずつ増えていく処理をしたい時に使います。

構文は、開始式.step(上限値、一度に上限する大きさ）

####185.繰り返し処理 loop, break, next
Loopはあえて無限ループを作りたい時に使います。

Breakで指定したところで中断させることができます。

Nextを使うと、同じブロック内のnext以降の処理が行われずに次の繰り返しが行われます。

####186.クラス
クラスは設計図のようなもので、インスタンスは実体と考えることもできます。

用意されているクラスもたくさんあるのですが、自分でクラスを作る方法を学びました。

Progateではinitializedメソッドの中のインスタンス変数はself.name=nameのように記述していたのですが、この講座では@name=nameのように記述していました。

違いはありますが、基本的な考え方は一緒ですね。

```ruby
class User
  
  def initialize(name)
    puts 'initialize!!'
    @name = name
  end
  
  def hello
    puts "Hello! I am #{@name}."
  end
end

emma = User.new('Emma')
emma.hello

olivia = User.new('Olivia')
olivia.hello
```

####187.アクセサ
attr_accessorなどのアクセサについてです。

インスタンス変数の値を読み書きするメソッドのことをアクセサメソッドと言います。

アクセサメソッドには読み取り専用のもの、書き込み専用のものもあります。

具体的な使用場面についてはまだよくわかっていませんが、切った貼ったができる便利なものだというニュアンスはわかった気がします。


####188.訂正：クラスメソッド、クラス変数
189のスペルミスのお詫びです。

####189.クラスメソッド、クラス変数
クラスメソッドは、インスタンスを生成せずにクラスから直接呼ぶことができるメソッドです。

クラス変数は、クラス自体に値を保持することができる変数です。


####190.クラスの継承
継承とは、親クラスを受け継いで使うことです。

継承を使うことで、共通部分を繰り返し書く必要がなくなるので、楽にコーディングできますね。

子クラスの方でオーバーライド（上書き）すると子クラスの方が優先されます。


####191.メソッドのアクセス権
メソッドのアクセスできる条件を指定することができます。

メソッドのアクセス権には３つの種類があります。

Public→クラスの外部からでも自由に呼び出せる（デフォルト）

Private→クラスの内部でのみ使えます

Protected→これはあまり使われないそうです。

メソッドの上にprivateと書くだけでprivate化できます。


####192.モジュール
モジュールはクラスのようにメソッドや定数をまとめられるものです。

クラスのようにインスタンスを作ることはできませんが、関連するメソッドなどをまとめてグループ化したい時に手軽に使えるため、便利です。


####193:例外
実務では例外が発生した時の処理を記述しておくことが大事だそうです。

####194.Rubyのコーディングルール
プロジェクトメンバーと一緒にコーディングするときに参考にする共通のルールです。

The Ruby Style Guide （日本語）(https://github.com/fortissimo1997/ruby-style-guide/blob/japanese/README.ja.md)

RuboCop(https://github.com/bbatsov/rubocop)


###セクション13 Ruby入門　全体の感想
パソコンのバッテリー残量の関係でかなり急ぎ足で終わらせました。

まだまだ理解できたいないところだらけですが、Progateをやっていたこともあり、理解できる部分も多くありました。

ひとまず完走することを第一に考え、このまま突き進みます。

きっと２回、３回と繰り返し触れていけば簡単になるはず！！！

<br>
あと残り87パートになりました。

このまま突っ走ります。

ということで、引き続き明日からもプログラミング学習頑張ります。

おわり