Ruby関連のことを調べてみた2021年08月12日

Ruby関連のことを調べてみた2021年08月12日

【Ruby on Rails】AWSの本番環境で起きたエラーをtailを使って確認する方法

#対象者

* 本番環境(デプロイ後)でエラーが発生している方
* Cloud9を使用して開発を進めている方

#目的

* cloud9から本番環境で起きたエラーの原因を突き止める

#実際の手順と実例
###1.logディレクトリに遷移する

まず、EC2からSSHでログインを実施します。
cloud9のターミナルから下記コマンド実行

““
$ ssh -i ~/.ssh/[pemファイル名] ec2-user@[IPアドレス]
““
[]の中身はそれぞれの状況によって変わると思います。
pemファイル名はキーペアの作成時にできたやつです!(うろ覚え)

その後、下記の順でlogでディレクトリまで移動します。

“`
$ cd アプリケーション名
$ cd log
“`

###2.エラー内容確認

lsコマンドで下記のファイルを見てみます

““
[ec2-user@ip-xxxxxxxx log]$ ls
development.log migrate:reset.log production.log puma-error.log puma.l

元記事を表示

久々に気持ちいいオブジェクト指向っぽいコードが書けたから共有したい

皆さんはオブジェクト指向でコード書けてる実感ありますか?
クラスだのインターフェースだの、継承だのis-a、has-aだの難しそうな単語ばっかりで…
普通のWebアプリケーションを書き書きしているとあんまり勉強したことを実感したことありませんでした。
ただ、最近ちょうどオブジェクト指向っぽいコードが書けたので、そこだけ切り出して、ライブラリ化して、コードの解説をしようかなってのが話しの内容です。

