Ruby関連のことを調べてみた2022年09月11日

Ruby関連のことを調べてみた2022年09月11日

オブジェクト指向 とは

# 目的
– オブジェクト指向とは何かを抽象的に理解する

# オブジェクトの性質
– Ruby は全てものもがオブジェクトでできている
– オブジェクトは、いずれもなんらかの型(クラス)に属している
(”apple” は Stringクラス に属している)
– クラスによって別々のメソッドを持つ
(pry の ls で確認してみる)
– インスタンスはオブジェクトから実体化したオブジェクト
(”apple” は Stringクラス の インスタンス)

# オブジェクト指向とは
– クラスをもとにインスタンスを作る考え方
(hash = Hash.new <= ハッシュクラスから、そのメソッドが使えるインスタンスを生成) - メリットは、同じ性質のものを簡単に作れること・コードの修正箇所が減ること - インスタンス変数はインスタンス内で使いまわせる変数のこと (@ をつける) # 例 ```ruby #任意の名前が出力できるメソッド # =>引数に名前を入れる

class Student #クラスの生成
def say_name(name)
@name = nam

元記事を表示

連想配列の繰り返し処理

# 目的
-連想配列における繰り返し処理の方法を理解する

# ポイント
– ループごとにHash のキーが第一引数に、バリューが第二引数として渡される
– 配列の繰り返し処理とブロック内の書き方は変わらない
# 書き方の例
“`ruby
scores = {japanese: 30, english: 20}

scores.each do |key, value|
puts “#{key}の点数は#{value}です”
end

#scores.each {|k, v| puts “#{k}の点数は#{v}です”}

“`
~実際の表示~
japaneseの点数は30です
englishの点数は20です

# 注意するポイント
– 第一引数、第二引数の変数は、なんでも良い

# 具体的な例
“`ruby
#変数userの各要素の値を全て小文字に変換した内容を別のHashに代入
# => 各要素に同じ処理をするため、繰り返し処理を使う
# => downcase で小文字に変換
# => 連想配列の形で表示(.to_h)(map)
user = {first_na

元記事を表示

入れ子のHashにおける値の取得

# 目的
– 入れ子構造の連想配列から任意の値を取得する
# ポイント
– 入れ子とは、オブジェクトの値にさらにオブジェクトを指定したもの
– dig メソッドでも取得できる
# 具体例1
“`ruby

#以下の変数hashから、値”USA”を取得する

require “pry”

hash = {
sports: {
soccer: {
origin: “England”
},
volleyball: {
origin: “USA”
}
}
}

binding.pry

puts hash[:sports][:volleyball][:origin]
“`
~実際の表示~
31: }
32: }
33:
34: binding.pry
35:
=> 36: p hash

[16] pry(main)> hash.class
=> Hash
[17] pry(main)> hash[:sports].class
=> Hash
[18] pry(main)> #

元記事を表示

連想配列(Hash) の 基本的な扱い方

# 目的
– 連想配列のメリットと使い方を理解する

# ポイント
– 連想配列は、値(value)にラベル(key)をつけた 配列 のこと
– 各要素に意味を持たせることができる
– 要素の順序を気にする必要がない

# 書き方の例
“`ruby
#連想配列の初期化
hash = {}

#配列の場合
array = [20, 30]
#連想配列の場合
hash = {english: 20, japanese: 30}
#hash = {“english” => 20, “japanese” => 30}

p array
puts hash
puts hash[:japanese]

“`
~実際の配列~
[20, 30]
{:english=>20, :japanese=>30}
30

# 注意するポイント
– key は文字列で書くより、シンボル(コロンで指定)で書いたほうが内部的な処理がはやい
– 文字列で配列の key を指定したら、取得する際も文字列で取得しないといけない

# 具体的な例
“`ruby
hash = Hash.new

#要素の追加
hash

元記事を表示

RubyでTwitter APIを利用してみた

### 導入
アイドルが好きで、特定のユーザーのツイートであったり、ツイートをいいねしてくれたユーザー情報を、スクリプトで取得できたらアイドルヲタク活動が少し充実するなと思ったので色々調べてみました。

### 流れ
1. twitterAPIを利用できるようにする
2. 必要な情報を集めるてソースコードを書いてみる
3. 実行してみた
4. おまけ

### 1. twitter_apiを利用できるようにする

僕は以下記事を参照にtwitterAPI登録を行いました。
一番躓いたのは、twitterAPI用に作成したtwitterアカウントに、携帯の電話番号を登録しなければいけないところです。

