1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】Rubyについて

Last updated at Posted at 2025-03-26

記事概要

Rubyについて、まとめる。

Rubyとは

  • プログラミング言語の1つ
  • 記述がシンプルでわかりやすく、実用的
  • 大きなWebアプリケーションから小さなプログラムまで、さまざまなソフトウェアを作成可能

Rubyの実行方法

.rbファイル

rubyコマンドを実行する

  1. [ファイル名].rbを作成
  2. 上記で作成したファイルに、ソースコードを記述
  3. rubyコマンドでプログラムを実行
    • ファイルのディレクトリに移動後、rubyコマンドを実行
      # Rubyファイルが存在するディレクトリに移動
      % cd ~/[Rubyファイルが存在するディレクトリ]
      
      # rubyコマンドの実行
      % ruby [ファイル名].rb
      
    • 絶対パスでRubyファイルを指定し、rubyコマンドを実行
      # rubyコマンドの実行
      % ruby /~/[Rubyファイルが存在するディレクトリ]/[ファイル名].rb
      

ターミナル

irbコマンドを実行する

  1. irbコマンドで、ターミナルから直接Rubyのプログラムを実行させる機能を起動する
    % irb
    
  2. ソースコードを記述し、エンターボタンを押す
  3. exitでプログラム実行機能を終了させる
    irb(main):001> exit
    
  4. プロンプトが表示される
    %
    

フレームワーク

Sinatra

Ruby on Rails(Rails)

Rubyの構成

コメントアウト

コメントアウトする場合は、先頭に#を書く

# コメントアウト

# コメントアウトは
複数行に適用されない

バックスラッシュ記法

\から始まる文字の記法のこと
"で囲んだ文字列の中で、ただの文字ではなく改行などとして出力される

記法 意味
\n 改行
\t タブ
\b バックスペース
\ バックスラッシュ
irb(main):001> puts "改行したい改行したい\n改行した"
改行したい改行したい
改行した
=> nil

文字列

文字を扱うための値

生成方法

"または'で囲む

"Hello World!"

'Hello World!'

連結

文字列同士を+で繋ぐことで、文字列を連結できる

irb(main):001> 'Hello ' + 'World!'
=> Hello World!

数値

数を表現する値であり、計算することが可能

生成方法

"'を使用せず、数値を入力

# 整数
10

# 負の値
-10

# 小数
3.14

演算子

値の計算や比較などに使用する記号のこと

代数演算子

四則計算を行う演算子

代数演算子 説明
+ 足し算
- 引き算
* 掛け算
/ 割り算
% 剰余(割ったあまり)
# 足し算
irb(main):001> 1000 + 2000
=> 3000

# 引き算
irb(main):002> 3000 - 1500
=> 1500

# 掛け算
irb(main):003> 50 * 40
=> 2000

# 割り算
irb(main):004> 600 / 15
=> 40

# 剰余(5 ÷ 2をした余り)
irb(main):005> 5 % 2
=> 1

自己代入演算子

自分自身に代入する演算子

自己代入演算子 処理
+= num += 2 numに2足した値をnum自身に代入
-= num -= 2 numから2引いた値をnum自身に代入
*= num *= 2 numに2かけた値をnum自身に代入
/= num /= 2 numを2で割った値をnum自身に代入
# 通常の代入演算子を使用した場合
irb(main):001> num = 1
=> 1
irb(main):002> num = num + 2
=> 3

# 自己代入演算子を使用した場合
irb(main):001> num = 1
=> 1
irb(main):002> num += 2
=> 3

比較演算子

値同士を比較する演算子

比較演算子 処理
> A > B AはBより大きいか
>= A >= B AはB以上か
< A < B AはBより小さいか
<= A <= B AはB以下か
== A == B AとBは等しいか
# 1は20より小さいか?
irb(main):001> 1 < 20
=> true

論理演算子

式の真偽の確認や、真偽値に対しての演算を行う演算子

