RubyとRailsの個人的によく使うメソッドをまとめてみた

今回はタイトルにもある通り、個人的によく使うメソッドをまとめてみました。
初学者なので間違いがあれば指摘していただけると嬉しいです。

## そもそもメソッドとは？

メソッド　＝　処理。

- 自分で作るメソッド
- Rubyがあらかじめ用意してくれているメソッド 

のふたつがある。
今回はRubyがあらかじめ用意してくれている便利メソッドを紹介します。

##putsメソッド

ターミナルに値を出力するメソッド。putsの後に値を記述することで出力できる。

```
puts "Helloworld"

=> Helloworld
```

##getsメソッド

ターミナルに値の入力機能を起動するメソッド。入力された値は文字列としてプログラムに渡される。
また文字列として扱う際、getsで取得した値の後は、出力の際に改行され、gets.to_iで数値として扱う場合は改行されない。

```
name = gets
puts "こんにちわ、" + name + "さん！"

=> 好きな文字列を入力する（今回は太郎）

=> こんにちわ、太郎
　　さん！
```

上記の通り、このままだと改行がされてしまうのでそんな時はchompメソッドを合わせて使うと良い。

##chompメソッド

文字列の末尾に存在する改行を取り除くメソッド。

```
name = gets.chomp
puts "こんにちわ、" + name + "さん！"

=> 好きな文字列を入力する（今回も太郎）

=> こんにちは、太郎さん！
```

となって改行されるのを防いでくれる。



##lengthメソッド（文字列）

文字列の文字数を数えるメソッド。その際、**半角スペース**も文字数として数えられる。

出力する際は数値として出力される。


```
a = "Helloworld".length

puts a

=> 10
```

ちなみにこんな感じで**配列**にくっつければ要素数を数えてくれる。

```
a = ["Hello","World"].length

puts a

=> 2
```

##to_sメソッド

整数　→　文字列に変換するメソッド。
通常、整数(Integer)型と文字列(String)型による足し算はできないが、こうして型を換えることで可能になる。

```
puts 20.to_s + "歳"

=> 20歳
```

ただ、下記のように文字列に対して掛け算をすることは整数(Integer)型に変換しなくても可能。

```
puts "歳" * 10

=> 歳歳歳歳歳歳歳歳歳歳歳
```

##to_iメソッド

文字列(String)　→　整数(Integer)に変換するメソッド。

```
a = "10".to_i

puts 20 + a

=> 30 
```

ちなみに文字列をto_iで変換し、整数型と四則演算すると、全て０として変換されるらしい。
冷静に考えたら当たり前なのだが、最近まで知らなかった。

理想↓↓

```
a = "歳".to_i

puts 20 + a

=> 20歳
```

現実↓↓

```
a = "歳".to_i

puts 20 + a

=> 20
```

getsメソッドと合わせて使うと応用が効いて便利。
ちなみにgetsの**s**はstring（文字列）型のsらしいです。
（複数形だと思ってたなんて口が裂けても言えない....）

```
input = gets.to_i

puts 100 + input

=> 好きな数値を入力（今回は100を入力する）
   200
```


##その他類似の変換系メソッド

個人的にはまだ活用できていないが、使い方を理解できると便利であろう変換系のメソッド。

| メソッド 　|効果|
|:-----------|------------:|
| to_f       | Floatクラス（浮動小数点数）に変換        | 
| to_sym     | シンボルに変換      | 
| to_h       | ハッシュオブジェクトに変換        |
| to_a       | 配列オブジェクトに変換         | 


##requireメソッド

外部ファイルを読み込むためのメソッド。require "外部ファイル名"で読み込める。
ただしカレントディレクトリから読み込む場合はrequire "./外部ファイル名"で読み込む。

##日付や時間を取得する際に便利なメソッド

###Dateクラス
Rubyの標準ライブラリの機能で日付を扱うためのクラスのこと。
require "date"という一文をコード内に記述することで使用できる。

