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

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

RailwayでDiscord Botをホストしてみた

[Railway](https://railway.app)というサービスでDiscord Botをホストしてみました。
![](https://storage.googleapis.com/zenn-user-upload/e9339eadd5cc-20220522.png)

# 登録
メール、またはGitHub連携で登録するようです。
Loginが登録も兼ねてるのが地味に判りづらい。
![](https://storage.googleapis.com/zenn-user-upload/669433216a8f-20220522.png)

# デプロイ
![](https://storage.googleapis.com/zenn-user-upload/1057a5c7cbad-20220522.png)
[Dashboard](https://railway.app/dashboard)に飛び、`New Project`ボタンを押します。

![](https://storage.googleapis.com/zenn-user-upload/4c9e45e9f64

元記事を表示

Ruby で素数計算プログラムを作る (無限長)

# コード

“`rb
prev_numbers = []

# 1は素数ではないので、2からカウントアップする
2.step do |current_number|
not_prime_number = false

# 今までに出てきた数全てで今の数を割る
prev_numbers.each do |prev_number|
if (current_number % prev_number).zero?
not_prime_number = true
break
end
end

# 次の数を「今までの数全て」で割るために、今までの数を覚えておく
prev_numbers.push current_number

puts current_number unless not_prime_number
end
“`

# 結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/0b034452-ae67-

元記事を表示

連想配列とは?

JavaScriptの開発で連想配列を使ったので調べてまとめてみました!
間違っていればご指摘お願いします!
# 結論
**「連想配列とは、配列で添字(インデックス)に数字を与えているのに対して、好きな文字を与えることができる配列のことである。」**
“`sample.js
# 配列
var result_array = [
’70点’, # 値1
’60点’, # 値2
’92点’ # 値3
];

# 連想配列
var result_associative_array = {
tarou : ’70点’, # キー1 : 値1
jirou : ’60点’, # キー2 : 値2
hanako : ’92点’ # キー4 : 値3
}
“`
# Hashと同じじゃないの?
それって、RubyでいうHashのことじゃないのかなと思ったので調べたところ、厳密には違うみたいです。
## RubyにおけるHash
Rubyの[リファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/class/Hash.h

元記事を表示

備忘録 whereでオブジェクトを得れなくて困っている君へ

1.~~~ids = Object.where(条件).pluck(:id)
2.Hoge = Object.find(~~~ids)

Hogeにwhereの条件で絞った、オブジェクトが複数得れる

元記事を表示

FizzBuzz

# FizzBuzz
FizzBuzzプログラムは、以下のような挙動をするプログラムです。

3で割り切れる数値を引数に渡すと、「Fizz」を返す
5で割り切れる数値を引数に渡すと、「Buzz」を返す
3と5の両方で割り切れる数値を引数に渡すと、「FizzBuzz」を返す
それ以外の数値は、その数値を文字列に変えて返す

“`
def fizz_buzz(number)

end

puts “数字を入力してください。”

input = gets.to_i

puts “結果は…”
puts fizz_buzz(input)
“`
メソッドfizz_buzzを定義して、そのなかで条件分岐する計算式を書きます。

FizzBuzzと返すには…
“`
if number%15 ==0
“`
もしくは
“`
if number%3 == 0 && number%5 == 0
“`
でも可能です。
しかし、前者のほうがシンプルなので前者を採用。コードは見やすいほうが良いので。

残りは単純です。
“`
if number%3 == 0
“`
でFizzを返し、
`

元記事を表示

Ruby での読み込み方法の整理

コード読んでいる時に、あれこれどっちだっけとなるのでメモ

# 前提
Ruby 3.0

# 内容
|メソッド |パス解決 |拡張子|再読み込み
|—|—|—|—|
|load|- 絶対パスの場合は、そのパス
– 相対パスの場合は、LOADPATH※ を順番に探す|明記 |制限なし|
|require |〃 |省略可 |初回のみ|
|autoload |〃(遅延ロード) |〃 |〃|
|require_relative|「そのファイルが置かれているディレクトリ位置」からの相対パス|〃|〃|

※ LOADPATH
`Kernel.#load` や `Kernel.#require` がファイルをロードする時に検索するディレクトリのリスト
具体的には、`$LOAD_PATH` というグローバル変数(別名は `$:`、`$-I`)

# 参考
– [Kernelモジュール](https://docs.ruby-lang.org/ja/3.0/class/Kernel.html)
– [requireとrequire_relativeとloadの違いを

元記事を表示

超かんたん!エラー箇所の特定

皆さん、コーディングは進んでいますでしょうか?

私はというと…まだプログラミング初心者のため、簡単なコードを書くのでさえ
数時間と掛かってしまいます:arrow_heading_down:

注意深くコーディングしても必ずエラーが発生してしまうんですよ!何とかならんものか…:frowning2:

エラーといっても原因は様々です、

スペルミス
メソッドの使い方が正しくない
クラスの書き方がわかんない
etc

そんな超初心者な私でも**デバッグ機能なしでエラー発生箇所を絞り込める方法**があります。
良かったら、ご覧ください。

# はじめに
本記事は以下の読者様が対象です。

* プログラミング初心者

* 理由があってデバック機能を使えない

* クラスや関数のなんとなくの流れが追える

* 一所懸命コードを追ってみるが自分の脳のワーキングメモリが足りず、次のコードを見ているときには、前のコード内容を忘れてしまい、嫌な思いをしている人

* 何時間も

ボイスチャットの開始と終了だけ通知するdiscord bot

## はじめに
やりたいこと,仕様など
– ボイスチャットの入退室を検出して通知する
– 最初の一人の入室 or 最後の一人の退室のみ通知する(LINE風の通知)
– 通知を送信するテキストチャンネルを設定可能
– 入退室を通知しないボイスチャンネルを設定可能
– スラッシュコマンド対応は考えない
– discordrb(Ruby)を使用

一人ひとりの入室,退室を全部報告するのではなく,
LINE風に開始と終了の通知だけにしたかった。

## コード
notice.rbと同じディレクトリに「svrconf」ディレクトリを作成し
サーバごとの設定(=通知を流すテキストチャンネルのID)を保存する

~~~notice.rb
# coding: utf-8
require ‘discordrb’
require ‘logger’

# トークンとID
bot = Discordrb::Commands::CommandBot.new token: トークン, client_id: クライアントID, prefix: ‘/’
# 外部ファイル(サーバ毎設定)
svr_conf=”

【Rails】find_or_create_byでバリデーションをskipさせたい

# 結論
## 1.saveに `validate: false`を渡す
– `validate: false`を末尾に記載することで、バリデーションをskipできました。
– 加えて、無意味な`save`を2回走らせないように、`find_or_create_by` から `find_or_initialize_by` に修正しました。

“`ruby
Model.find_or_initialize_by(name: “テスト”) do |m|
m.published_at = Time.zone.today – 1 # バリデーション対象のコード
m.save(validate: false) #=> バリデーションをskipさせる
end
“`

# 補足
@jnchitoさんよりコメントいただきました。

## 1.new_record?メソッドを使用する
ブロックの外で`save(validate: false)`を実行します。

“`rb
# この時点ではsaveしない
model = Model.find_or_initialize_by(name: “

Ruby メソッド色々

# getsメソッド
キーボード入力された値を取得するメソッドです
“`
puts “キーボードから何か入力してみましょう”
get_key = gets
puts “入力された内容は#{get_key}”
“`
“`
キーボードから何か入力してみましょう
“`
入力待ちの状態になります。
ここに
“`
キーボードから何か入力してみましょう
hello
入力された内容はhello
“`
helloと入力する打ち込んだ内容が表示されます。
変数展開をすることで何を打ち込まれもいいようにしておくことも大事

# while
繰り返し処理を行いたいときに使います。指定した条件式が真(true)の間、繰り返し実行されます。while doの文法で記述を行います。
“`
dice = 0 変数diceに0を代入、初期値を設定

while dice != 6 do サイコロの目が6ではない間、diceの初期値は0なので条件を満たす。以降はdiceに代入される数によって結果が異なる
dice = rand(1..6) 1~6の数字がランダムに出力される
puts dic

Ruby 変数と定数

# 変数
変数は、文字列などのオブジェクトを作成したときに、そのオブジェクトにつける名札です。
変数名は小文字で始まるルールがあります。また、数字を使うことはできません。

“`
program = “プログラミング学習”
puts program
“`
programに文字列”プログラミング学習”を代入した時、programをputsすると
“`
プログラミング学習
“`
という結果が表示されます。
この場合の「=」は、数学での等しいという意味ではなく、「右のオブジェクトを左の変数に代入する」という意味です。

変数の特徴として、変数は値を書き換えることができます。
“`
program = “プログラミング学習”
puts program

program = “プログラマー”
puts program
“`
としたとき、
“`
プログラミング学習
プログラマー
“`
という結果が表示されます。
4行目で変数programに再度値を代入したため、5行目の結果はそれに代わっています。

# 定数
先ほどの変数とは異なり、あらかじめ変更しないことが保証された数値やデータ

Ruby メモ

タイトル通りです。ポートフォリオの制作はRuby on Railsで行ったため、Railsのコマンドについては記憶に新しいのですが、Rubyの学習から時間が空いてしまったため、備忘録として残します。

# Rubyコマンドメモ
・pwd:現在の作業ディレクトリを確認する

・mkdir フォルダ名:フォルダを作成する

・ls:作成したフォルダ・ファイルを一覧で表示する

・cd フォルダ名:指定したフォルダに移動する

・touch ファイル名:ファイルを作成する

・ruby 実行するプログラムファイル名:プログラムファイルを実行する

# コードを記述する
“`
puts “hello,world!!”
“`
ファイルにこのコード入力し、rubyコマンドを実行すると、hello,world!!が出力されます。
putsは、「受け取った値を文字列として出力」する働きです。
このように何らかの処理をさせる命令を、Rubyでは「メソッド(関数)」と呼びます。
また、その後ろに続く記述(ここでは’hello, world!’)を「引数(ひきすう)」と呼びます。引数では、メソッドに渡す

Rails 7.xをHerokuにデプロイする

まずHerokuにログインする。アカウントを持ってない方は作成してください。
“`bash:ログイン
$ heroku login
“`
次にHeroku上にアプリを作成する。
“`bash:アプリ作成
$ heroku create -a “アプリ名”
“`
ただしアプリ名には命名規約があるので注意。
アルファベットの小文字・数字・ハイフンのみを含み、先頭はアルファベット、末尾はアルファベットか数字である必要がある。

“`bash:リモートリポジトリの指定
$ heroku git:remote -a “アプリ名”
“`

`Gemfile`の以下の行
“`ruby:Gemfile
gem ‘sqlite3’
“`
を消して、以下のグループ
“`ruby:group :development, :test
group :development, :test do

gem “sqlite3”
end
“`
の中に記述する。

同ファイル内に次の行を追加する。
“`ruby:Gemfile
group :production do
gem “pg”

Ruby技術者認定試験silver受験きろく

# はじめに
Ruby技術者認定試験、silverを受けてきましたのでログ残しがてら投稿してみる。

きっかけは、できればプログラミング言語は複数使えたほうがいいよね~と人から言われてしまったので受験勉強を始めてみました。

ひと昔前はひとつのプログラミング言語を極めろと言われることが多かったような気がしたが、時代の流れなのか複数のプログラミング言語を求められることが多いようです。
(それとも自分だけか…?)

# 試験概要
Siver版 と Gold版があります。
Siver版はRubyの基本的な文法やメソッドを、Gold版はSiver版をさらに発展した内容になっています。今ところ、試験でのversionは2.1になってます。(2022年5月現在)

正式名称は
・Ruby Association Certified Ruby Programmer Silver version 2.1
・Ruby Association Certified Ruby Programmer Gold version 2.1

試験申し込みは、Pythonと同じくオデッセイからと思ったら
別会社のプ

コードの自動整形ツール【Rubocop】を導入方法と使い方( Rails gem)

今回はコードの自動整形ツール【Rubocop】を導入方法・使い方をご紹介いたします。

## Rubocop(ルボコップ)とは?

Rubyの静的コード解析ツールです。「インデントが揃っていない」「余分な改行・スペースがある」などの指摘をRubyStyleGuideに基づいて行ってくれます。

Rubocopを導入することにより、コードの品質を担保できるようになります。

####  ● Rubocop の公式GitHub
https://github.com/rubocop/rubocop

## Rubocopの導入方法

①Gemfile の group :development do〜end内に記述

“`
group :development do

gem ‘rubocop’, require: false #こちらの1行を記述

end
“`

※最後尾に記述するのではないので、記述場所にご注意ください。

②ターミナルで以下を1つずつ実行

・Gemfile.lockを更新する
“`
bundle install
“`

・rubocopの設定を記述す

VScodeからAtCoderのコンテスト問題を自動提出する

# はじめに
## できること
ここでは、以下のことができるようになります。(提出のプログラムはRubyで書きます)
– VScodeでコードを書いて、WSL(Linux)で実行
– VScodeのターミナルでサンプルデータでの動作確認
– VScodeのターミナルから自動提出

## 環境など
VScodeのインストールが前提です。
Windows10

# 手順
## WSL2のインストール
### PowerShellを管理者権限で開く
まず、Windowsのスタートの横にある検索で「PoweShell」を検索します。PowerShellが見つかったら、管理者権限で開いてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2549439/91e845c2-45b0-0d54-10e3-f54acc5e3822.png)

### インストールコマンドを実行
次のコマンドを実行し、PCを再起動します。
“`shell
$ wsl –install
“`

### Ubun

AWC EC2にWebシステムのデプロイ(下書き

つらつらと仕事中の備忘録
書きながらやっているので後日清書予定
AWSEC2にDocker+Railsの環境を構築してテストしようという作業

EC2インスタンス
・最低コスト
・とにかく動け
・Ubuntu

流れ

・手始めにEC2にセキュリティグループの設定を修正
 →テラターム接続は失敗したので暫定でGit Bushで接続。上記設定に関係あるか不明

・下記URLを参考にDockerとDockerComposeをaptとcurlを使ってインストール。

・sshの設定、key登録をgithubと”EC2インスタンス”にする(Ec2側にssh-addをかまさないとダメ。また、かますときはevalでプロセス明確する)

・gitcloneをする(解決)
 →sudo chown ユーザー名:ユーザー名 /var/www # 現ユーザーに権限付与 をしてなかった

・dockerをデプロイ(権限がなくて混乱)
 →https://virment.com/how-to-fix-couldnt-connect-to-docker-daemon/
 ここを参考に修正中
・build

GemのNokogiriを使おうとしたら`version `GLIBC_2.29′ not found`エラーが出たときのことを調べた

## はじめに

以前、M1 Mac で Rails のセットアップをしているときに、

“`console
ERROR: It looks like you’re trying to use Nokogiri as a precompiled native gem on a system with glibc < 2.17: /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /usr/local/bundle/gems/nokogiri-1.13.6-aarch64-linux/lib/nokogiri/2.7/nokogiri.so) - /usr/local/bundle/gems/nokogiri-1.13.6-aarch64-linux/lib/nokogiri/2.7/nokogiri.so If that's the case, then please install Nokogiri via the `ruby` platform gem:

RuboCopの導入方法メモ

RuboCop導入方法の備忘録です。

## 環境
macOS Monterey 12.3.1
ruby 3.1.2
rails 6.1.6

## インストール方法
Gemfileに必要なgemを追記する。
“`ruby:Gemfile
group :development do
gem ‘rubocop’, ‘~> 1.29’, require: false
gem ‘rubocop-performance’, require: false # 拡張機能
gem ‘rubocop-rails’, require: false # 拡張機能
gem ‘rubocop-rspec’, require: false # 拡張機能
end
“`
bundle installする。

“`sh:ターミナル
bundle install
“`

## 初期設定など
“`sh:ターミナル
bundle exec rubocop –auto-gen-config
“`
を実行すると`.rubocop.yml`, `.rubocop_todo.yml`が生成される。

Railsで使用するコマンド

Railsで使用する基本的なコマンドについてまとめた記事です。

# プロジェクトの作成
“`:#プロジェクトの作成
rails new アプリケーション名 [オプション]
“`
“`:#オプション(一部)
# ファイルが存在する場合に上書き
–fまたは -–force

# データベースの種類(MySQL)
–d=mysql または -–database=mysql

# データベースの種類(PostgreSQL)
–d=postgresql または –database=postgresql

# V(ビュー)を生成しない
–api
“`
# Controllerの作成・削除
“`:#コントローラの作成
rails g controller コントローラー名 メソッド名1 メソッド名2 …
“`

“`:#コントローラの削除
rails d controller コントローラー名
“`
# Modelの作成・削除
“`:#モデルの作成
rails g model モデル名 カラム名1:カラムの型 カラム名2:カラムの型 …
“`
“`:#モデ