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

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

Twi●●er風サービスの日次サマリー機能を例にRuby on Railsでバッチ処理テストを極める

## はじめに

本記事では、Ruby on Railsを使用したバッチ処理の実装とテスト方法について、実践的な例を交えて詳しく解説します。Twitter風のサービスで日次サマリーを生成するバッチ処理を題材に、効果的なテスト手法を紹介します。

## 1. プロジェクトのセットアップ

まず、新しいRailsプロジェクトを作成し、必要なgemをインストールします。

“`bash
rails new twitter_summary_app –database=postgresql
cd twitter_summary_app
“`

次に、`Gemfile`を以下のように編集します:

“`ruby
source ‘https://rubygems.org’
git_source(:github) { |repo| “https://github.com/#{repo}.git” }

ruby ‘3.1.2’

gem ‘rails’, ‘~> 7.0.0’
gem ‘pg’, ‘~> 1.1’
gem ‘puma’, ‘~> 5.0’
gem ‘bootsnap’, r

元記事を表示

【Rails × YouTube】YouTubeのチャンネル情報を取得する方法

# はじめに
### 本記事ですること
Webアプリを個人開発していて、YouTubeのチャンネル情報を表示したいと思いました。
本記事では、YouTubeが提供しているAPIを利用して下記情報を取得・表示します。

 ・ チャンネル登録者数
 ・ 投稿動画数
 ・ 最新動画
 ・ 最新動画のタイトル

なお、実際の開発経験に基づきますので、非効率なコードや網羅的な説明でないことご容赦ください。
また、railsアプリがある状態を前提とします。

### ながれ
大きく以下の流れで進めていきます。

 1. 準備
 2. 使用

# 1. 準備
### 1-1. プロジェクトの作成
YouTube(Google)のAPI利用には`プロジェクト`が必要です。
下記サイトにアクセスします。

[Google Cloud > APIとサービス](https://console.cloud.google.com/projectselector2/apis/dashboard?hl=ja&pli=1&supportedpurview=project)

利用規約への同意画面が表示された場合は同意

元記事を表示

Ruby2.7から3.2にアップデートした時につまづいたところ一覧

## 重い腰を上げた
プラットフォームの期限切れも近づいており、そろそろRuby2.7→3.2にあげないといけないタイミングになった。
コケたところを備忘録として残す。

### アップデート内容
“`
ruby ‘2.7.6’ → ‘3.2.2’
rails ‘6.0.3’ → ‘~> 6.1′
“`

# 起きた問題一覧

## Macで Ruby 3.2.2 のダウンロードができない
“`terminal
$ bundle install
rbenv: version `3.2.2’ is not installed
$ rbenv install 3.2.2
BUILD FAILED (macOS 14.4.1 on x86_64 using ruby-build 20240727)
“`

下記の記事を元に3.2.2のインストール完了(感謝)
https://qiita.com/orangeQ/items/117826cdf55806f4209c

## bundle update 時の依存関係エラー
### nio4rエラー
“`terminal
$ bundle

元記事を表示

【Rails】aarch64で環境を立ち上げた時にNokogiriのインストールでエラーが発生した件

どうもこんにちは。

今回は、RailsをAWS Elastic Beanstalk環境へデプロイした時に失敗したので、その時の対処方法を備忘録として残します。

# 発生していたエラー

今回、デプロイに失敗した理由が、「**`nokogiri`** gemが正常にインストールできない」ことでした。

“`ruby
An error occurred while installing nokogiri (1.16.7), and Bundler cannot continue.

In Gemfile:
dropzonejs-rails was resolved to 0.8.5, which depends on
rails was resolved to 7.0.5, which depends on
actioncable was resolved to 7.0.5, which depends on
actionpack was resolved to 7.0.5, which depends on
actionv

元記事を表示

【Rails】Railsチュートリアル第6章 復習用

はじめに

今日もチュートリアルに取り組んでいく。
今回はモデルを主に扱っているようだ

Userモデル

・Railsでは、データモデルとして扱うデフォルトのデータ構造のことを **モデル(Model)** と呼びます
・データベースを使うことで長時間データを保存することができる
・データベースをやりとりするライブラリ(テンプレのようなもの)を **Active Record** という
・ActiveRecordにはデータの作成、保存、検索のメソッドが用意されている
・これらをつかうためにSQLを意識する必要がない!!
・**マイグレーション** = Rubyでデータのはいったテーブル(表)を操作する仕組み

Railsにおける属性

・第4章では`attr_accesor`を用いてUserクラスにnameとemail属性を定義した。
・しかしこれはRubyだから必要なのであって、実はRailsでは属性を定義する必要がない(デフォルトでその仕組が提供されている)

