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

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

【Ruby】クラス定義についてサクッと解説!

## 内容

Rubyにおけるクラス定義はオブジェクト指向プログラミングの核心部分です。この記事では、基本的なクラス定義から継承、クラス式の評価順序に至るまでを掘り下げていきます。

### 基本のクラス型

“`ruby
class Foo
def initialize(a)
@a = a
end

def method1
@a
end
end

foo1 = Foo.new(1)
foo2 = Foo.new(2)
p foo1.method1 # 出力: 1
p foo2.method1 # 出力: 2
“`

`initialize` メソッドではインスタンス変数 `@a` に引数 `a` を代入しており、`method1` ではこのインスタンス変数を返すように定義されています。

#### クラスへの代入

“`ruby
a = Foo
b = a.new(1)
p b.method1 # 出力: 1
“`

クラス自体もオブジェクトであり、変数に代入して操作することができます。

### クラス式の評価順序

“`ruby
p 1

元記事を表示

Rails 7 でTODOアプリ ⑧ (バリデーションメッセージのテンプレート化)

## はじめに

### 前回は

#### Deviseのビューをカスタム・フラッシュメッセージ として

https://qiita.com/tomoaki-kimura/items/7417b23f25db370ca619

– Deviseのビュー
– Bootstrapの適用
– フラッシュメッセージ

について学びました。

### 今回は

#### バリデーションメッセージのテンプレート化 として

– Railsコンソール
– バリデーション
– errors
– バリデーションメッセージ

について学びます。

では、はじめていきましょう。

## 1. コンソールを使ってみる

最初にちょっと脱線します。

### rails c

ロジックの検証に是非とも使いたいのが、Railsコンソールです。

モデルのロジックやDBの接続も可能なので、データーの入力や削除にも使えますし、クエリの結果を調べたりもできます。

最近では使えるメソッドの候補等も表示されてとても親切なツールになりました。

では、早速ターミナルから作業を始めます。

一旦データーを初期状態に戻した

元記事を表示

【Ruby】ブロックについてサクッと解説!

## 内容
Rubyのブロックは、コードの一部をカプセル化し、再利用可能にする強力な機能です。この記事では、ブロックの基本的な使い方から、スコープの生成、クロージャの使用に至るまでを掘り下げていきます。

### ブロックとは何か?

#### 基本的なブロックの使用

“`ruby
def func x
x + yield
end
p func(1){ 2 } # 出力: 3
“`
この例では、`{}` で囲まれた部分がブロックであり、`yield` を使用してその中身を実行しています。

### ブロックによるスコープの生成

“`ruby
def func y
y + yield
end
func(1) do
x = 2
end
# 「p x」を実行するとNameErrorが発生
“`
ブロック内で定義された変数は、そのブロックの外部からはアクセスできないことを示しています。`{}` と `do…end` はどちらもブロックを生成しますが、一般的に一行で書ける場合は `{}` を、複数行にわたる場合は `do…end` を使用します。

### ブロッ

元記事を表示

【初学者】はじめてのDockerを使った環境構築【Docker + Rails7.1.2 + esbuild + Node.js 20.5.1 + Tailwind CSS + daisyUI + PostgreSQL】

# はじめに
お疲れさまです!
おおくまです!

今回、はじめて“Docker“を使って環境構築をやってみました!
技術選定としては、
**Docker + Rails7.1.2 + esbuild + Node.js 20.5.1 + Tailwind CSS + daisyUI + PostgreSQL**
こんな感じです!
また、サーバーを立ち上げる際は、
“./bin/dev“のコマンドを使い、
**JSやCSSがビルドされ、なおかつJSやCSSを変更したときに自動的に再ビルドされる**ようにします!
備忘録として残したいと思います!

# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::

# 環境
:::note
Ruby 3.2.2
Rails 7.1.2
Node.js 20.5.1
Docker Desktopをインストール済み
:::

# 手順
“`:ターミナル
mkdir test_app
cd test_app
touch Dockerfi

元記事を表示

【Rails】 SassC::SyntaxError について

# 概要
この記事では、**EC2**に**Railsアプリケーション**をデプロイするときに直面した **CSS** 関連のエラーについて追及しています。

# 環境
– Ruby: **3.1.2**
– Rails: **6.1.4**
– CSSFW: **TailwindCSS**

# エラー文
下記がデプロイ時に起きたエラーです。
“`sh:Terminal
SassC::SyntaxError: Error: Function rgb is missing argument $green.
on line 607 of stdin
>> color: rgb(239 68 68 / var(–tw-text-opacity));
“`

# 解決方法
production.rbのファイルの末尾に下記の記述を追加します。