別のアカウントで既に携帯番号が登録されたうえに、もう利用できないアカウントだったため、他に利用できる携帯番号を取得するハメになりました。
ロケットモバイルというところで月300円ほどでsimと携帯番号を買ったのですが、知り合い曰く使用頻度によってはタダで利用できるところもあるらしく無駄な出費をしてしまいました。

https://qiita.com/kngsym2018/items/252

元記事を表示

【Rubocop】rubocop -Aを実行する前はexcludeを設定しておく

# Rubocopの自動修正
Rubocopの自動修正、rubocop -a や rubocop -Aは痛快なコマンドで、間違っているところを一括で全部直してくれる。使った後はなんか清々しい気持ちになる。
ただし、初めて利用する際の注意点もある。
それは、実行前にRubocopをよく設定していなければ、Rubocopの対象とすべきでないファイルにも自動修正をかけてしまうことである。
これをやってしまうとgithubでPRした時にchangedのファイル数がえげつないことになる.

# rubocop.yml
rubocop.ymlにあらかじめ対象から除外したいファイルを指定しておくのが良い。
以下は設定の一例である。
“`AllCops:“`の下に“`Exclude“`とある。この下に除外したいファイルを指定していく。ここで“`*“` はワイルドカードなので“`bin/**/*“`と指定しておくことでbin以下のファイルを全て対象外とすることができる。
“`yaml:rubocop.yml
inherit_from:
– .rubocop_airbnb.yml

元記事を表示

様々な繰り返し処理

# 目的
– Enumberable処理について理解する

# ポイント
– Enumberable処理は、each などのブロックを呼び出してループを行う処理のこと
– while文は 変数の初期化 や ループ終了のためのコード が必要
– map はループの戻り値を配列で返す

# 書き方の例
“`ruby
numbers = [1, 2, 3]

count = 0
while count < numbers.length do puts numbers[count] count += 1 end numbers.each do |number| puts number end ``` ~実際の表示~ 1 2 3 1 2 3 # 注意するポイント - while文 はミスると無限ループになる - each文 はオブジェクトの数ぶんしかループしない # 具体的な例 ```ruby #配列の要素の数字1つ1つに10を足した結果を配列で出力 numbers = [1, 2, 3, 5, 6] result = numbers.map do |numbe

元記事を表示

配列の繰り返し処理

# 目的
– 繰り返処理の方法とメリットを理解する

# ポイント
– 繰り返処理を使えば、何度も同じ処理を書く必要が無くなる
– ループの回数を使い時は、with_index メソッドを使う

# 書き方の例
“`ruby
#以下の配列の要素を2倍にして足し合わせる
numbers = [1, 2, 3]

sum = 0

numbers. each do |number|
sum += number*2 #sum = sum + number*2
end

puts sum

numbers = [1, 2, 3]
sum = 0
numbers.each {|number| sum += numbers*2}
“`
~実際の表示~
12
12

# 注意するポイント
– 「each」「map」はオブジェクトのループで使う
– 「each」は先頭から順に変数に渡される
– 「times」は回数を指定するループ

# 具体的な例
“`ruby
fruits = [“apple”, “banana”, “lemon”]

fruits.each.with_index(1

元記事を表示

配列 の様々な メソッド

# 目的
– どのようなメソッドがあるのかを理解する

# ポイント
– pry の ls を使って配列のメソッドを確認する
– やりたい処理を言語化し、使えるメソッドを探す

# 書き方の例
“`ruby
array = [1, 2, 3]

array.shift #キュー方式
p array

array.unshift(1) #キュー方式
p array

array.pop #スタック方式
p array

“`
~実際の表示~
[2, 3]
[1, 2, 3]
[1, 2]
# 注意するポイント
– 破壊的メソッド と 非破壊的メソッドがある
– 非破壊的メソッドでも「!」を使えば元の変数の値を書き換えることができる

# 具体的な例
“`ruby
numbers = [3, 8, 1, 18, 124, 10, 8, 5, 53, 10]
numbers.uniq!
p numbers
p numbers.sum

names = [“聡”, “次郎”, “太郎”, “小次郎”, “武蔵”]

man = “小次郎”

#result = true

re

元記事を表示

配列 と 集合

# 目的
– 配列同士の演算の仕方を理解する

# ポイント
– 和集合は、配列に含まれる全ての値をとる
– 積集合は、どちらの配列にもある値をとる
– 差集合は、配列から重複する部分以外の値をとる

# 書き方の例
“`ruby
numbers_a = [1, 2, 3]
numbers_b = [3, 4, 5]

p numbers_a | numbers_b #和集合
p numbers_a & numbers_b #積集合

p numbers_a – numbers_b #差集合
p numbers_b – numbers_a

“`
~実際の表示~
[1, 2, 3, 4, 5]
[3]
[1, 2]
[4, 5]