モデル作成

・ここでこれらのユーザー情報を保存するモデルを作成する
・Control

元記事を表示

rails7で、Stimulusを使う

## はじめに
自分用の学習メモです。
Stimulusを使って、クリックすると色が変わるボタンを実装します。

## 実装
bootstrapを使って、ボタンを実装します
“`rb

ボタン

“`
  
Stimulusコントローラを作成します。
“`rb
rails generate stimulus btn
“`
これで、app/javascript/controllers/btn_controller.jsというファイルが作成されます。

“`js
import { Controller } from “@hotwired/stimulus”

// Connects to data-controller=”btn”
export default class extends Controller {
connect() {
console.log(“こんにちは!”)
}
}
“`
  
HTMLにStimulusコントローラを適用するには、データ属性を使用します。di

元記事を表示

PG::UndefinedTable: ERRORの解消方法

# PG::UndefinedTable: ERROR
外部キーの追加を行った際に`PG::UndefinedTable: ERROR`が発生。

# エラー内容
“`
PG::UndefinedTable: ERROR: relation “モデル名” does not exist
“`

`$ rails db:migrate:status`で現在のmigrationファイルを確認
“`
Status Migration ID Migration Name
————————————————–
 down 2024xxxxxxxxx1 Create 子
 down 2024xxxxxxxxx2 Create 親
“`
外部キーを設定している場合、親のモデルからmigrationする必要があるが、デフォルトでは古い順から実行されるためエラーになる。

# 解消方法
以下コマンドで参照元である親モデルを先に実行する。
“`
$ rails db:migrate:up VERSION=202

元記事を表示

RailsのN+1問題におけるpreload, eager_load, includesの挙動の違いと使い分け

## はじめに
N+1問題の対策として以下の3つのメソッドが存在することは知っているものの、挙動の違いや使い分けが思い出せずいちいち調べてしまっています。

– `preload`メソッド
– `eager_load`メソッド
– `includes`メソッド

なんとか記憶に定着させたいのでこの記事を書くことにしました。

3つのメソッドの挙動や使い分けについてまとめます。

なおこの記事におけるRailsのバージョンは**7.1.3.4**です。

## N+1問題とは?
N+1問題とは、データベースからのデータ取得時に発生するパフォーマンス上の問題です。

あるテーブルとそれに関連する別のテーブルのデータを一度に取得する際、クエリが過剰に発行されてしまうことを指します。

RailsにおけるActiveRecordのように、ORMを使用するフレームワークでよく発生します。

## N+1問題の具体例
たとえば、記事の投稿者(`User`)とそれに紐づく記事(`Article`)があるとします。

“`ruby
class User < ApplicationRecord h

元記事を表示

Docker 環境で binding.pry を使ってデバッグする方法

## 初めに
Ruby アプリケーションを Docker コンテナ内でデバッグする際に、`binding.pry` を使いたいと思ったことはありませんか?この記事では、Docker 環境で `binding.pry` を設定する手順を解説します。

## ステップ 1: Gemfile に pry を追加

まず、`Gemfile` に `pry-byebug` を追加します。

“`ruby
gem ‘pry-byebug’
“`

これで、`bundle install` を実行

“`bash
bundle install
“`

## ステップ 2: docker-compose.yml の設定

`docker-compose.yml` ファイルを作成または編集して、デバッグ用の設定を追加します。

“`yaml
docker-compose.yml
web:
build: .
command: bash -c “rm -f tmp/pids~

/////↓この2文を追加
stdin_open: true
tty: true
“`

## ステップ 4

元記事を表示

【Rails】【JavaScript】RailsでJavaScriptを利用する方法について

Rails初学者の学習内容の備忘録です。
間違いや補足等あればご指摘いただけると幸いです。

学習を進めている中で「importmap?webpacker?なにが違うんや…」となったので、今回はRailsでJavaScriptを利用する方法についてまとめました。

# RailsでJavaScriptを利用する主な方法
**1.Sprockets**
・主にRails6以前に利用されていた。
・JavaScriptファイルはapp/assets/javascriptsディレクトリに置かれる。
“`application.js
//= require rails-ujs
//= require_tree
“`

**2.Webpacker**
・Rails6より導入され、JavaScriptをモジュールとして管理するために使われる。
・app/javascript/packsディレクトリにJavaScriptファイルを置かれる。
“`application.js
import Rails from “@rails/ujs”
Rails.start()
“`

**3.imp

元記事を表示

Ruby On Railsと Graph QLで爆速TODOアプリを開発する

## 1. はじめに

