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

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

erbの<% %>を楽に入力する【VSCode】

# はじめに
`erb`を使う時、`<% %>`や`<%= %>`の入力が手間ですので、解消します。
# 環境
| | |
|:-:|:-:|
| エディタ | VSCode |
| 言語 | erb(html系 拡張子 なら応用可能)|
| | |
# やりたいこと
“Emmet”のように、shorthandで`<%%>`を呼び出せるようにします。

“Emmet”についてはこちら

https://qiita.com/kohki_takatama/items/ec0bec86277bf90f94eb

# 実装手順
VSCodeで行ってください。
| `ctrl + shift + P`で設定を開く | snippetを検索し、開く |
|:-:|:-:|
|![スクリーンショット 2024-08-22 13.01.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/91cc29e4-749d-2821-1bb2-9c06aacbeefa.png)|![スクリーンショット

元記事を表示

慣れないデザインパターンを導入して失敗した話

# 概要
– 筆者が興味本位で使いたくなったデザインパターンを稼働中のプロダクトに導入してみた
– 導入して約1年後、当該プログラムは存在しているが、同じデザインパターンが他のチームメンバーに使われることがなく、プロダクトコードの中でひとつだけ浮いた状態になった
– 振り返ってみると、あまり分かりやすくなくて、書いた本人でさえも書き直したくなってしまった

という話です。

# 発端
某金融システムのバックエンド開発を行なっています。プロダクトコードはRailsで書かれています。
筆者宛ての仕事として、ユーザーからのリクエストをControllerで受け取り、もろもろバリデーションチェックの後、テーブルAのレコードを更新、テーブルB、テーブルCのレコードをそれぞれ1件づつ追加したい、という要件の実装を担当することになりました。
考えられる実装パターンは以下のようなものでした。

#### 選択肢1: そのままControllerに書く
“`ruby
class HogeController < ApplicationController def create # もろもろ

元記事を表示

RubyMine 2024.2 がリリースされました!

## 皆さん、こんにちは!

新しいバージョンの RubyMine が利用可能になったことをお知らせします。弊社の[ウェブサイト](https://www.jetbrains.com/ruby/download) や無料の [Toolbox App](https://www.jetbrains.com/toolbox-app/)、あるいは Ubuntu 用の [snaps](https://snapcraft.io/rubymine) からダウンロードできます。

RubyMine 2024.2 からは、IDE を中国語、韓国語、日本語で使用する場合に言語サポートプラグインをインストールする必要がなくなります。これらの言語パッケージが IDE に最初から同梱されるようになりました。

もう一つの大きな改善点は、新しいUIがRubyMine 2024.2でデフォルトになったことです。詳細は[専用のブログ記事](https://blog.jetbrains.com/blog/2024/07/08/the-new-ui-becomes-the-default-in-2024-2/)をご覧くだ

元記事を表示

【ABC367】D – Pedometer のイメージベース解説

## 目的
[AtCoder公式の解説](https://atcoder.jp/contests/abc367/editorial)を見てもテキストベースでの説明で解き方の理屈がわからなかったが、[Xでポストされた画像](https://x.com/supu_hapi/status/1824907933676921288)を見て解き方の理屈がわかったので、自分と同じように解き方の理屈がわからない人向けにイメージベースで解説

## 問題
https://atcoder.jp/contests/abc367/tasks/abc367_d
各休憩所を時計回りでMの倍数となる歩数の組み合わせの数を求める
![円環図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3861065/03e28ea4-4612-f5fa-a43e-c909a1d6fe9c.png)
入力例1(M=3)の答えは、

– 休憩所1から休憩所3までの3歩(2+1)
– 休憩所3から休憩所2までの9歩(4+3+2)
– 休憩所4から休憩所1

元記事を表示

NoMethodError: undefined method `chrome’ for Selenium::WebDriver::Remote::Capabilities:Class ってなエラーが出た場合

6.1のサポートがぁぁぁあということで、7.0へ引っ越し作業中に

“`
NoMethodError: undefined method `chrome’ for Selenium::WebDriver::Remote::Capabilities:Class
“`

ってエラーが発生

“`
Capybara.register_driver :chrome_as_pc do |app|
caps = Selenium::WebDriver::Remote::Capabilities.chrome(
loggingPrefs: { browser: “ALL” },
chromeOptions: {
w3c: false,
args: [
“no-sandbox”,
“headless”,
“disable-gpu”,
“window-size=1200,800”,
“user-agent=Mozilla/5.0 (Windows NT 5.1) Apple

元記事を表示

生年月日から年齢を計算する方法を各プログラミング言語で書いてみた

# はじめに

プログラミングでよくあるタスクの一つに、生年月日から年齢を計算することがあります。今回は、各プログラミング言語でこのタスクを1行で実装してみました。どの言語でも、標準ライブラリを活用すれば簡単に計算できます。

## Python
“`python
age = (datetime.datetime.now() – datetime.datetime(1984, 8, 21)).days // 365
“`
Pythonでは、`datetime`モジュールを使い、現在の日付と生年月日との差を日数で計算し、年数に換算しています。

## JavaScript
“`javascript
const age = Math.floor((new Date() – new Date(‘1984-08-21’)) / (365.25 * 24 * 60 * 60 * 1000));
“`
JavaScriptでは、`Date`オブジェクトを利用して、生年月日と現在の日付の差をミリ秒で計算し、年数に換算しています。

===
ミリ秒意識しない記載方法は以下(推奨)
“`ja

元記事を表示

Ruby Gold模擬試験アプリを作成しました!

# Ruby Gold模擬試験アプリを作成しました!

## はじめに

こんにちは!Rubyが大好きで、将来は日本でRubyエンジニアとして働くことを夢見ている者です。現在、就職活動を進めていますが、自分のRubyへの情熱を言葉だけでなく行動で示したいと考えました。

## Ruby Gold試験への挑戦

そこで、Ruby技術者認定試験(Gold)の受験を考えました。しかし、調べてみると、この試験は日本国内での対面試験のみだということがわかりました。現在中国に住んでいる私にとって、これは大きな壁でした。

## オープンソースの模擬試験リソース

幸いなことに、GitHubで素晴らしいリソースを見つけました。Ruby Associationが公開している[模擬試験問題](https://github.com/ruby-association/prep-test/blob/version3/gold_ja.md)です。これは本当に助かりました!

## Webアプリケーションへの発展

模擬試験問題を解いていくうちに、ふと思いつきました。「これをWebアプリケーションにしたら、世界中

元記事を表示

本番環境でRailsコンソールを開くコマンド

いつも忘れて30分ほど時間を浪費するので備忘録
しかもちょっと違うと全然開けないのが結構きつい。

# 本番環境でRailsコンソールを開く
“`
RAILS_ENV=production bundle exec rails c
“`

## RAILS_ENVは前
`RAILS_ENV=production`はどちらにせよ末尾につけるのではなく、前につける

## rails ではなくて bundle exec
`rails c`で開こうとしても開けない。
`bundle exec rails c`を使い開く。

元記事を表示

filter_map.with_index、君に決めた

## 知りたかったこと

filterは配列などの条件に合致する要素を新たな配列として返してくれる。例えば次は機能する。

“`ruby
ary = [1,10,6,3,7,2,5,4]
p ary.filter { _1 > 4 }
#=> [10,6,7,5]
“`

しかし、以下の場合はどうするだろうか。
– 配列の合致する要素に対してのみ、**その要素に演算を行なった値**を返して欲しい
– 配列の合致する要素の**インデックスが全て**欲しい

要は、Pythonのif節を備えた内包表記と同じことがしたいのである。

## いにしえの解決法
これを解決するには
map{if文}.compactを使いましょう、というのが調べると出てくる。要らない要素はif文でnilにし、最後にcompactで取り除くという算段だ。

“`ruby
ary = [1,10,6,3,7,2,5,4]
p ary.map { _1 * 2 if _1 > 4 }.compact
#=> [20,12,14,10]
p ary.map.with_index {|value, index| ind

元記事を表示

文字列を圧縮・展開する/バイナリ文字列を 16 進数文字列に変換する

# この記事は?

Ruby で以下を行う方法を備忘録として残します ✍️

– 文字列を [zlib](https://docs.ruby-lang.org/ja/latest/library/zlib.html) で圧縮・展開する。
– バイナリ文字列を 16 進数文字列に、あるいは16 進数文字列をバイナリ文字列に変換する。

# 方法

“`rb
require ‘zlib’

string = ‘ヨーヨー振りたい 🪀’

# 文字列を圧縮 → バイナリ文字列 → 16 進数文字列
binary_string = Zlib::Deflate.deflate(string, Zlib::BEST_COMPRESSION)
#=> “x\xDA{\xDC\xBC\xE2q\xF3\x9E\xC7`\xF2Y\xCF\xFA\xC7M]\x8F\e\xE7?nlQ\xF80\x7FU\x03\x00+q\x135”
hex_string = binary_string.unpack1(‘H*’)
#=> “78da7bdcbce271f39ec760f259cffac74d5d8f

元記事を表示

[個人開発・本リリース] 完全未経験が冷蔵庫の中身を簡単管理できるサービスをリリースした件

## はじめに

こんにちは。ryosuke([@ryousuke_mogurA](https://x.com/ryousuke_mogurA))と申します。現在プログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

前回MVPリリースしたアプリを本リリースしたので新たな記事を書くことにしました。
技術的な部分での誤りやサービスについての感想などありましたら、コメント等で教えていただけると助かります。
## 目次
[1.作成したサービスの紹介](#サービスの紹介)
[2.作成した経緯](#作成した経緯)
[3.技術スタック](#技術スタック)
[4.こだわったポイント](#こだわったポイント)
[5.画面紹介](#画面紹介)
[6.ER図](#ER図)
[7.実装機能](#実装機能)
[8.今後の展開](#今後の展開)
[9.反省点](#反省点)
[10.感想](#感想)

## サービスの紹介
[![Image from Gyazo](https://i.gyazo.com/385a7078b695448cfef79567d7cd142b.jpg

元記事を表示

LMDBでnosyncすると速くなった

## 背景
Kontur Population PMTiles ([optgeo/kpop-pmtiles](https://github.com/optgeo/kpop-pmtiles))というプロダクトを作りにあたって、[H3](https://h3geo.org/#)のresolutionを変えながらデータベースに値を記録していくということを行いました。

## わかったこと
[過去の経験](https://qiita.com/hfu/items/a23d8e5168d710490f5b)から、LMDBを使っていたのですが、LMDB.newする際に `:nosync => true` を付加すると高速になることがわかりました。

“`ruby
require ‘lmdb’

$env = LMDB.new(‘db’,
:nosync => true, :nometasync => true,
:writemap => true, :mapasync => true,
:mapsize => 5000 * 1024 * 1024 * 1024
)
$db = $

元記事を表示

【Rails】button_to_functionが使用できない

## はじめに
Railsのアップデート中にbutton_to_functionを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
以下のように、button_to_functionを使用するとエラーがでます。
“`ruby
<%= button_to_function "ボタン", "clickButton()", {:class=> “button”} %>
“`

## 解決方法
button_to_functionはRails4.1で削除されました。
javascriptなどでボタンをクリックしたときのコードを実装します。
“`ruby
ボタン

$(document).ready(function() {
$(“#button”).click(function() {
clickButton();
});
})
“`

## 参考
https://www.techscore.com/tech/Ruby/rails-4.0/view/

元記事を表示

Shift_JISに変換する際に『 〜 』が化けちゃう【波ダッシュ・全角チルダ問題】

## 解決策
文字列をShift_JISに変換する際 “~”が消える事例に遭遇した人へ
下記のコードを付けよう

~~~ ruby
# 全角チルダを波ダッシュに変換
.gsub(‘~’, ‘〜’)
~~~

## 原因
上のインライン部分に書いてあるとおり、実は”**~**”と”**〜**”は違う文字

全角チルダ ” **~** “はShift_JISにエンコードする際バグってしまうみたい

https://www.tohoho-web.com/ex/dash-tilde.html

元記事を表示

【O’Reilly】初めての自動テスト読んでみた。

# 初めに

個人的な都合で自動テストに詳しくならないといけないので今回の本を読んでみました。

www.amazon.co.jp/dp/4873118166

# 簡単にこの本ってどんなものなの?

Rubyを通して自動テストの初歩について解説しています。

テスター視点で自動テストの特徴や簡単な設計運用、単体・結合・E2E、TDDについて解説しています。

# どんな人が読むべきだと思う?

以下の人が読むべきだと思います。

– 自動テストに振れたことない・触れたばかりのテスターや開発者
– 自動テストにおける単体・結合・E2Eを簡単に知りたい人
– Rubyの自動テストを勉強したい人

逆に読まなくていい人はこんな感じです。

– 実践的な自動テストの設計運用を知りたい人
– JSTQBの試験対策
– 自動テストにおける単体・結合・E2Eを簡単に分かっている人
– Rubyにアレルギーを感じる人
– SPAやSSRのテストアプローチを知りたい人
– 手動・自動テスト関係ない汎用的なテストについて知りたい人
– 現在と2017年の違いを把握できない人

# 本の内容について詳細解

元記事を表示

ActiveAdminで、全てのチェックボックスを選択するチェックボックスを追加する

## 動機
[前回の記事](https://qiita.com/Erga-mion/items/5ba48dbeb10573dd70c2)では、ActiveAdminで、複数のレコードを関連づけるために、フォームにチェックボックスを追加していました。 その続きになります。

そこに、選択できるレコードの数が膨大になることが考えられるので、それらを全て選択できるチェックボックスを追加して欲しい、という要望がありました。

ActiveAdminのドキュメント等を確認しましたが、そういった機能は用意されていないようですので、JavaScriptで実装することにしました。(もしありましたらご指摘お願いします:bow:)
## 動作環境
– ruby 3.2.2
– rails 7.0.8
– activeadmin 2.14.0

## 実装
前回の記事のものと同じものになります。

`User` の作成・更新ページに、複数の`Book` を選択できるチェックボックスを追加しています。

“`mermaid
erDiagram
User ||–o{ BookReservation : u

元記事を表示

Rubyで多重配列に名前を付けてループを回す方法について

# はじめに
Rubyで多重配列を扱う際に、各要素に名前を付けてeachやmapで回す事ができます。

# 環境

“`
❯ ruby -v
ruby 3.2.0 (2022-12-25 revision a528908271) [x86_64-darwin20]
“`

# 多重配列の例
まず、以下のような多重配列を用意します。

“`rb
data = [
[1, “Alice”, 30],
[2, “Bob”, 25],
[3, “Charlie”, 35]
]
“`

この配列は、ID、名前、年齢の情報を持つ3つの要素から構成されています。

# 名前を付けてループを回す方法
多重配列の各要素に名前を付けてループを回すには、eachメソッドやmapメソッドでブロック引数に名前を付けて以下のように書きます。

## eachの例
“`rb
data.each do |id, name, age|
puts “ID: #{id}, Name: #{name}, Age: #{age}”

元記事を表示

【Rails】Rails始めて2週間でよく使ったコマンド

こんにちは!
今回はRailsを始めて2週間でよく使ったコマンドを紹介したいと思います。
最後まで読んでいただけると嬉しいです!

# コマンド紹介
“` php
rails server
“`
説明: Railsアプリケーションをローカルで実行するためのコマンドです。http://localhost:3000でアプリケーションを確認できます。
“` php
rails generate scaffold [モデル名] [カラム名:型, …]
“`
説明: モデル、ビュー、コントローラなどの基本的なCRUD機能を一括で生成するコマンドです。開発初期によく使用します。
“` php
rails db:migrate
“`
説明: データベースのスキーマを最新の状態に更新するためのコマンドです。新しいマイグレーションファイルを適用します。
“` php
rails console
“`
説明: RailsアプリケーションのコンテキストでインタラクティブにRubyコードを実行できるコンソールです。モデルの操作やデバッグに便利です。
“` ph

元記事を表示

ActiveAdminで、多対多の関連付け(中間テーブル)レコードを追加する

ActiveAdminで1対多や多対多の関係のあるモデルでは、`has_many` メソッドを使うことで、多のモデルをもう一方のモデルのフォームで追加・更新できるようにできます。(https://activeadmin.info/5-forms.html)

本記事では、その`has_many`を使う方法と、もう一つ別のアプローチで、多対多のモデルを関連づける中間テーブルのレコードを作成・更新できるようにします。

ここでは、以下のようなモデル構成での実装を示します。
`User`のページで、`Book`との中間テーブルである、複数の`BookReservation`を作成・更新・削除できるようにします。
“`mermaid
erDiagram
User ||–o{ BookReservation : user_id
BookReservation o{–|| Book : book_id
“`

## 動作環境
– ruby 3.2.2
– rails 7.0.8
– activeadmin 2.14.0

## has_manyを使用する場合
### 画面
– 「Add N

元記事を表示

【paiza x Qiitaコラボ】「お菓子の詰め合わせ(ランクA相当)」を解いて解説入れてみた(なんちゃって全探索)

こんにちは、paizaランクAのtomosukeです。「paiza x Qiitaコラボ」投稿は2回目です。今回はランクA相当の問題にトライしました。

今回も、考え方を頑張ってかみ砕いて説明してみたいと思います。

コラボ企画へのリンクは[こちら](https://paiza.jp/pages/campaign/paiza-qiita)

# 今回のお題は「お菓子の詰め合わせ」
[問題文はこちら](https://paiza.jp/works/mondai/a_rank_skillcheck_archive/school_hiking)

## 概要(筆者の脳内で変換されています)

![スクリーンショット 2024-08-18 22.28.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63377/39a7ce7a-35ce-be74-5b8c-eb0b091742d2.png)
↑ paizaからの引用

お菓子を買うためにお小遣いをもらいます。いくつかのお菓子が売っていて、それを次の

元記事を表示

OTHERカテゴリの最新記事