論理演算子 例の処理 処理
!= A != B AはBと等しくないか AとBが等しくない場合に、”true”を返す
&& 条件A && 条件B 条件Aと条件Bが共にtrueか 2つの条件が共に”true”の場合は、”true”を返す
片方の条件が”false”の場合は、”false”を返す
2つの条件が共に”false”の場合は、”false”を返す
# 2 × 3 は6か?
irb(main):001> 2 * 3 == 6
=> true

# 2 × 3 は6ではないか?
irb(main):002> 2 * 3 != 6
=> false

# 2 × 3 は10ではないか?
irb(main):003> 2 * 3 != 10
=> true

真偽値

式が真か偽かを扱う値
真であればtrue、偽であればfalseになる

文字列や数値の他に、メソッドの呼び出し、変数や演算子式など
"文字列" 1000 (1 + 5)などは、すべて式

式展開

文字列の中に式を入れることができる機能

生成方法

"で囲んだ文字列の中で#{式}と記述する

# 式展開で文字列に式を含む
irb(main):001> "今日で#{20}歳になりました"
=> "今日で20歳になりました"

# シングルクォーテーションだと式展開されない
irb(main):002> '今日で#{20}歳になりました'
=> "今日で\#{20}歳になりました"

メソッド

プログラミングにおける何らかの処理をまとめたもの

処理

戻り値

メソッドが処理された後の最終的な値のこと
返り値ともいう

# 文字列だけだと、そのままその値が戻り値になる
irb(main):001> "Hello World"
=> "Hello World"

# 文字列にlengthメソッドを使うと、数値が戻り値になる
irb(main):002> "Hello World".length
=> 11

return文

returnの後ろに続けた式がそのメソッドの戻り値に決まり、メソッドはその行の処理を終えると強制的に終了する

  • return ◯◯と記述する
# returnを利用した場合
irb(main):001* def sample
irb(main):002*   "1"
irb(main):003*   "2"
irb(main):004*   "3"
irb(main):005*   return "4" # ここで処理が終了し、戻り値になる
irb(main):006*   "5" # 呼び出されない
irb(main):007*   "6" # 呼び出されない
irb(main):008> end
=> :sample
irb(main):009> sample
=> "4"

# returnを省略した場合
irb(main):001* def sample
irb(main):002*   "1"
irb(main):003*   "2"
irb(main):004*   "3"
irb(main):005*   "4"
irb(main):006*   "5"
irb(main):007*   "6" # 最後の行が戻り値になる
irb(main):008> end
=> :sample
irb(main):009> sample
=> "6"

引数

メソッドなどに渡すことのできる値のこと

def メソッド名(仮引数)
  # メソッドの処理
end
メソッド名(実引数) # メソッドの呼び出し

irb(main):001* def sample(number) # ②仮引数numberで、実引数「3」の値を受け取る
irb(main):002*   puts number * number # ③「3」が代入されたnumberを使って「3 * 3」を行い出力する
irb(main):003> end
=> :sample
irb(main):004> sample(3) # ①数値「3」を実引数にしてメソッドを呼び出し
9
=> nil

引数は複数渡すことができる
※実引数と仮引数の数は、必ず一致している必要がある

def メソッド名(第一引数, 第二引数)
  # メソッドの処理
end
メソッド名(第一引数, 第二引数) # メソッドの呼び出し

irb(main):001* def sample (fruit,price)
irb(main):002*   puts "#{fruit}は、#{(price * 1.1).to_i}円(税込)です"
irb(main):003> end
=> :sample
irb(main):004> sample("りんご",100)
りんごは110(税込)です
=> nil

スコープ

定義した変数が使える範囲のこと

defで定義するメソッドのスコープ times,eachメソッドのスコープ
メソッドの外で定義した変数 (引数を使わない限り)メソッドの中で使用できない メソッドの中で使用できる
メソッドの中で定義した変数 メソッドの外で使用できない メソッドの外で使用できない

メソッドの定義

自分でメソッドを定義することも可能

イメージ

Image from Gyazo

処理

# メソッドの定義
def メソッド名
  # メソッドの処理
end
メソッド名 # メソッドの呼び出し

