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

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

【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

元記事を表示

Cloudfront→Nginx→Railsアプリ構成での考慮点について

## 背景
* 私がAWS上で運営している個人サービスはサーバ証明書をAWS Certificate managerから発行しているのですが、このサーバ証明書は、一般的にはロードバランサー(LB)やCloudFrontといったAWSのマネージドサービスと併用する必要があります。[※出所](https://repost.aws/ja/knowledge-center/configure-acm-certificates-ec2)

* LBは個人サービスとしては少しコストが高いため、前段にCloudfrontを置き、オリジンサーバとしてEC2を設定する構成にしています。

本記事は、その構築にあたり考慮すべき点を備忘録として記録するものです。

### End To EndでのHTTP(s)通信の流れまとめ

`ブラウザ (https) → CloudFront:443 → (http) → EC2{ Nginx:80 → (http) → Railsアプリ:3000}`

## 考慮点①:オリジンサーバ(EC)のパブリックIPが判るとCloudfrontを経由せず通信できてしまう問題

元記事を表示

Railsで、グルーピングしたDBレコードを1クエリで取得するscope

# 動機
特定カラムが同じレコードを、そのどれでもいい一つのみを代表して重複を一つにまとめ、レコードと対応するインスタンスとして取得する…というクエリを組むとき苦労したので備忘録です。
当初distinctメソッドを利用してみようとしていましたが、primary_keyが取得できず(selectメソッドにidを組み込むと、idが異なることで重複していないとみなされるため)、レコードと対応するインスタンス化できませんでした。
特定カラムのみをselectしてdistinctすると、idがnil、カラムがまとめた値、という形になります。

distinctの参考:

https://qiita.com/toda-axiaworks/items/ad5a0e2322ac6a2ea0f4

上記記事の`distinctはselectしなくても問題ないか?`のような操作がやりたかったイメージです。

# グルーピングという解決策
以下の記事を参考に、解決に一歩近づくことができました。
`parent_hoge_id`カラムでグルーピングして、グループごとに最大のIDの1レコードを取得していま

元記事を表示

Everyday Rails – RSpecによるRailsテスト入門を読んで

# はじめに
Everyday Rails – RSpecによるRailsテスト入門を読了したので、良かった部分や学んだ部分についてまとめようと思います
# 良かったところ
* 章の組み立てがわかりやすい
* テストの内容・説明→まとめ→章末問題という流れ
* 最初、基礎的なテストの仕方を説明して、後の章で今回言うとFactoryBotを使って説明していて理解しやすい
* Rails5ではなくRails7で書かれていること
* Ruby on Railsの教材の中でRails7の内容を書かれているものはあまり多くない印象です
* 今後バージョンが上がった際も対応していただけそうな雰囲気を文章から感じました
# 学んだところ
### RSpec のセットアップ
* Gemfile

* “`ruby
group :development, :test do

gem ‘rspec-rails’ #追加

end
“`
に記述して “bundle install“実行
* テストデータベース
confi

元記事を表示

【Rails】gem geocoderを使用する際のバリデーションについて

## はじめに
こんにちは、なかじ(@nakayama-bird)と申します。
現在、プログラミングスクールに通ってRuby on Railsを学習しております。

:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りのある場合がございます。
もし間違いがあればご指摘いただけますと幸いです。
:::
## 記事の概要
現在、ポートフォリオの作成をしております。
地図上で投稿した場所が表示されるように住所から緯度・経度の座標を取得する際に、モデルでの設定でつまづいた箇所についてまとめてみました。
## 環境
– Rails 7.1.3.4
– gem geocoder
– Google Maps API(Geocoding API)
## gem geocogerの導入・設定方法
### 1. 導入に至った経緯
今回のアプリケーションではユーザーがある場所を投稿して、それを地図上にピンで表示するという機能を実装しています。ピンで表示する際、緯度・経度の情報が必要になるのですが、それをユーザーに直接入力してもらうのは現実的でありません。そのため、住所から緯度・経度

元記事を表示

sql_mode=only_full_group_byとは?

# Mysql2::Error: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ’sample_test.parent.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (ActiveRecord::StatementInvalid)

>Mysql2::Error: SELECT リストの式 #1 が GROUP BY 節になく、GROUP BY 節の列に機能的に依存しない非集約列 ‘sample_test.parent.id’ を含んでいます。
これは sql_mode=only_full_group_by (ActiveRecord::StatementInvalid) と互換性がありません。

出典 deepl

## 自分の訳
SELECTの表現

元記事を表示

【Rails・slim】link_toについて

# 概要
link_toがわからない人に届いて欲しい ※slim記述
[ドキュメント](https://railsdoc.com/page/link_to)に大体書いてあります。

# link_toとは
`ハイパーリンク(hyperlink)`[^1]を生成するへルパーメソッド
RailsではHTMLのaタグを生成してくれる

[^1]:**ハイパーリンク(hyperlink)**
・文書データに埋め込まれている他ページの参照情報

**ハイパーテキスト(hypertext)**
・ハイパーリンクの情報を参照して別のページに移動する仕組み

上記2つを合わせてWEBページに関係性をもたせる。
HTMLは『**HyperText Markup Language(ハイパーテキスト・マークアップ・ランゲージ)**』の略

# 使い方
以下のように記載します
~~~html
<%= link_to "表示名", "URL or パス" %>
~~~
・slimの場合
~~~slim
= link_to “表示名

元記事を表示

「RailsでさくっとWebsocketする」を実践してつまずいたとこまとめてみた

# 経緯
[Rails7でさくっとWebSocketする](https://zenn.dev/seita1996/articles/rails7-actioncable#controller%E3%81%A8view%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B)を実践している中で躓いたところがいくつかあったので、まとめてみました。
# localhostアクセスできない問題
– 原因
データベースに接続できていなかった
– 解決法
接続する前にコンテナに入り(`docker-compose run app sh`)、以下を実行することでアクセスできるようになった
“`sh
rails db:migrate
“`
# チャットがリアルタイムで更新されない。
– 原因
broadcastメソッドの引数指定がおかしかった。
“`Ruby
# 間違い
ActionCable.server.broadcast ‘room_channel’, message: render_message(message)
# 正解
ActionCable.se

元記事を表示

オリジナルアプリ(ウォンツ)の制作過程〜テーブル設計〜

## はじめに

こんにちは、今日もオリジナルアプリの制作過程を記録していきます。今日は要件定義についてです!
このシリーズの記事では、企画・要件定義から設計、実装、テストまでの全てのプロセスを詳細に説明します。毎日少しずつ進めていきますので、アドバイスや指摘があればぜひ教えてください。

今日はテーブルを設計して見ました。

# テーブル設計

## users テーブル

| Column | Type | Options |
| —————— | —— | —————————— |
| name | string | null: false |
| email | string | null: false, unique: true |
| password_confirmation| string | null: false

元記事を表示

【Rails】【Ruby】Fileクラスのwriteメソッドとbinwriteメソッドについて

Rails初学者のアウトプット兼備忘録です。
間違いや補足等あればご指摘いただけると幸いです。

今回はFileクラスのwriteメソッドとbinwriteメソッドについてまとめます。

# そもそもFileクラスとは?
Rubyでファイルを扱うには、Fileクラスを使う必要があります。
Fileクラスに対してメソッドを指定することで、ファイルの作成や書き込み等行うことができます。
Fileクラスにも様々なメソッドがありますが、今回はwriteメソッドとbinwriteメソッドに限定して違いなどをまとめます。

# writeメソッドとbinwriteメソッドの違い
まず、writeメソッド、binwriteメソッド共にファイルにデータを書き込むメソッドです。
違いとしては、文字列を書き込むか、バイナリーデータ(画像や音声などの非テキストデータ)を書き込むかというところです。

**writeメソッド-ファイルに文字列を書き込むのに適している
binwriteメソッド-ファイルにバイナリーデータを書き込むのに適している**

# 使い方

“`controller.rb
File.

元記事を表示

OTHERカテゴリの最新記事