Ruby関連のことを調べてみた2023年11月06日

Ruby関連のことを調べてみた2023年11月06日
目次

【Rails】バルクアップデート

# バルクアップデートとは
複数のレコードを一度に更新する操作のこと。
– ***bulk***(大部分/一括)
– ***update***(更新)

# どんな時にバルクアップデートをするのか
パフォーマンスの向上・負荷削減
– 大量のデータを一度に更新するため、個々のレコードを1つずつ更新するよりも遥かに高速
– DBへのアクセスは比較的高コストなため、一度のクエリでまとめて更新した方が効率的
– DBへのアクセス回数を減少させるため、サーバーのリソースを節約
トランザクションの最適化
– 複数のレコードを1つのトランザクションで処理をすることが出来る
– エラーが発生した場合にはトランザクション全体をロールバックすることが出来る
– トランザクション全体を制御するため、データの整合性を保つことが出来る
– 更新がすべて成功するか、すべて失敗するかのいずれか

:::note
– サーバーやDBへの負荷が低減され、処理が高速化される
– データの整合性を保つことが出来る

元記事を表示

【Rails】ブランチを切り替える前に気を付けたいDBマイグレーションの注意事項

## はじめに
Railsはとても便利なwebアプリケーションフレームワークです。
gitも非常に便利なソースコード管理ツールです。
この2つのツールがあれば、初心者でも効率良くwebアプリケーションを開発できます。

ただし、学習用の小さなアプリケーションを一人で開発しているときはブランチはひとつかふたつで十分ですが、業務などで大きなアプリケーションを複数人で開発する場合は、複数のブランチで並行して開発が進める必要が出てきます。

こういうケースではデータベースマイグレーションを正しく理解し、正しく扱わないと、開発環境やソースコードが混沌としてきます。
Rails初心者の多くはこうした知識を持たないまま、チーム開発に参加しがちです。

この記事では「学習用の小さなRailsアプリケーション」を卒業し、「チームで開発する大きなRailsアプリケーション」に足を踏み入れる前に知っておくべき、データベースマイグレーションに関する知識を説明します。

## TL;DR(長すぎるので最初にまとめ)

ちょっと長いので先に要点をまとめておきます。

– gitでブランチを切り替えても、gitはデ

元記事を表示

GoogleMapsAPIを使用した開発3(周辺情報取得機能)

# 1.はじめに
投稿された情報(緯度経度)からGooleMapsAPIを使用して地図を表示、地点間のルート検索機能、周辺情報の取得を実装したので知識の定着、復習のために記事を書きます。
今回はその3回目で周辺情報取得機能を実装していきます。

# 2.環境
Ruby (2.6.4)
Rails (6.1.7)
Maps JavaScript API

# 3.前提条件
APIキー取得済み
投稿機能を実装している
下記を実装している
[GoogleMapsAPIを使用した開発1(地図の表示)]()
[GoogleMapsAPIを使用した開発2(現在地取得)]()

# 4.実装

