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

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

備忘録: Nokogiri v1.16.1のXML::Readerへの変更を咀嚼してみる

>v1.16.1 / 2024-02-03
>Fixed
>
>- [CRuby] XML::Reader defaults the encoding to UTF-8 if it’s not specified in either the document or as a method parameter. Previously non-ASCII characters were serialized as NCRs in this case. [[#2891](https://github.com/sparklemotion/nokogiri/issues/2891)\] ([@flavorjones](https://github.com/flavorjones))

これが気になったので、まず既存のxmlパースの書き方と問題の`XML::Reader`の書き方を比べて、ライブラリのソースコードを見に行ってみる。

“`rb
# frozen_string_literal: true

require ‘nokogiri’
require “debug”

raw_xml =

元記事を表示

【個人開発】趣味でバンド活動をする私が、練習で使いたいタスク管理アプリを作りました🎸

# はじめに
初めまして。かめと申します。
未経験からのWebエンジニア転職を目指して、学習を続けております。
この度、バンド活動をする社会人に向けた、タスク管理ツール「bandmemo(バンドメモ)」を開発いたしました。

**▼サービスURL**
https://bandmemo-app.com/
**▼GitHub URL**
https://github.com/kame-0707/graduation_bandmemo

[![Image from Gyazo](https://i.gyazo.com/35c01695ae5f80b111b5ee763e70c76b.png)](https://gyazo.com/35c01695ae5f80b111b5ee763e70c76b)

# 開発した理由
これまで、仕事と両立しながら趣味で複数のバンドに所属してきました。
バンド活動は、実際に体験してみると細かいタスクが多いです。

社会人バンドのタスク内容例

“`
【ライブ運営の場合】
– ライブ会場を抑える
– イベント

元記事を表示

PassengerMaxRequestsの設定と動作確認

# 導入

Phusion Passenger上で動作しているRuby on Railsアプリケーションでメモリリークが発生していると思われる事象が起きていた。
[公式のリファレンス](https://www.phusionpassenger.com/library/admin/apache/memory_leaks.html)にのっとり、暫定対処のため`PassengerMaxRequests`を設定することにした。

OSやWEBサーバー(Apache or Nginx)によってフォルダ構成や設定ファイルが置かれている場所など諸々違いがあるので設定の方法を覚書として残すのは意味のあることだと思っている。また初心者的にはリファレンスを読むだけでは`PassengerMaxRequests`を設定するとサーバーがどのような動作をするのかがわからなかったので簡単ではあるが説明したいと思う。

# 環境

“`shell
Amazon Linux 2

$ passenger-config –version
Phusion Passenger 6.0.6

$ httpd -v
Ser

元記事を表示

【Ruby】include, prepend, extendの違いと使い分け

## はじめに

クラスにモジュールを取り込む方法として、`include`, `prepend`, `extend`の3つがあります。

この記事では3つの方法の違いと使い分けについてまとめていきたいと思います。

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

## そもそもモジュールとは?

モジュールは関連するメソッドや定数をグループ化したものです。

クラスと似ていますが、以下の2点で異なります。

– モジュールはインスタンス化できない
– モジュールは継承できない

複数のクラスに共通の機能を提供したり、名前空間を分割してメソッド名の衝突を避けたりしたい場合に用いられます。

## `include`の使い方と特徴

`include`はモジュールのメソッドをクラスへ取り込むために使われます。

### メソッドの探索順序

`include`を使うとモジュールがメソッドの探索順序に組み込まれます。

その結果、次の順序でメソッドが探索されます。

1. クラス自身に定義されているメソッド
2. `include`されたモジュールのメソッド
3. スー

元記事を表示

中級DAY25記事に「いいね」しよう + 記事にアイキャッチを設定しよう

![deitora_stady_header.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870482/a8947be5-b1ce-b1a3-c1c0-adc2c9d7f363.png)

## 概要
**学習内容:** データベースのリレーション「n対n」の関係について学習し、特に「いいね」機能を実装するための設計方法を学びました。
* * *
## 学んだ主要な概念やスキル
~1. n対nのリレーションの理解~
複数のユーザーが複数の記事に「いいね」をする関係を実現するためには、n対nのリレーションを理解する必要がある。
例えば、ユーザー1が記事2と記事3に「いいね」し、ユーザー2が記事1に「いいね」するような場合など。

2. 中間テーブル(ライクステーブル)の役割
ユーザーと記事の関係を管理するために、中間テーブル(ライクステーブル)を作成する。
例えば、中間テーブルには、ユーザーIDと記事IDが格納され、これによってどのユーザーがどの記事に「いいね」したかが管理される。

3. アク

元記事を表示

replaceメソッドを活用した関連テーブルの更新

# はじめに

Rubyには“`replace“`というメソッドがあります。

Rubyの配列 (Array) やハッシュ (Hash) などのオブジェクトに対して使われ、対象オブジェクトの内容を別のオブジェクトの内容で置き換えるメソッドです。

https://docs.ruby-lang.org/ja/latest/method/Array/i/replace.html

よく見るのは

“`ruby
a = [1, 2, 3]
a.replace [4, 5, 6]
p a #=> [4, 5, 6]
“`

“`ruby
hash1 = { a: 1, b: 2 }
hash2 = { c: 3, d: 4 }

hash1.replace(hash2)
puts hash1.inspect #=> { c: 3, d: 4 }
“`
この辺りでしょうか??

今回は“`replace“`を配列やハッシュではなく、ActiveRecordと一緒に使ってみることにします。

# replaceを使ったコード例

:::note

元記事を表示

【Error解消】VS.Codeのシェルがタイムアウトする

# 解決方法

その1.ダウンロードのフォルダからアプリフォルダへ移動

🦊 恥ずかしい・・・

その2. **.bash_profileと.bashrcを作成**

🐹 フォルダを2重で作成しちゃった時があって1つを削除したんだけど、その時に一緒に消しちゃったのかも。

# 原因の追及編〜

🐹 VS.codeを開いた時、これまで無視していたエラーだったけど消える気配もないので手をかけることに。

> Cannot update while running on a read-only volume. The application is on a read-only volume. Please move the application and try again. If you’re on macOS Sierra or later, you’ll need to move the application out of the Downloads directory. This might mean the application was put on quaranti

元記事を表示

ねえ、知ってた?「Railsドキュメント」はRailsの公式ドキュメントではないんですよ、という話

## TL;DR(最初に結論)

– Railsドキュメント( https://railsdoc.com/ )というサイトはRailsの公式ドキュメントではない
– 最初のとっかかりをつかむために参照するのは良いが、情報の裏取りとして公式サイトの情報も併せてチェックしよう

## はじめに

上記のTL;DRに書いた話をすでに知ってる人や、わかっている人はこの記事を読まなくても大丈夫です。
ですが、Railsを学び始めた初心者プログラマのみなさんは意外と勘違いしている人が多そうなので、注意喚起を兼ねてこの記事を書いておきます。

## 「Railsドキュメント」はRailsの公式ドキュメントではない
Rails関連の調べ物をすると、検索結果の上位によく上がってくる「Railsドキュメント」というサイトがあります。

![Screenshot 2024-08-24 at 11.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/c29064d5-b9ff-f8d1-311b-5061d95

元記事を表示

初めての自作Gem体験記: CSVデータをYAML形式で出力するツールを作ってみた

## はじめに

このたび、人生で初めて自作のGemを公開しました。

自分用の簡単なスクリプトを整えただけではありますが、実際に公開したことで、多くの学びがありました。

そこでこの記事では、公開したGemの概要や作成のきっかけ、苦労した点などをまとめたいと思います。

## 公開したGemの概要

今回作成したのは、CSVファイルをYAML形式に変換して出力できるGemです。

シードデータ投入のためのYAMLファイルを作成することが目的です。

主な特徴としては以下の点が挙げられます。

– CSVファイルを簡単にYAML形式に変換
– 自動的にデータ型(数値やブール値など)を推論し、正しい形式で出力
– 生成されたYAMLファイルは、追加の変換作業なしで直接Railsのシードデータとして使用可能
– 任意のディレクトリからCSVを読み込み、任意のディレクトリにYAMLを出力可能

詳細な使い方のイメージはREADMEをご覧ください。

https://github.com/kazuyainoue0124/csv_to_yaml?tab=readme-ov-file#exampl

元記事を表示

【Rails】findとfind_byの違いを理解する

## はじめに
Railsでデータベース操作を効率的に行うためfindとfind_byの違いを調べたのでメモとして残します!
それぞれのメソッドの動作や使いどころを簡単な例を通じてお伝えできればと思います。

## 両者の違い
### findメソッド
Rialsの公式より
> find(*args)
Find by id – This can either be a specific id (ID), a list of ids (ID, ID, ID), or an array of ids ([ID, ID, ID]). ‘ID` refers to an “identifier”. For models with a single-column primary key, `ID` will be a single value, and for models with a composite primary key, it will be an array of values. If one or more records cannot be found for the requ

元記事を表示

【個人開発】Qiitaで投稿を断念してしまった私が、3ヶ月越しに「初学者向けの技術記事アプリ」を作成しました!💐

## はじめに
初めまして。
2024年1月よりプログラミングスクールRUNTEQに通っている、sayaと申します。
今回スクールの卒業制作として、**技術記事投稿したことがない/投稿に苦手意識を感じている方向けの技術記事投稿アプリ**を作成しました。

①投稿へのハードルが低いこと
②第三者からの反応内容を確認できること
③継続して投稿できること
を目的に、約2ヶ月に渡り開発を行ってまいりました。

### サービスURL: [Miniita(ミニータ)](https://www.miniita.com/)
### GitHub: [リポジトリ](https://github.com/s17w09/Miniita)
[![Image from Gyazo](https://i.gyazo.com/f9acd6ce27eb2065aac3cfb78aee5c24.png)](https://gyazo.com/f9acd6ce27eb2065aac3cfb78aee5c24)

3ヶ月前にQiitaで記事を投稿するのを断念してから、この度このような形で記事を投稿できることをとても嬉し

元記事を表示

rbs-inlineに触れてみた

# はじめに

この記事は、rbs-inlineを触ってみた際のメモ的な記事です。rbs-inlineのREADMEを参照しながら動かしてみました

https://github.com/soutaro/rbs-inline

## 検証しているバージョン

– Ruby 3.3.4
– rbs-inline 0.6.0
– steep 1.7.1

# 導入

RubyやBundlerは導入ずみであるとします。

## 1. bundle install

`bundle init`でGemfileを作成し、その中にrbs-inlineを追加します。

“`Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

gem ‘rbs-inline’, require: false
“`

追記したら、`bundle install`。

“`text
$ bundle install
Fetching gem metadata from https://rubygems.org/…
Resol

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事