###todayメソッド
本日の日付を取得するメソッド。
例）Date.today　今日の日付を取得する

###wdayメソッド
0～6の数値で曜日を取得するメソッド。
0:日曜日、1:月曜日、2:火曜日、3:水曜日、4:木曜日、5:金曜日、6:土曜日を表す。

例）Date.today.wday　今日の曜日を数値で取得する

###strftimeメソッド
日時データを指定したフォーマットで文字列に変換するメソッド。

例）message.created_at.strftime("%Y年%m月%d日 %H時%M分")　保存された日時を文字列で取得する

##eachメソッド

配列や範囲オブジェクトなどで用意されているメソッドであり、オブジェクトに含まれている要素を順に取り出し、変数に格納します。

```
オブジェクト.each do |変数|
  実行する処理1
  実行する処理2
end
```
↓↓↓↓

@posts = Post.all だとここでは認識しておいてください。

```
 <% @posts.each do |post| %>
   タイトル：<% post.title %>
   投稿者：<% post.user %>
   投稿内容：<% post.product %>
<% end %>
```

##each_with_indexメソッド

each（要素の繰り返し処理）と同時に、その要素が何番目に処理されたかを表すメソッド。デフォルトだと処理番号は0から割り当てられる。
僕はランキング機能を作成するさいに用いました。

```
オブジェクト.each.with_index do |変数１,変数２|
  実行する処理1
  実行する処理2
end
```
↓↓↓↓

```
 <% @posts.each.with_index(1) do |post, i| %>
   第<%= i %>位
   <% post.title %>
<% end %>
```

@postsの中身と指定した数字（１）が |post, i|にそれぞれ格納され、「第◯位」と「投稿のタイトル」に割り振られる。


##include?メソッド

指定した要素が配列や文字列内に含まれているかを判定するメソッド。


```
number = [100, 200, 300 , 400 , 500]

puts number.include?(200)

=> true
```

##splitメソッド

指定した区切り文字で対象となる文字列を分割して配列にする。

```
fruit = "apple,strawberry,grape,banana"

puts fruit.split(',')

=> ["apple", "strawberry", "grape", "banana"]
```

##sliceメソッド

配列や文字列から指定した要素を取り出すことができるメソッド。
文字列の要素を指定する際は数字を用い、先頭の文字列は0から指定する。また第二引数として、取り出す要素の数も指定したい場合は指定することもできる。

```
number = [100, 200, 300 , 400 , 500]

puts number.slice(3,2)

=> [400 , 500]
```

###エクスクラメーションマーク(!)

末尾につけることにより破壊的メソッドになり、もとの配列や文字列を変化させるメソッド。


##scanメソッド

対象の要素から引数で指定した文字列を数え、配列として返すメソッド。

```
puts "ワン！ワンッ！ワンワンッ！".scan("ワ")

=> [ワ, ワ, ワ, ワ]
```

lengthと組み合わせると含まれている"ワ"の数で返ってくる。

```
puts "ワン！ワンッ！ワンワン！".scan("ワ").length

=> 4
```

ただ、下記にcountというメソッドもあるのでそっちの方が使いやすい。

##countメソッド

特定の文字列の中に指定した文字列がいくつ含まれているかを数えたり、配列の要素数を数えるメソッド。

```
puts "ワン！ワンッ！ワンワン！".count("ワ")

=> 4
```

##firstメソッド

配列から最初の要素を取得するメソッド。
引数がある場合は配列の最初の要素からその引数分の要素を配列で取得する

```
name = ["太朗", "花子", "二郎"]

puts name.first(2)

=> ["太朗", "花子"]
```

##lastメソッド

配列から最後の要素を取得するメソッド。
引数がある場合は配列の最後の要素からその引数分の要素を配列で取得する

```
name = ["太朗", "花子", "二郎"]

puts name.last(2)

=> ["花子", "二郎"]
```

##sortメソッド

配列の要素を一定の規則（アルファベット、数値の降順、昇順など）で並び替えるメソッド。

