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

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

Ruby on Railsのyaml.h not found解決方法(Windows11)

# STEP 0
基本的なインストールは、こちらの記事を参考に

https://qiita.com/tks_00/items/711a022c6234fc495724

ただ、新規プロジェクト作成時にyaml.hが無いというような以下のようなエラーが出たので修正
~~~
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/installer/parallel_installer.rb:123:in
`block in worker_pool’
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/worker.rb:62:in `apply_func’
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/worker.rb:57:in `block in
process_queue’
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/worker.rb:54:in `loop’
C:/Ruby32-x64/

元記事を表示

Rails 7.1 で render_to_string の仕様が変わった

Rails 7.1 で,render_to_string の仕様が変わったらしい。
そのために,自作アプリで〈rubyXL で Excel データを生成してダウンロード〉という機能がおかしくなって困ったが,最終的に直せた,という話。

なお,Rails のコードを調べたわけではなく,実験によって得た知見なので,少し間違っているかもしれない。誤りに気づかれた方はご指摘いただけると助かります。

各種バージョンは以下のとおり

* ruby 3.3.1 (2024-04-23 revision c56cd86388) [arm64-darwin23]
* Rails 7.1.3.2
* rubyXL 3.4.27
* stringio 3.1.0

(トラブルが起こらなかった Rails バージョンとしては,7.0.8.1 や 6.1.7.7 など)

# はじめに

Rails アプリで,CSV だの Excel だの PDF だのを動的に生成して返す(ダウンロードさせる),ということはよくある。
コントローラーでは `send_data` メソッドにそういったデータを渡してやればいい。

元記事を表示

バージョン指定して特定のマイグレーションファイルを削除する、ついでにNO FILEのマイグレーションファイルも消す

# はじめに
あんまりつかうことがないので忘れがちなマイグレーションファイルの削除について….

## statusでみる

“`
& bundle exec rails db:migrate:status
“`

“`
up 202312250xxxx Delete hoge
up 202401091xxxxx Add hoges
up 20240207xxxxxx Change hoge body
up 2024030xxxxxxx Add hoge messsage
“`

## 消す
“`
up 202312250xxxx Delete hoge
up 202401091xxxxx Add hoges // これを消す
up 20240207xxxxxx Change hoge body
up 2024030xxxxxxx Add hoge messsage
“`

downする
“`
$ bundle exec rails db:down VERSION=202401091xxxxx

元記事を表示

GraphQL Rubyでfieldを共通利用したい

graphql-rubyを利用する際、複数のObjectで同一のfieldを共通利用したくなりました。
下記手順で、Interfaceを利用して実現できました。

1. BaseInterfaceを定義する
2. 共通利用したいfieldをまとめたInterfaceを定義する
3. fieldを定義するObjectでInterfaceをimplementsする

なお公式ドキュメントは下記です。詳細はこちらをご参照ください。
https://graphql-ruby.org/type_definitions/interfaces

# 0. Interfaceとは

> Interfaces are lists of fields which may be implemented by object types.

Interfaceとは、Objectによって実装することができるfieldのリストです。

# 1. BaseInterfaceを定義する

これから定義するInterfaceにおいて、その基底となるBaseInterfaceを定義します。

“`ruby:types/b

元記事を表示

ruby-install failed :error: use of undeclared identifier ‘RSA_SSLV23_PADDING’

### ruby-install failed :error: use of undeclared identifier ‘RSA_SSLV23_PADDING’