“`diff_ruby:config/environments/production.rb
+ config.assets.css_compressor = nil
“`

# 原因
**SassC::SyntaxErro

元記事を表示

条件分岐の処理をifを使って記述できるようになる

## ifの基本の使い方
#### ifの基本的な書き方は以下の通りです。
>if “条件”
> “条件が正しかった場合の処理”
>else
> “条件が正しくなかった場合の処理”
>end
####

“`
if gets.to_i >= 100
puts “Hi”
else
puts “Low”
end
“`

###
*.to_iとは*
文字列オブジェクトを数値オブジェクトに変換するメソッドです。
getsで受け取った値は必ずしも数値とは限りません。gets.to_iと記述することで、数値オブジェクトに変換してから変数に代入しています。

元記事を表示

【MySQL,Rails】アプリケーションの動作を改善したい(Explain)

どうもこんにちは。

今回はRailsアプリケーションの動きが悪くなっている問題をSQLの観点から調査してみました。

# 経緯

自社開発しているrailsアプリケーションのとある画面の一覧画面を開いた時にめちゃめちゃ時間がかかるという状況にありました。

理由としては10,000件のデータの読み込みのためのSQL実行に無駄な時間がかかっていたことでした。(ざらに30,40秒かかってました。。。)

# SQL調査手順

実際のデータは載せることができないのでダミーデータで手順をまとめます。

## 1. 一覧画面でページを更新したときに実行されるSQLをすべて取得

アプリケーションが動作している環境のログを取得してそこから実行されたSQLを取得します。

今回のアプリケーションは、AWSのElastic Beanstalkで動作しているため、こちらからログを取得しました。
(ぶっちゃけローカル環境でもOKです。)

## 2. 取得したSQLの一つ一つがどのくらい時間がかかるのかDBコンソールで実行して計測する

自分はDBeaverを使用しているので、そこのコンソール上で実行を

元記事を表示

【Rails】Amazon Bedrockを使用して生成AIと会話してみた

どうもこんにちは。今回は前回のAmazon Bedrockの記事に続いての投稿となります。

https://qiita.com/PDC-Kurashinak/items/84b1a7b7598e8a3d4443

今回は、最近話題の`anthropic`の`Claude2`を使用してみたかったのですが、まだAWS東京リージョンでは使用ができなかったので、`Claude Instant`というモデルを使用しました。(バージニア北部かオレゴンリージョンならもう使用できるようですね。)

今回の記事ではBedrockとは何者なのかという説明は省略して、早速実装手順を説明していきます。

# 実装

## 0. AWSコンソール上で必要な設定を行う

この時に、自分のアカウントのアクセスキーとシークレットアクセスキーを入手しておいてください。

## 1. Gemで必要なライブラリを追加する

Gemfileに以下を記述します。

“`Gemfile
gem ‘aws-sdk-bedrockruntime’
“`

## 2. bundle install

ターミナルで`bundle

元記事を表示

AWS LambdaでRubyのGemをレイヤーを使って利用する方法

# 概要
“`ruby:lambda_function.rb
def lambda_handler(event:, context:)
p “”.blank?
end
“`
AWS Lambdaで上記の関数を実行しようとすると、active_supportのGemがないので、undefined method blank?と怒られてしまいます。
上記のような関数も実行できるように、AWS LambdaでGemを使う方法をまとめてみました。

# ローカル環境での準備
Gemfileに `gem ‘activesupport’` を追加し `bundle install` します。
`bundle install`によってインストールしたファイルはこの後レイヤーにアップロードするので
`–path .` のオプションをつけてカレントディレクトリにインストールされるようにします。
“`
touch Gemfile
“`
“`:Gemfile
source ‘https://rubygems.org’
gem ‘activesupport’
“`
“`
bundle i –

元記事を表示

Rubyの実行中にプログラムカウンタを書き換えてもジャンプしない理由

# はじめに

Ruby言語ではメソッド定義をC言語で書けます。

そのC言語からはRuby処理系の内部的な値を取り出せて、書き換えられます。

たとえば処理系のプログラムカウンタを書き換えるようなメソッドを書くこともできます。

プログラムカウンタというのは、処理系が今どのソースコードを実行中なのかを指している値です。

なので、たとえば実際にプログラムカウンタを書き換えるようなメソッドをCで書いて、Rubyコードからからそのメソッドを呼んでみると、そのメソッドを通った瞬間、ソースコードの適当な場所にジャンプしm… しませんでした……

ジャンプしなかった理由が気になったので調べてみました。