# メソッドの定義
irb(main):001* def say_hello
irb(main):002*   puts "Hello World"
irb(main):003> end
=> :say_hello

# メソッドの呼び出し
irb(main):004> say_hello
Hello World
=> nil

変数

値を入れる箱のようなもの

イメージ

Image from Gyazo

宣言

変数を作ること

定義

宣言した変数にどのような値を入れるのか記述すること

代入

「変数の箱の中に値を入れる」という意味

  • =を使用する
# numという変数の中身を、1であると定義する
irb(main):001> num = 1
=> 1

# numを呼び出すと、格納された1が返ってくる
irb(main):002> num
=> 1

# 何度実行しても、格納された1が返ってくる
irb(main):003> num
=> 1

再代入

1度値を代入したあとの変数に、別の値を再び代入すること

# 変数numに1を代入
irb(main):001> num = 1
=> 1

# 変数numを出力
irb(main):002> num
=> 1

# 変数numに2を再代入
irb(main):003> num = 2
=> 2

# 変数numを出力
irb(main):004> num
=> 2

命名規則

変数の名前は自由に決められるが、一定のルールがある

命名規則 説明
変数の中身が何かわかる どんな名前もつけられるが、aaaのような意味のない名前は避ける
小文字で始める 大文字からも開始できるが、とくに理由がない場合は避ける
_で始めない _からも開始できるが、とくに理由がない場合は避ける
2文字目以降には使える
数字で始めない 1文字目に使うとエラーが発生する
2文字目以降には使える
日本語を使わない 文字列以外では日本語は使えないため、変数名も日本語は使えない
スペースを含めない 名前にスペースが入るとエラーが発生する
予約語を使用しない Rubyには文法などで使うことがあらかじめ決まっている単語があり、それを予約語と呼ぶ
これらを使うとエラーが発生する

難しいこと

値に名前をつけて管理することは得意だが、複数の情報を管理することは難しい
Image from Gyazo

配列

1つの変数で複数の値を持つことのできる値であり、データと順番を紐づけて情報を管理する

  • 変数 = []で、配列を宣言する

イメージ

Image from Gyazo

要素

配列の中のデータ

# 配列membersの宣言
irb(main):001> members = ['Naruto', 'Sasuke', 'Sakura']
=> ["Naruto", "Sasuke", "Sakura"]

# 配列membersの表示
irb(main):002> puts members
Naruto
Sasuke
Sakura
=> nil

要素の追加

生成済みの配列に対して、要素を新しく追加できる

  • 配列 << 追加する要素で、配列に要素を追加する
# 配列membersの宣言
irb(main):001> members = ['Naruto', 'Sasuke', 'Sakura']
=> ["Naruto", "Sasuke", "Sakura"]
irb(main):002> puts members
Naruto
Sasuke
Sakura
=> nil

# 要素の追加
irb(main):003> members << 'Sai'
=> ["Naruto", "Sasuke", "Sakura", "Sai"]
irb(main):004> puts members
Naruto
Sasuke
Sakura
Sai
=> nil

添字

配列の各要素に割り振られた番号のこと

  • 各要素に対して自動的に、順番に割り当てられる
  • 添字は「0」から始まる

要素の取得

配列に格納されている値を取得する際には、添字を使用する

  • 配列[添字]で、指定した添字の要素を取得する
# 配列membersの宣言
irb(main):001> members = ['Naruto', 'Sasuke', 'Sakura']
=> ["Naruto", "Sasuke", "Sakura"]

# 配列membersの添字1に格納されている要素を表示
irb(main):002> puts members[1]
Sasuke
=> nil

要素の変更

配列に追加されている要素を変更できる

  • 配列[添字] = 値で、指定した添字の要素を変更する
# 配列membersの宣言
irb(main):001> members = ['Naruto', 'Sasuke', 'Sakura']
=> ["Naruto", "Sasuke", "Sakura"]
irb(main):002> puts members
Naruto
Sasuke
Sakura
=> nil

# 配列membersの添字1の要素を変更
irb(main):003> members[1] = 'Sai'
=> "Sai"
irb(main):004> puts members
Naruto
Sai
Sakura
=> nil