# コードを書くことになったきっかけ
[Sentry](https://sentry.io/welcome/)というエラーがあったときに、エラーの詳細を記録してくれるサービスがありまして。
↓な感じにエラーがあったときに、リクエストパラメータをSentryに送信するようなロジックを書いてました。
[あんまり話の本筋じゃないけど、該当のコードのドキュメント](https://docs.sentry.io/platforms/ruby/enriching-events/breadcrumbs/
)

“`ruby
puts params
#> {id: 99999, hoge: “hoge”,

元記事を表示

Ruby 基礎

## 目次
1. [基礎文法](#1基礎文法)
1. [演算子](#2演算子)
1. [データ型](#3データ型)
1. [制御文](#4制御文)
1. [クラスとモジュール](#5クラスとモジュール)
1. [ライブラリ](#6ライブラリ)

## 1.基礎文法

### 基本的なルール
* すべてオブジェクト(文字列や配列、数値やnilなど)
* 改行が文の区切り、セミコロンで明示的に文の区切りをすることも可能
* バックスラッシュ(\\)を使うと、文がまだ続くことを明示できる

### 変数

* 「変数名 = 値」の形式で変数宣言ができる
* 変数名だけ宣言するとエラーになるため、何かしらの値を代入する必要がある

“`ruby
# ローカル変数
# 先頭を英子文字か「_」にする
hoge = “hoge”

# インスタンス変数
# 先頭を「@」にする
@fuga = “fuga”

# クラス変数
# 先頭を「@@」にする
class Foo
@@foo = 1
end

# グローバル変数
# 先頭を「$」にする
$bar = 999
“`

### 定数

元記事を表示

[Rails]予約語一覧[h~m]

# はじめに
本記事では、Railsの予約語一覧を記述しています。
以下の記事の続きになります。

https://qiita.com/mkato1013/items/07194f6a799fa9acedac

# 予約語一覧(注意すべき単語を記述しています)
|頭文字|単語||||
|-|-|-|-|-|
|h|having|hold|host|hour|
||*「hour~」も多いです||||
|i|if|ignore|ilike|import|
||in|index|indexerror|infile||
||initialize|insert|int|int1|
||int2|int3|int4|int8||
||integer|into|io|is|
||isolation||||
|j|join||||
|k|key|keys|kill|||
|l|lag|language|large|last|
||layout|lead|leading|leave|
||left|less|level|like|
||limit|lines|link|ln|
||load|loader

元記事を表示

環境を揃える為にrubyのインストールで出たエラー(M1Mac)

課題で環境指定があるため
指定された環境構築を行なっていた中でrubyのverをインストールした時に
起きたエラー

>普段の環境:Mac M1 rails6.1.4 ruby3.0.1
>指定環境: rails5.2.5 ruby 2.6.3

“`sh
Downloading openssl-1.1.1k.tar.gz…
-> https://dqw8nmjcqpjn7.cloudfront.net/892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5
Installing openssl-1.1.1k…
Installed openssl-1.1.1k to /Users/uk./.rbenv/versions/2.6.3

Downloading ruby-2.6.3.tar.bz2…
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.3.tar.bz2
Installing ruby-2.6.3…
ruby-build: us

元記事を表示

【Ruby】newした先のclassにinitializeが存在しない場合に考えること

## 背景
Railsのコードを読んでいて`<モジュール名>::<クラス名>.new`といったインスタンスが存在しており、該当するモジュールのファイルにジャンプした後、そのファイルのクラスに`initialize`メソッドが存在しなかったので疑問になり調べてみることにしました。

## 結論
結論としてはクラス内部で`include ActiveModel::Model`が呼ばれており、Ruby本体の`rails/activemodel/lib/active_model/model.rb`の`initialize`が呼ばれていることがわかりました。

“`ruby:rails/activemodel/lib/active_model/model.rb
# Initializes a new model with the given +params+.
#
# class Person
# include ActiveModel::Model
# attr_accessor :name, :age
# end

元記事を表示

【Java】ビンゴカード作成問題を解く

 僕は現在Javaを勉強中です。ということで過去にRubyで解いた問題をJavaで解いてみることにしました。RubyもJavaもまだ初心者であるため、コードの可読性は高くなく、まずは動くだけのプログラムを作ることに努めています。ご意見いただけると非常に勉強になります。

 今回解いた問題はビンゴカード作成問題です。

https://qiita.com/kim-shun/items/0c862ff71e61648cd346

B:1~15のどれか
I:16~30のどれか
N:31~45のどれか
G:46~60のどれか
O:61~75のどれか

“`
B | I | N | G | O
13 | 22 | 32 | 48 | 61
3 | 23 | 43 | 53 | 63
4 | 19 | | 60 | 65
12 | 16 | 44 | 50 | 75
2 | 28 | 33 | 56 | 68
“`

 このような出力結果を得たいという問題になります。僕は以下のようなコードでこの問題を解きました。

“`java
package example;

im

元記事を表示

非公開のリソースにURLでアクセスされたらどうする?(例えば非公開記事とか)

# やりたいこと
投稿者が記事を投稿します。
投稿した記事は、公開/非公開(active/inactive)を設定できます。
読者側のページでは、公開記事を一覧で表示して(index)、各記事にアクセスできるようにします(show)。

読者側ページでは非公開記事は表示せず、遷移する動線を提示しないのは当然ですが、これをしただけでは、記事のURLからアクセスされたら非公開記事も見られてしまいます。

どうすれば良いでしょうか?

環境
ruby 2.7.2
Rails 6.1.3.1

投稿データを扱うこんなモデルがあったとします:point_down:
公開/非公開を制御するために、statusというカラムを持たせて、enumで定義します。

“`ruby:post.rb
# == Schema Information
#
# Table name: posts
#
# id :bigint not null, primary key
# title :text not null
#

元記事を表示

MVCモデルについて

#MVCとは
モデル(Model)、ビー(View)、コントローラー(Controller)の頭文字をとって**MVC**という。
Railsでは、MVC+ルーターに役割が別れる。

####なぜ必要なの?
M/V/Cに分割することで、効率的に開発、保守することが可能になる。
MVCについて理解せず場当たり的に開発してしまうと、ディレクトリ構造がぐちゃぐちゃなってしまいがち。その結果、チーム開発や保守がしづらくなってしまう。

#コントローラー
司令塔、MVCの中心的存在。
**コントローラーを中心にMVCを覚えると分かりやすい。**

####役割
ユーザーの入力を元に、モデルとビューに命令を出す
ユーザー、モデル、ビューの橋渡し的存在。

####ファイル
– 場所: `/app/controllers/[コントローラー名]_controller.rb`
– 名前: `[コントローラー名]_controller.rb`とする
– リソース毎にファイルが存在する。[^1]

[^1]: リソースとは、コントローラーの操作対象のデータのこと。

#モデル
データベースを取り扱う。

元記事を表示

【Ruby】sliceメソッドを使った文字列取得の問題

sliceメソッドとは?
文字列や配列から第一引数に指定した値から第二引数の値の分だけ取得するというメソッドです。

“`rb
str = “Hello”
result = str.slice(2,3)
puts result

>> “llo”
“`
といった感じで取得できます。

引数に負の値を指定することもできます。

“`rb
str = “Hello”
result = str.slice(−2,2)
puts result

>> “lo”
“`

ちなみに元の文字列strに影響はありません。

“`rb
puts str
>> “Hello”
“`

今回はこのsliceメソッドを使った問題でした。
*対象の文字列から末尾にある2文字を取得すること
*取得した2文字を3回繰り返して出力すること

“`rb
def extra_end(str)
char_nam = str.length
right2 = str.slice(char_num – 2, 2)
puts right2 * 3
end

extra_end(‘Goodbye’)

>>

元記事を表示

【Ruby on Rails】コメント機能を初心者なりにまとめてみた(非同期)

#対象者

* コメント機能を実装予定の方
* 非同期通信(Rails×Ajax)を実装予定の方

#目的

* 記事へのコメントを非同期で投稿・削除ができるようにする

#実際の手順と実例
###1.前提

* jQueryの読み込みができている
* バージョン:Ruby:2.3.0、Rails:5.2.5です。
* Articleモデル、Userモデル実装済み

###2.モデルの作成とテーブル設定

まずコメントモデルを作成します。
UserとArticleとアソシエーションを組みます。

““
$ rails g model comment user:references article:references
““

その後、config/db/schema.rbにマイグレーションファイルが作成されているので、下記を追記していきます。

““`migration_file
class CreateComments < ActiveRecord::Migration[5.2] def change create_table :comments do

元記事を表示

Ruby 配列と繰り返し処理

#目次
今回は、以下のテーマを書いていきたいと思います。

– 配列
– 繰り返し
– ハッシュ

#配列
配列とは、値をまとめて管理する方法です。変数の箱が連続して並んだイメージです。配列の要素には前から0,1,2,,というように数字が与えられており、インデックス番号と言います。これを利用して要素を取り出したり削除したりします。

“`ruby
foods = [“Rice”,”Ramen”,”Sushi”]
puts foods[1]
puts “好きな食べ物:#{foods[2]}”
#=>Ramen
#=>好きな食べ物:Sushi
“`
上記の例だと、foods[0]が”Rice”,foods[1]が”Ramen”,foods[2]が”Sushi”に対応しています。

#繰り返し
繰り返し処理の一つにeach分があります。配列の要素が一つづつ変数に代入されて、each文の中の処理を実行する形になっています。
以下のプログラムだと、配列foodsの各要素を変数foodに代入して、putsで出力する処理を実行しています。

“`ruby
foods = [“Rice”,”Ra

元記事を表示

逆数の総和を取る6つの方法とその誤差

# これは何?

https://qiita.com/ttf1998seiya/items/a60ff99c9fdffa09c28f

で素朴に総和をとっていて。

そういえば部分和を積み重ねることで誤差を減らせるよという話を最近 Qiita で見たな

https://qiita.com/kitahara1152/items/23e27622284f6d06fdba

と思い。

足し方でどう誤差が変わるのか調べてみた。

# 調べたこと

$$
\frac{1}{1} + \frac{1}{2} + \frac{1}{3} +…+ \frac{1}{n}
$$

を、n=100〜5100 についていろいろな方法で計算する。
得られた結果が、真の値を倍精度に丸めたものとどれだけ離れているのかを調べた。

# 足し方

以下の5通りの足し方を試した。

## 順に足す

こういうやつ。

“`ruby:ruby
(1..n).each do |ix|
sum += 1.0/ix
end
“`

## 逆順に足す

こういうやつ。

“`ruby:ruby
n.downto

元記事を表示

Rubyの条件分岐・繰り返し処理

前回は、Rubyの基本文法について紹介しました。今回は、条件分岐について書いていこうと思います。
#条件分岐
ある条件が成り立つ時に、特定の処理をしたい場合に条件分岐を使います。最後にendを忘れないようにしましょう。
###構文

“`ruby
if 条件式1
処理A 条件式1が成り立つときの処理
elsif 条件式2
処理B 条件式2が成り立つときの処理
else
処理C 上記に当てはまらない場合
end
“`

以下にサンプルコードを示します。入力した数字が5か6の倍数であるかを判断するプログラムです。

“`ruby
puts “数字を入力してください。”
num = gets.to_i()

if num%5 == 0 && num%6 == 0
puts “#{num}は5と6の倍数です。”
elsif num%6 == 0
puts “#{num}は6の倍数です。”
elsif num%5 == 0
puts “#{num}は5の倍数です”
else
puts “5と6の倍数ではありません。”
end

“`
演算子%はあまりを表します。

元記事を表示

[Rails] 検索機能の実装

##はじめに
オリジナルアプリに検索機能を実装したので、簡単な仕組みを記事に残しておきたいと思います。

ソースコードはあくまで私のアプリから抜粋しているのでわかりづらいかもしれませんが、ご了承ください。

よろしくお願いします。

##検索フォームの作成
検索フォームはform_withを使って実装しました。
メソッドはgetで、“`local: true“`の記述は忘れずに記載します。

非同期で実装するときは“`remote: true“`となるのですが、form_withはデフォルトがremoteとなっていうので、記述する必要はないらしいです。

“`erb
<%= form_with(url: search_teachers_textbook_path(@teachers_textbook.id), remote: true, method: :get, class: "student-search-form") do |form| %>
<%= form.text_field :keyword, placeholder: "生徒を検索する", class: "

元記事を表示

【テストコード】「Mysql is not connected」というエラー

#今回の概要
**①テストコードを行う**
**②「MySQL client is not connected」のエラーが発生**
**③「sleep」を記述して解決**

##①テストコードを行う
*◇下記のテストコードを行うときにエラーが発生*

“`perl:purchase_shipping_spec
require ‘rails_helper’

RSpec.describe PurchaseShipping, type: :model do
before do
@user = FactoryBot.create(:user)
@item = FactoryBot.create(:item)
@p_s = FactoryBot.build(:purchase_shipping, user_id: @user.id, item_id: @item.id)
end
describe ‘商品購入機能’ do

〜テストコードは省略〜
end
end
“`
##②「MySQL client is not connected」のエラーが

元記事を表示

[Rails]7つのアクションとActiveRecordについて

# はじめに
本記事では、ActiveRecordについて記述しております。
コントローラーのアクション内で記述しているメソッド(all,find…etc)を
`なんとなく`記述していること状況を無くすため改めてアウトプットします。

# ActiveRecordとは
`モデル`が`テーブル操作`に関して使用できるメソッドです。[以下訂正します。]

“`
[訂正]
ActiveRecordは、MVCで言うところのM、つまりモデルに相当するものであり、ビジネスデータとビジネスロジックを表すシステムの階層です。

また、モデルがテーブル操作に関して使用できるメソッドではなく、「メソッドの総称」になります。

@koki_73 さん ありがとうございます!
“`

テーブルに情報を取得したり、保存したりするために使用することができます。
記述自体は`コントローラー`ですが、
モデルがテーブルに対してどのようなことを実行するのかを実行するのかを指定するものになります。

また、ActiveRecordはたくさんあります。
一つ一つどのような意味を持つのか理解をしなければ、意味が違うコ

元記事を表示

[Ruby on rails] RuboCop(リーダブルコード)① 導入、警告除外編

初めに

今回、初めてRubocopを触りました。
当初は、これは一体何の意味があるのか・・・?と思いつつも、
Rubocopの良さがすこーーしだけわかったような気がします。
①では、大量の警告を受けつつも、なんとか警告対応(???)し15件まで減らした流れを記載しています。

Rubocopとは?

コードを見て、ここはこうした方が良いよ〜。
長すぎだよ・・・なんかを教えてくれます。
ただ、Rubocopを入れて、チェックをかけるだけだと物凄く大量に指摘されます(多分・・・)
厳しすぎるルールもあるので、そこは除外したり…
Rubocopの小言を聞きつつ、聞き流しつつ、うまくやっていくのが重要なんじゃないかと
感じています。初学者的には。

Rubocop導入

“`perl:Gemfile
group :development, :test do
gem ‘rubocop’, require: false
end
“`

bundle installで導入します。

ターミナルで以下のコマンドを入力するとチェックが始ま

元記事を表示

【Ruby on Rails】submitボタンにFontAwesomeのアイコンを表示する方法

#対象者

* form_withを使っている方
* submit btnをFontAwesomeで表示したい方

#目的

* FontAwesomeを使ってSubmitを表示する

#実際の手順と実例
###1.下記のように記載

““ruby
<%= form_with(model: [@article, @comment]) do |f| %>
<%= f.text_area :comment_content %>

#下記の部分
<%= button_tag type: "submit", class: "btn btn-default" do %>

<% end %>
<% end %>
“`

button_tag typeというメソッドを使っています。
これで、FontAwesomeのクラスを囲えば完成です。
問題なく投稿も行えます。

####投稿者コメント
FontAwesome多様するので今回やり方が全く分からず調べてみました。参考になれば幸いで

元記事を表示

Rubyの変数と定数

#Rubyの変数
⚫︎変数とは
何かしらの値を入れておくための箱。
変数があることで読めるプログラムが書けるようになる。

⚫︎変数の特徴
1 値を使い回せる
2 値を覚える必要がなくなる
3 コードに意味を持たせられる

⚫︎変数と適切な命名

“`
#変数を使わない場合
100 + 50

#変数を使うが変数に意味がない場合
a = 100 *イコールで変数に代入できる
b = 50
a + b

#変数を使い変数に意味がある場合
math_score = 100         *変数に意味を持たせて何をしているかわかる
science_score = 50
math_score + science_score

“`

#Rubyの定数とは
⚫︎定数とは
固定された値を入れておくための箱。上書きしない固定された値として使う。

⚫︎定数の特徴
1すべて大文字で記述する
2値の上書きをしない

“`
#変数の上書き
count = 0
count = count+ 1

#定数を使った例
COUNT = 5
“`

#変数の文字列展開
⚫︎変数の文字列展開のル

元記事を表示

OTHERカテゴリの最新記事