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

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

Rails 7.2をちょこっと試す(query and cached ログ編)

# はじめに

rails 7.2beta2 がリリースされたので、ちょっと試してみました。

rails 7.2 では、Rails のログに、実行されたSQLの数が表示されるようになりました。

## ログの確認

Rails 7.1 では、以下のようなログが出力されます。
Rails 7.2 で変るのは、最後の `Completed` の行の `ActiveRecord: 2.2ms` の部分です。

“`sh
Started GET “/books” for 172.25.0.1 at 2024-06-09 08:27:47 +0900
Cannot render console from 172.25.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
ActiveRecord::SchemaMigration Load (0.1ms) SELECT “schema_migrations”.”version” FROM “schema_migrations” ORDER BY “schema_migrations”

元記事を表示

Rails のアップデートで、 new_framework_defaults_x_x.rb をコメントインし忘れてないですか?

tldr; Railsのアップデートするとき、`config.load_defaults x.x` に対応した `new_framework_defaults_y_y.rb` に書かれた内容をコメントインして有効にしないと意味ないので注意。

# たとえば Rails 7.0 -> 7.1 にアップデートするとき

“`ruby:config/application.rb
config.load_defaults 7.0
“`

して、7.1の新設定は `new_framework_defaults_7_1.rb` でひとつずつコメントインしていく、というのが[オフィシャルの手順](https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#configure-framework-defaults)だが、このコメントインしていく作業を忘れると、そのrailsは 7.0 のデフォルト設定で動いている。 7.1 の主にBREAKINGな設定は有効になっていない

これを忘れたまま 7.2 にアップデートしようとして `conf

元記事を表示

【Rails】Sorcery使用によるGoogle認証の注意点

## はじめに
この記事では、Gem「“`sorcery“`」を使用したGoogle認証に関する注意点をまとめました。具体的な実装方法の解説は行わず、確認すべき重要なポイントについて触れています。

Google認証を導入するなら「“`devise“`」の方が一般的でおすすめですが、既に「“`sorcery“`」を用いてログイン機能を実装している方のために書いています。私自身、sorceryでGoogle認証を実装する際に情報が少なく苦戦したため、同様に苦戦している方々の助けになれば幸いです。

## 環境
– ruby 3.2.3
– rails 7.1.3
– Docker

前提条件としてsoceryによるログイン機能に加えて、Google認証導入までも一通りできている(エラー・不具合込み)とします。

## 確認すべきこと・詰まるポイント
sorceryを使用してGoogle認証を導入する際の確認事項と詰まりやすいポイントについて解説します。

### 承認済みリダイレクトURI
まず、Google Cloudコンソールに登録した承認済みリダイレクトURIと、Ra

元記事を表示

RubyでQwen2クイックスタート(pycall.rbを使用)

# はじめに
LLMを使ったプログラムを書いてみようと思って、手始めに[Qwen2のクイックスタート](https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html)をRubyでやってみました。pycall.rbを経由してHuggingface Transformersを使う手法なので他のモデルでも使用可能かと思います。

# 前提
– RTX 3060
– Ubuntu 20.04 LTS
– Ruby 3.3.2
– Python 3.8.10

# 実装
Quickstartのサンプルコードほぼそのままです。