要素の削除

配列の要素を削除できる

  • 既存の要素が削除された場合、添字は繰上げられる
# 配列membersの宣言
irb(main):001> members = ['Naruto', 'Sasuke', 'Sakura']
=> ["Naruto", "Sasuke", "Sakura"]
irb(main):002> puts members
Naruto
Sasuke
Sakura
=> nil

# 配列membersの添字1に格納されている要素を削除
irb(main):003> members.delete_at(1)
=> "Sasuke"
irb(main):004> puts members
Naruto
Sakura
=> nil
irb(main):006> puts members[1]
Sakura
=> nil

難しいこと

複数の情報を順番で管理することは得意だが、複数の情報同士の関係性を示すことは難しい
Image from Gyazo

ハッシュ

関係のある複数の値を管理するときに使用する

  • 変数 = {}で、ハッシュを宣言する

イメージ

Image from Gyazo

ハッシュの生成

=>を使用し、キーとバリューをセットにして記述する

変数 = { キー1 => バリュー1, キー2 => バリュー2, キー3 => バリュー3 }

バリュー

ハッシュのデータ

キー

ハッシュのデータに対応する名前
※文字列も数値も使用できる

シンボル

見た目は文字列のようだが、コンピューターが処理するときには数値として扱われる値のこと
※ハッシュのキーとしてよく使われる

# 以下はどちらもコンピューターが処理するときには同じ値として扱われる
:"name"
:name  # よく使用される

ハッシュ生成の記述

# 文字列をキーに使用する書き方
member = {"name" => "Naruto"}

# ハッシュを使用し、文字列と同じ書き方
member = {:name => "Naruto"} 

# シンボルをキーに使用する場合のみ可能な書き方
member = {name: "Naruto"}  

要素の追加

生成済みのハッシュに対して、要素を新しく追加できる

  • ハッシュ[キー] = 値で、ハッシュに要素を追加する
# ハッシュmemberの生成
irb(main):001> member = {name: 'Naruto', height: 147.5}
=> {:name=>"Naruto", :height=>147.5}
irb(main):002> puts member
{:name=>"Naruto", :height=>147.5}
=> nil

# 要素の追加
irb(main):003> member[:age] = 13
=> 13
irb(main):004> puts member
{:name=>"Naruto", :height=>147.5, :age=>13}
=> nil

要素の取得

ハッシュの持っている値を取得する際には、キーを使用する

  • ハッシュ[キー]で、ハッシュの要素を取得する
# ハッシュmemberの生成
irb(main):001> member = {name: 'Naruto', height: 147.5}
=> {:name=>"Naruto", :height=>147.5}

# 要素の取得
irb(main):002> puts member[:name]
Naruto
=> nil

要素の変更

ハッシュに格納されている要素を変更できる

  • ハッシュ[キー] = 値で、指定したキーの要素を変更する
# ハッシュmemberの生成
irb(main):001> member = {name: 'Naruto', height: 147.5}
=> {:name=>"Naruto", :height=>147.5}
irb(main):002> puts member[:height]
147.5
=> nil

# 要素の変更
irb(main):003> member[:height] = 180
=> 180
irb(main):004> puts member
{:name=>"Naruto", :height=>180}
=> nil

要素の削除

ハッシュの要素を削除できる

# ハッシュmemberの生成
irb(main):001> member = {name: 'Naruto', height: 147.5, weight: 40.6}
=> {:name=>"Naruto", :height=>147.5, :weight=>40.6}
irb(main):002> puts member
{:name=>"Naruto", :height=>147.5, :weight=>40.6}
=> nil

# 要素の削除
irb(main):003> member.delete(:weight)
=> 40.6
irb(main):004> puts member
{:name=>"Naruto", :height=>147.5}
=> nil

難しいこと

複数の情報同士の関係性を示すことは得意だが、同じ構造のまとまりを管理することは難しい
Image from Gyazo

配列とハッシュの違い

Image from Gyazo

Image from Gyazo

配列とハッシュの組み合わせ

別々の意味を持つ複数の値のまとまり自体を、複数管理することができる

