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

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

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

元記事を表示

Rails5、Rails6、Rails7の主な特徴まとめ

# はじめに
この記事は、最新のRuby on RailsをキャッチアップしたいRailsエンジニアのアドベントカレンダー2日目です。

最新のRailsの動向を理解するためにまず、Ruby on Railsバージョン5以降の変遷について、その背景とともに整理してみます。
※注意 本記事には筆者の主観に基づいた意見や事実とは異なるかもしれない解釈が盛り込まれる可能性があります。

## Rails5
リリース時期: 2016年6月

### 時代背景
アプリケーション開発におけるリアルタイム機能の重要性が増していった時期だと記憶しています。
メールのような非同期なコミュニケーションではなく、TwitterやLINEのようなリアルタイムに情報が更新されるアプリケーションにユーザーが段々と慣れ始め、多くのアプリがそれに追随していきました。

また、アプリケーションのフロントエンドとバックエンドを分けて開発する今では当たり前の構成も、まだそんなにメジャーではなかったように思います。Railsでビューもサーバ機能も全て作る「モノリス」と呼ばれる形で開発してきたIT企業が、React + Rai

元記事を表示

Rails Consoleを読み取りで開く方法

rails console –sandbox

元記事を表示

Ruby on Rails 7.1の主要な新機能・機能追加・変更点

## はじめに

