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

Ruby関連のことを調べてみた2022年08月27日
目次

Python,Ruby,PHP,Java,JavaScript,Perlの条件分岐の比較

Python,Ruby,PHP,Java,JavaScript,Perlの条件分岐の比較

# Python

https://qiita.com/Morio/items/1e06e7ac768758af5ffe

# Ruby

https://qiita.com/sagawashu/items/0f08266d5f72229423d9

# PHP

https://qiita.com/Hashimoto-Noriaki/items/dfb76d440a64eccba95d

# Java

https://qiita.com/setonao/items/ebc341ddf6d95295c48e

# JavaScript

https://qiita.com/taiju_suzuki/items/e2bf11fcf1645623235f

# Perl

https://perlzemi.com/blog/20161023147731.html

元記事を表示

rbenvのインストールで失敗する

# 動作環境
M1 macboook pro
macOS Monterey ver.12.5

# 解決方法
ターミナルで`brew install rbenv`を実行すると、以下のエラーが表示する。
“`
==> Downloading https://ghcr.io/v2/homebrew/core/pkg-config/manifests/0.29.2_3
Already downloaded: /Users/arakijun/Library/Caches/Homebrew/downloads/ac691fc7ab8ecffba32a837e7197101d271474a3a84cfddcc30c9fd6763ab3c6–pkg-config-0.29.2_3.bottle_manifest.json
Error: rbenv: Failed to download resource “pkg-config_bottle_manifest”
The downloaded GitHub Packages manifest was corrupted or modified (i

元記事を表示

【Rails基礎】Active Recordとは?

**Active Record**とは**Rails**における**Object/Relational Mapping (ORM)** です。
※訳:オブジェクト関係マッピング

**Object/Relational Mapping (ORM)とは??**

以下Wekipediaより
>オブジェクト関係マッピング(英: Object-relational mapping、O/RM、ORM)とは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である

**つまり、RubyでDBを操作するための技法ということですね!!?**

RailsアプリでDBに変更を加えるとき、Rubyのコードで直感的にDBを操作することができるのもActive Record様のおかげ

また、ActiveRecord様のおかげでDBの種類(MySQL, PostgreSQL等)に関わらず同じコードで操作可能になります!

Active Recordはどのように機能している?

では、お馴染みのrails g modelをして、DBにテーブルを追

元記事を表示

Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第1章】(1.アプリ作成〜2.CRUD処理まで)

## はじめに
Railsの基礎を一通り学び終わったのですが、自分自身理解が追いついてないところもあると思うので、記事を作成する中でアウトプットし、理解を深めていくことが目的です。

## 概要
今回はタイトルにもあるとおり、簡単なメッセージ投稿アプリを解説も交えながら作成していきます。
アプリの作成からCRUD処理でメッセージ投稿機能の実装、それからリファクタリング、フラッシュやバリデーションの設定、最後にBootstrapでスタイルを付けるという感じで進めていきます。
なので、今回は3章に分けて記事を作成します。

## 開発手順
1. アプリの作成 (第1章)
2. CRUD処理で簡単なメッセージ投稿アプリを実装 (第1章)
3. リファクタリング (第2章)
4. フラッシュの実装 (第2章)
5. バリデーションの設定 (第2章)
6. エラーの処理 (第3章)
7. Bootstrapでスタイルをつける (第3章)

## 開発環境
– Ruby 2.7.3
– Rails 6.1.6.1
– Postgresql

## 1. アプリの作成
“`ターミナル:ターミナ

元記事を表示

Rubyとmittsuライブラリを使って3D対戦アクションゲームつくってみた