“`vm_eval.c
// 処理系のプログラムカウンタを書き換えるようなメソッドの実装イメージ

static VALUE rewrite_pc(VALUE _self) { // Cの関数でRubyのメソッドを定義

GET_EC()->cfp->pc += 10; // 適当に10命令分先にジャンプ …せず

// GET_EC()

元記事を表示

【Ruby on rails】Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (111) エラー対処法

# はじめに
プログラミングを勉強して3か月ほどです。
プログラミングスクールを卒業し、現在就職活動をしています。

今回は私がPCを再起動したときに起こるエラーの対処法について共有させていただきます。
下記の記事を参考にさせていただきました。

https://medium.com/wado-jp/%E3%82%88%E3%81%8F%E3%81%82%E3%82%8Bmysql%E3%82%A8%E3%83%A9%E3%83%BC%E9%9B%86-a6dc33e77a9a

# 今回のエラー内容
今回のエラーはPC再起動時に「MySQLにサーバーが接続できません」という内容のエラーです。
[![Image from Gyazo](https://i.gyazo.com/045c5f8c90dd44a02541384f9d790517.png)](https://gyazo.com/045c5f8c90dd44a02541384f9d790517)

# エラー対処法
まずターミナルでtmpディレクトリに移動します。
`cd /tmp`
次にlsコマンドでファイルを一覧表示します。

元記事を表示

【VSCode】Ruby on Rails開発を向上させるための必須エクステンション

# 概要
Visual Studio Code(VSCode)には生産性やコード品質を高めるためのさまざまなエクステンションが用意されています。ここでは、Railsで開発する際に使用すると助かるVSCodeエクステンションを紹介します。

# コード品質とフォーマッティングツール
1. [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
): JavaScriptコード品質を維持するために不可欠なツールで、コーディング基準に従って問題を強調表示し、修正します。

2. [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode): 複数の言語に対応した汎用コードフォーマッターで、機能的であるだけでなく、一貫性のある美しいコードを保証します。

3. [Haml Lint](https://marketplace.visualstudio.com/items?it

元記事を表示

Ruby on Rails 7.1 with Bootstrap on Docker Compose 開発環境を構築する方法

## はじめに

前回は、Rails 7.1 により自動生成された `Dockerfile` の中身を一通り確認してみましたが、

https://qiita.com/normalsalt/items/0bea5f2efb76fa71dd61

今回は、いよいよ、実際にコンテナを起動してみて、動作確認を行なっていきます。[^1]

[^1]: ちなみに、今回、利用した PC は、MacBook Pro( 13-inch, M1, 2020 )で、macOS Sonoma 14.1.1 環境です。

と言っても、自動生成される `Dockerfile` は、本番環境での使用に向けて調整されたものになっているので、まずは、開発環境として利用するために、少し弄らせてもらうことにしましょう。

## 改めて `rails new` を実行しよう

`Dockerfile` を自動生成する際の( 特に CSS フレームワークをオプションで指定する場合の )注意点については、すでに別の記事にも書いているので、詳細は割愛しますが、

https://qiita.com/normalsalt/item

元記事を表示

プログラミング初心者が初めてJava(基礎)を触った感想とざっくりまとめ。

# はじめに
気になっていたJavaを教材を通して初めて触ったのでそのまとめと感想を共有します。

初心者なので間違った説明や一般的ではない手順が含まれている可能性があります。
いくつかのところでRubyとの比較をしていますが、比較できるところを全てを取り上げているわけではありません(今の自分じゃ荷が重いです)。
分からなかった部分は自分で調べていたりします。
初心者が学んだことをノートにまとめているんだなーくらいの認識だとありがたいです。

# 環境

– Windows11
– AdoptOpenJDK
– vscode

# Javaの開発案件はRubyとどう違うか
## Ruby on Railsの特徴
Ruby on Railsは、小規模の組織で好まれるフレームワーク。
– 特徴
短期間でプロダクトをリリースできること
言語習得のための学習コストが低いこと
## Javaの特徴
Javaは、大手企業の基幹システムなど大規模開発に適した言語。
– 特徴
アプリケーションの仕様変更を行いやすいこと
セキュリティが強固であること
長期間にわたる保守・運用がしやす

元記事を表示

Regexp.last_match(1)の地雷のような挙動を踏み抜いてしまった話

# 事象発生
「画面に表示される金額がおかしい」とクレームがあったのが先月。
該当の画面はDBからレコードを取ってきて表示するだけのシンプルなもので、バグりようがない。コードはこんな感じ。

“`ruby
class SomeRecord < ApplicationRecord scope :by_code, ->(code) {
if /abc(\d+)/ =~ code
where(code: $1)
else
none
end
}
end
“`
どうせ客の見間違えだろうと放置していたところ、他にも似たような問い合わせがちらほら来るように。
さすがに金額がおかしいのはやばいだろ、来週までに直しといてと言われたので仕方なく調査。
# 原因
* 公式ドキュメントに嘘が書いてあった。

https://docs.ruby-lang.org/ja/latest/method/Kernel/v/1.html

どうやらRegexp.last_matchや$1等の変数は、procの中で使った場合
「ローカルスコープかつスレッドローカル

元記事を表示

Gem sorceryを使い倒す④ 本番環境でメイラー設定

## 使用環境
ruby:3.2.2
rails:7.0.7
Docker
Gmail
render

今回のデプロイ先はrenderを使用しました。
メールはGmailを設定します。

## 本番環境でパスワードリセットする挙動

https://railstutorial.jp/chapters/password_reset?version=5.1

  
1.ユーザーがパスワードの再設定をリクエストすると、ユーザーが送信したメールアドレスをキーにしてデータベースからユーザーを見つける
2.該当のメールアドレスがデータベースにある場合は、再設定用トークンとそれに対応する再設定ダイジェストを生成する
3.再設定用ダイジェストはデータベースに保存しておき、再設定用トークンはメールアドレスと一緒に、ユーザーに送信する有効化用メールのリンクに仕込んでおく
4.ユーザーがメールのリンクをクリックしたら、メールアドレスをキーとしてユーザーを探し、データベース内に保存しておいた再設定用ダイジェストと比較する (トークンを認証する)
5.認証に成功したら、パスワード変更用のフォームをユーザーに表示

元記事を表示

[Ruby on Rails]フォームに入力された内容がparamsを介してDBに格納されるまでの流れ

## 経緯
新人研修でRuby on Railsを用いて簡単なタスク管理アプリを作成しています。新規登録時のデータの流れをチューターに説明する機会があったので、それに向けてアウトプットしつつ考えを整理したいと思って記事を書くことにしました。

## 元のコード(一部抜粋)
“`config/routes.rb
Rails.application.routes.draw do
root ‘tasks#index’
resources :tasks
end
“`

“`tasks/new.html.erb
<% provide(:title, '新しいタスク') %>