Rubyを使用したOSSのWebアプリケーションフレームワーク、Ruby on Rails(以下Rails)の最新バージョンである7.1(以下Rails 7.1)が[2023年10月5日にリリースされました](https://rubyonrails.org/2023/10/5/Rails-7-1-0-has-been-released)。

Rails 7.1はデプロイ用のDockerfileの自動生成、複合プライマリキーのサポート、Active Recordの非同期クエリの機能追加、Trilogy MySQLアダプタのサポートなど、多くの機能追加が行われました。

本記事では、[Railsの公式ブログ](https://rubyonrails.org/blog/)や[Railsガイド](https://edgeguides.rubyonrails.org/active_record_encryption.html)、GitHubのRailsプロジェクトの[Issues](https://github.com/rails/rails/issues)や[Pull Req

元記事を表示

Rails 入力した値をその通り保存できなかった時に、ログを確認して学んだこと!

## バージョン
– ruby 3.2.2
– Rails 6.1.7.6
————————-

スクールの課題でタスク管理アプリを作成中、先に`name`と`content`のカラムを作ってあり、後で、`timelimit`(終了期限)のカラムを追加した。後からカラムを追加すると、既に保存してあるデータベースについては、後から追加したカラムの値が`nil`となってしまいエラーになってしまうので、デフォルト値を設定した。
### しかし、新規投稿しても、終了期限が、デフォルト値で設定してある「今日」になって登録されてしまう!!なぜだ!!

![スクリーンショット 2023-12-01 10.32.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566175/9e18e723-f2dd-7fab-16c1-9d5304bf224d.png)

`schema.rb` の中身はこんな感じ↓
“`schema.rb
create_table “tasks”, for

元記事を表示

Rails アプリの webpacker を shakapacker に移行した

[webpacker]:https://github.com/rails/webpacker
[shakapacker]:https://github.com/shakacode/shakapacker
[webpack]:https://webpack.js.org/

[ツクリンク プロダクト部 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/tsukulink) の2日目です。

# 概要

[webpacker][webpacker] はもうメンテナンスされないので [shakapacker][shakapacker] に移行した。手順通りやればうまくいくけど、ハマったポイントもある。

# [webpacker][webpacker] はもうメンテされない

> Webpacker has been retired 🌅

[webpacker READMEより][webpacker]

[webpacker][webpacker] はもうメンテナンスされません。最後のコミットから1年くらい経っていて、

元記事を表示

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

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

1日目は @yuki82511988 さんで
[【Ruby】+ と<<で配列の要素を追加した時の話](https://qiita.com/yuki82511988/items/496e69158086bbe2c33c)でした。 Rubyは詳しければ詳しい程幸せになれますね。 ## はじめに DMM WEBCAMP でメンターをやらせていただいております。 @tomoaki-kimura です。 Rails7のリリースから随分経ちますが、Rails6の環境もまだまだあります。 ということで、今年の寄稿はRails6で改めて動的なフォームの処理に触れてみたいと思います。 ## 環境 - Ruby 3.1.2 - Rails 6.1.4 - yarn 1.22.18 ## 作るもの [![Image from Gyazo](https://i.gyazo.com/68f2fe8778990ddf75eed13579d57419.png)](http

元記事を表示

RailsアプリをCloud Runにデプロイする最短手順 2023

株式会社エイチームフィナジーの@okonomiです。
この記事は[Ateam Finergy Inc. × Ateam Wellness Inc. Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ateam-finergy-wellness)の2日目の投稿です。

普段の業務ではCloud RunにRailsアプリをデプロイして運用しています。
検証のためにテストアプリを作ってCloud Runにデプロイすることがときどきあって、毎回調べながらやってる気がするので最低限の手順をまとめておこうと思います。

今後のアップデートで手順が変わるかもしれないので2023年版としています。

:::note warn
今回デプロイするアプリは手順をシンプルにするためアクセス制限を設けていません。URLが分かれば誰でもアクセスできます。公開してはいけない情報を含めないようにしてください。
:::

# 環境など

いずれも記事作成時点での最新バージョンです。

– Ruby 3.2.2
– Rails 7.1.2
– Goo

元記事を表示

FormObject 複雑な検索機能のカプセル化

## はじめに
チーム開発で学んだことや、アプリ開発を通して調べたこと、実装手順、またプログラミングスクールで学習した内容をまとめています。

今回は、複雑な検索機能を実装する際にFormObjectについて調べたことをまとめます。

# FormObjectとは
FormObjectとは、`form_with`のmodelオプションにActive Record以外のオブジェクトを渡すためのデザインパターンです。このパターンは、データベースと直接関係のないフォームや複数のモデルを扱うフォームを作成する際に、処理をすっきりと記述することができます。

# FormObjectにおけるカプセル化とは
フォームに関連するデータとロジックを一箇所にまとめて記述することでコードを効果的に管理し、アプリケーション全体の構造とコードの品質を向上させることができる重要な手法です。これにより、より維持しやすく、拡張しやすいコードを書くことができます。

## メリット

説明

【Ruby on Rails】Railsをdocker-composeで動かすときのミニマムな構成

# まえがき

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

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

# はじめに

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

私は業務/プライベートの双方でRailsを書いているのですが、
特にRails7について、Docker(docker compose)で動かすための構成を調べてもあまり情報がなく、頭を抱えたことが何度かあります。

テンプレートリポジトリとしてRyan Williamsさんの[rails7-on-docker](https://github.com/ryanwi/rails7-on-docker)などはありますが、全部盛りすぎて少々使いにくい部分も….

そこで今回は、私が個人的に構築したRails7をDockerで動かすためのテンプレートリポジトリを紹

【Rails】DBのdate型とdatetime型を型変更したときの値の変化

# はじめに
Ruby on Railsの開発では、日付や時間情報を扱う際に、date型やdatetime型を使うことが多いです。
その時に、date型からdatetime型、datetime型からdate型に型変更したときにタイムゾーンによって値がどのように変更されるのかを残します。

# 前提
– Ruby on Rails:7.0
– PostgreSQL:14.9 (MySQLでも同様の結果になると予想されます)
– **アプリケーション側(Rails)のタイムゾーンはJSTで、DBサーバ(PostgreSQL)のタイムゾーンはUTC**

# カラムの型をdate型からdatetime型に変更する
DBのカラムの型をdate型からdatetime型に変更すると、どうなるのでしょうか。

今回は例として、ユーザの誕生日に時間情報を追加したいと思います。(自分の誕生時間を知ってる人がいるかは置いておきます)

usersテーブルとbirthdayカラムを作成します。
“`
create_table :users do |t|
t.date :birthday
end
`

【Rails】ActiveStorageでvariantを行うと画像が表示されない問題を解決する

現象としてlocalhost:3000/items/:idで実装している機能の動作確認を行っていたところ、variantを指定して表示したいんだけど非表示になってしまっていた。
![スクリーンショット 2023-11-26 22.45.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532739/02837960-4253-4832-af62-f6132dcee2ab.png)

# 原因:minimagickを明示的に指定していなかった

Gemfile.lockを確認するとmini_magickがちゃんとインストールされていることがわかりました。

問題はvariantを利用するためにmini_magickを明示的に指定していないことが問題なようです。

参考URL

[https://zenn.dev/iloveomelette/articles/76aad4d9ce86d1](https://zenn.dev/iloveomelette/articles/76aad4d9ce86d1)

Rails フラッシュメッセージの表示

## はじめに
RUNTEQへ入学して2ヶ月の学習者です。何かあった際、コメントもらえると助かります!
## 1.なぜこの記事を作ろうと思ったか
何気なく使っていたが、flashが何なのかと疑問に思った、flashの中身が気になった為。
## 2.環境
– ruby 3.2.2
– Rails 7.1.2
## 3.フラッシュメッセージとは
リクエスト毎にクリアされる仕組みがある。使用しているユーザーへ向けて、何かアクション後、一時的にメッセージを表示させたい時に使用する。一時的に表示させるというのが重要。
## 4.前準備
以下のように作成。コードを見やすく、シンプルにしたくて最低限のものを記述。
“`ruby:マイグレーションファイル
class CreateUsers < ActiveRecord::Migration[7.1] def change create_table :users do |t| t.string :name, null: false t.timestamps end end end ``` ```rub