```
fruit = ["apple", "strawberry", "grape", "banana"]

puts fruit.sort

=>  ["apple", "banana", "grape", "strawberry"]
```

##joinメソッド

配列内の要素と要素を連結させるメソッド。
引数を渡すことで区切ることもできる。

```
fruit = ["apple", "strawberry", "grape", "banana"]

puts fruit.join(",")

=>  apple,strawberry,grape,banana
```

##pushメソッド

配列の末尾に要素を連結する

```
fruit = ["apple", "strawberry", "grape", "banana"]

puts fruit.push("orange")

=> ["apple", "strawberry", "grape", "banana","orange"]
```

##unshiftメソッド

配列の先頭に要素を追加する。

```
fruit = ["apple", "strawberry", "grape", "banana"]

puts fruit.unshift("orange")

=> ["orange", "apple", "strawberry", "grape", "banana"]
```

##shiftメソッド

配列の先頭の要素を削除する。または配列の先頭の要素を取り出す。

```
fruit = ["apple", "strawberry", "grape", "banana"]

puts fruit.shift

=> ["Apple"]
```

##pluckメソッド

引数に指定したカラムの配列を返す(Railsのメソッド)

```
#Fruitモデルのnameカラムに　"Apple"　"grape"　"banana"　が入っている場合
=> Fruit.pluck(:name)
=> ["Apple","grape","banana"]
```

##timesメソッド

Integerクラスで用意されているメソッド。
指定した回数だけ繰り返し処理を行うことが出来ます。

```
オブジェクト.times do |変数|
  実行する処理1
  実行する処理2
end
```

##uptoメソッド

変数に「対象のオブジェクトが持つ数値」から「max」を順に代入しながら「do」から「end」までの処理を実行します。1回繰り返す毎に1ずつ数値は増加します。(「|変数|」の部分は省略可能です)。

```
オブジェクト.upto(max) do |変数|
  実行する処理1
  実行する処理2
end
```

##absメソッド

絶対値に変換するメソッド。

```
i = -1
puts i.abs

=> 1
```

##even?メソッド

偶数かどうかを判断するメソッド。
偶数だったらtrueが返ってくる。

```
n = 3

if  n.even?
  puts "OFF"
else
  puts "ON"
end

=> ON
```

##odd?

奇数かどうかを判断するメソッド。
奇数だったらtrueが返ってくる。

```
n = 3

if  n.odd?
  puts "OFF"
else
  puts "ON"
end

=> OFF
```


##charsメソッド

一文字ずつ分解するメソッド。

文字列ver

```
puts "hello".chars

=> ["h", "e", "l", "l", "o"]
```

整数ver

```
list = "12345".chars.map(&:to_i)
puts list
puts list.sum

=> [1, 2, 3, 4, 5]
=> 15
```

##deleteメソッド

引数で指定した文字列を削除することができる。

母音を消す場合。

```
S = Torvalds
puts S.delete("aiueoAIUEO")

=> rvlds
```

##flattenメソッド

flatten は自身を再帰的に平坦化した配列を生成して返します。flatten! は自身を再帰的かつ破壊的に平坦化し、平坦化が行われた場合は self をそうでない場合は nil を返します。 lv が指定された場合、lv の深さまで再帰的に平坦化します。

```
a = [1, [2, 3, [4], 5]]
p a.flatten                     #=> [1, 2, 3, 4, 5]
p a                             #=> [1, [2, 3, [4], 5]]
```

### 自身を破壊的に平坦化する例。

```
a = [[[1, [2, 3]]]]
p a.flatten!                    #=> [1, 2, 3]
p a                             #=> [1, 2, 3]
```

##最後に

まだまだ足りないメソッドだらけで、適切に使えているかどうかも定かではありませんが、使える技が増えればそれだけ自分の中のアイデアを形にすることができると思います。
また、思い付いたらこれから追加していく予定です。
誰かの手助けになれればいいなと思います。
間違いや指摘があればコメントに残していただけると幸いです。