- 1. 【Rails・デザパタ】マイグレーションで学ぶCommandパターン
- 2. bundle install実行時に”An error occurred while installing pg (1.5.6), and Bundler cannot continue. “って出る時
- 3. 【Rails】ネストされた関連オブジェクトのレンダリング問題とその対処法
- 4. Ryby/Ruby on Railsを習得するためにやったこと まとめ(随時更新)
- 5. GitHub Actionsを活用して自動デプロイを導入する方法
- 6. 最適なデータベース設計とは
- 7. Dart Sass for Railsのビルドオプションの設定方法
- 8. Railsのおすすめボイラープレート
- 9. ActionController::Redirecting::UnsafeRedirectErrorが出た時の対処法
- 10. Webフレームワークを集めたDockerComposeを作ってみた
- 11. rails testしたら “Migrations are pending. …” とか出る
- 12. 【Railsチュートリアル】第11-14章 まとめ
- 13. 【Railsチュートリアル】第6-10章 まとめ
- 14. 【Railsチュートリアル】第1-5章 まとめ
- 15. 【Progate】Ruby on Rails 5 まとめ
- 16. 【RSpec】先輩のテストの書き方が美しかったので真似できるようにメモ
- 17. 【Rails】テーブルのリレーションを柔軟に設定する
- 18. RailsプロジェクトにGitHub Actionsを導入する方法(Rspec, Rubocop)
- 19. Dockerコンテナ間のAPI通信でハマった話 – host.docker.internalの存在
- 20. find_or_create_byメソッドについて
【Rails・デザパタ】マイグレーションで学ぶCommandパターン
## Commandパターンとは
Commandは「命令」という意味で、「命令」をオブジェクトに表したデザインパターンです。命令オブジェクトごとにステータスを保持されることで、複数のコマンドの履歴管理や、複数の命令をまとめて実行・ロールバックすることが容易になります。## Rails の ActiveRecord での Commandパターン
`Rails` の `ActiveRecord` のマイグレーション機能ではテーブルを追加したり、カラムの変更を行うことができます。本来はSQLを直接実行することでDBに変更を加えますが、マイグレーションは専用のスクリプトファイルを用意し、それを実行します。## マイグレーションの基本動作
マイグレーションファイルの作成はコマンドで実行することができます
“`terminal
rails generate model Cat name:string age:integer
“`“`db/migration/20240315_create_cats.rb
class CreateCats < ActiveRecord::Mi
bundle install実行時に”An error occurred while installing pg (1.5.6), and Bundler cannot continue. “って出る時
## 概要
“`
$ rails new アプリ名 –database=postgresql
“`
や
“`
$ bundle install
“`
などを実行した際にタイトルのエラー文に遭遇しました。エラー文からわかる通り、「Railsのposgresql用のgemをインストールしている最中にエラーが発生しました」ということだとは思うのですが、ネット記事などで似たようなケースがあまりなく、類似の記事でも原因が自分のケースと全然違うようだったのであまり参考にならなそうですが自分のケースを備忘録的に書いてみました。
## やったこと
“`
$ brew services list
“`
で
mysql none
postgresql@14 started
と表示されていたので、動いている状態でした。##### 最初から確認してみた
pg_config –version などのコマンドを実行して、PostgreSQLがインストールされているかを確認します。
“`
$ pg_config –version
=> PostgreSQL 14.11(Home
【Rails】ネストされた関連オブジェクトのレンダリング問題とその対処法
## 概要
`Rails` で `API` を開発する際に、`ActiveModelSerializers` のバージョン `0.10.x` を使用しているとネストされた関連オブジェクトをレンダリングできないという問題に直面しました。この問題は、`render` メソッドで `include` オプションを明示的に指定することで解決できます。
## 原因
`ActiveModelSerializers` のバージョン `0.10.x` では、デフォルトでネストされた関連オブジェクトの自動レンダリングがサポートされていません。これにより、期待通りにネストされた `JSON` を返却するために追加の手順が必要になります。
## 対処法: `include` オプションの使用
期待通りにネストされた `JSON` レスポンスを生成するためには、`render` メソッド内で `include` オプションを使用して、明示的にネストされたオブジェクトを指定する必要があります。以下は、店舗情報とその関連オブジェクトをレンダリングする `Rails` コントローラーの実装例です。
“
Ryby/Ruby on Railsを習得するためにやったこと まとめ(随時更新)
バックエンド言語「Ruby」およびWebフレームワーク「Ruby on Rails」を習得するためにやったことをここにまとめます。随時更新中!!
—
RubyもインストールしてHello worldしてみる。
※参考:[初めてのRuby:インストール確認、REPL、Hello worldまで](http://idr-zz.hatenablog.com/entry/2018/11/20/224131)
6年ぶりのRyby再開計画発動!!Rubyistに、俺はなる!?
※参考:[Rubyistに、俺はなる!? 6年ぶりのRyby再開計画発動](https://www.i-ryo.com/entry/2024/03/24/201632)
GitHub Actionsを活用して自動デプロイを導入する方法
# 概要
この記事では、GitHub Actionsを使用してRailsアプリケーションをAWS EC2インスタンスに自動デプロイする方法を解説します。このプロセスには、秘密鍵の生成、GitHubに秘密鍵を保存、Capistranoでのデプロイ設定が含まれます。# 環境
*Ruby 3.2.0
*Rails 7.0.8
*Capostrano 3.18.0
*EC2※前提として、Capistranoの実行に必要なGemや設定などは導入済みであるものとします。通常はローカル上でbundle exec cap production deploy コマンドを実行するものとします。また、CapstranoはSSH接続ができることを前提としています。
# 参考リソース
https://qiita.com/o-y/items/38f31996cfd04b642899# 公開鍵・秘密鍵の作成
SSHキーを生成して、サーバーとGitHubの間で安全な通信を確立します。“`
ssh-keygen -t rsa -b 4096 -f ~/.ssh/[鍵の名称]
“`
# 公開鍵の
最適なデータベース設計とは
# 初めに
バックエンドエンジニアとしてそれなりに仕事をしているので、度々データベースのパフォーマンスを調査する事がある。この機会に、最適なデータベースとは何なのか一度棚卸ししたいと思い、データベース設計のベストプラクティスを見直してみた(ついでに社内でRailsを触れているのでデータベース設計も軽くRailsで書いた)
# 最適なデータベース設計とは
データベースの正規化とパフォーマンスのバランスは、データモデリングにおいて非常に重要なテーマです。この記事では、商品管理データベースを例に、Railsを使用して次の2つの異なるアプローチでテーブルを作成する方法を紹介します。
1. **正規化が適正なテーブル作成** – データの整合性と再利用性を最大化する
2. **パフォーマンスが優先のテーブル作成** – クエリの速度と効率を最大化する### **1. 正規化が適正なテーブル作成**
正規化は、データの重複を避け、整合性を保つために行います。商品管理データベースでは、以下のようにテーブルを設計します。
– **`products`** テーブル: 商品ID、商品名、
Dart Sass for Railsのビルドオプションの設定方法
Dart Sass for Railsのビルドオプションの設定方法ですが
[公式ドキュメント](https://github.com/rails/dartsass-rails)には以下のように記載されています。
> ## Configuring build options
> By default, sass is invoked with [“–style=compressed”, “–no-source-map”]. You can adjust these options by overwriting Rails.application.config.dartsass.build_options.
> “`ruby:config/initializers/dartsass.rb
> # config/initializers/dartsass.rb
> Rails.application.config.dartsass.build_options << "--no-charset" << "--quiet-deps" > “`ところが以下のようにエラーが出ます
`
Railsのおすすめボイラープレート
こんにちは!学びと成長しくみデザイン研究所の斉藤です。
みなさんはRails環境での技術検証をしたいとき、手っ取り早く試せるRails環境を作りたいと考えたことはありませんか?
例えば、「gemの動作検証をしたい」や「古いRailsの挙動を調査したい」など。
`rails new` で一から環境構築するのは少し手間だし、どうしようかと思っていたところ、素晴らしいOSSを見つけたのでご紹介します。## オススメ1
https://github.com/yasslab/sample_apps
Railsチュートリアルのサンプルコード集です。ボイラープレートとしても活用できます。
– おすすめポイント
– Railsの古いバージョンから新しいものまで幅広くカバーしている
– 癖のあるgemが導入されておらず、素のRailsに近い構成
– 補足
– DBがSQLiteなので、本番環境のDBと合わせたい場合は以下の記事を参考にどうぞ
– https://qiita.com/SaitoJP/items/d0df0ff431ee184b895b
ActionController::Redirecting::UnsafeRedirectErrorが出た時の対処法
## はじめに
**自己紹介**
未経験からWEB系エンジニアへの転職を目指している者です。現在はRuby on Railsを学習中です。**この記事を書いたきっかけ**
現在、プログラミング学習コミュニティでモブプロの取り組みに参加しており、Railsを使って簡易的なURL短縮サービスを実装しています。
その中で、表題のエラーに遭遇したので備忘録として対処法をまとめました。## 動作環境
– ruby 3.2.2
– rails 7.1.3## エラーの発生箇所
**UrlsControllerの概要**
– params[:digest]で短縮urlで受け取る
– Urlsテーブルを検索して短縮urlと紐づく、オリジナルurlを取得する
– オリジナルurlにリダイレクトさせる**Urlsテーブル**
– オリジナルURLとそれに対応する短縮URLを管理し、作成日時と更新日時を追跡できる“`mermaid
erDiagram
users {
bigint id PK “ID”
text original “オリジナルu
Webフレームワークを集めたDockerComposeを作ってみた
# 今回作成したリポジトリ
https://github.com/perilla0/web_frameworks_template
# はじめに
これまで、フレームワークごとにテンプレリポジトリを作っていたのですが、プロジェクトの切り替えが面倒だったり、DockerComposeごとにNginxやDBサーバーを定義したり、Githubリポジトリが増えすぎたりと不都合を感じておりました。
なので、バックエンド、フロントエンドのフレームワークをまとめたDockerComposeを作成することにしました。
今後のWebフレームワーク追加や削除がしやすいように、構成に少し工夫も加えました。今後は、Webフレームワークを追加したいときは、今回作成したテンプレリポジトリに追加していくことにします。
本テンプレリポジトリは、あくまでWebフレームワークのインストールから初期画面の表示までの簡素化を目的としております。
# DockerComposeに含まれるサービス
READMEに詳細がありますが、本記事でも簡単に説明させて頂きます。
## バックエンド
– Laravel(PH
rails testしたら “Migrations are pending. …” とか出る
# はじめに
最近、Railsを触り始めました。
転職先で使用するかもしれないので学習するためにはじめてます。
(この時はまだ決まってない。この先も決まらない…かも…しれない :relaxed: )今回は自分が遭遇したエラー対応の備忘録として書いてます。
# 環境
* Ruby 3.2.3
* Rails 7.1.3
* SQLite3 1.4## `rails test` したら、’Migrations are pending.’ と出る
`rails test` コマンドを実行しようとしたら、以下のエラーが出る。
“`terminal
C:\Users> rails test
Migrations are pending. To resolve this issue, run:bin/rails db:migrate
You have 2 pending migrations:
db/migrate/20240227131218_create_users.rb
db/migrate/20240302042818_create_micropost
【Railsチュートリアル】第11-14章 まとめ
## 第11章
### コンソールの改行
“`ruby:ターミナルrails generate migration add_activation_to_users \
> activation_digest:string activated:boolean activated_at:datetime“`
### メーラーの生成
“`ruby:ターミナルrails generate mailer UserMailer account_activation password_reset
“`
### メールを即時送信
“`ruby:app/controllers/users_controller.rbUserMailer.account_activation(@user).deliver_now
“`
### メッセージを渡し、動作させる
“`ruby:app/models/user.rbdigest = self.send(“#{attribute}_digest”)
“`
### コントローラのアクション内で定義された変数をテストで使
【Railsチュートリアル】第6-10章 まとめ
## 第6章
### データベースを変更しないようにコンソールを使う
“`ruby:コンソールrails console –sandbox
“`
### オブジェクトが有効化を確認
“`ruby:コンソール>> user.valid?
true“`
### データベースにオブジェクトを保存
“`ruby:コンソール>> user.save
“`
### オブジェクトの生成とデータベースへの保存
“`ruby:コンソール>> User.create(name: “A Nother”, email: “another@example.org”)
“`
### データベースからの削除
“`ruby:コンソール>> foo.destroy
“`
### idからデータを検索
“`ruby:コンソール>> User.find(1)
“`
### 値からデータを検索
“`ruby:コンソール>> User.find_by(email: “michael@example.com”)
“`
### データベースの最
【Railsチュートリアル】第1-5章 まとめ
## 第1章
### サーバー実行
“`ruby:ターミナルrails server
“`
### ファイル確認
“`ruby:ターミナルls app/controllers/*_controller.rb
“`
### Gitの設定内容の確認
“`ruby:ターミナルgit config –list
“`
### 全ての変更ファイルをステージング
“`ruby:ターミナルgit add -A
“`
### 現在のステージング状態を知る
“`ruby:ターミナルgit status
“`
### ステージングされた変更内容をリポジトリに保存
“`ruby:ターミナルgit commit -m “Initialize repository”
“`
### これまでのコミットメッセージ履歴を確認
“`ruby:ターミナルgit log
“`
### 直前にコミットした状態まで戻る
“`ruby:ターミナルgit restore
“`
### ブランチを新たに作成し、移動する
“`ruby:タ
【Progate】Ruby on Rails 5 まとめ
## 各コードの機能
### ターミナル
|コード|機能|
|:-|:-|
|`rails new アプリ`|入力したアプリ名と同じファイルを作成|
|`rails server`|サーバーを起動|
|`rails g controller コントローラ名 アクション名`|コントローラとそれに対応したファイルを作成|
|`rails g model テーブル名 カラム名:データ型(※テーブル名は単数系&頭大文字)`|マイグレーションとモデルを作成|
|`rails g migration`|マイグレーションのみを作成(マイグレーションの中身は自分で作成する必要がある)|
|`rails console`|コンソールを起動|
|`quit`|コンソールを終了|
|`File.write(ファイルの場所,ファイルの中身)`|指定したファイルの場所にファイルの中身を記述する|
|`bundle install`|Gemfileに記述したgemをインストールする|
|`インスタンス名.save`|インスタンスをテーブルに保存|
|`モデル名.first`|テーブルから一つのデー
【RSpec】先輩のテストの書き方が美しかったので真似できるようにメモ
## これはなに?
タイトルの通りです。
## どんなテスト?
例を3つ作成したので、実際に見て頂いた方が早そうです。
### 期待値が具体的にある場合
例えば今、以下の関数を作成し、その挙動を確かめるテストを作成するとします。
“`ruby
def some_func(n)
n + (n + 1)
end
“`与えられた値と、その次の値を足すだけの単純な関数ですね。
これをテストしましょう。
“`ruby
describe ‘#some_func’ do
# テストケースの配列を定義 ([入力値, 期待される出力])
test_cases = [
[1, 3], # 1 + (1 + 1) = 3
[2, 5], # 2 + (2 + 1) = 5
[5, 11], # 5 + (5 + 1) = 11
[10, 21], # 10 + (10 + 1) = 21
[100, 201] # 100 + (100 + 1) = 201
]test_cases.each do |input, e
【Rails】テーブルのリレーションを柔軟に設定する
## これはなに?
テーブル設計において、リレーションは大切な要素です。
一般的には`belongs_to`や`has_many`等で紐づけをします。
モデル内で紐づけるテーブルを指定することでこれを実現することができます。本記事は、紐づけるテーブルを柔軟に設定できる「ポリモーフィック関連付け」という方法を学んだのでそのアウトプットです。
## どんなことができるようになるのか?
結論、ポリモーフィック関連付けを活用するには、テーブル内に2つのカラムが必要となります。
– xx_type: 紐づけるテーブルを指定
– xx_id: 紐づけ先のidxxは、関連付けるモデル名に基づいて命名されます。
例えば今、以下の3つのテーブルがあるとします。
– 子(関連付けられるテーブル): hoge
– 親(関連付け候補のテーブル): fuga
– 親(関連付け候補のテーブル): piyoここでhoge, fuga, piyoテーブルはそれぞれポリモーフィック関連付けされているとします。
hogeテーブルに`foo_type`と`foo_id`というカラムを用意したとき、
RailsプロジェクトにGitHub Actionsを導入する方法(Rspec, Rubocop)
# 概要
この記事では、RailsプロジェクトにGitHub Actionsを導入し、RspecとRubocopを自動実行する手順について解説します。GitHub Actionsを利用することで、コードをプッシュするたびに自動でテストが実行され、コーディング規約に違反していないか即座に確認できます。これにより、開発プロセスの効率化とコード品質の向上が期待できます。GitHubActionsによるRSpec・RuboCopのCI設定を備忘録的に整理しました。# 環境
* Ruby 3.2.0
* Rails 7.0.8
* rspec 3.13
* selenium-webdriver 4.10.0
* rubocop 1.60.2# 参考リソース
https://zenn.dev/ryouzi/articles/cd6857c08e60e7https://qiita.com/jhanyu/items/e2f467684873d806ad00
※前提として、RspecやRubocopの実行に必要なGemや設定などは導入済みであるものとします。
# rails.ci.
Dockerコンテナ間のAPI通信でハマった話 – host.docker.internalの存在
## 前提知識
– Dockerを使って、フロントエンドとバックエンドを別々のコンテナで開発していた
– フロントエンドにはNext.js14(AppRouter)、バックエンドにはRails7を使用## 問題
フロントエンドからバックエンドへのAPI呼び出しを行おうとしたが、うまく通信ができなかった。
フロントエンドのコードでは、バックエンドのAPIエンドポイントを`http://localhost:3000/api/…`のように指定していた。## 原因
Dockerコンテナ内では`localhost`が指すのはコンテナ自身であり、別のコンテナを指すことができない。そのため、フロントエンドのコンテナから`localhost`を使ってバックエンドのコンテナにアクセスしようとしても、正しく通信ができなかった。
## 解決方法
### Next.jsコンテナの設定
Dockerコンテナ間で通信を行う際には、`host.docker.internal`を使用する。`host.docker.internal`は、Dockerコンテナから見たホストマシンのIPアドレス
find_or_create_byメソッドについて
## はじめに
個人開発でOmniAuthを用いた認証機能を実装する際に、“`find_or_create_by“`メソッドの挙動について疑問が生じたので、その点について調べてみました。
:::note warn
初学者のため間違いがあるかもしれません。
その際はご指摘いただけると嬉しいです。:::
## 元々の認証機能の一部
既存のユーザーに対して変更があった際には、updateメソッドで更新をしたかったのですが、“`user_update(user_params)“`の部分が動いていないようだったのでなぜだろうと気になりました。
“`ruby
def self.find_or_create_from_auth_hash(auth_hash)
user_params = user_params_from_auth_hash(auth_hash)
User.find_or_create_by!(uid: user_params[:uid]) do |user|
user.update(user_params)
end
end