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

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

日付の比較処理を見かけたら UTC+ いくつか意識してレビューしたいお話

# UTC+なんなのか意識してレビューとコーディングをしたい

`Time.current.class` は `=> ActiveSupport::TimeWithZone` であり現地時間を取得できる
`Date` 型は 世界標準時 `UTC + 0` を参照する

そのため `to_date` を用いて型変換しない場合 は `UTC+9` の時間を追加すると比較できる

“`ruby
[78] pry(main)> product.start_date
=> Wed, 29 Nov 2023

[79] pry(main)> product.start_date <= current_day + 8.hour => false

[80] pry(main)> product.start_date <= current_day + 9.hour => true
“`

境目は 8時間59分59….. +9時間すると正しく動作する

# 実際にあった怖い話

DateTimeオブジェクトとTimeオブジェクトをコード内で同列に扱って
日付判定ロジックでミスった話

公開日が

元記事を表示

【Rails】include と extend と ActiveSupport::Concern

`include` と `extend` の違いってなんだ?
内部では何が起きているのか..?

`ActiveSupport::Concern` を使うにも `included` 使うけど何をしているのか

`ActiveSupport::Concern`を使う際に学んだことをメモします。
## [extend](https://docs.ruby-lang.org/ja/latest/method/Object/i/extend.html)について

– `extend` したクラスのシングルトンクラス(特異クラス)のインスタンスメソッドとして追加できる
– `extend`したモジュールのメソッドはクラスメソッドのように呼び出せる

順を追うと…