“`ruby:quickstart.rb
require ‘pycall’
device = ‘cuda’
path = “/path/to/models/Qwen_Qwen2-7B-Instruct”

quantization_config =
PyCall.import_module(‘transformers’).BitsAndBytesConfig.new(
load_i

元記事を表示

Rubyのshift, unshift, pop, push

# 概要

キューの操作とかで登場する`shift`、`unshift`、`pop`、`push`の内容を解説するよ!

# 結論

– `shift`、`unshift`が先頭系
– `pop`、`push`が末尾系

# shift系統

とりあえず`shift系統は先頭系`は一旦丸覚えする!

その上で、

shiftは英語で動かすって意味があるから、Array.shiftだと配列から取り出す(=動かす)んだな

って覚える。

`unshift`はその逆で、配列に追加するんだな

と覚える。

# p系統

とりあえず、`p系統は末尾`と丸暗記する。

その上で、`push`は押し込む感があるから配列に追加して、

`pop`はその逆で、配列から取り出すんだな

って覚える!

元記事を表示

Sprockets::Rails::Helper::AssetNotPrecompiledErrorの解決

# はじめに
railsアプリケーション作成中にJavaScriptを導入しようとした際に、以下のエラーに遭遇したので、メモとして解説します。

# 問題
![スクリーンショット 2024-06-08 18.40.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673202/df1efaa1-dcd9-c68f-22a9-4dd3090f8517.png)

Sprockets::Rails::Helper::AssetNotPrecompiledErrorというエラーが表示されました。

# 解決方法
エラーに書いてある通り、以下のコードをapp/assets/config/manifest.jsに追記

“`javascript:app/assets/config/manifest.js
//= link image_preview.js
“`

(image_preview)の部分にはそれぞれ読み込みたいjsのファイル名を記述します。

この追記後、サーバーを再起動したら、エラーが解決

元記事を表示

rails modelとcontollerの作成コマンド

# はじめに
ポートフォリオ作成に入って、コマンドのルールなんだったけ?
と忘れていることが多々あったので、よく使用するコマンドをアウトプットのためにまとめています!
都度追加予定です。

# model作成
基本中の基本model作成です
今回は「Plan」という投稿用モデルを作成していきます

“`
$ rails g model Plan
“`
この g は、generateの略です。生成という意味です

🌱modelの命名規則
英数字の単数形で指定し、先頭は大文字で記述するルールがあります
もし複数の単語を組み合わせる場合は、「PostPlan」などにしましょう

# controller作成
同じく基本のcontroller作成です
先ほどの「Plan」モデルの「plans」のコントローラーを作成します
3パターン記載していきます

#### 通常のcontroller作成

“`
rails g controller plans
“`

#### controller作成 + ルーティング・ビューを同時に作成

“`
rails g controller plan

元記事を表示

学習ロードマップの状況整理

# 自己紹介
未経験Webエンジニアです。 大手sierから自社開発系web企業に転職するために学習しています。 学習したことをアウトプットしています。

# 本記事の内容
実務に入るまでに、明確なロードマップがありませんでした。
Qiitaで調べたところ、以下の方の記事が参考になりそうだったので、内容をもとに自分の状況と照らし合わせて整理します。

https://qiita.com/dosukoi_org/items/435b7d7bf3de5859935f

# サマリ
<完了:* 実施中:■ 未実施:□>
* *HTML ★★
* *CSS ★
* □Tailwind CSS ★★
* □Javascript ★★
* ■Git ★★★
* □Linux ★★
* □Docker ★
* ■SQL ★★
* (□DB設計 ★)
* ■Ruby ★★
* □Ruby on Rails ★★★
* □Rspec ★★★
* (□Github Actions ★)
* (□デプロイ ★)
* □ポートフォリオ ★★★

# ロードマップごとの状況整理
## HTML ★★ CSS

元記事を表示

Rubyで任意時刻のDatetimeインスタンスを作りたい/既存Datetimeインスタンスの値を変えたいときの便利な方法

例えば、2024-06-08 12:00:00を作りたい場合

“`
# 今日は2024-06-08の場合
Time.current.change(hour: 12)

# 今日は2024-06-08ではない場合
Time.zone.parse(‘2024-06-08 12:00:00’)
“`

Rails API公式
https://apidock.com/rails/DateTime/change

元記事を表示

to_iを用いたnil回避術

## integer型の結果を表示する際の例
“`rb
# 外部APIから取得したデータをシミュレートする
api_response = {
user_id: 123,
usage_count: nil # APIレスポンスにusage_countが含まれていない場合
}

# usage_countを整数に変換する。
usage_count = api_response[:usage_count]

puts “ユーザーID: #{api_response[:user_id]}”
puts “使用回数: #{usage_count} 回”
“`
例えば、外部APIから取得したレスポンスにuser_idとusage_countが含まれているとします。
ただ、usage_conutがレスポンスに含まれていない場合usage_countはnilとなります。
この際に、usage_countをnilという表示するのは避けたいです。

そんなときに、to_iが力を発揮します。

## to_iとは
to_iメソッドはRuby標準ライブラリです。
to_iは文字列の数値をinteg

元記事を表示

Rubyの raise で例外をメッセージ付きで投げ直した時、その例外の new が第一引数を取れなくてもArgumentErrorにならないのはなぜか

tldr; `raise` の 第一引数に渡したオブジェクトの `exception` メソッドの挙動の違いによる。

# `raise` で例外をメッセージ付きで投げ直した時、その例外の `new` が第一引数を取れなくても `ArgumentError` にならない

イニシャライザとして引数を受け取らない `HogeError` 例外を定義する。

