Ruby関連のことを調べてみた

Ruby関連のことを調べてみた
目次

Ruby – マルはUTF-8からShift-JIS ( CP932 / Windows-31J )に出来るがバツは変換できない Encoding::UndefinedConversionError

# 例

“`rb
‘◯’.encode(“CP932”)
# => “\x{81FC}”

‘☓’.encode(“CP932”)
# Encoding::UndefinedConversionError: U+2613 from UTF-8 to Windows-31J
“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# Twitter

元記事を表示

Kaigi on Rails 2023に登壇しました

## はじめに

こんにちは。なおとです。

1ヶ月強前の話ですが、10/27(金)-10/28(土)の2日間にわたって開催されました「Kaigi on Rails 2023」に参加、登壇させていただきましたので、その感想を述べたいと思います。

本記事では私の登壇内容について今回はほぼ触れません。
以下のリンクにセッション内容や動画が公開されておりますので、見ていただけると嬉しいです。

https://kaigionrails.org/2023/talks/naoto/

# Kaigi on Railsとは

まず、Kaigi on Railsが何か、簡単に紹介します。
こちら[公式](https://kaigionrails.org/2023/)からの引用です。
> Kaigi on Railsのコアコンセプトは「初学者から上級者までが楽しめるWeb系の技術カンファレンス」です。Kaigi on Railsは技術カンファレンスへの参加の敷居を下げることを意図して企画されています。また、名

元記事を表示

【Ruby on Rails】RuboCopでコードの治安を守ろう

## まえがき

本記事は、**[DMM WEBCAMP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/infratop)** 5日目記事です。

Ruby on Railsを中心に、DWCメンター・卒業生が記事を投稿しておりますので、是非他の記事もご確認ください!

## はじめに

こんにちは、DMM WEBCAMP メンターの @ukwhatn です。

本カレンダー3回目の担当日となりますが、今日はRuby on RailsにおけるRuboCopの使い方について説明していきます。

## Rubocopとは?

[RuboCop](https://github.com/rubocop/rubocop)とは、Ruby向けのlinter、つまり静的コード解析ツールです。

:::note warn
**待ってよ、そもそもlinterって?**

linter(リンター)とは、ソースコードを実行前に解析することで、事前にバグやコーディングミスを検出したり、コミュニティやプロジェクトが定めたコーディング規約から

元記事を表示

【Ruby】pメソッドとputsメソッドの違い

# 【Ruby】pメソッドとputsメソッドの違い

Rubyにおける`p`メソッドと`puts`メソッドは、どちらも出力を行うメソッドですが、その振る舞いには重要な違いがあります。この記事では、これらのメソッドの特徴と違いを初心者にも分かりやすく解説します。

## pメソッドの特徴

`p`メソッドは、オブジェクトのデバッグ出力に適しています。具体的には以下の特徴があります。

### データ型を明示

`p`メソッドは、オブジェクトの型や内容を明示的に出力します。これにより、データの構造や型を正確に理解することができます。

### `inspect`メソッドの結果を出力

`p`メソッドは、内部的にオブジェクトの`inspect`メソッドを呼び出し、その結果を出力します。これにより、オブジェクトの内部表現を詳細に確認できます。

### 例

“`ruby
p “hello” # 出力:”hello”
p 123 # 出力:123
p [1, 2, 3] # 出力:[1, 2, 3]
“`

## putsメソッドの特徴

`puts`メソッドは、より一般的な

元記事を表示

Redmineの「メールによるチケット登録」で通知メールが送信されない

前回の投稿と同じく、Redmine関連の話題。
今回はトラブルシューティングです。

# Background

組織内で利用してきたRedmineがEOSL(実はけっこう前に)。
当該のRedmineにはコアレベル(≠ プラグインやテーマのレベル)でカスタマイズが施されていた。
そのRedmineのバージョンアップを行ったところ、課題発生。

バージョンアップ前後の対照表:

| 製品 | バージョンアップ前 | バージョンアップ後 |
|:———–|:————|:————|
| OS | CentOS v7.6 | Amazon Linux 2023 |
| Ruby | Ruby v1.9 | Ruby v3.1 |
| Redmine | Redmine v2.3 | Redmine v5.0 |

バージョンアップ方法:

1. 新しいOSを用意
2. Ruby v3.1をインストール
3. Redmine v5.0

元記事を表示

【Ruby Gold3.1詰まったシリーズ】superでのメソッド呼出し

# はじめに
今回はsuperに関する内容です。superではスーパークラスのメソッドのみ呼び出すと理解していましたがそうではないらしいです。

# irbで確認してみた
環境はruby2.5.3です。
まず、SuperClsを継承したSubClsを作成し実行する。

~~~ruby
class SuperCls
def hoge
puts “SuperCls”
end
end

class SubCls < SuperCls def hoge puts "SubCls" super end end ~~~ hogeメソッドを呼び出すと、 ~~~ irb(main):013:0> SubCls.new.hoge
SubCls
SuperCls
~~~
SubClsとSuperClsが表示され、同名メソッドを呼び出せました。

次に、ModモジュールをmixinしたClsを作成し実行する。

~~~ruby
module Mod
def hoge
puts “Mod”
end
end

class Cls
include Mod

元記事を表示

reCAPTCHA v2 を Rails に導入する方法

# はじめに

ログイン不要のお問い合わせページにbotから入力がありました。
ログイン不要は続けたいものの、botは弾きたいところです。
そこで、今回はreCAPTCHAを入れることで対応を試みました。

reCAPTCHAには、v2 → v3 → Enterprise と様々な種類があります。
参考までに v2、v3、Enterpriseの違いを軽く載せておきます。
詳しくは[google公式記事](https://cloud.google.com/recaptcha-enterprise/docs/compare-versions?hl=ja)をご覧ください

| バージョン | 判定 | 値段 |
| — | — | — |
| v2 | 画像認証 | 無料 |
| v3 | 自動 | 無料 |
| Enterprise | 自動 | 100万回/月以上は有料 |

個人〜中規模開発では通常のreCAPTCHAでの判定で基本は問題ない認識です。

その中でも、v2 は「画像認証が手間だが確実に判断できる」v3 は「自動認証で楽だが人間を却下する可能性がある」という点

元記事を表示

Ruby芸160チャレンジ(#5)スペース区切りのフィールドを持つテキストファイルの扱い

## この記事は何
[shellgei160を通じて言語習得 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/learning-via-shellgei160)に参加しています。

書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160

## 実行環境など
– Docker image: ruby:3.0.2
– 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に`answer-ruby`ディレクトリを作り、その中に解答となるファイルを作成していきます。

## 今回のテーマ
https://github.com/shellgei/shellgei160/blob/master/answer/5.md

“`bash
$ cat ntp.conf | awk ‘$1==”pool”‘ | aw