# 注意するポイント
– 差集合は、左辺で重複していて右辺にはない要素は除かれない

元記事を表示

配列の先頭、末尾に追加する

# 配列の最初に追加する
“`配列.unshift(その配列の先頭に追加する要素)“`

“`rb
irb(main):022:0> a = []
=> []
irb(main):023:0> a.unshift(“a”,”b”)
=> [“a”, “b”]
irb(main):024:0> a.unshift(“c”,”d”)
=> [“c”, “d”, “a”, “b”]
“`
出典 https://techacademy.jp/magazine/20565

# 配列の最後尾に追加する
“`配列.push(その配列の末尾に追加する要素)“`

“`rb
irb(main):025:0> a.push(“e”,”f”)
=> [“c”, “d”, “a”, “b”, “e”, “f”]
“`
出典 https://techacademy.jp/magazine/20565

### 気づき
これ使おう。

元記事を表示

配列 の 基本的な扱い方

# 目的
– 配列の生成方法、使い方を理解する
# ポイント
– 配列とは データの塊のこと
– 配列のメリットは、要素をまとめて処理できること
– 要素の取得は、添字(index)を指定する

# 書き方の例
“`ruby
array = Array.new #配列の生成
array.push(“apple”, nil, 12, true) #要素の追加
p array[-1]
p array[0]

array[1] = “orange” #2番目の要素を文字列「orange」に更新
p array

array.delete_at(2) #3番目の要素を削除
p array

“`
~実際の表示~
true
“apple”
[“apple”, “orange”, 12, true]
[“apple”, “orange”, true]

# 注意するポイント
– puts で配列を出力すると、[]で表示されない
– index は0から始まる

元記事を表示

ActiveHashを用いたプルダウンメニューでの検索機能の備忘録

オリジナルの写真投稿アプリを制作した際にActiveHashを用いたプルダウンメニューでの検索機能を実装したので備忘録に残します。
ransackを用いて実装しています。
ActiveHashの作成については書いていません。

### Gemの導入
Gemfileの最下部へ以下を記述してインストール
“`
gem ‘ransack’
“`
“`
bundle install
“`

### ルーティングを設定
検索結果を一覧で表示したいので検索結果ページへのルーティングを記述する
collectionオプションでpostsコントローラー内のseachアクションに繋がるように設定
“`:routes.rb
resources :posts do
collection do
get ‘search’
end
end
“`

### コントローラーにseachアクションを記述

“`:posts_controller.rb
def search
@q = Post.ransack(params[:q])
@items = @q

元記事を表示

【Ruby on Rails】愛犬管理アプリpart3 ~体調管理編~【初心者向け】

# はじめに
この記事は、[こちら](https://qiita.com/tak8_al/items/08274dd9228363642555)の記事の続編です。
まだご覧になっていない方は是非ご覧ください。

# 実装内容
本記事では、簡単なCRUDアプリの作成と、検索機能の付与を行います。

手順は以下になります。
①体調に関するCRUD機能を持ったアプリケーションの作成
②体調に関するキーワードで検索できる機能の作成
③体調ペットの表示&体調を登録したユーザーの表示

ではさっそく実装していきましょう。

# ①体調に関するCRUD機能を持ったアプリケーションの作成
以下のコマンドを実行してください。
③、④の機能の実装のために、アソシエーションが必要なので、外部キーも設定しておきます。
“`:terminal
$ rails g scaffold Health user:references pet:references title:string content:text
“`
完了したらrails db:migrateをしましょう。
これで、CRUD機能を持ったアプ

元記事を表示

メソッド の 引数

# 目的
メソッドにおける引数の使い方を理解する

# ポイント
– 引数を使うことで、インスタンスごとにメソッドを作る必要が無くなる

# 書き方の例
“`ruby
require “pry”
def buy_fruits(fruit)

if fruit == “apple”
puts “りんごを渡す”
elsif fruit == “banana”
puts “バナナを渡す”
elsif fruit == “lemmon”
puts “レモンを渡す”
end

fruit

end

binding.pry
fruit = “apple”
buy_fruits(fruit)