“`
$ ruby-install 2.7.4
(省略)
ossl_pkey_rsa.c:942:5: error: use of undeclared identifier ‘RSA_SSLV23_PADDING’
DefRSAConst(SSLV23_PADDING);
^
ossl_pkey_rsa.c:877:58: note: expanded from macro ‘DefRSAConst’
#define DefRSAConst(x) rb_define_const(cRSA, #x, INT2NUM(RSA_##x))
^
:160:1: note: expanded from here
RSA_SSLV23_PADDING
^
115 warn

元記事を表示

good_jobを導入して定時実行のジョブ(cron)を実装する手順、全体像

# 実装に必要な最低限の知識

good_jobとは
Ruby on Railsアプリケーションでバックグラウンドジョブを実行するためのGemです。

https://github.com/bensheldon/good_job

good_jobはActive_jobを基本としているので、忘れていたらActive_jobについてさらっと目を通すと理解が深まります。

https://railsguides.jp/active_job_basics.html

# 実際の手順

未来の自分のために手順をそのまま残しておきます。

## 初期設定

### gemを導入
“`Gemfile
gem ‘good_job’
“`

“`terminal
bundle install
“`

### good_jobがRailsアプリケーションに統合されるための初期設定
ターミナルでコマンドを実行します。
“`terminal
bundle exec rails generate good_job:install
“`

このコマンドで、いくつかファイルが

元記事を表示

ActiveRecord::Relationにおける present? exists? blank? empty?

## 結論

– 条件に合致するレコードが1件以上存在するかどうかを確認したい場合
– `exists?`メソッドを使う
– 条件に合致するレコードが1件も存在しないかどうかを確認したい場合
– `empty?`メソッドを使う

## 使用データ

“`rb
irb(main):001> ExternalUser.all
ExternalUser Load (2.1ms) SELECT `external_users`.* FROM `external_users`
=>
[#]
“`

## 実行結果

元記事を表示

GroveBeginnerKit を、C++(Aruduino)とRuby(ラズパイ,Rboard) で使う I2C – 温湿度センサー編

[しまねソフト研究開発センター](https://www.s-itoc.jp)(略称 ITOC)にいます、東です。

[Grove Beginner Kit for Arduino を使ってみる記事](https://qiita.com/HirohitoHigashi/items/dc43ea72d572b21a6823)の第6回、今回は I2C 接続の温湿度センサーを題材にします。

このレポートでは、

「メーカーのデータシートを見て、センサICを直接コントロールをすること」

を、方針とします。
もちろん、プログラムを書く上で既存のライブラリ等の実装を参考にすることは良い事です。しかしながらこのレポートは、I2C バスやセンサ IC の扱い方、データシートの読み方を示す事も目的としているため、できるだけ低レイヤーでの説明を行います。

ターゲットは、以下の通り。
* Arduino - 付属の Arduino Uno 互換機
* Ruby – Raspberry Pi + [Grove Base HAT for Raspberry Pi](ht

元記事を表示

【LINE WORKS】rubyでオウム返しBotを作る

# はじめに
前回、AWS SAMのサンプルを実行してたので、今回はそれを利用してline worksのオウム返しbotを構築した備忘録になります

前回の記事は[コチラ](https://qiita.com/youfuku/items/38f582889a05027f713f)

## 初期設定
まずは、環境の新規構築を行います
“`shell:コマンド
$ sam init
$ 省略
Project name [sam-app]: oumu
$ 省略
$ cd oumu
$ mv hello_world/ oumu/
“`

## テンプレート改修
“`diff_yaml:oumu/template.yaml
AWSTemplateFormatVersion: ‘2010-09-09’
Transform: AWS::Serverless-2016-10-31
Description: >
oumu

Sample SAM Template for oumu

# More info about Globals: https://github.com/awslabs/

元記事を表示

【クイズ】. の使い方を見分けろ!

# はじめに

プログラミング全般において、`.`がさまざまな形で使われています。

今回は、クイズ形式の記事です。`.`の知らない使い方があるかも?

全11問、お楽しみいただければ幸いです。

# クイズ

### 1
以下の使われ方をするとき、`.`は何を表す?
“`bash
ls -a .
cd ./dir
cp -r . /path/to
“`

答え

「カレントディレクトリ」

「現在のディレクトリ」を指します。

### 2
以下の使われ方をするとき、`..`は何を表す?
“`bash
cd ..
ls ..
cat ../file
“`

答え

「親ディレクトリ」

一つ上の階層(ディレクトリ)を指します。

### 3
以下の使われ方をするとき、`.`は何を表す?
“`
example.txt
example.json
“`

答え

「拡張子」

元記事を表示

【Rails】ノイズになる警告を一時的に抑制する方法あれこれ【乱用厳禁】

## はじめに
Railsの開発をしているとログやターミナルに警告が表示されることがあります。

たとえば以下はRSpecのテストコードを実行したときの実行結果です。
いくつか警告(warning)が表示されています。

“`
$ bundle exec rspec spec/models/user_spec.rb
warning: parser/current is loading parser/ruby31, which recognizes 3.1.4-compliant syntax, but you are running 3.1.3.
Please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
DEPRECATION WARNING: `Rails.application.secrets` is deprecated in favor of `Rails.application.credentials` and will be removed in Rails 7.2. (cal

元記事を表示

ActiveAdminのカスタマイズ集 – 実用的で頻出な記法をコードサンプルにまとめてみた

## はじめに

ActiveAdminの使用を続ける中でカスタマイズ時に頻繁に使用する記法が見えてきたので、それらを詰め込んだコードサンプルを掲載します。

## コードサンプルの特徴

– ActiveAdminで `app/admin/…` に配置する1ファイルとして作成した
– 私がよく書く記法を詰め込み、TIPSとしても読めそうな内容にした
– テンプレートファイルにも流用できる構成を目指した
– なるべく公式ドキュメントに沿ったが、一部に公式外の記法も混ぜた

## 想定する読者

– ActiveAdminを使ったことがある人
– インストール方法については記載しません
– ActiveAdminの便利な記法やカスタマイズ方法を探している人

## バージョン情報

記事公開時点の最新バージョンを使用します。

– Ruby: `3.3.1`
– Ruby on Rails: `7.1.3`
– ActiveAdmin: `3.2.0`

## サンプルのテーブル構成

今回は図の中央にある `company_users` の管理画面を作成します。
has_man

元記事を表示

JavaScript ページをリロードしないと動かない(RubyonRails)

RubyonRailsにてフリマアプリ実装中、JavaScriptがうまく動かなかった件について。
初学者のアウトプット用記事なので、情報の信憑性の低さについてはご容赦ください。同じところで苦戦している初学者の方にも参考になれば幸いです。

当記事はRails7で実装した際の記録であり、具体的にはgemfileに以下のTurbolinksに関する記述がある場合を想定しています。該当しない場合は、当記事の内容が合わない場合がありますのでご注意ください。

“`ruby:gemfile
# Hotwire’s SPA-like page accelerator [https://turbo.hotwired.dev]
gem “turbo-rails”
“`

# 不具合の具体的な内容
商品出品ページで販売価格を入力した時に、販売手数料と利益も同時に表示されるようにしたい。JavaScriptの実装後、ローカル環境で動作を確認したときに問題発生。JavaScriptのコードは問題なく書けているのに、商品出品ページに遷移しても動かない。なぜ?

商品出品ページを開いた状態でリロードする

元記事を表示

Rubyの等値を判断するメソッド・演算子の理解[equal?, ==, eql?, ===]の違い

# equal?, ==, eql?, ===の違いを解説

この記事は下記のような人を対象にしています。
– 駆け出しRubyエンジニア
– プログラミング初学者

## 結論
equal・・・同じobject_idの場合にtrueを返す
== ・・・人の目で見て自然であればtrueを返す
eql・・・同じクラスで中身も同じならtrue、中身が同じでも別クラスだったらfalseを返す
=== ・・・case文のwhen節で暗黙的に使われている

## equal?
equal?メソッドは、同じobject_idの場合にtrueを返します。
“`ruby
a = “apple”
b = “apple”
a.equal?(b)
=> false
“`
文字列の内容が同じappleなのに、falseなのは、aとbそれぞれが持つobject_idが異なるから。

では、object_idとは??

オブジェクトにランダムに割り当てられる、重複しない整数のこと!

Rubyでは、重複しない整数が、各オブジェクトに1つずつ割り当てられています。
各オブジェクトに対して一意な整数を返します。あ

元記事を表示

【Ruby】クラス・モジュールについて理解を深める

# クラス

## クラスの定義

“`rb
class Foo
# 初期化時に実行されるメソッド
def initialize(x)
# インスタンス変数に値を保持
@x = x
end

# インスタンスメソッド
def method1
@x
end
end
“`

:::note
クラス名は**定数**であるため、大文字で始めないと構文エラーとなる。
┗ 定数の中にクラスを格納している。
:::

## クラス変数
“`rb
class Foo
def initialize
@@i = 1
end

def return_i
@@i
end
end

class SubFoo < Foo def initialize @@i = 100 end end foo = Foo.new p foo.return_i #=> 1

sub_foo = SubFoo.new

p foo.return_i #=> 100
p sub_foo.return_i #=

元記事を表示

ActiveRecord の where in 句 の 空配列

### 通常の where in 句

こういう書き方をすると思います。

“`sql
select * from table_name where id in (1, 2, 3, 4, 5)
“`

### これをそのまま active_record で表現すると

“`ruby
TableName.where(id: [1, 2, 3, 4, 5])
“`

ですよね。

### in の中身が空だと

“`sql
select * from table_name where id in ()
“`

これは流石にエラーになりますよね?

### active_record でこれをやると…

“`ruby
TableName.where(id: []) #=> []
“`

お、エラーじゃなく空配列だ。

### どうなってる?

to_sql で active_record は発行する sql を視認出来ますよね?
早速確認

“`ruby
TableName.where(id: []).to_sql #=> SELECT `table_name`.* F

元記事を表示

Ubuntu 24.04 LTSにすると多分マストドンv4.2ブランチじゃないと上手く動かないんじゃねって話

## ポイントリリース前に24.04 LTSを入れました

nodejsが18以上になっていました。動かしていたのがv4.1ブランチだったので象バンバンになりました。

nodejsだけの問題だけだと思っていたらそうでもない様子。postgreSQLも10がコケていました。Mastodonのサービスは動いている。

めんどくさそうです。

## v4.2ブランチにしてみました

rubyも3.2.3をいれて、さあ!

やっぱり象バンバン。DB動いてないからそらそうか。

## ログを見る

postgreSQL10のログを見るとTimezoneが「Japan」になっていてむーりーってなって落ちている。そんな書き方は無い!

「Asia/Tokyo」にしたところ動いて、DBがマイグレーションできて動きました。

## 時間がかかりました

DBが動いてないというのに気づくのが遅くてやたら時間だけかかりました。ログを見るというのは大切ですね。

v3ブランチとv4.0ブランチはEoLになったのでUbuntu 24.04 LTSにアップグレードするぞという人たちはもりもりDBマイグレーション

元記事を表示

「ローカル環境 × Rails × Render」でデプロイ

# はじめに

皆さま、こんにちは、すみ(@sumisumi2000) と申します。
2024 年 1 月 20 日より、オンラインプログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

今回の記事では Docker を使わずに、ローカルで環境構築を行い、 Render.com でデプロイ&データベース連携するまでの流れをまとめました。

https://render.com/

# 動作環境

– macOS Sonoma 14.4.1
– Ruby 3.3.0
– Rails 7.1.3.2

# ローカル環境構築

この記事では Docker を使用しません。
なので、ローカル環境(自身のパソコンの環境)で Ruby や Rails などをインストールする必要があります。

### 目次

1. [Homebrew のインストール](#homebrew-のインストール)
2. [rbenv のインストール](#rbenv-のインストール)
3. [Ruby のインストール](#ruby-のインストール)
4. [Rails のインストール]

元記事を表示

連続的な値の配列

# “`*()“`をつける
“`rb
irb(main):175:0> b.length
=> 1
irb(main):176:0> b = [*(1..2)]
=> [1, 2]
irb(main):177:0> b.length
=> 2
irb(main):178:0>
“`

# 感想
こんな感じでできると思ったけどエラーなるので困ったけどできてよかった。

# 出典
https://qiita.com/ntakuya/items/c82bb6a9b3336ee77a87

元記事を表示

railsの環境構築を半日かけて構築した話

こんにちは!初投稿です!
今回は半日近く格闘をしたrailsの環境構築の話を備忘録を兼ねてお話ししたいと思います。
環境はDockerで構築しました。

## Dockerを立ち上げるまで
“`
$cd 作業フォルダ
$docker compose build
$docker compose up -d
“`
上記で、Dockerを立ち上げていきます。

## Dockerに入る
“`
$docker compose exec web bash
“`

## 諸々インストール
“`
$bundle install
$yarn install
“`
上記で、構築に必要なものをインストールしていきます。
bunle⇨ライブラリをインストール
yarn⇨パッケージを一括管理できる

## エラーが起きたコマンド
“`
$bin/rails db:create
“`
こちらを入力した際、下記のエラーが発生した。
“`
Caused by:
Mysql2::Error::ConnectionError: Unknown MySQL server host ‘db’ (-2)
`

元記事を表示

OTHERカテゴリの最新記事