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

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

RubyでC++のバインディングを作成するRiceのドキュメントをChatGPTで日本語に翻訳しただけの記事

::: note
RubyでC++のバインディングを作成するために、Riceの公式ドキュメントをChatGPTでにほんごに翻訳しました。
:::

https://github.com/ruby-rice/rice

https://ruby-rice.github.io

## はじめに

Riceは、C++ 17対応のヘッダオンリーライブラリで、2つの目的を持っています。まず、既存のC++ライブラリに対するRubyのバインディングを簡単に作成することができます。次に、RubyのC APIに対してオブジェクト指向インターフェースを提供し、Rubyを埋め込んだり、C++でRubyの拡張機能を書くことを簡単にします。

Riceは、[Boost.Python](https://github.com/boostorg/python) や [pybind11](https://github.com/pybind/pybind11) と似ており、C++とインターフェースを作る際に必要な定型コードを最小限に抑えます。これにより、RubyオブジェクトをC++に、またその逆に変換するための型情報を自

元記事を表示

Procとlambdaの違いとRails開発で使われる場面

## はじめに

`Proc.new`と`lambda`はどちらもProcクラスのオブジェクトを作成する方法です。

しかし、両者で作られるオブジェクトには挙動の違いがあります。

そこでこの記事では、`Proc.new`と`lambda`それぞれで生成されるProcオブジェクトの違いをまとめます。

この記事におけるバージョンは**Ruby 3.3**です。

## 【おさらい】`Proc.new`と`lambda`の使い方

最初にサラッと`Proc.new`と`lambda`の使い方を確認しておきます。

### `Proc.new`の使い方

次のように`Proc.new`を使います。

“`ruby
p = Proc.new { |n| n * 2 }
p.call(5) #=> 10
“`

また`Proc.new`の代わりに`proc`メソッドを用いても、同じ機能のProcオブジェクトを生成できます。

“`ruby
p = proc { |n| n * 2 }
p.call(5) #=> 10
“`

### `lambda`の使い方

`Proc.new`

元記事を表示

[RSpec]createメソッドからブロック構文で囲って追いデータ作るやつ備忘録

# 概要
letメソッドで定義した`user_…`の変数だけ使いたい場合、関連オブジェクトの`favorite_…`の定義がちょっと無駄だったりする。
“`ruby
let(:user_1) { create(:user, name: “ハム太郎”) }
let(:favorite_1) { create(:favorite, user: user_1, name: “ヒマワリのタネ”) }

let(:user_2) { create(:user, name: “まいどくん”) }
let(:favorite_2) { create(:favorite, user: user_2, name: “おそうじ”) }
let(:favorite_3) { create(:favorite, user: user_2, name: “お金もうけ”) }

let(:user_3) { create(:user, name: “トラハムくん”) }
let(:favorite_4) { create(:favorite, user: user_3, name: “スケボー”) }

元記事を表示

【Rails】render textが使用できない

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

## 問題
以下のように、render textを使用するとエラーが出ます。
“`ruby
class TestController < ApplicationController def index render text: "Hello World" end end ``` ## 解決方法 Rails5系からrender textは使用できなくなりました。 代わりにrender plainを使います。 ```ruby class TestController < ApplicationController def index render plain: "Hello World" end end ``` ## 参考 https://zenn.dev/yukito0616/articles/3dfc26b6a8ff56 https://guides.rubyonrails.org/layouts_and_re

元記事を表示

Railsで環境変数が読み込まれない? .envファイルのトラブルシューティングと解決方法

## Railsで環境変数が読み込まれない? `.env`ファイルのトラブルシューティングと解決方法

### 目次
1. [背景](#背景)
2. [コントローラーでの環境変数の利用](#コントローラーでの環境変数の利用)
3. [私が試したトラブルシューティング手順](#私が試したトラブルシューティング手順)
– [Railsコンソールで環境変数を確認](#railsコンソールで環境変数を確認)
– [APIキーの有効性を確認](#apiキーの有効性を確認)
– [現在のRails環境が`dotenv`を反映する設定になっているか確認](#現在のrails環境がdotenvを反映する設定になっているか確認)
– [Gem ‘dotenv-rails’がインストールされているか確認](#gem-dotenv-railsがインストールされているか確認)
– [サーバーの再起動を試行](#サーバーの再起動を試行)
4. [解決策:サーバーの再起動](#解決策サーバーの再起動)

### 背景

Railsアプリケーションの開発中、コントローラーで環

元記事を表示

【paizaCランク】大きな数値を 3 けたごとにカンマ区切りで出力

Ruby学習のためにpaizaで問題集やスキルチェックをしています。

Dランクを飛ばしてCランクの問題集を挑戦し始めました。

標準出力メニューの問題集「大きな数値を 3 けたごとにカンマ区切りで出力」を解いて学んだこと、理解できていなかったことなど学習備忘録で記載していこうと思います。

## 問題
標準入力で与えられた数値を3桁ごとにカンマで区切って出力するという問題。

入力例
123456789

期待する出力
123,456,789

https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step6

## 自分が書いたコード
“`
ary = gets.chomp.split(“”)
count = ary.size

i = 1

while i < count do print ary[i-1].to_i if i%3==0 print "," end i = i + 1 end print ary[i-1].to_i ``

元記事を表示

Railsのparamsとは

# paramsとは
paramsとは**リクエスト**が発生した際にroutes、Controllerに渡されるパラメータ。

`params[:id]`などで、Viewからroutesを通り、Controller側に渡される。
なお、`config/routes.rb`では、このように書かれている。
“`
get ‘users/:id/articles’, to: ‘articles#show’, as: ‘user_articles’
“`
これの`:id`がそう。
Controllerには`params[:id]`と書いてidを取得できる。

# リクエストとは
リクエストはクライアント側がサーバー側に何かこれがほしいと要求をしサーバー側がそれに対してレスポンスをするときに発生しているあれ。

レスポンスをするということはクライアントが**何のリソースが欲しいか**を特定する必要がある。
なので、クライアント側が特定をするための最低限の情報を渡さなければならない。

最低限の情報とは、例えばデータベースで言うとidだったり、user_idだったり。

idさえあれば、データ

元記事を表示

RubyXLでExcelファイルを読み取る時ハマったこと

# TL;DR

“`rb
workbook = RubyXL::Parser.parse_buffer(buffer)
workbook.stream
“`

上記コードは`Stream`とか書いていますが、巨大TEXTファイルを読み取る時みたいに、一行ずつ読んで性能アップすることはないので、かえって遅くなります。
こちらのメソッドは単にWebサーバーに送信されたExcelファイルを、ファイルハンドラーのままで処理可能にして、明示的に一時ファイルを保存しなくて済むように作られています。

オーソドックスな`workbook = RubyXL::Parser.parse(“path/to/Excel/file.xlsx”)`の方が断然早いですが、そもそもRubyXLやPythonのOpenPyXLのようなサードパーティーモジュールは巨大Excelファイルに不向きです。

巨大Excelファイルをプログラム的に処理するには、現段階Excelの中にVBAを書くしかないと思います。

# 実験
## 巨大Excelの作成

“`rb
require ‘benchmark’
requir

元記事を表示

RailsでJavascriptを使用して動的セレクトフォームの作成

# はじめに

現在友人依頼の作付計画アプリケーションの作成中です
今回はJavascriptを使用して動的なセレクトフォームを作成したので
アウトプットします✍️

間違えているところ等ございましたら、ご指摘いただけますと幸いです🙇

# 完成図
畑名を選択すると、畑名に関連付けられた区画名が出てくるようにしています!

[![Image from Gyazo](https://i.gyazo.com/83145a3b2e1498d16452466f0721c0c9.gif)](https://gyazo.com/83145a3b2e1498d16452466f0721c0c9)

イメージ的には都道府県がわかりやすく、都道府県=畑 市町村=区画 作付計画はプロフィールの出身地といったところです!下記の記事が大変分かり易かったです!

# ER図

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
`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

元記事を表示

OTHERカテゴリの最新記事