元記事を表示

【Ruby】サトシになったつもりでクラスについてまとめてみた(初学者向け)

# はじめに

Ruby Silverの勉強をして身について知識のなかで、クラスについての知識がRailsにも生きていると感じたので、まとめていきます。
Ruby Silver合格までの勉強方法は前回記事でまとめています。
[【プログラミング初学者】Ruby Silverに合格したのでまとめました!](https://qiita.com/fukuidaito/items/c05ade02d8e4aef8d210)
# 目次
| 章 | タイトル |
|—:|————-|
| 1 |[オブジェクト指向の基本的な単語の説明](#基本的な単語の説明)
| 2 |[クラスの定義とインスタンスの作成](#クラスの定義とインスタンスの作成)|
| 3 |[インスタンスメソッドの定義](#インスタンスメソッドの定義) |
| 4 |[インスタンス変数とアクセサメソッド](#インスタンス変数とアクセサメソッド) |
| 5 |[クラスメソッドとクラス変数の重要性](#クラスメソッドとクラス変数の重要性) |
| 6 |[クラスの継

元記事を表示

RubyのCSV文字コードの取り扱い方決定版

WEMEX株式会社 Advent Calendar 2023の5日目の記事です。
WEMEXでは、調剤薬局の本部向けに調剤売上等を店舗跨いで確認できるBIツールを提供しています。BIツールを提供する上で、CSV出力できる機能は欠かせないものです。私はこれまでもCSV出力の機能を開発してきましたが、今回、改めてCSVを実装する上での文字コードの取り扱いについて整理しましたので記事にしました。なお、CSVとタイトルに入れていますが、本質的にはCSV以外でも文字コードを取り扱う際に適用できる考え方だと思います。

# はじめに

RubyはデフォルトでUTF-8で出力するので、シンプルに `CSV.generate` してエクセルでファイルから開こうとすると文字化けしてしまいます。もちろん、エクセルでは、フォーマットを指定して開けば文字化けせずに開くこともできますが、少々手間です。業務においてCSVはその後エクセルで処理されることが多いので、システムから出力する場合、文字化けせずに開ける様にしてあげるのが基本です。
Googleで検索するとエクセルで文字化けせずに出力する場合、主に以下の2つ

元記事を表示

`dependent: :destroy`のhas_one関連レコードbuild時の奇妙な挙動

ある時、has_oneの関連レコードがすでに紐づいている状態で、build_association_nameで新たなレコードを作成しsaveをしても、特にエラーなどが起きずレコードが置き換わっていることに気づきました。
この挙動が奇妙だったため何が起きているのか調査をしてみることにしました。

## has_oneのbuild_associationでDELETEが実行されていた
rails7.1.2で以下のようなモデルを使って検証をしてみます。
ポイントはhas_oneに対して`dependent: :destroy`のオプションを与えている点です。

“`ruby
class Supplier < ApplicationRecord has_one :account, dependent: :destroy end class Account < ApplicationRecord belongs_to :supplier end ``` Supplierのhas_oneの関連レコードであるAccountを永続化して紐付けた状態にしておきます。 ```ruby i

元記事を表示

JqueryでRedmineのメニューにアイコンを入れる方法

## JqueryでRedmineのメニューにアイコンを入れる方法
[Redmine Advent Calendar 2023](https://adventar.org/calendars/8974)の5日目の記事として作成しました。

* * *
### やりたいこと

デフォルトのRedmineのメニューにはテキストだけが表示され、アイコンが表示されていません。
現在のUIではテキストの代わりにアイコンが多用されており、デフォルトのRedmineのメニューは堅苦しい感があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/f92499f9-47f3-e229-45d3-19850bdb7daf.png)
         <現状のデフォルトのRedmineのメニュー画面>

既存のデフォルトのRedmineのメニューにアイコンを挿入してみました。

![image.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

組込Linux(など)で動く mruby peripheral interface guide 互換の gem を作りました

[しまねソフト研究開発センター](https://www.s-itoc.jp)(略称 ITOC)にいます、東です。
これは [Ruby Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ruby) の記事です。

# Abstract

* mruby, mruby/c 共通の[マイクロコントローラペリフェラルインターフェースガイド](https://github.com/mruby/microcontroller-peripheral-interface-guide)というものがある。
* 実体は、I2C, UART 等のインターフェースの利用 API を定義したもの。
* mrubyだけじゃなくて、やっぱり CRuby でも使いたいよね。

# 結論

作りました。

* GPIO  https://rubygems.org/gems/mruby-sysfs-gpio
* I2C      https://rubygems.o

元記事を表示

Stimulus controllerの登録方法の違い

# はじめに

Railsでstimulusを使う場合は、[stimulus-rails](https://github.com/hotwired/stimulus-rails) gem が使われます。
stimulus-rails gemの大まかな機能は以下です。
– Stimulus インストーラー
– Stimulus controller ジェネレーター

このジェネレーターで生成される stimulus controllerの登録方法は、JavaScriptの管理方法で違いがあります。
その違いについて、まとめます。

# 登録方法

stimulus-rails gemは、JavaScriptの管理方法として以下をサポートしています。
– JavaScript bundler
– Import maps

この管理方法によって、stimulus controllerの登録方法が違います。
それぞれの登録方法について以下に記します。

## JavaScript bundler

JavaScript bundlerを使っている状態で、`bin/rails stimulus:

元記事を表示

日付の比較処理を見かけたら UTC+ いくつか意識してレビューしたいお話

# UTC+なんなのか意識してレビューとコーディングをしたい

`Time.current.class` は `=> ActiveSupport::TimeWithZone` であり現地時間を取得できる
`Date` 型は 世界標準時 `UTC + 0` を参照する

そのため `to_date` を用いて型変換しない場合 は `UTC+9` の時間を追加すると比較できる

“`ruby
[78] pry(main)> product.start_date
=> Wed, 29 Nov 2023

[79] pry(main)> product.start_date <= current_day + 8.hour => false

[80] pry(main)> product.start_date <= current_day + 9.hour => true
“`

境目は 8時間59分59….. +9時間すると正しく動作する

# 実際にあった怖い話

DateTimeオブジェクトとTimeオブジェクトをコード内で同列に扱って
日付判定ロジックでミスった話

公開日が

元記事を表示

【Rails】include と extend と ActiveSupport::Concern

`include` と `extend` の違いってなんだ?
内部では何が起きているのか..?

`ActiveSupport::Concern` を使うにも `included` 使うけど何をしているのか

`ActiveSupport::Concern`を使う際に学んだことをメモします。
## [extend](https://docs.ruby-lang.org/ja/latest/method/Object/i/extend.html)について

– `extend` したクラスのシングルトンクラス(特異クラス)のインスタンスメソッドとして追加できる
– `extend`したモジュールのメソッドはクラスメソッドのように呼び出せる

順を追うと…

### シングルトンクラスとは…
**あるオブジェクト専用のクラスであり、そのオブジェクトだけに属する**
[こちらが参考になります](https://qiita.com/k-penguin-sato/items/d637dced7af32e4ec7c0)
ちなみに[object.singleton_class](https

元記事を表示

Rubyにおける無名関数とバリデーション

※この記事は「RUNTEQ Advent Calendar 2023」の4日目を担当した記事です。

# はじめに

Rubyにおける無名関数について学習したところ、他言語と比較してとても使い勝手が良く、様々な場所で利用できると感じたので、私なりに理解したことを記事にしました。

誤りがございましたがご指摘をお願いいたします。

### 今回説明すること

– 無名関数についての基本と無名関数のメリット
– Rubyで使用されている無名関数4種類
– 無名関数のバリデーションでの活用法

### 前提として
無名関数に関しては、言語によって様々な呼び方がなされています。
無名関数、ラムダ式、匿名関数、lambdaといった呼び方がありますが、この記事の中では、無名関数は広義の意味で使用しており、lambdaやProcに関しては個々の機能を含めた意味合いで使用しております。

# 無名関数とは?
無名関数は、その名の通り「名前のない関数」のことです。

普段私たちが関数やメソッドを使用する際には、その名前を記載して関数やメソッドの処理を呼び出します。

Rubyの簡単なメソッドでは、”p

元記事を表示

Ruby on Rails カラムの追加/データ型変更/削除

ポートフォリオ制作でdocker-composeコマンドを使ってカラムの追加/データ型変更/削除を行ったので備忘録として記載しています。

前提条件
ruby’3.1.3′
rails’7.0.4′
docker-compose ‘3.8’

apiと書かれた部分は適宜読み替えてください。

### 既存のテーブルに新しいカラムを追加する
(usersテーブルにbadgeというカラムを追加する例)
1.新しいマイグレーションファイルを作成する
“`
docker-compose run –rm api rails generate migration add_badge_to_users badge:boolean
“`
2.以下のマイグレーションファイルが生成される
“`
class AddBadgeToUsers < ActiveRecord::Migration[7.0] def change add_column :users, :badge, :boolean end end ``` 3.rails db:migrateを実行 ``` docker-c

元記事を表示

位置情報系RubiestがMySQLを5.7から8.0にした話

静岡市でWeb開発しているkazuomatzです。

以前、[こちらの記事](https://qiita.com/kazuomatz/items/884c7b5e64a3b7532204)で、Rails + MySQL で位置情報を扱う時に標準だったライブラリ [activerecord-mysql2spatial-adapter](https://github.com/rgeo/activerecord-mysql2spatial-adapter)について書きました。

ライブラリの開発が止まってしまい、新しいRailsのバージョンに更新しようとすると対応されていないので、リポジトリをforkして、Rails6.0で何とか動かした話です。

今年、AWSの[RDSのMySQL5.7系のサポートの終了](https://blog.serverworks.co.jp/eos-rds-for-mysql57x)がアナウンスされました。2024年2月以降、RDSでMySQL5.7を利用し続けるには、有償の延長サポートに入る必要があります。

というわけで今年は、MySQL5.7で稼働している

元記事を表示

RailsでCSVインポートとエクスポート機能を実装

# 0. はじめに
Railsで基本的なCSVインポートとエクスポートを行う

# 1. 事前準備
“`: config/application.rb
require “csv”
“`

“`:app/views/users/index.html.erb
<%= form_with url: import_path do |form| %>
<%= form.file_field :file, accept: "text/csv" %>
<%= form.submit "CSVインポート" %>
<% end %>
“`
# 2. CSVインポート
“`:app/controllers/import_controller.rb
class ImportController < ApplicationController def create User.import_csv(file: params[:file]) if params[:file].present? redirect_to users_path end end ``` ```:

元記事を表示

OTHERカテゴリの最新記事