“`ruby
class HogeError < StandardError def initialize super('hoge error') end end ``` 以下は当然 `#` となる

“`ruby
#
begin
raise HogeError
rescue => e
p e
end
“`

`HogeError` のイニシャライザは引数を受け取らないので、以下のようにやると `ArgumentError` となる

“`ruby
#

元記事を表示

Dev ContainerでRuby on Railsの開発環境構築

# 概要
いつもHTMLやJavascriptばかりで
環境構築の必要な作業をやったことがなく
今回Ruby on Railsのチュートリアル用でDockerに
チャレンジしてみました。

# やったこと
## 拡張機能のインストール
本題はrailsの勉強なのでなるべく早く環境構築できるように
VSCodeの拡張機能であるDev Containerをインストール

## フォルダの作成
まずは作業用フォルダ
“`
sample_app
“`
を作成し移動します。
移動後
“`
.devcontainer
“`
フォルダを作成しそこにファイルを置いていきます。

## docker-compose.yml
チュートリアルで開発用のファイルは配布されているのですが
そこも今回は勉強を兼ねて自分で書いてみました。
その際色々調べてみたのですが
チュートリアルをするには過剰かなと思ったので必要そうな
ところだけピックアップしました。

“`docker-compose.yml
version: ‘3’

services:
web:
build:
conte

元記事を表示

謎の挙動をするFactoryBotの作り方

しょーもなく、はたまたネタでもないですが、1時間弱苦しめられたので記す

# 事象

下記コードを実行したときに、`user_id`と`group_id`は同じIDになる想定だったが、なぜか違う値になり混乱していました(変数名は適当なんで気にしないでください)

“`ruby
create(:table_name, user_id: user.id, group_id: user.id, other_group_id: other_group.id)
“`

しかも面白いことに、`group_id: ‘xxx’`と入れてもそれは反映されず、なぜか数値が返ってきます。はて??????

# 調査内容

## コードをデバッグ

とりあえずprintデバッグを進めると、`other_group.id`の値がでていることがわかりました(?)

はて???????

## DDLを調べる

テーブル構造が間違えているのでは?と思い調べましたが大丈夫でした。はて?

## モデルを調べてみる

あーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

元記事を表示

【Rails】formオブジェクトでForbiddenAttributesErrorが起こる原因と対処方法

## はじめに
formクラスにparamsを渡してsuperで初期化しようとした際にActiveModel::ForbiddenAttributesErrorになる原因をこの記事で解明していこうと思います。

## 忙しい人向けの結論
paramsに対して`.permit`していないからです。
formクラスにparamsを渡す前に、controller側でparams.permit(:〇〇)とするとエラーが起きなくなります。
よければその理由を以下の文章を通してより深く理解してみてください!

## なぜForbiddenAttributesErrorになるのか?

### コード例
コード例は以下のような状況を基に作成されています。
– 醤油ラーメンを注文しようとしている
– このラーメン屋では、醤油ラーメンと豚骨ラーメンしか売っていない
– 醤油ラーメン・豚骨ラーメン以外の注文が来ないようにバリデーションをかけたい

