rubyで簡単なアプリを作るのにまず覚えること

2020年06月27日

この記事を見てわかることは、rubyでのプログラミングにおいてどのような考え方、
コードを使用して行うことが大事なのかを大まかな部分を知ることができます。


メソッドの使い方


メソッドとは、必要な動きをさせるプログラムを型にはめ込むことで保存しておき、実際に呼び出したい時に簡単に呼び出しできる方法になります。

例えば、たくさんの引出しの中に必要な物をそれぞれの引出しに入れた時、その引出しに名前を振っておけば、どの引出しに何が入っているかわかるようになり、欲しい物を引出しやすくなりますよね。

それと同じような感じで、メソッドというくくりで処理を箱の中に入れることで名前を呼び出すだけで特定の動きをさせられるようになります。


メソッドには種類があります。

  • 初めからRubyに組み込まれている-組み込みメソッド
  • 自分で作ることができる-ユーザー定義メソッド

です。


これらを組み合わせて必要な動きをプログラミング

していきます。

メソッドに関する説明


色々なメソッド


今回使用したメソッドは、

  • puts → 画面に表示をさせる為のメソッド
  • gets → ユーザーからの入力情報を取得する為のメソッド
  • chomp → 自動で入ってしまった文字列末尾の改行を削除するメソッド
  • to_i → 文字列データを数値データに変換する
  • to_s → 数値データを文字列データに変換する
  • each → 配列の中身を順番に確認していく為のメソッド
  • << → 配列に要素を追加するメソッド
  • length → 要素の数を数える為のメソッド
  • ユーザー定義メソッド

アプリを作る為のステップ


アプリを作る為に考えるステップになります。今回は簡単なレビューアプリを参考にしています。


ステップ1-まずは必要部分だけputsを使ってレビュー表示させる。この時にどんなことを表示させるか決めます。例えば、タイトル、ジャンル、感想のような感じです。


ステップ2-ユーザーが入力をできるようにする。どの段階で入力させるのかを決め込みます。


ステップ3-入力されたレビュー情報を整理する。ここでは、ハッシュを使ってどのようにデータを保管するか考えます。


ステップ4-わかりやすくする為、メニュー画面を作成する。選択項目をユーザー自身が選べるように表示させます。


ステップ5-繰り返し処理でユーザーが終わると宣言するまで繰り返す。この時、処理の部分をユーザー定義メソッドにすることで記述を簡単にできるといいです。


ステップ6-複数のデータが保存できるようにする。ハッシュで生成されたデータを配列で保管できるようにします。


ステップ7-読みたい部分を選択し、表示できるようにする。レビューを読むをメニューで選択した場合、次にどのレビューを読みたいかを選択するように促します。


今回は、以上です。

このようにアプリを作成するにあたり、

必要になりそうな動きとどうやって作成していくのか

考えていきます。


バックシュラッシュ記法


バックスラッシュ記法はその名前の通り、\(バックスラッシュ)から始まる文字の記法のことです。

「option + ¥」でバックスラッシュを打つことが出来ます。

記法意味
\n改行
\tタブ
\bバックスペース
\\バックスラッシュ

注意点 

バックスラッシュ記法が適応されるのは文字を”(ダブルクォテーション)で囲んだときのみです。

‘(シングルクォテーション)で囲ってしまうとバックスラッシュ記法は解釈されずにただの文字として出力されてしまいます。


変数と定数


変数

変数は、データを格納する箱のような物です。このような特徴があります。

  • 原則、小文字から始める(_(アンダーバー)から始めることも可能ですが、特に理由がない場合は避けましょう。)
  • 名前の1文字目でなければ大文字や数字、_(アンダーバー)を使ってもよい
  • 名前にスペースが入ってはいけない
  • 予約語(Rubyによって最初から用途を与えられた単語)と同一の名前は使ってはいけない
  • プログラム中で何回も変更可能(再代入できる)
#変数定義
name = "tarou"

#変数確認
name
=>tarou