“`
~実際の表示~
32: fruit
33:
34: end
35:
36: binding.pry
=> 37: fruit = “apple”
38: buy_fruits(fruit)

[1] pry(main)> continue
りんごを渡す
# 注意するポイント
– 引数の順序は基本的に固定

元記事を表示

ignored_columns が意図せず上書きされるのを防ぐ

## [ignored_columns](https://edgeapi.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-ignored_columns) が意図せず上書きされる可能性のあるコード
一つのモデルで既に ignored_columns をセットしていた場合に、誤って新規に ignored_columns をセットしてしまうと本来使われたくないカラムが使われてしまう不具合が引き起こされる恐れがある。

“`rb
# あるモデルの10行目に ignored_columns がセットされている
self.ignored_columns = %w(foo bar)

# 10行目に気づかず別の行に新規で書いてしまうと10行目の ignored_columns は上書きされ、
# foo, bar のカラムが意図せず利用可能になってしまう
self.ignored_columns = %w(baz)
“`

## これを防ぐためには
以下のように変更するだけ

`

元記事を表示

オリジナルアプリのコメント機能を非同期で投稿出来るように変更した時の備忘録

オリジナルの写真と投稿アプリを作成した時にコメント機能に後からAjaxで実装してみようと思ったらかなり手こずったので忘れない為に備忘録を残します。
投稿した写真にログインしたユーザーがコメント出来る機能になってます。

### コントローラーの編集
投稿した写真の詳細ページにコメントしたいのでアクションはcreateとdestroyの二つ
画面遷移はしたくないのでrenderやredirectの記述はしない
@comment = Comment.find(params[:id])をdestriyメソッドの下に書くと意味がないので一番上に記述する
“`:comments_controller.rb
def create
@post = Post.find(params[:post_id])
@comment = Comment.new(comment_params)
@comment.save
end

def destroy
@comment = Comment.find(params[:id])
@post = Post.find

元記事を表示

メソッド の 定義 と 戻り値

# 目的
– メソッド の 使い方 を 理解する

# ポイント
– メソッド とは まとまった一連の処理 のこと
– メソッドの最後に処理した値は呼び出し元に戻される

# 書き方の例
“`ruby
def buy_fruits

apple = “apple”

if apple == “apple”
puts “りんごを渡す”
elsif banana == “banana”
puts “バナナを渡す”
elsif lemon == “lemon”
puts “レモンを渡す”
end
end

buy_fruits
“`
~実際の表示~
りんごを渡す
# 注意するポイント
– 「puts」という命令の戻り値は nill となる

# 具体的な例
– 上記の例に apple という 戻り値を返すようコードを追加する
“`ruby
require “pry”

def buy_fruits
apple = “apple”

if apple == “apple”
puts “りんごを渡す”
elsif banana

元記事を表示

【Ruby on Rails】愛犬管理アプリpart2 ~タスク編~【初心者向け】

# 本記事の内容
本記事は、[こちら](https://qiita.com/tak8_al/items/08274dd9228363642555)の記事の続編です。
その記事で実装した内容をもとに、実装していきますので、まだご覧になっていない方は、ぜひご覧ください。
以下の内容の実装方法だけ知りたいという方は、このままご覧ください。

## 本記事での実装内容
① 実行時間の情報を持ったタスクの作成機能
② 当日のタスクのみ表示する機能
③ 全ての実行日の情報を持ったカレンダー作成機能
④ どのペットに対するタスクか表示する機能
⑤ タスクを実行する人間を表示する機能
⑥ 実行時間に自動メール送信する機能
⑦ タスク完了時にメール送信機能

では実装していきましょう。

# 実行時間の情報を持ったタスクの作成機能
タスクの実行時間がindexページに表示されるタスクアプリケーションを作成します。
手順は2つです。!

* CRUD機能を持ったアプリケーションの作成
* 時間を日本時間に変更

順に実装していきましょう。

## CRUD機能を持ったアプリケーションの作成

Scaffo

元記事を表示

Rubocopに速度が早くなる「serverモード」ができたみたいなので試してみる ~RubyKaigi 2022に影響されるエンジニア~

## 概要
RubyKaigi 2022にて「Rubocopにserver-client的なものが実装され処理が早くなった」という話を聞きまして、実際に試したくなり試したっていう話です

## やり方
適当なRubyファイルを用意します

### 通常起動
“`sh
time bundle exec rubocop .
“`
結果(複数回実行)

1.22s user 0.32s system 99% cpu 1.545 total
1.30s user 0.33s system 96% cpu 1.697 total
1.26s user 0.32s system 97% cpu 1.622 total
1.20s user 0.30s system 99% cpu 1.516 total

### server起動版
サーバーの起動
“`sh
bundle exec rubocop –start-server
“`
Rubocopの実行
“`sh
time bundle exec rubocop .
“`
結果(複数回実行)

0.53s user 0.11s sys

元記事を表示

OTHERカテゴリの最新記事