Rails関連のことを調べてみた2022年12月15日

Rails関連のことを調べてみた2022年12月15日

Railsにおけるアソシエーションについて整理する

# アソシエーションとは、モデルを利用したテーブル同士の関連付けのことである。
アソシエーションをモデルに定義することで、そのモデルに紐づく別のモデルの情報へアクセスできるようになる。

## 1:1または1:多の関係
例としてTwitterのようなアプリを作成することを仮定してテーブル同士についての関係性を書いてみる。
### has oneの関係
例1
![スクリーンショット 2022-12-15 10.42.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884270/9c4572ec-3101-f9a7-d4f1-c4a5d137e9c3.png)
上記の状態のときusersテーブルAさんはtweetsテーブルに対して一度しかツイートを投稿できないとする。
つまり、usersテーブルからみて、tweetsテーブルは **「1:1」** の関係になり、このことを、**has oneの関係**といい、「User has one Tweet」の状態であると言える。
これは1:1の関係を表している

元記事を表示

Rubyではpという変数名をなるべく避ける

Rubyプログラミングの小ネタです。

Rubyに限らずプログラミング全般の慣習として、寿命の短い変数の場合、意図的にそのオブジェクトを表す名前の頭文字1文字だけにすることがよくあります。

“`ruby
books.map { |b| b.title }
“`

しかし、Rubyではその場合でも`p`だけはなるべく使わない方が良いです。

“`ruby
# 問題なく動くがあまり望ましくない
people.map { |p| p.name }
“`

それはなぜか?`Kernel.#p`メソッドと名前が被ってしまうからです。

https://docs.ruby-lang.org/ja/latest/method/Kernel/m/p.html

もしデバッグで`p`メソッドを使いたくなったりすると、途端にコードがわかりにくくなります。

“`ruby
# pメソッドでp.nameをターミナルに表示する(?)
people.map { |p| p p.name }
“`

Rubyは懐が深い言語なので、実は上のコードもちゃんと動きます。
気になる方は以下のコードをir

元記事を表示

better_errors 導入で Rails のデバッグを快適に!

# 概要

皆さんは `Rails` での開発の際にどのようにデバッグを行っていますか?
`puts` コマンドで確認、`byebug`、`pry` などのデバッグツールを利用する等々、方法があると思います。

今回は上記と並んでデバッグの効率を上げてくれる `better_errors` という `gem` をご紹介します。

# better_errors とは?

## どんな gem ?

`Rails` のスタンダードのエラー画面をもっと見やすく、便利なエラー画面へと変更してくれる機能になります。

https://github.com/BetterErrors/better_errors

## 動作サンプル

`Rails` のデフォルトエラー画面を見てみましょう。

– **Before**