“`
# 醤油ラーメンの注文がparametersで飛んでくる
#“醤油”} p

元記事を表示

Slackのfiles.getUploadURLExternalでどハマりした

Slackから「files.uploadなくなるよー」って連絡が来たので「API変えればいいんでしょ?よゆーっす。」と思って対応したらえらい大変だったので誰かのお役に立てばと思い投稿しました。

最終的なコードは[正解のコード](https://qiita.com/drafts/54ac70fa3031fa470e40/edit#%E6%AD%A3%E8%A7%A3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89)セクションにありますので、細かいことはいいから答えだけ知りたい方はそちらを見てください。

以下、コードはRubyです。

# Gemアップデートすればいいじゃん

そうです。Rubyにもslack-ruby-clientというGemがあるので、こちらのバージョンを上げれば対応出来るのですが、私の環境ではGemの依存関係的にslack-ruby-clientのバージョンを上げることができなかったので、自分でなんとかすることにしました。

# 新しいAPIについて調べた

files.getUploadURLExternalでググれば↓のような記事はた

元記事を表示

windows11にrubyをインストールしてVSCodeのターミナルに認識させる

## 初めに

後輩のwindowsPCにrubyを導入することになった。
元々macでしかrubyを触っていなかったのでサポートすることに。
意外と凡ミス箇所があったので備忘録に残す。

## rubyをインストール
Ruby Installerからrubyをインストール。
https://rubyinstaller.org/downloads/

WITH DEVKITの最新バージョンを選択。
(devkit、windowsの環境は必要らしい)

ダウウンロードしたものは基本
全てacceptかapproveを選択。ディレクトリもいじらなくていい。

進めていくとcmdに飛ぶ

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333537303132372f36646234313833302d336263622d386132322d383231342d6462623366383938323

元記事を表示

image_tag が本番環境で使えない

# はじめてのデプロイ
いよいよフェーズ1のデプロイ!
コマンドをちょこちょこ打って終わった!と思ったらエラーが起きた!
けど解決したのでまとめます。

# image_tagは使えない?
<%= image_tag %>を使用して画像を表示させていたものの、本番環境ではエラーが起きました。
問題の記述はこちら↓
“`top.html.erb
<%= image_tag "go_out_planning_logo.png", size: "250x250", class: "rounded-circle mx-auto mb-3 d-block" %>
“`
これを本番環境用に修正すると…
“`top.html.erb
<%= image_tag asset_path('go_out_planning_logo.png', :alt => ‘画像’), class: “rounded-circle mx-auto mb-3 d-block” %>
“`

となり、無事に表示させることに成功しました!

# 参照記事
こちらを参考にさせていただきました。

https://t-s

元記事を表示

業務的な部分もRuboCopに警告させる

[RuboCop]:https://github.com/rubocop/rubocop
[rubocop]:https://github.com/rubocop/rubocop

Ruby による開発で、静的にコードをチェックして書き方を強制させる [RuboCop] はみんな使ってると思う。 RuboCop がデフォルトで提供しているコップ(RuboCopの世界観では各リンターをこう呼ぶ)は割と簡単に作ることが出来るので、プロジェクトごとの決まりごとや業務的な部分をチェックするコップを作ってチェックさせることができる。

# たとえば

すべてのコントローラで、あるヘッダをつけたりつけなかったりしたい。ヘッダをつけるかつけないかはそれぞれの箇所で開発者による判断が必要。

あるヘッダを `X-foo` としたとき、こんなモジュールを用意して

“`ruby
module FooHeader
def set_foo_header
headers[‘X-foo’] = ‘foo’
end
end
“`

コールバックでセットしたり

“`ruby
class Ho

元記事を表示

わたしの頭の中のRubyとJavaScript

RubyとJavaScriptの学習を進めているうちに

『そもそも、Rubyってなんだっけ❓』 『JavaScriptとなにが違うの❓』
という疑問が湧き出てきたので、アウトプット用として記事を作成しました。

# RubyとJavaScript

まず、プログラミング言語には2種類あります。
**コンパイル言語**と**インタプリンタ言語**。

簡潔にいうと、、、

**インタプリタ言語**(Ruby・JavaScript・Pythonなど)は、コードを実行する際に1行ずつ機械語に翻訳していく言語。

**コンパイル言語**(Java・C++・Objective-C・Go・swiftなど)は、ソースコードを1行1行ではなく一括で機械語に翻訳して、実行していく方式の言語

引用元に私の同期の方がわかりやすく記事にまとめているので参考にして見てください!

引用元[:インタプリタ言語とコンパイル言語](https://qiita.com/Shinono/items/2f52d300f1b7b2f54b9a
)

現在学習中の言語、**Ruby**と**JavaScript

元記事を表示

AWS ECSにデプロイしたRailsが、特定のページでシャットダウンした際の対応まとめ。mini_racerのセグメンテーション違反

## 先に結論

JSランタイムのGemのmini_racerが何故かAWS ECS(Fargate)の環境下でセグメンテーション違反を起こし、Rails全体をクラッシュさせていた。
mini_racerを使わずに、nodejsを使うことで回避した。

## 症状
– 特定のページでいきなりPumaが落ちる
– AWSのECS環境でのみ落ちて、ローカルだと再現しない
– Fargate(Dockerコンテナ)を利用

## ログ
ログの最新はこのような記載…何が原因かもよくわからずにいきなりpumaが落ちていることが分かる。
“`
2024-06-03T08:14:48.983Z 7fbb3194d000-7fbb3194e000 r–p 00029000 103:00 567812 /lib/x86_64-linux-gnu/ld-2.31.so
2024-06-03T08:14:48.983Z 7fbb3194e000-7fbb3194f000 rw-p 0002a000 103:00 567812 /lib/x86_64-linux-gnu/ld-2.31.so
2

元記事を表示

OTHERカテゴリの最新記事