GraphQLとRailsを使用してTo-doアプリのAPIを構築する方法を紹介します。GraphQLは柔軟で効率的なAPIを作成するための強力なツールであり、Railsと組み合わせることで、迅速かつ堅牢なアプリケーション開発が可能になります。

## 2. プロジェクトのセットアップ

まず、新しいRailsプロジェクトを作成し、必要な依存関係をインストールします。

“`bash
rails new todo_graphql_api –api -T -d postgresql
cd todo_graphql_api
“`

Gemfileに以下の行を追加します:

“`ruby
gem ‘graphql’
gem ‘graphiql-rails’
“`

そして、依存関係をインストールします:

“`bash
bundle install
“`

GraphQLをセットアップします:

“`bash
rails generate graphql:install
“`

## 3. モデルの作成

To-doアイテムを表すモデルを作成します:

元記事を表示

【Rails】環境構築まとめ

はじめに

現在Railsチュートリアル2周目に取り組み始めて約1週間が経つ
Railsチュートリアル7版ではGitHub CodespacesというクラウドIDE環境での開発が取り上げられている
→テンプレートが用意されていて、環境構築が非常に楽なのだが(というかほぼない)実際に環境構築をする際に何も知らなくて困ってしまう

更に私は来週から技育CAMPのオンラインハッカソンに出場する予定なので、
「さすがに環境構築を知らないのはまずい!」
と思い、環境構築について学習することにする。

もしかしたらチュートリアルのテンプレートは今後開発をする際にも流用できるのかもしれないが、他のエンジニアの方はおそらく環境構築から取り掛かっているだろうし、何かと今後困りそうなので!

基本的にこちらの記事を参考にさせていただいてるが、具体的なインストール手順などは重複してしまうためこちらでは書かない。この記事では必要な部分を要約する形にしたい。

元記事を表示

shakapackerでcssからsassに移行した際にコンパイルに失敗する

## やろうとしていたこと。
Rails7にReactを導入しようとしてまして、その際、shakapackerを用いつつ、sassでスタイルシートを管理するためにセッティングしている最中でした。
.sassにしても.scssにしてもcssに変換がうまくいかず困ってしまったので、備忘録して記載します。

## どんなエラーが出ていたか。
以下のように、`bin/shakapacker-dev-server`を実行後、style-loaderと、sass-loaderのインポート時にエラーが出ていました。
ログ後半では、sass-loaderも利用しているような雰囲気があって、エラーも`Error: expected “{“.`と表示されているなど、名前を変更したapplicatio.sassの中身が悪いのかなと書き方をいろいろ試しているうちに時間を使ってしまいました。

“`bash
app-1 | ERROR in ./app/javascript/packs/application.scss (./app/javascript/packs/application.scs

元記事を表示

【devise】before_action :authenticate_user! が動作しない

## はじめに
deviseの RegistrationsController の editアクションにbefore_action :authenticate_user! を適応したい。

そのまま書いてみるだけではできませんでした。
ちなみに、他のコントローラーでは期待どおりに動作します。

## before_action :authenticate_user! とは
特定のアクションを実行する前にユーザーが認証されているかを確認するためのDeviseのメソッドのこと。
このメソッドを使うと、ユーザーがログインしていない場合はログインページにリダイレクトされます。

下記がうまくいかない。
“`app/controllers/users/registrations_controller.rb
module Users
class RegistrationsController < Devise::RegistrationsController before_action :authenticate_user!, only: [edit] ``` ## 結論 下記の

元記事を表示

Rails7.2の新機能と変更点をまとめる【後編】

Rails7.2がbetaフェーズとなっています。

リリースに先立ち、新機能や変更点などをまとめつつ、実際に検証してみました。

[前編](https://qiita.com/Kazuyaa/items/859568c8f7cbe9a78ddf)も併せてご確認ください。

## トランザクションの最中にActive Jobをキューに渡さない
トランザクションの最中でActive Jobをエンキューした場合に、トランザクションのコミット完了までエンキューが遅延されるようになりました。

トランザクションがロールバックされた場合はジョブを削除します。

トランザクション内でジョブをエンキューしてしまうと、コミットが完了する前にジョブが別プロセスで実行されてしまう可能性があるからです。

例えば以下のコードがある場合、コミット完了前にジョブが実行されてしまうと、実行時点でまだ`user`は存在しないため、エラーが発生します。

“`ruby
ActiveRecord::Base.transaction do
user = User.create!(…)
HogeJob.per

元記事を表示

【Rails】Railsチュートリアル 第5章 復習用

前回の第4章ではRubyのコードに関して学習し、基礎的なオブジェクト指向が理解出来た(はず)