![a4b09b13-d04e-ac35-7e50-227b9dda9139.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952780/928e3995-33c7-7ab5-e22c-1

元記事を表示

gem ‘rspec-openapi’ を紹介したい

# はじめに

Request specからいい感じのOpenAPIドキュメントを作ってくれるgemのご紹介です。
バージョンアップで動作が変わることもあるので最新の情報はREADMEを参照してください。

https://github.com/exoego/rspec-openapi

## 検証環境

“`
Rails : 7.0.4
rspec-openapi : 0.7.2
“`

## インストールと実行

1\. インストール

testでしか使わないので `group: test` に追加すると良いでしょう。

“`ruby
group :test do
gem “rspec-openapi”
end
“`

2\. 実行

rspecの実行に `OPENAPI=1` を追加するだけです。

“`bash
OPENAPI=1 rspec
“`

オプションがついているだけでrspecの実行に変わりないのでファイル指定やオプションはそのまま使えます。
試していませんがCIで生成させても良いと思います。

“`bash
OPENAPI=1 rspec spe

元記事を表示

Rake is 何?

## Rakeって何?

RakeはRubyのタスクランナーです。“`make“`のRubyバージョンのようなものだと思います。

https://www.creatology.jp/unix/make.html

都度、実行する必要があるようなタスクをrakeを使って管理することができます。
Railsでマイグレーションを行う時には“`rails db:migrate“`を実行すると思いますが、“`rake db:migrate“`でも同様の結果を得られます。

## Ruby単体での使い方
“`terminal
gem install rake
touch Rakefile
“`

“`Rakefile.rb
task :sample do
puts “sample”
end
“`
上記のように定義した場合、以下のように呼び出すことができます。
“`
rake sample
“`
また、命名においてバッティングが起こる可能性があるため名前空間を使うことができます。
“`Rakefile.rb
na

元記事を表示

Stimulus 5: 状態の管理

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/handbook/managing-state

最新のフレームワークのほとんどは常にJavaScriptで状態を維持することを推奨しています。それらはDOMを書き込み専用のレンダリングターゲットとして扱い、サーバーからJSONを消費するクライアント側のテンプレートによって調整されます。

Stimulusは別のアプローチを取ります。Stimulusアプリケーションの状態はDOMの属性として存在します。コントローラー自体はほとんどステートレスです。このアプローチにより最初のドキュメント、Ajax リクエスト、Turboへのアクセス、さらには別のJavaScriptライブラリなど、どこからでもHTMLを操作できるようになり、明示的な初期化手順を行わなくても関連するコントローラーが自動的に起動します。

# スライドショーの作成

前の章では要素にクラス名を追加することでStimul

元記事を表示

JSON Schema の力でより安全に React on Rails 出来るようにする

この記事は [Qiita株式会社 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/qiita-inc)
の 15日目の記事です。

Rails プリケーションの View として React を用いるライブラリとして、[React on Rails](https://github.com/shakacode/react_on_rails) があり、Qiita 社のプロダクト開発でも広く利用している便利なライブラリなのですが、複数言語をまたぐ故の動作検証等の難しさがあります。
この難しさを解消するために、View を介して言語間で伝搬する情報に JSON Schema でスキーマをあてたという話を書きます。

(今回のアイデアは、Qiita 社の各種プロダクトで実際に利用されており、 [JsonSchemaView](https://github.com/increments/json_schema_view) として OSS として公開しています。興味があればぜひそちらも参照してください。)

https:/

元記事を表示

RuboCopとは?

# はじめに
RuboCopとは、どのような機能でコードを書いている中で何をもたらしてくるのかが気になったのと単純にアプリを作成中に導入はしたけど理解はできてないと思い記事にして整理しようと思いました。

## RuboCopとは?
Rubyのコードがコーディング規約に沿っているかを確認できる「静的コード解析ツール(コーディングチェックツール)」の1つです。ソースコードの品質を保つためにこのRuboCopを実行し修正を繰り返すようなことを行っていきます。
このコーディング規約は自由にカスタマイズすることが可能です。

### 主にチェックするソースコード
・インデント
・文字の長さ
・メソッド内の行数
・条件式の見やすさ
・”か””での表記の仕方
他にもありますが主に上記のようなソースコードをチェックしています。チェックした後に警告のあるものは、綺麗なコードの書き方を教えてくれます。

## RuboCop インストール
RuboCopを導入するためのgemをgemfileに追加します。
“`ruby:gemfile
group :development, :test do
ge

元記事を表示

【個人開発】絵本を検索して図書館で「貸出可能」か確認できるサービスを作ってみた

この記事はadvent calendar 2022 15日目のものです。

こんにちは。ザキと申します。プログラミングスクールの「RUNTEQ」でRuby on Railsを中心に学習しています!

この記事では、私が作成した [図書館情報を表示する絵本検索サービス「Kariteyomu」](https://www.kariteyomu.net) と、その使用技術について紹介させてください。

https://www.kariteyomu.net/

# 開発の背景
私には小さな子供がおり、頻繁に図書館で絵本を借りて読み聞かせをしています。
読み聞かせをすることで、子供と一緒に笑ったり、興味があることを追求したり、親子のコミューケーションもとっています。

一方で子供の興味が年齢やタイミングで移り変わることもあり、最適な絵本を探すことには苦労しています。

**特に図書館で絵本を借りるのは難しい。なんでこんなにハードモードなんだ!!と心の中で叫んだのは私だけではないはずです!**

**サクッと絵本を検索できて、図書館の貸出情報を表示できるサービスがあれば楽になりそうだ!

元記事を表示

RailsがJSONをレンダーするときに何が起きているのか

# はじめに

この記事は[Ruby on Rails Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ruby-on-rails)の14日目の記事です。

## 概要

この記事ではRailsの`render`メソッドを読み、内部で何が起きているのかを理解していきます。

## 動機

私は個人で[Alba](https://github.com/okuramasafumi/alba)というJSONシリアライザを開発しています。その際、Railsの機能に合わせて以下のような動作をさせるように[しました](https://github.com/okuramasafumi/alba/pull/252)。

“`ruby
render json: FooResource.new(foo)
“`

これは

“`ruby
render json: FooResource.new(foo).serialize
“`

と同じ挙動になっています。

なぜこうなるのか?をまとめるのがこの記事の目的です。そしてその目的

元記事を表示

RubyonRailsチュートリアル:実践メモ

Ruby on Rails チュートリアル(Webサービス開発が学べる学習サービス)に従って、MVCフレームワークアプリケーションを作成していく。

**使用ツール** :
AWS Cloud9
### 【AWS Cloud9】
新しくターミナルを開く方法
1. タブバーの **+** ボタンをクリック
1. メニューの中からNew Terminalを選ぶ
※もしくはalt + t

元記事を表示

Gemのインストール方法いろいろ

通常とは違うGemの読み込み方法を3つほどまとめました。

1.ブランチ指定してGemを読み込む方法
2.プライベートリポジトリにしているGemの読み込み方法
3.ローカルのGemを読み込む方法

の3つです。

## 1.ブランチ指定してGemを読み込む方法

“`ruby
gem ‘gem名’, git: ‘gitのパス’, branch: ‘ブランチ名’
“`

## 2.プライベートリポジトリにしているGemの読み込み方法

### ①GitHubでpersonal access tokenを取得する。
### ②それを環境変数に設定する
.envに記述。もしくはLinuxの環境変数に直接設定。

“`ruby
GIT_ACCESS_TOKEN=”発行されたトークン”
“`
### ③Gemfileのgemのインストール先をプライベートgemにする。

“`ruby
gem ‘gem名’, git: “gemのパス”
“`

### ④以下のコマンドでbundle installを実行する。

“`bash
BUNDLE_GITHUB__COM=$GIT_ACCE

元記事を表示

Railsシルバーってどんな問題が出るの?

はじめまして!
リンクアンドモチベーションの新卒エンジニアの葛葉(くずば)です。

# 初めに
入社してから、
「全体研修3ヶ月」 -> 「プログラミング研修3ヶ月」 -> 「配属されて3ヶ月」
と、泣いたり笑ったり苦しんだりしながら学びの多い日々を過ごしてきました。

現在は、営業する上で必要なデータをSQLを書いて出す作業や、簡易なバックエンドの実装(Ruby on Rails)などの業務を行っています。

しかし、2つ目のバックエンドの実装業務では、研修では全く学んでいない内容がたくさんあり、分からないことばかりです。。。

そこで、メンターと相談して、Rails4技術者認定シルバー試験(Rails Silver)を受けることにしました。

よく使われる公式問題集を中心に勉強を進めているので、
その中で解いてきた問題に類似した問題を2つ作成したので、紹介したいと思います。

ぜひ、何も見ずに解けるか試してみてください!!

# 問題
## 問題1
Active Recordを使用し、次のようなモデル定義を行なっている。
“`# app/models/sport.rb
class

元記事を表示

Railsにおける途中経過の確認

## pry
Railsではpryを使うことによって、プログラムを一時的に止めることができます。
一時的に止めることによって何が嬉しいのかというと、途中経過をみることができます。

大抵の場合、バックエンド側でデータを取得してクライアント側に渡すと思いますが、このデータがどこまで持ってこれているのかだったり、そのオブジェクトが思うような状態になっているのかの確認をクライアント側に来て初めてするのでは効率が悪いです。
プログラムを途中で止めることによって、その時点でのデータやオブジェクトの状態を確認することができます。

“`pry-rails“`をGemfileに追加し、“`bundle install“`します。
止めたい場所に、“`binding.pry“`を追加することによって一時的に止めることができます。

“`user.rb
class User < ApplicationRecord def publish_post binding.pry user.posts.create(title:

元記事を表示

Stimulus 4: レジリエンスのための設計

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/handbook/designing-for-resilience

クリップボードAPIは[現在のブラウザーで十分にサポート](https://caniuse.com/#feat=clipboard)されていますが、古いブラウザーでアプリケーションを使用している少数の人々がまだいると予想される場合があります。

また、アプリケーションへのアクセスに時々問題が発生することも想定しておく必要があります。たとえば、断続的なネットワーク接続またはCDNの可用性により、JavaScriptの一部またはすべてが読み込まれない可能性があります。

古いブラウザーのサポートは無駄だと片付けたり、ネットワークの問題を更新後に解決する一時的な不具合として片付けたりするのは魅力的です。しかし、多くの場合でこの種の問題に対して適切に回復力のある機能を構築することは自明のことです。

プログレッシブエン

元記事を表示

Rails7の環境構築のメモ

# はじめに
Rails6入門書籍参考にしながらRails7入れようとしたら詰んだのでメモを残します。

環境構築あるあるですが
30分くらいかなと思ったら謎に詰んで1.5時間ももってかれました。

# 環境
Windows11 Home 22H2
※私用PCでプログラミングしたことなかったので、初期で入ってるものなし。

# 1. インストール
#### Ruby 3.1.3 (2022/12最新)
サイトから最新を入手してインストール
https://rubyinstaller.org/downloads/

#### MSYS2
rubyインストール後に自動で起動
書籍にはなかったので雰囲気でMSYS2 →1を選択 (+MINGWの3を選ばなかった)

#### Rails 7.0.4 (2022/12最新)
“`> gem install rails“`
最新をインストール

ここからエラー祭り。



#### エラー①
> rails No such file or directory – git config init.defaultbranch

Rai

元記事を表示

【Rails】で、結局 params[:id]って何なん

この投稿は、
[DMM WEBCAMP mentor Advent Calendar 2022](https://qiita.com/advent-calendar/2022/infratop_mentor)
の投稿13日目のエントリーです。

12日目も 私で
[【Rails】gemを使わずに 楽天Apiを動かしてみよう:後編【ハンズオン】](https://qiita.com/tomoaki-kimura/items/eb8faf554f8c398954ac)

## 環境と前提

– ruby 3.1.1
– Rails 6.1.7

## Railsでアプリを作る

### 準備

準備は、 `rails new` をやる準備が整っている前提で進めていきます。

“`bash:bash
$ rails _6.1.7_ new routes_test
“`

でアプリを作成します。

もし、この時点で、

“`
can’t find gem railties (= 6.1.7) with executable rails (Gem::GemNotFoundException

元記事を表示

「Ruby on Rails」Sidekiqジェムを紹介する

概要:
・Sidekiq は、Rails アプリケーションでバックグラウンド ジョブを実行するための gem です。
・Sidekiq は、マルチスレッドと Redis を使用して複数のジョブを同時に処理します。
・Redis は、ジョブをキューに格納するためのデータベース ストアとして理解されます。

コンフィギュレーション:
Sidekiq:
Gemfile に次の行を追加します: gem “sidekiq”

次に、bundle install を実行します

Redis:
次のリンクに従って Redis をインストールします: https://redis.io/topics/quickstart

ファイル config/initializers/sidekiq.rb で Redis に接続するように Sidekiq を構成します。

Sidekiq.configure_server do |config|
config.redis = {
url: “redis://127.0.0.1:6379/12”
}
end

元記事を表示

rails s(rails server)でエラーENOENTが出た件

前提です

railsを導入して、rails sやろうと思った矢先に出たエラーです

初歩的すぎるのか、ネットで調べても出なかったので、載せようと思います。
初心者でつまずく人もいるんじゃないでしょうか。

問題点

アプリケーション内でrails sを起動してもエラーが出てしまう。

以下、環境

OS:Windows11
Ruby:3.1.3p185 (2022-11-24 revision 1a6b16756e) [x64-mingw-ucrt]
Rails:7.0.4

以下エラーコード

“`題名

C:\Users\user\sample_app>rails s

C:/Program Files/Ruby31-x64/lib/ruby/gems/3.1.0/gems/railties-7.0.4/lib/rails/app_loader.rb:53:in `exec’: No such file or directory –
“C:/Program Files/Ruby31-x64/bin/ruby.exe” (Errno::ENOENT)

元記事を表示

Docker で Rails と OpenSearch を連携させる【環境構築】

# はじめに

docekr-composeを使ったRailsアプリケーションにて
OpenSearchを利用するための開発環境 構築手順をまとめます。

## 方針

下記2点の理由から、gem `elasticsearch-rails` を使ってRailsとOpenSearchを連携させます。
– rubyとopensearchを使ったクライアントは2022/12/11時点では公式に存在しない
– OpenSearch1系はElasticSearchの7.10をサポートしている

# 実行環境

“`config: バージョン情報
Docker: 20.10.14
docker-compose: 1.29.2
ruby: 2.7.6
rails: 6.0.5
OpenSearch: 1.3.6
“`

## 前提

– docker-composeでrailsが構築できていること
– 検索として扱うModelが存在し、レコードを持っていること
– 今回は例として`Book`Modelを使用

# 開発環境の構築

## OpenSearchをdocker-compo

元記事を表示

OTHERカテゴリの最新記事