## 1.PlacesAPIを有効にする
– 下記公式サイトを参考に導入してください。
[Places API公式](https://developers.google.com/maps/documentation/javascript/places?hl=ja)

## 2.initMap関数とgetCurrentLocationAndAddMarker関数にsearchPlaces関数を呼び出す記述を追

元記事を表示

【Ruby on rails】日時を日本時間で表示する

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

今回はオリジナルアプリの中で、日時を日本時間で表示してみたので共有したいと思います。

※@jnchito(Junichi Ito)さんの投稿を参考にさせて頂きました。
 とても分かりやすく参考になりました。
 ありがとうございます。

# Let’s start!!!
## 時間を表示する
時間を表示するときは、表示したいモデルの`created_at`カラムを取得します。
“`index.html.erb
<%= destination.created_at %>
“`
しかし、これでは以下のように少し見づらい表示になります。
![271ECEB5-ED00-45CF-BDBA-562AF0CF3B23_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564879/2e1e3f68-a7c5-4228-d37e-11cbeb538484.jpeg)

この世

元記事を表示

Gem sorceryを使い倒す② ログイン機能応用編

## 新規登録時にログイン
 

新規登録したあとに、もう一度ログイン画面でログイン処理するのはユーザーにとって手間ですよね。
新規登録後はそのままログイン処理も済ませるように記述しましょう。
“`ruby:controller/users_controller.rb
def create
@user = User.new(user_params)
if @user.save
login(user_params[:email], user_params[:password])
redirect_to curriculum_logs_path
flash[:success]= ‘サインアップしました’
else
flash.now[:danger] = ‘サインアップに失敗しました’
render :new, status: :unprocessable_entity
end
end
“`

if @user.saveできたら、その後にloginメソッドを記述します。
これで新規登録後、自

元記事を表示

Gem sorceryを使い倒す① 基本のログイン機能

## 環境
ruby “3.2.2”
rails “7.0.7”
Docker

## Gemのインストール
https://github.com/Sorcery/sorcery

 
**【Gemのインストール】**

Gemfileに以下を記述し、ターミナルでbundle installします。

Dockerを使用している場合の注意点

:::note warn
Dockerを使用している場合はコンテナ内に入ってから記述します。コンテナの外にいる状態で記述した場合、コンテナに入れなくなる場合があります。その場合は一旦削除してコンテナに入り再び記述し直してください。
:::

“`ruby:Gemfile
gem ‘sorcery’
“`

“`ruby
bundle install
“`
*インストールもDocker内で行います。

 

ターミナルで次のコマンドを実行して、コア移行ファイル、初期化ファイル、および `User`モデル クラスを生成します。

“`ruby
rails gen

元記事を表示

【RSpec】モデルスペックの基本

## はじめに
こんにちは、@jinta_02と申します。
個人開発をするにあたり、モデルスペックを書く機会があったので、記録として記事を書きます。
完全未経験者の記事のため、誤りがございましたらコメント等いただけますと幸いです?‍♂️

## 前提
Ruby: 3.2.2
Rails: 7.0.6
rspec-rails: 6.0.3

## モデルスペックとは
RSpecを使用して、Railsアプリケーション内のデータモデル(ActieRecordモデル)をテストするためのスペックの一種。データモデルの振る舞いやバリデーション、データベースの操作などをテストし、モデルの正確性を確認するためのものです。
### 具体的には以下のようなテストを行います。
– **バリデーションのテスト**
モデルが正しいバリデーションを持っているかを確認します。
– **関連付け(アソシエーション)のテスト**
`belong_to`, `has_many`などの関連付けが適切に動いているかを確認します。
– **カスタムメソッドのテスト**
モデルに定義されたカスタムメソッドが正しく動作しているかを

元記事を表示

RailsとGoogle OAuthで他者のAWS環境を操作する方法

こんにちは!hagurereです。今回は個人開発中にエンドユーザーのAWS環境をRailsサーバーから操作する用件があったので方法を調べて実装してみました。なかなかない要件で同じようなことをやっているドキュメントが見当たらなかったのでここに残しておきます

# 概要

google-oauth2で発行されるid_tokenとユーザーから入力してもらったIAMロールを元にAWS::STS::Client.assume_role_with_web_identityから一時的なaccess_keyを発行し、それを使ってs3からオブジェクトを取得します。

※ 検証用の簡易的な実装ですので細かいことは考慮してません

# 環境
rails(7.0.4)
ruby(3.1.4)
aws-sdk-s3 (1.136.0)
omniauth(2.1.1)
omniauth-google-oauth2(1.1.1)
redis(4.8.1)

# google認証とid_token取得
![スクリーンショット 2023-11-05 18.38.17.png](https://qiita-image-s

元記事を表示

【簡単】Railsでの画像アップロードと表示機能の追加方法

# 【簡単】Railsでの画像アップロードと表示機能の追加方法

このガイドでは、ImageMagick、MiniMagick、Image Processing、およびActive Storageを使用して、Railsアプリケーションで画像のアップロードと表示を実現する手順を説明します。

## 1. ImageMagickのインストール

まず、ImageMagickをインストールしましょう。ImageMagickは画像の処理と変換に必要です。Homebrewを使用してインストールできます。

“`bash
brew install imagemagick
“`

## 2. MiniMagickとImage Processingのセットアップ

次に、MiniMagickおよびImage ProcessingのGemをプロジェクトに追加しましょう。Gemfileに以下の行を追加します。

“`ruby
gem ‘mini_magick’
gem ‘image_processing’
“`

その後、ターミナルで以下のコマンドを実行して、Gemをインストールします。

“`

元記事を表示

STI(Single Table Inheritance)を使用するメリットは?

# はじめに
皆さん、お疲れ様です。
今回、Railsの学習中に **STI(Single Table Inheritance、シングルテーブル継承)** について引っかかる部分がありましたので、備忘録として技術記事を作成しました。
もし同じく学習中の方でSTIの理解度について不安がある方への参考資料になればと思います…!

:::note warn
**説明**
この記事はプログラミング初学者なりに纏めた記事になっておりますので、内容等に誤り等がある場合がございますのでご了承下さい。
もし誤りに気づかれた際は、コメント等でご教授いただけると助かります?‍♂️
:::

# STIとは?
そもそも、STIとは何なのか?
その説明からしていきたいと思います。

STI(「Single Table Inheritance」または「シングルテーブル継承」)とは、オブジェクト指向プログラミングの継承の概念をデータベースのテーブルに適用したものです。
RailsでのSTIを使うと、複数の関連するクラスを単一のデータベーステーブルで扱うことが出来ます。

つまり、スーパークラス(親クラス)とそ

元記事を表示

GoogleMapsAPIを使用した開発2(現在地取得)

# 1.はじめに
投稿された情報(緯度経度)からGooleMapsAPIを使用して地図を表示、地点間のルート検索機能、周辺情報の取得を実装したので知識の定着、復習のために記事を書きます。
一度に書くと長くなるので、4回にわけて投稿していきます。
今回はその2回目で現在地取得まで実装します。

# 2.環境
Ruby (2.6.4)
Rails (6.1.7)
Maps JavaScript API

# 3.前提条件
APIキー取得済み
投稿機能を実装している
[GoogleMapsAPIを使用した開発1(地図の表示)](https://qiita.com/uuuDi_97722/items/6a064cf7e40d91a517c0)まで実装している

# 4.実装

## 1.viewの修正
“`diff_ruby

+

元記事を表示

Rails で devise + devise_token_auth を使ってログイン認証機能をつくり、NavigationGuardでアクセスを制御する。

# はじめに
Rails6(API-mode)+Vue3のSPAを開発する環境ができた([前記事](https://qiita.com/tomofu74/items/a8750738a1e18c471bbb))ので、早速作り始める。
アプリの目的は決めてないが、とりあえず、ログイン認証機能を作ろう。

# 事前調査

以下の記事を作ってくれていた、先達たちに感謝。これらの情報があって私は自前のアプリを作り、この記事を書くことができています。謝意を表します。

https://qiita.com/tomofu74/items/a8750738a1e18c471bbb

https://qiita.com/tak8_al/items/265b080674456398d56e

https://qiita.com/kk-icare/items/c4cd040824c7d6b434d6

https://qiita.com/kk-icare/items/401114a1284f8e9ca135

https://qiita.com/kk-icare/items/6389ab6ff83f859d

元記事を表示

erbで=つけ忘れて2時間悩んだから俺は今後絶対に=を忘れない。

# はじめに
業務でビューを書いてるときに文字列が出力されず2時間悩んだ結果`<%`と書いており`=`が抜けていたのが原因だった。 悔しい。 二度と忘れないためにerbの主なタグを以下にまとめた。 怒りに任せて`<%` `<%=`以外のタグもまとめた。 ## 1. `<%=`: 出力付きのERBタグ `<%=` タグは、Rubyコードを実行し、その結果をHTMLに出力します。 ### 例: ```erb <%= "Hello, Rails!" %>
上記のコードは、以下のように出力されます:
“`

“`html
Hello, Rails!
“`
## 2. <%: 出力なしのERBタグ <% タグはRubyコードを実行するだけで、結果をHTMLに出力しません。主に制御構文 (if, loopなど) で使用されます。 ### 例: ```erb <% name = "Rails" %>
<%= "Hello, #{name}!" %>

Hello, Rails!
“`

### 例:
“`erb
<% if logged_in? %>

<%= "Hello,

元記事を表示

過去の投稿欄、いいね欄の追加

GeekSalon名古屋メンターの吉田です!

オリジナル開発でマイページにいいね欄(いいねした投稿をマイページに表示)をつけたいという受講生が何人かいたので記事にしました!
良ければ参考にして下さい。
(カラム名などはGeektwitterのものをそのまま使っています)

##過去の投稿欄の作成
いいね欄の前にこの機能をつけた方が多いと思うので、こちらのコードを紹介して**「いいね欄はその応用で作れる!」**ということを理解してもらおうと思います。
この機能は必要ないという方は飛ばしてもらって構いませんが、参考までに一読しておいて下さい。

まずは以下のコードを`users_controller.rb` に追加しましょう

“`ruby:users_controller.rb
class UsersController < ApplicationController def show @user = User.find(params[:id])
@tweets = @user.tweets

en

元記事を表示

コメント欄に★レビューを追加しよう

GeekSalon名古屋メンターの吉田です!

皆さんのコメント機能に星レビューを実装したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669682/3a418630-f54a-0ad8-5be9-8ab63a1fa013.png)

*この記事では教材7-5にてコメント機能が実装されているものとして進めます。

##レビューを入れるためのカラムを追加
コメント機能同様、レビューを入れるためのカラムを作らなければなりません。
自分のプロダクトの階層で

“`ruby:コマンドプロンプト
rails g migration AddReviewToComments review:integer
“`
でcommentsテーブルにreviewカラムを追加しましょう。

##レビューを運ぶためにコントローラーを変更
変更と言っても少し追加をするだけです

“`ruby:comments_controller.rb
#割愛

private

def co

元記事を表示

高レベル言語から低レベル言語へ: Ruby to C

# 高レベル言語から低レベル言語へ: Ruby to C

オブジェクト指向プログラミング言語は、開発者が効率的にコードを書くことを可能にし、コードの再利用と維持を向上させます。しかし、これらの高レベル言語は、実際にはどのようにコンピュータの低レベルの機構と対話しているのでしょうか?この記事では、高レベル言語Rubyと低レベル言語Cの間のインタラクションを探求します。

## 1. RubyがLinuxで実行されるまで

Rubyコードを実行するとき、いくつかのステップが背後で行われています。これらのステップは、高レベルのRubyコードを低レベルのシステム命令に変換し、最終的にはLinuxオペレーティングシステム上で実行します。ここでは、このプロセスを簡単に説明します。

### MRI (Matz’s Ruby Interpreter)内の処理
#### 1. Rubyコードのコンパイル:

Rubyコードは最初にバイトコードにコンパイルされます。バイトコードは、Rubyの仮想マシン(Ruby VM)で実行可能な中間表現です。

“`ruby
# Rubyコード
def add(x

元記事を表示

【Rails】form_withメソッドでURL指定が必要な場合

# Railsの`form_with`ヘルパーメソッドとURLの指定

Railsのフォーム作成において、`form_with`ヘルパーメソッドは非常に便利ですが、URLの指定が必要な場合とそうでない場合があります。以下に、`form_with`ヘルパーメソッドでURLの指定が必要なケースを説明します。

## 基本の使い方

基本的に、`form_with`ヘルパーメソッドはURLの指定が必要ありません。以下は典型的な使用例です。

“`erb
<%= form_with model: @article, local: true do |form| %>

<% end %>
“`

この場合、フォームは`@article`というモデルと関連付けられ、自動的に適切なURLが生成されます。ただし、いくつかの特別なケースではURLの指定が必要になります。

## ModelとControllerの名称が異なる場合

モデルとコントローラーの名前が異なる場合、`form_with`は自動的にURLを推測できません。この場合、URLを明示的に指定

元記事を表示

【個人開発】アニメをTierで評価するデータベース型サイト「AnimeTierList」を作りました【Rails7 / Docker / GitHub Actions】

## はじめに
はじめまして、@hinata_tashiroです!

現在23歳の男で、2年ほど前からエンジニア転職を目指し、独学で約1年半働きながら学習を続け、退職後にポートフォリオを作成いたしました。

私が独学で学習を進める中で、Qiitaに投稿されている皆様のポートフォリオに刺激をいただいておりましたので、今度は私が同じような境遇の方に刺激を与えられたらいいなと思い、僭越ながらポートフォリオを公開することにしました。

独学・未経験ということで、技術的な誤りなど多々あると思いますので、どしどし指摘コメントをいただきたいです。

## ポートフォリオの紹介
![atl-banner.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634356/692f7288-b8b2-b0d2-7614-b76f22896cbe.png)

### 概要

AnimeTierListは、視聴したアニメをTierで評価することで、自分だけのTierListを作成することができるサービスです。

ゲストログイン機能

元記事を表示

【Ruby on rails】どちらか一方必須のバリデーション

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

今回はオリジナルアプリでどちらか一方必須のバリデーションを設定したので、その方法について共有したいと思います。

# Let’s start!!!
今回、私のオリジナルアプリでは、ユーザーがアイテムを投稿する際に、PDFまたは画像のどちらか一方が必須であるバリデーションを設定しました。さらに、両方が入力されている場合も、一方も入力されていない場合も保存を許可しないように設定しました。

それでは、実装していきましょう!

## モデルへの記述

“`item.rb
class Item < ApplicationRecord validate :image_or_pdf def image_or_pdf return if item_image.present? ^ pdf.present? errors.add(:base, '画像またはPDFのどちらか一方を入力してください') end end ``` この例では、カスタ

元記事を表示

Rails ToDoアプリにて 完了機能追加した

この記事を書くことにした理由

これから何度もポートフォリオ制作にて使う気がしたので、今後のために書き残そうとした。

やり方

最初はmigrateの作成or追加から

“`console
$rails g migration テーブル名(例 CreateToDos)
“`
テーブルも新しく作る場合
“`ruby:テーブル名(例 日時_create_to_dos.rb)
class テーブル名(例 日時_create_to_dos.rb) < ActiveRecord::Migration[7.0] def change create_table :テーブル名(例 to_dos) do |t| t.追加したい型(例 string) :カラム名(例 text) t.boolomen :done(一例) t.timestamps end end end ``` 既存のテーブルに追加する場合 ```ruby:テーブル名(例 日時_

元記事を表示

OTHERカテゴリの最新記事