#使用してはいけない記述
_name = "tarou" #_が先頭にある
na me = "tarou" #変数名にスペースがある
return = "tarou" #変数名が予約語

定数

定数も変数と同じデータを格納する箱のような物です。

しかし、変数との違いはデータの再代入ができません。

定数を定義するときは名前の最初を大文字にします。慣習としては、定数は名前をすべて英大文字にし、定義したあとは再代入しません。

#定数の定義
NAME = "tarou"

#定数の確認
NAME
=>tarou

式展開


文字列の中で式を使い、式によって得られる値を入れることのできる機能です。

式展開の書き方は文字列中で#{式}とするだけです。

例:name = tarou  ←変数定義

puts “私の名前は#{name} です”  ←出力
=>私の名前はtarouです

注意点

式展開をする場合は文字列を作るときに“(ダブルクォテーション)で囲む必要があります

‘(シングルクォテーション)で囲んだ場合は式展開が行われません。


配列オブジェクト


1つの変数でたくさんの情報を持つことのできるオブジェクトです。

配列の中にはたくさんのオブジェクトを入れることができます。

配列は順番でオブジェクトを管理します。すなわち、データと順番がひもづけられます

#配列の定義
pencil_case = ["ペン", "消しゴム", "定規”]

#出力
puts pencil_case
=> ["ペン", "消しゴム", "定規"] 

配列の繰り返し

eachというメソッドは配列オブジェクトしか使用できません

[例]
#定義
animals = ["いぬ", "ねこ", "ねずみ"]
number = 0

#繰り返し
animals.each do |animal|
 puts animal
 number = number + 1
end


puts "#{number}回繰り返しました"
=>3回繰り返しました。

要素(データ)を追加するには

<<メソッドを使用する

生成した配列オブジェクトに新しい要素を追加したいときがあります。そのときは<<メソッドを使って、以下のように追加ができます。

書き方例
#定義
pencil_case = ["ペン", "消しゴム", "定規"]

#配列に追加
pencil_case << "メモ帳"

#出力
puts pencil_case
=> ["ペン", "消しゴム", "定規", "メモ帳"]

要素数をカウントするには

lengthメソッドを使用する

書き方例
#定義
pencil_case = ["ペン", "消しゴム", "定規"]

#出力1回目
puts pencil_case.length
=> 3

#要素を追加
pencil_case << "メモ帳"
pencil_case << "付箋"

#出力2回目
puts pencil_case.length
=> 5

ちなみにlengthメソッドは、文字列の文字数などを数える時などにも使用できます。

例
2.5.1 :001 > name = "kensirou"
 => "kensirou" 
2.5.1 :002 > name.length
 => 8 

ハッシュオブジェクト


ハッシュオブジェクト

オブジェクトを複数保管できるオブジェクトです。

自身の中にデータとそれに対応するキーのセットを複数所持することができます。

ハッシュのように、保存したいデータ(バリュー)とそれに対応する標識(キー)を対応させてペアで保存する方式のことをキーバリューストアといいます。

標識であるキーを指定すればそれに対応するデータを取り出すことが可能。

書き方
#定義(データはいくつも作れる)
hash = {キー1 => 値1, キー2 => 値2, …}

#同じ意味の色々な書き方
#基本形(文字列オブジェクト)
hash1 = {"title" => "るろうに剣心"} 

#シンボルオブジェクト(優先的に使う
hash2 = {:title => "時をかける少女"}

#シンボルオブジェクト短縮版(優先的に使う
hash3 = {title: "君に届け"}

ハッシュオブジェクトから値を取得する

書き方
#ハッシュ生成
hash = {title:  "時をかける少女"}

#出力
puts hash[:title]
=>時を掛ける少女

ハッシュオブジェクトに値を追加する

書き方
#ハッシュ生成
hash = {title:  "時をかける少女"}

#出力1回目
puts hash[:title]
=> 時をかける少女

#ハッシュ更新
hash[:title] = "るろうに剣心"

#出力2回目
puts hash[:title]
=> るろうに剣心

空のハッシュ

空のハッシュを生成しておくことでデータの保管場所として使用することができる。

#定義
hash = {}

条件分岐


if文

条件式が正しいか正しくないかで処理を分岐させることができます。

特徴

  • 条件式とは基本文法で出てきた(3 > 0)などのような返り値がtruefalseの式のこと
  • if 条件式 thenとendの間にはその条件式がtrueのときに実行する処理を書きます。(下記①)
  • falseで実行させたい時は、elseを使った文を作成する。(下記②)
  • 複雑な条件分岐elsif(下記③)
①書き方例

value = 3
if value > 0 then <= trueなので実行される
 puts "値は正です"
end
=> 値は正です
②書き方例

value = -3
 if value > 0 then
    puts "値は正です" <=  falseなので実行せず下へ
 else
    puts "値は負です" <=  trueなので実行
 end
③書き方例

value = gets.to_i <= 文字列を数値オブジェクトに変換
 if value > 0 then
   puts "値は正です" <=  falseなので実行せず下へ
 elsif value < 0 then
   puts "値は負です" <=  falseなので実行せず下へ
 else
   puts "値は0です" <=  trueなので実行
 end

ポイント

if、else、endはインデントを合わせないとwarningになります。


ループ処理


while文

条件式が真(true)のときはずっと処理を繰り返し続けます。

書き方例
sum = 0  <-変数定義
while number <= 10 do  <- numberが10以下のときは処理を繰り返す
  number = 1    <-変数定義
  sum += number
  puts sum
  number += 1
end

アルゴリズム例

「1から10までを順に足し合わせてその都度表示する」処理の手順

  • 1から10まで1ずつ増えていく変数numberを定義する
  • 足し合わせた数値の変数sumを定義する。
  • numberが10になるまで処理を繰り返すwhile文を書く
  • while文の中に足し合わせる処理を書く
  • while文の中に足し合わせた数字を表示させる処理を書く

繰り返し処理の注意点

・条件によってはいつまでも処理が終わらないという無限ループに入ってしまいます。

   そうしたときはターミナルでプログラムを強制終了させる必要があります。

    強制終了はターミナル画面で「control + cです。


引数


パラメータ(データ)をやりとりする為の

変数のことです。

メソッド(引数)というような書き方になります。

ポイント

  • 引数は「メソッドを呼び出す部分」と「メソッドを定義している部分」両方に書く
  • 「メソッドを呼び出す部分」に書く引数と「メソッドを定義している部分」に書く引数の名前は、一致している必要はない
  • メソッドに書く引数を仮引数、メソッドの呼び出しに書く引数を本引数といいます
例
#()の中が引数
def mixer(fruit) <- 仮引数
  puts "#{fruit}を細かく砕く"
  return "#{fruit}ジュース"
end

#出力
puts mixer("リンゴ") <- 本引数
=> リンゴを細かく砕く
  リンゴジュース

見にくいですがノートの PDF 貼ります。

スコープ


変数のスコープ

変数には、その変数が使える範囲というものが決まっています。これをスコープといいます。通常、メソッド内ではそのメソッド内で定義した変数しか利用することができません。

メソッド外で利用しようとするとエラーになる。

スコープに関しての詳しい内容はこちら

return文


メソッド内でreturn ◯◯とすると、return(リターン)のあとに続けた式が

そのメソッド自体の返り値になります

returnを利用した時点で返り値が決まるため、メソッドはその行までで強制的に終了します。

メソッドではreturn文が実行されると返り値を返してそのまま処理を終了します。

return文のあとにコードがあっても無視されます。

例文
def rename(a_name)
  a_name = "Mr.#{a_name}"
  return a_name
#このあとに処理を書いても無視される
end

name = "Tanaka"
name = rename(name)
puts name   <- 結果はMr.Tanakaになる

まとめ

今回の内容を覚えるとめちゃ簡単なアプリにはなってしまいますが、作成することは可能になります。

Rubyというプログラミング言語を使用する時によく使う物なので是非覚えてください。