イメージ

Image from Gyazo

配列とハッシュの生成

# 配列team7の宣言
irb(main):001> team7 = []
=> []

# ハッシュmemberの宣言
irb(main):002> member = {}
=> {}

# ハッシュmemberに要素を追加
irb(main):003> member[:name] = 'Naruto'
=> "Naruto"
irb(main):004> member[:height] = 147.5
=> 147.5

# ハッシュmemberを配列team7に追加
irb(main):005> team7 << member
=> [{:name=>"Naruto", :height=>147.5}]

# ハッシュmemberの宣言
irb(main):006> member = {}
=> {}

# ハッシュmemberに要素を追加
irb(main):007> member[:name] = 'Sasuke'
=> "Sasuke"
irb(main):008> member[:height] = 153
=> 153

# ハッシュmemberを配列team7に追加
irb(main):009> team7 << member
=> [{:name=>"Naruto", :height=>147.5}, {:name=>"Sasuke", :height=>153}]

# ハッシュmemberの宣言
irb(main):010> member = {}
=> {}

# ハッシュmemberに要素を追加
irb(main):011> member[:name] = 'Sakura'
=> "Sakura"
irb(main):012> member[:height] = 150.1
=> 150.1

# ハッシュmemberを配列team7に追加
irb(main):013> team7 << member
=> [{:name=>"Naruto", :height=>147.5}, {:name=>"Sasuke", :height=>153}, {:name=>"Sakura", :height=>150.1}]

# 配列team7を表示
irb(main):014> puts team7
{:name=>"Naruto", :height=>147.5}
{:name=>"Sasuke", :height=>153}
{:name=>"Sakura", :height=>150.1}
=> nil

# Sakuraの身長を表示
irb(main):015> puts team7[2][:height]
150.1
=> nil

表の作成

Image from Gyazo

クラスとインスタンス

条件分岐処理

条件を満たしているかどうかで実行内容を分岐する処理であり、「条件分岐」とも呼ばれる
「もし〇〇だったら△△をする」と処理を分けられる

条件式

分岐の条件として記述する式

if文

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

if 条件式
  # 条件式が真(true)のときに実行する処理
end

irb(main):001> value = 3
=> 3
irb(main):002* if value > 0
irb(main):003*   puts "値は正です"
irb(main):004> end
値は正です
=> nil

else(if文)

条件式の結果が正しくない場合の処理を行う

if 条件式
  # 条件式が真(true)のときに実行する処理
else
  # 条件式が偽(false)のときに実行する処理
end

irb(main):001> value = -3
=> -3
irb(main):002* if value > 0
irb(main):003*   puts "値は正です"
irb(main):004* else
irb(main):005*   puts "値は負です"
irb(main):006> end
値は負です
=> nil

elseif(if文)

条件を満たさなかった場合に対して、ifのように条件式を追加できる

if 条件式1
  # 条件式1が真(true)のときに実行する処理
elsif 条件式2
  # 条件式1が偽(false)のとき、かつ
  # 条件式2が真(true)のときに実行する処理
else
  # 条件式1と条件式2がどちらとも偽(false)のときに実行する処理
end

irb(main):001> value = 0
=> 0
irb(main):002* if value > 0
irb(main):003*   puts "値は正です"
irb(main):004* elsif value < 0
irb(main):005*   puts "値は負です"
irb(main):006* else
irb(main):007*   puts "値は0です"
irb(main):008> end
値は0です
=> nil

繰り返し処理

同じ内容を繰り返し行う処理であり、ループ処理とも呼ばれる

処理

ブロック

doendで囲まれた処理のまとまりのこと

ブロック変数

ブロック内でのみ使用できる変数のこと
|任意の変数名|で定義できる

数値.times do |ブロック変数|
  # 繰り返す処理
  # 繰り返しの回数を使う場合、ブロック変数を使用する
end

irb(main):001* 3.times do |i|
irb(main):002*   puts i += 1
irb(main):003> end
1
2
3
=> 3

強制終了

プログラム実行中に、control + Cで強制終了できる

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?