# 概要
この記事は私が躓いた当たり判定についての備忘録です。
2022夏の[Ruby合宿](https://www.rubycamp.jp/)にて今回のゲームを作成しました。
作ったゲームのリポジトリは[こちら](https://github.com/RubyCamp/rc2022su_team1)です。初対面のメンバー4人でチーム開発&初めてGit,Github使って開発しました。
使用した技術はRuby, [mittsuライブラリ](https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fdanini-the-panini%2Fmittsu&sa=D&sntz=1&usg=AOvVaw2TspYQITfq_UZI5vMUMfiz)です。
自分は当たり判定を主に担当しましたので、当たり判定で困っている方の助けになれば嬉しいです。
アイデア出し含む制作期間は4日です
# この記事で伝えたいこと
当たり判定で躓いてからどのように修正したのかの思考過程
# ゲームの概要

## 3Dぴんぽんバトル
## Install
depend

元記事を表示

Fly.ioでRailsアプリをデプロイしてみた for Mac

今回、Herokuが無料で利用できなくなる!?といった話を聞いたので、
新たにFly.ioでデプロイできるか試した記事になります。

# 手順
今回は、この流れで進みます!
1. Fly.ioの準備
1. ビルド&デプロイ
1. サイトを見てみる

# 1. Fly.ioの準備
1. FlyのCLI(コマンドを使えるようにするもの)をインストール
1. アカウント作成

まず、Fly.ioを見てみましょう?

https://fly.io/docs/rails/getting-started/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017749/0a7b751e-ccb4-ffab-ca9b-031992ad9334.png)
最初の方にこんなことが書いてありますね。
訳すと、([DeepL先生](https://www.deepl.com/ja/translator)ありがとう?)
`
Fly を使い始めるには、Fly 上のアプリを管理するための CLI アプリ、flyc

元記事を表示

【Rails】マイグレーションで文字列の外部キー定義をより簡単に書く方法

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## 状況
“`rails db:migrate“`したとき、外部キーが文字列なのに“`references“`で外部キーを定義しようとするとエラー

“`
PG::DatatypeMismatch: ERROR: foreign key constraint “fk_rails_640ba59391” cannot be implemented
DETAIL: Key columns “user_id” and “id” are of incompatible types: bigint and character varying
“`

“`db/migrate/2022090909090_create_posts.rb
def change
create_table :posts do |t|
t.references :user, null: false, foreign_key: true
t.string :title, null: fal

元記事を表示

【Rails】Modelに定義した定数をControllerやViewで使用する方法

## はじめに
どうも、もきおです。RailsでModelに定義した定数をControllerやViewで使用する場面が実務でちょくちょく使う事があり、どうやって参照するんだっけ?と思ったので、調べたのをメモとして残しておきたいと思います。

## 結論
定数を参照するには**Model名(Rubyならクラス名)::定数名**で参照する事ができます。
“`ruby:
MAIN_USERS = [“Bob”, “Keny”, “John”, “July”, “Karen”].freeze

User::MAIN_USERS
# => [“Bob”, “Keny”, “John”, “July”, “Karen”]
“`
## 具体例
さて、具体例に入っていきましょう。今回はユーザー登録の際、SNSのURLを入力する欄があるとします。その際、省きたいURLを予め定数として登録しておき、実際入力され渡ってきたURLと定義していた定数が部分一致する場合、バリデーションでアラートを表示するというパターンで記述したいと思います。

まずは良く使うものをmodelに定数定義しましょう。“.fr

元記事を表示

Rubyを使ってメール通知をしたいだけなのにどハマりした結果

# はじめに

新しくサーバーを構築して、自作Webアプリケーションにメール通知機能を追加したいと思い、簡単にできるだろうと考えていたらハマりました。

# 環境

Ubuntu 22.x.x
Ruby 3.0.x
Postfix 3.6.x

# ソースコード

“`rb:mailtest.rb
#!/usr/bin/env ruby

require ‘mail’

mail = Mail.new do
from “xxxx@xxxx.com”
to “yyyy@yyyy.com”
subject “test mail”
body “this is a test mail.”
end

mail.delivery_method(:smtp,
address: “localhost”,
port: 25,
domain: “localdomain”,
)

mail.deliver
“`

# エラーメッセージ

“`
$ ./mailtest.rb
/usr/lib/ruby/3.0.0/net/smtp.rb:101

元記事を表示

Slack Bot アプリを作成しよう

[rack Gem](https://github.com/rack/rack) について勉強した時にBot アプリを作成したので、そのメモとして残そうと思います。:bow:
もしBot アプリを作成してみたいという方がいれば参考程度にしてみてください。

### どういうアプリ?
Slack のチャットフォームの方で`@botユーザー say_hello` と入力すると、@botユーザー が挨拶してくれるアプリです。

![スクリーンショット 2022-08-22 17.49.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2290550/98d6f592-a75f-2072-08b6-de92372e8083.png)

## 準備
#### Slack token 取得する

(1) https://slack.com/services/new/bot にアクセスする
(2) ユーザー名を記入し`ボットインテグレーション`からボットユーザーを作成する

ex. (私は`bot-app` の名前

元記事を表示

【Ruby】メソッドの後の感嘆符”!”について

メソッドの中には、破壊的にデータを変更してしまうものがあり、慣習として名前に”!”が付けられます。

例えば、以下のコードがあったとします。
“`
self.email = self.email.downcase
“`
参考:Railsチュートリアル 第4版 6章より
https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-minimum_password_standards

上記だと右辺で”self.email”を全て小文字にしてから自身に代入することで更新していますが、
.downcase!メソッドを用いることで、直接”self.email”の値を変更することができ、より簡潔に書けます。

“`
self.email.downcase!
“`

破壊的なメソッドは便利そうですが、一方で元の値を強制的に上書きするので、使いどころには注意ですね。

【追記2022/08/26】
@nodai2h_ITC 様よりご指摘を頂きました。
以前、”!”をメソッドに付けると破壊的なメソッドになると勘違いしていまし

元記事を表示

Ruby 2.7まで動いていたデフォルト値付きのブロックパラメータをRuby 3.0向けに書き替える

## はじめに:Ruby 2.7では動いていた奇妙なコード
とあるRailsプロジェクトをメンテしていたら、こんな奇妙なコードに遭遇しました。

“`ruby
def sample
data = {
a: nil,
b: { x: 1, y: 2 },
c: { x: 1 },
d: { y: 2 },
}
data.map do |k, x: 0, y: 0|
[k, x, y]
end
end
“`

Ruby 2.7でこの`sample`メソッドを実行すると以下のような結果が得られます。

“`ruby
# Ruby 2.7
sample
#=> [
# [:a, 0, 0],
# [:b, 1, 2],
# [:c, 1, 0],
# [:d, 0, 2],
# ]
“`

## これはいったい何をやってるの?

このメソッドでは以下の行で`x`や`y`のデフォルト値を設定しています。

“`ruby
data.map do |k, x: 0, y: 0|
“`

元記事を表示

Capybara内部のリトライ間隔をのばしてCPU節約

## 背景
Railsで作ったGUIのアプリをブラウザ自動化テストする際、CI環境のCPU使用率が高いことが気になっていました。複数のテストが並行した場合に、不安定になってどれか失敗してしまうということも起きました(※CPU使用率との因果関係は不明ですが)。

テストは RSpec + Capybara + Selenium + Headless Chrome で作ってあります。chromeの起動オプションでCPU使用率を節約できるものがないか調べたりしたのですが、効果のあるものは見つけられませんでした。

色々探していたら、CapybaraにもCPU使用率が上がってしまう要因があることを知りました。

https://zenn.dev/megeton/articles/f73dc1a0db69b7

> **待っているとPCのファンが唸りを上げてしまう原因と対策**
>
> 次のように書くと内部では 0.01 のウェイトが入っているため処理回数は1秒間で約100回、全体で約6000回になる
>
> “`ruby
> Capybara.has_selector?(…,

元記事を表示

Ubuntu (WSL) に asdf をインストールして Ruby と Crystal をそれぞれ複数バージョンインストール

# asdf とは

プログラミング言語などのバージョンを管理するツールです。
Ruby なら rbenv が有名ですが、asdf は様々なプログラミング言語やツールについて複数のバージョンを自在に切り替えながら使うことを可能にしてくれます。

https://asdf-vm.com/

# なぜ asdf を使いたいのか

「複数の言語を」「単一のしくみ」でバージョン管理できる点が嬉しいです。

私は Ruby と Crystal を使って競技プログラミングをやっているのですが、コンテストでは必ずしも各言語の最新バージョンを使えるわけではありません。かつ、ときどきコンテストサイトで言語アップデートがあってバージョンが変わるのに追随する必要があります。
また、使っている言語の最新バージョンが出るとやっぱりさわってみたくなったりもします。

asdf なら、Ruby も Crystal も(新しく増えたらその言語も)同じしくみで、コンテスト用のバージョンから最新バージョンまで簡単に切り替えながら使えていろいろ捗ります。

# 環境、前提条件など

Ubuntu 20.04.4 LTS (

元記事を表示

formオブジェクト使用時のエラーメッセージの日本語化

# 概要

エラーメッセージの日本語化を実装したが、formオブジェクトを使用している箇所だけ実装できない。

# 前提
ja.ymlファイルの作成までは完了している。
Formオブジェクト以外のエラーメッセージについては日本語化ができている。

# 現状
ja.ymlに日本語入力の記述をしても日本語にならない

“`
ja:
activerecord:
attributes:
user:
name: ニックネーム
birthday: 誕生日
family_name: 姓
first_name: 名
family_name_kana: 姓(カタカナ)
first_name_kana: 名(カタカナ)

item:
item_name: 商品名
image: 商品画像
introduction: 商品の説明
price: 価格
delivery_days_id: 配

元記事を表示

IntelliJ 2022 以降では Gemfile に RuboCop が無いと使えない

# IntelliJ の RuboCop 統合機能
IntelliJ には RuboCop との統合機能があり、 RuboCop 的にまずい部分をコードエディタ上にハイライトで表示してくれる。
https://pleiades.io/help/idea/robocop.html
> IntelliJ IDEA は RuboCop(英語) との統合をサポートしており、コードエディターなどで IDE 内でその違反を直すことができます。

IntelliJ 2021 までは、RuboCop が対象プロジェクトの Gemfile に記載されていなくても使用できたのだが、
IntelliJ 2022.1 くらいから、 Gemfile に記載していないと使用できなくなった。

# なんで使えなくなったの?
このあたりの経緯は YouTrack のこの issue を見るとなんとなくわかる。
[Rubocop should run on `bundler exec` if available](https://youtrack.jetbrains.com/issue/RUBY-26915/Ruboc

元記事を表示

bundle cacheあるいはbundle package

https://bundler.io/v2.3/man/bundle-cache.1.html

について。かつては、bundle packageという名称であったし、ドキュメントも https://bundler.io/v2.0/man/bundle-package.1.html に残されている(当該Bundlerバージョンは既にdeprecated=メンテナンスされていない)。両者はほぼ同じことを実現するため、Bundler 2.1くらいに完全に統合された。し、2.3中盤ではそれが[rubygems/rubygems#5785](https://github.com/rubygems/rubygems/pull/5785)において少しだけ分かりやすくされた。

私自身はこれまでほぼ使う場面がなかったのにドキュメントをメンテナンスすることになったしメンテナンスしているのだが、どういう場合に活用するのだろう。活用ケースによって、どちらのサブコマンド名が一般的なのか分かるのかもしれないので、質問してみたい。

例えば、`npm ci` https://docs.npmjs.com/cli

元記事を表示

【Ruby】Railsでリクエストのバリデーションを行うライブラリ`rails_param`

## 概要
Railsでリクエストのバリデーションを行う場合、[Rails基礎 ストロングパラメータとバリデーション](https://hpsuzucat.hatenablog.com/entry/2020/10/24/224143)の記事にある通り、ApplicationRecordの機能を使用する方法などが挙げられます。もちろん、この方法でも全然良いのですが、ApplicationRecordのモデルに通す前に、controllerでバリデーションしたい時もあるなと感じました。
何かないかなと調べてみた結果、`rails_param`というライブラリが良さげだったので、今回少し紹介します。

## 機能など
[nicolasblanco/rails_param](https://github.com/nicolasblanco/rails_param)に、ライブラリのReadmeがあります。パラメータの、型指定や、必須チェック、最小値・最大値など基本的なチェックは出来そうです。また、項目毎にエラーのメッセージもカスタムで設定できます。

## 実装サンプル
以下はAPIで、文字列の

元記事を表示

Ruby on rails JqueryとBootstrapが反映されない

今日は、RailsのTutorialsでJqueryとBootstrapをインストールした後、Dropdownの反映がされなかったので、その対処法についてまとめました。

まずは、こちらのコードを実行しました。
~~~app/javascript/packs/application.js
//= require jquery
//= require bootstrap
~~~

そして、
~~~app/assets/stylesheets/custome.scss
@import “bootstrap”;
~~~
を追加しました。
しかし、これでは動かず、、

~~~app/layouts/application.html.erb