第5章ではおそらくviewの部分をメインに扱っている
さらに今回はBootstrapも用いる

classとid

・HTMLではclassに似たようなidというものがある
・idは重複してはならない(一度しかつかえない)
・クラスとidはcssを当てる時に便利
・また今回のclass名にはbootstrapにおいて特別な意味を持つため、適当につけてはいけない。

“`css
.nav{ /*ここはidの場合は.ではなく#を用いる*/
font-size:20px
}
“`

link_to(重要)

・様々なRailsのコードを見る限り恐らくめちゃくちゃ頻出するコード
・link_toはページ内にリンクを作成するコード(HTMLでいう

元記事を表示

[rails7] bin/devの役割とその仕組み

## 経緯
今回個人開発をする上で、新しく「rails new」 を行い「bin/dev」でローカルサーバーを立てようとした際に、下記のようなエラーが出たため、このエラーを解決するためにbin/devについて調べたのでこれをまとめます。

“`
❯ bin/dev
zsh: no such file or directory: bin/dev
“`

## エラーの原因
railsのbinファイルにdevというファイルがない

## そもそもbin/devとは?
bin/devコマンドは、Rails7においてrails sコマンドの代わりになるコマンドです。これまでrails sを実行していたタイミングで利用します。

なぜrails sではダメなのか?

理由はrails6までデフォルトでwebpackerというgemがありましたが、rails7から廃止になりました。これにより今まで自動的にできていたコードのサイズを小さくし(ミニファイ)、古いブラウザでも動くよう変換し(トランスパイル)、複数ファイルをまとめて一つにし(バンドル)、圧縮するプロセスができなくなってしまいます。

元記事を表示

割り算の余りが出せなくてもエンジニアとしてやっていけますか?

## はじまりはいつも自己紹介から

どうも!
割り算の余りが出せないモンスターです!

今回ですが、rubyで割り算と余りを算出する問題が出され正解を一発で出すことができなかったので、こちらの記事を書く決心をしました。

以下本文

## なんで、できんかったん?

今回の問題を解くのが難しいと感じたのは以下の理由があったからです。

“`
1. rubyの組み込みメソッドが使えない。
2. 割り算の”/”は商しか出すことができないこと。
“`

そのためわかりませんでした。

## 余りを出す組み込みメソッド “modulo”

皆様ご存知かと思われますが、rubyには割り算の余りを出すメソッドがあります。
それがmoduloメソッドです。

### 以下”modulo”の解説

### moduloメソッドの使い方
moduloメソッドは数値オブジェクトに対して呼び出され、引数として除数を指定します。すると、割り算の余りを返してくれます。以下にいくつかの例を示します。

“`
puts 10.modulo(3) # 出力: 1
puts 20.modulo(4)

元記事を表示

【超爆速】DockerでRails環境構築

Ruby on railsをローカル環境で構築して、学習用に手軽に実行したいときにDockerでの構築手順が面倒だと思いました。
Docked Rails CLIを使うと簡単なコマンドを打つだけで実行環境が構築できてしまうのでとても便利だと思いました。
手順を紹介します。
### Docked Rails CLI

[docked](https://github.com/rails/docked#docked-rails-cli)

## 手順
このコードは初心者向けにRailsアプリケーションを簡単にセットアップする方法を示しています。以下に簡潔に解説します:

1. ターミナルで以下のコマンドを実行します:
– Dockerボリュームを作成し、Rubyの依存関係を保存します。
“`shell
docker volume create ruby-bundle-cache
“`
– `docked`というエイリアス(ショートカット)を作成します。これにより、Dockerコンテナ内でRailsコマンドを簡単に実行できます。

元記事を表示

each内でfindしてる処理(線形探索)をハッシュ探索、バイナリ探索にするとどれくらい早いのか計測してみた。

# 前提
以下、過去の開発で実際にあった例です。

“`
stations = [{id: 1, name: station1}, {id: 2, name: station2}, …]
facility_counts_by_station = [{id: 1, count: 10}, {id: 3, count: 20}, …]
idはどちらもstation_idを指す。
“`
のような配列がそれぞれあり、**stationsに同一idのcountをmerge**したい。

これを処理するうえで、**線形探索**、**ハッシュ探索**、**バイナリ探索**それぞれのアルゴリズムで処理速度がどれくらい違うのか比較してみた。

### 補足
ある施設の数を駅ごとに表示するため用意しているデータです。

1つ目の配列はActiveRecordから取得、2つ目の配列はElasticSearchのaggregationから取得しているため、それを突合させる必要がありました。

なお、stationに属するfacilityが0件のケースはfacility_counts_by_stat

元記事を表示

OTHERカテゴリの最新記事