新しいタスク

<%= form_with(model: @task, local: true) do |form| %>

<%= form.label :title %>
<%= form.text_field :title, maxlength: 50 %>
<%= render 'shared/field_error',

元記事を表示

【Rails】Amazon Bedrockを使用してみた

どうもこんにちは。

今回はRailsアプリケーションからAmazon BedrockをAPIで接続してみたので紹介します。

# Amazon Bedrockって何?

公式ページから引用すると、、、

> Amazon Bedrockは、主要なAIスタートアップとAmazonが提供するFMをAPI経由で利用可能にするフルマネージドサービスであるため、幅広いFMから自分のユースケースに最適なモデルを選ぶことができる。Bedrockのサーバーレス・エクスペリエンスを利用すれば、インフラを管理することなく、AWSツールを使ってFMをアプリケーションに簡単に統合し、デプロイすることができます。

ものすごく簡単にいうと、「すでに存在している基盤モデルを使用して生成系AIアプリケーションを構築できるサービス」です。

# 使用方法

使用方法は、RailsサーバーからAPIを叩くだけです。

ただ、AWSコンソール上で言語モデルを使用するための設定をする必要があるので、以下のサイトを参考に設定をしてみてください。

https://weel.co.jp/media/amazon-bedroc

元記事を表示

Ruby .times

# Rubyで、繰り返しをしたいときに使う.times

元記事を表示

未定義の定数参照が発生して困った話

## はじめに
class, moduleの参照で躓き、普段あまり定数がどう使用されどう管理されているかを調査することになったので、備忘録もかねて結果を残します。

※ 2023/11/16 2:00 記事内容修正
誤った内容を記事にしてしまっていたため、内容の修正、追記を行いました。

## 環境
“`
ruby 2.6.6
rails 6.1.7.2
“`

## ファイル構成
“`ruby:models/AAA.rb
class AAA
include BBB::CCC
end
“`

“`ruby:lib/BBB/CCC.rb
module BBB
module CCC
end
end
“`

“`ruby:SDK/BBB.rb
module SDK
module BBB
end
end
“`

## 起きたこと
railsプロジェクト内でSDKを読み込んで開発を進める中、AAAクラスを使用する以下のような処理で名前参照エラーが発生。
SDK::BBB::CCCは定義しておらず、BBB::CCCモジュールの参照がおかしなところから走っているよ

元記事を表示

OTHERカテゴリの最新記事