### シングルトンクラスとは…
**あるオブジェクト専用のクラスであり、そのオブジェクトだけに属する**
[こちらが参考になります](https://qiita.com/k-penguin-sato/items/d637dced7af32e4ec7c0)
ちなみに[object.singleton_class](https

元記事を表示

Rails7.0.5から7.0.5.1への変更点

## 対象
Railsのバージョンを**7.0.5**から**7.0.5.1**に変更する人

## 情報ソース
Rails Versions 7.0.5.1, 6.1.7.4 have been released!
https://rubyonrails.org/2023/6/26/Rails-Versions-7-0-5-1-6-1-7-4-have-been-released

## 変更点
– `redirect_to`による脆弱性の対応

## 詳細
`redirect_to`を使っている場合にクロスサイトスクリプティング(XSS)の攻撃が発生する可能性がある模様。
ただし、`redirect_to`を使っている場所全てで発生するということではなく、**外部のホストにリダイレクトを許可している場合**に発生しうるというものです。
外部ホストにリダイレクトを許可する設定は
“`rb
redirect_to ‘https://example.com’, allow_other_host: true
“`
こんな形でallow_other_hostをtrueに意図的にする必要

元記事を表示

Docker使ってrails newしたい時にすぐできるtemplateを作った

## はじめに

こんにちは!
まるべいじです!

個人開発でちょっと作りたくなった時に、どのような構成で構築していますか?
私は、Rails+Docker+その他必要なものにしています。
Dockerがあると環境差分が減って開発しやすくなりますし、デプロイ先の選択肢も増えるので、この構成は外せません。

ただ。。。Docker経由で`rails new`するのが地味にめんどくさい。。。
`rails new`用のDockerに`ruby`や`node`のインストール、`rails`だけはいった`Gemfile`など、細かい調整がいろいろ必要です。

すぐに開発したいのに、ここでモチベーションがちょっと下がる。これは良くない!と思ったので、今回はRailsのセットアップをするTemplate Repositoryを作りました✨

:::note info
Template Repository とは???
この機能を使うと、あらかじめ設定されたリポジトリをベースにして新しいプロジェクトを簡単に始められます。
つまり、Template Repositoryは「繰り返しの労力を減らす」ため

元記事を表示

Ruby on Rails カラムの追加/データ型変更/削除

ポートフォリオ制作でdocker-composeコマンドを使ってカラムの追加/データ型変更/削除を行ったので備忘録として記載しています。

前提条件
ruby’3.1.3′
rails’7.0.4′
docker-compose ‘3.8’

apiと書かれた部分は適宜読み替えてください。

### 既存のテーブルに新しいカラムを追加する
(usersテーブルにbadgeというカラムを追加する例)
1.新しいマイグレーションファイルを作成する
“`
docker-compose run –rm api rails generate migration add_badge_to_users badge:boolean
“`
2.以下のマイグレーションファイルが生成される
“`
class AddBadgeToUsers < ActiveRecord::Migration[7.0] def change add_column :users, :badge, :boolean end end ``` 3.rails db:migrateを実行 ``` docker-c

元記事を表示

位置情報系RubiestがMySQLを5.7から8.0にした話

静岡市でWeb開発しているkazuomatzです。

以前、[こちらの記事](https://qiita.com/kazuomatz/items/884c7b5e64a3b7532204)で、Rails + MySQL で位置情報を扱う時に標準だったライブラリ [activerecord-mysql2spatial-adapter](https://github.com/rgeo/activerecord-mysql2spatial-adapter)について書きました。

ライブラリの開発が止まってしまい、新しいRailsのバージョンに更新しようとすると対応されていないので、リポジトリをforkして、Rails6.0で何とか動かした話です。

今年、AWSの[RDSのMySQL5.7系のサポートの終了](https://blog.serverworks.co.jp/eos-rds-for-mysql57x)がアナウンスされました。2024年2月以降、RDSでMySQL5.7を利用し続けるには、有償の延長サポートに入る必要があります。

というわけで今年は、MySQL5.7で稼働している

元記事を表示

RailsでCSVインポートとエクスポート機能を実装

# 0. はじめに
Railsで基本的なCSVインポートとエクスポートを行う

# 1. 事前準備
“`: config/application.rb
require “csv”
“`

“`:app/views/users/index.html.erb
<%= form_with url: import_path do |form| %>
<%= form.file_field :file, accept: "text/csv" %>
<%= form.submit "CSVインポート" %>
<% end %>
“`
# 2. CSVインポート
“`:app/controllers/import_controller.rb
class ImportController < ApplicationController def create User.import_csv(file: params[:file]) if params[:file].present? redirect_to users_path end end ``` ```:

元記事を表示

バックエンドをGoからRailsに切り替えたお話

# はじめに
今年のカレンダーはとある会社のとあるチームで活動した1年間を振り返っていきます

背景はこちらに記載しています

# バックエンドをGoからRailsに切り替えたお話
## やったこと
環境構築の記事を以前投稿しています。

https://qiita.com/does_not_exist/items/19c35639e466844e8b0e

https://qiita.com/does_not_exist/items/23a70dab286ed146b05f

https://qiita.com/does_not_exist/items/b79b3fd51ea6ef39df23

## 気づいたこと
環境構築はGoよりRailsの方が少し早くできたような気がします。
Rails側でよしなに設定してくれる箇所が多いからだと思います。Goはポインタや構造体という概念があるので理解に時間がかかったりしました。コードの書きやすさ、可読性でいえばGoの方が良いのかなという感触でした。

# おわりに
RailsもGoもさらに触れていき、状況に応じて技術選択できるようになりたいで

元記事を表示

Docker for MacをインストールしてRails7 + MySQL8の環境を作る

# はじめに
こちらの記事では、最新のRailsバージョンである7をMySQL8と一緒に動かす環境をDockerを使って構築する手順を紹介します。Dockerのことを全く知らない人でも手順通りに進めればDockerを使って環境構築ができます。
**ただしこちらの記事ではDockerについての詳細は書きません。ご注意ください。**

## 環境情報
Mac: MacbookPro(14インチ 2021)
チップ: Apple M1 Pro
OS: Monterey(バージョン12.6.2)

## この記事のポイント
Docker DesktopというMacアプリ(GUIで動く)をインストールすると、自動的にターミナルからDockerコマンドが使えるようになる。
Dockerを使うと、自分のPC本体にRubyやRailsをインストールしなくても開発のための環境を作ることができる。

# 手順一覧

**手順1 Docker Desktopのインストール**
**手順2 DockerでRailsアプリケーションが動くコンテナを作る**
**手順3 コンテナを立ち上げ、Railsアプリのセッ

元記事を表示

【Rails】form_withのf.check_box未チェック時にfalseパラメータを送らないで!

## やりたいこと
商品一覧画面で以下のような商品群の中から「在庫切れ」「価格変動あり」
それぞれもしくは両方の条件に一致するものをチェックボックスで絞り込みたい。

“`
商品1 在庫なし
商品2 在庫なし 価格変動あり
商品3      価格変動あり
etc…
“`

## やったこと
form_withで以下のように実装

“`search.slim
/ 在庫切れチェック
= f.check_box :out_of_stock_alert_eq,
class: ‘form-check-input’
= f.label :purchase_operation_out_of_stock_alert_eq, ‘在庫なし’

/ 価格変動チェック
= f.check_box :changed_price_alert_eq,
class: ‘form-check-input’
= f.label :purchase_operation_changed_price_alert_eq, ‘価格変動あり’
“`

この内容で検索したところ商

元記事を表示

【初心者】3ヶ月の開発を通して学んだ3つの後悔

# 描いてる人の特徴
1. 某プログラミングスクール卒の27歳。受託企業
2. ポートフォリオはRailsで一部react使用。
3. 最初の1ヶ月はRailsのみの案件、そして最近までRails+Reactで開発。

# 入社して3ヶ月経ちました
入社が9月で研修という研修をせずそのまま現場にぶち込まれました。周りはみんな優しい方々だったのでめちゃくちゃ聞き回りました。そのおかげで自分が担当した実装部分は無事に完了し、リリースまで持っていけました。

特にこの3ヶ月でBEとFEを触らせてもらったことは本当に幸運でしかも基礎的なCRUDの部分だったので基礎の基礎をやらせてもらって本当に感謝しています。しかし、この3ヶ月でどれだけ自分のレベルが低いか(多分レベル1未満)実感したのでこれからはもっと勉強しないとなって感じました。

そこで3ヶ月の反省というかこれ実務前にやっとけばよかったってことを過去の入社前に遊び尽くしていた自分への断罪として、これからの自分の勉強方針がぶれないように残しておきたいと思います。

# 1.クラスとインスタンスの違いについて
これは最初の現場でマジでキツく言

元記事を表示

SidekiqをActiveJob経由で使うべきか

実務でRailsアプリケーションを扱っており、非同期処理の実装でSidekiqを扱うことになりました。
Sidekiqを直接扱うパターンとActiveJob経由で扱うパターンの2通りあることを知ったため、それぞれのメリット/デメリットを調査しました。

## 参考にした記事
本記事を書くにあたり以下の記事を参考にさせていただきました。

Rails: SidekiqはActive Jobを経由せずに直接使おう(翻訳)

## はじめに
RailsアプリケーションへのSidekiqの導入手順は割愛します。
まず、Sidekiqを直接扱うパターンとは、以下のようにSidekiq:Workerモジュールを直接includeしたジョブクラスを定義した実装を指します。

“`ruby
class BackgroundJob
include Sidekiq::Worker
Sidekiq_options queue: “default”

def perform(id)
# 非同期実行したい内容
end
end
“`

一方で、Activ

元記事を表示

Slack/Teamsを利用して5万人向けの通知システムを作ってみた

この記事は [リクルート ICT統括室 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/recruit-ict) 3日目の記事です。

# はじめに
はじめまして!ICT統括室 WEBエンジニアリンググループの山川 良太です。
社内向けシステムの開発・ディレクションを担当しています。この記事では Slack/Teamsを利用して社内に通知するシステムを構築した時に得た知見やハマりポイントを共有します。

# この記事で伝えたいこと
– Slack/Teams通知の実装に利用するAPIについて
– Slack/TeamsのAPIで通知を実装する際に考慮した方が良い事

# 背景
毎日たくさん送られてくるメール。みなさんしっかり中身確認していますか?
・自分には関係ないメールばかり届く。「そんなメールきてた?」埋もれて気づかなかった。
・SlackやTeamsなら毎日業務で見ている。けれどメールはほとんど見ていない。
・個別メンション以外の通知は切っている。個人へメンションして欲しい。
必要な人に・いつも使っているツ

元記事を表示

GoでAPIサーバーを立てよう!(Ruby on Railsと比較しながら)

# 概要
Ruby on Railsしかバックエンド触ったことがない筆者がはじめてGoでAPIサーバーを立てた時、「Railsと比較しながら理解すれば理解しやすいのでは・・・!」と思いせっかくなら記事にしようと思い立って記事にした。

# まず最初に、RailsでAPIサーバーを動かすイメージを・・・
まず、RailsでAPIサーバーを動かす時、どうやって実装してサーバーを動かしていたかイメージします。
文字にするとこんな感じでしょうか。
1. rails sするとlocalhost:3000にサーバーが立ち上がる
2. routes.rbにルーティング(エンドポイントと対応するコントローラー, アクション)を定義する
3. コントローラーのアクションの中身を書く(DBの読み込み、書き込み、レスポンスの返却…etc)

GoでAPIサーバーを立てるときも基本的にやることは変わらず、この通り進めていけば問題ないです。

# じゃあ実際にGoでAPIサーバーを立ててみようか
んじゃ、実際にやってみましょう。

## 1. Goの環境を立ち上げる
railsでいうところのrails ne

元記事を表示

Rails6 で動的なセレクトボックスを作りたい(Stimulus x Axios編)

## この投稿は、

DMM WEBCAMP Advent Calendar 2023
シリーズ2 投稿3日目のエントリーです。

2日目も私 @tomoaki-kimura で
[Rails6 で動的なセレクトボックスを作りたい(JQuery編)](https://qiita.com/tomoaki-kimura/private/dc10a4d6eb367f128e6e)でした。
条件を絞り込みながら入力できる動的なフォームを作りました。

## はじめに
DMM WEBCAMP でメンターをやらせていただいております。 @tomoaki-kimura です。
Rails7のリリースから随分経ちますが、Rails6の環境もまだまだあります。
今回は、前回の記事で作ったフォームを [stimulus](https://github.com/hotwired/stimulus-rails) と [axios](https://github.com/axios/axios) で置き換えていきます。

## 環境
– Ruby 3.1.2
– Rails 6.1.4
– yarn 1.22.

元記事を表示

ShopifyのRubyスタイルガイド 日本語訳

https://ruby-style-guide.shopify.dev/

:::note
この記事は[DeepL](https://www.deepl.com/)の結果を編集したものです。修正点などはお気軽に編集リクエストをしてください。
:::

RubyはShopifyのメイン言語です。私たちは主にRubyを使用しており、おそらく最大規模のショップのひとつです。Rubyは新しいWebプロジェクトやスクリプティングのための言語です。

Shopifyではすべての開発者が少なくともRubyを一通り理解していることを期待しています。素晴らしい言語です。日々どのような仕事をしていても、より良い開発者になれるでしょう。以下に示すのはRubyでの開発中に従うべき緩やかなコーディングスタイルです。

このスタイルガイドはShopifyでの10年以上に渡るRuby開発の成果です。内容の多くはBozhidar Batsovの[Rubyスタイルガイド](https://github.com/rubocop-hq/ruby-style-guide)に基づいており、[多くのコントリビューター](htt

元記事を表示

DockerでRailsAPIモード/Next.jsの環境構築をして、Fly.ioとVercelへデプロイしてみた

## はじめに
**RUNTEQ Advent Calendar 2023**の3日目を担当させていただきます、清水と申します。
現在は、事業会社でコーダーをしながら、プログラミングスクールRUNTEQにて、Web開発の勉強をしています。
今回は、「**初めた学んだ技術**」というテーマということで、個人開発で使用するためにキャッチアップした技術構成での環境構築とデプロイ方法についてまとめてみようと思います。
具体的には、Dockerを使用して、Rails(APIモード)/ Next.jsの環境構築を行い、Fly.ioとVercelにデプロイを行う方法についてまとめています。
これから、この技術構成で環境構築などを行う方に向けて、少しでも参考になればと思います。
また、もしこの記事通りに環境構築・デプロイを行ってみたがエラーが発生してしまった場合や、解説のミスなどありましたらコメントいただけると幸いです。
## 使用技術
– Ruby 3.2.2
– Rails(APIモード) 7.0.8
– Next.js 14.0.3
– Postgresql 15.5
– Docker 24.0

元記事を表示

【Ruby on Rails】dependabotを設定しよう

# まえがき

本記事は、**[DMM WEBCAMP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/infratop)** 3日目記事です。

Ruby on Railsを中心に、DWCメンター・卒業生が記事を投稿しておりますので、是非他の記事もご確認ください!

# はじめに

こんにちは、DMM WEBCAMP メンターの @ukwhatn です。

昨日に引き続いての担当となりますが、今日はRuby on Railsにおけるdependabotの使い方について説明していきます。

# Depandabotとは?

Depandabotとは、GitHubが提供しているボットツールで、プロジェクトが依存しているパッケージ(Gemなど)の脆弱性やバージョンアップを自動で検知し、アップデートのためのPull Requestを自動作成してくれるものです。

また、非常に多くの言語やパッケージ管理システムに対応しており、Gemfileやpackage.jsonなどを読んで依存パッケージを解析してくれます。

使い

元記事を表示

ここがいいよねGraphQL

こんにちは。フリーランスで、主にRailsを使った開発の仕事をしている ymstshinichiro と申します。

直近約3年GraphQLの現場で仕事をしつつ、今年4月からはOpenAPIの現場でも並行で稼働しているのですが、両方を使ってみて個人的にGraphQLのここが良いなと思ったポイントをまとめてみました。

おことわり:
– 「これからGraphQLを使っていくべきか迷っている」という方へ向けた記事になったので、既にGraphQLをガンガン使いこなしている人には当たり前のことしか書いてないかもです
– あくまで僕の 好み・主観・経験 に基づく記事なので、その辺考慮の上で読んでいただけると助かります
– 記事中のサンプルコードはRailsで書かれています

# GraphQLを使うと自然にCQSに近づく
先日、YOUTRUSTさんが主催する[実際のproductionコードを見ながら会話する勉強会](https://tech.youtrust.co.jp/entry/2023/11/02/175316
) に参加した際に、**一般的なRailsの構造 (REST) を

元記事を表示

Railsの設計思想にハマッた話

こんにちは。エンジニア歴数カ月の駆け出しエンジニアのえくれあです。
業務での主な使用言語はJavaで、中〜大規模開発に従事しています。

Java以外の言語も学びたく、Ruby on Railsチュートリアルを学習中です。
普段触ることの多いSpring系のフレームワークと違うことが多くハマったので、ハマった理由と、どう調べ、どう落とし所をつけたか書いておこうと思います。

## ハマった理由
* RailsにおけるMVCの役割分担の仕方がよくわからなかった。
* Spring Bootではビジネスロジックは@Serviceを付与したクラスに書くことになっているので、RailsにはServiceクラス無いの?ビジネスロジックどこに書くの??と混乱した。
* データをオブジェクトとして保持するクラスはEntity/DTO/Formのように分けないのか?と思った。

## 解決のためにやったこと
* MVCや3層アーキテクチャについて調べる
* RailsとSpring Bootのアーキテクチャについて比較してみる
* オープンソースのRailsアプリのアーキテクチャを確認する
* Qii

元記事を表示

OTHERカテゴリの最新記事