1. 導入
Rails開発初学者がissueベース開発1週間でやらかした失敗まとめです
・ただの反省じゃなく、再発防止も書いていけたらと思ってます
・これからRailsで開発していく初学者の方の参考になれば幸いです
開発環境
・Ruby 3.3.6
・Rails 8.0.2.1
・PostgreSQL
・Docker(開発環境)
・デプロイ: Render / Neon
・1週間でやったこと
- rails new でアプリ作成
- トップページ作成
- Render / Neon にデプロイ
- enum を i18n 化
2. 複数DBでのデプロイ失敗
・手順が分からず、記事通りにconfig/database.yml編集したら、
primary: &primary_production の設定を消してしまいデプロイ時にエラーでハマる
原因
自分の環境(複数DB構成)と記事の前提(単一DB)を区別できてなかった
学び
- 使用する記事の設計と自分の設計の違いを確認してから記事を参照する
- 初学者だとデプロイ方法に悩むので、自分の環境を言語化してデプロイ方法の記事を書けたのでいいきっかけになった
3. Rails new のでRailsバージョン指定ミス
Docker環境構築時に
Railsのバージョンを指定することができるのだが、
# 誤り(バージョン未指定 → 最新が入ってしまう)
$ docker compose run --rm web gem install rails
してしまったため、自動で最新バージョンがインストールされて、それに気づかず開発を開始してしまった
なぜ最新だとやらかしなのか
- 参考記事通りに実装してもエラーになる可能性がある
Railsの最新バージョンは仕様が変わっていることが多く、参考記事やチュートリアル通りに進めてもエラーになる。 - 動作検証が追いついていない
最新バージョンは情報が少なく、gemの対応も遅れている場合がある。そのため安定した環境で開発したいなら「実績のある安定版」を選ぶ方が無難。
(例)Docker環境構築時、Railsインストールコマンド入力時
# Docker環境で少し前のバージョン Rails 7.0.6 をインストール
$ docker compose run --rm web gem install rails -v 7.0.6
さらに再発防止のために、
• Gemfile に Rails のバージョンを明記
• Dockerfile にもバージョン指定を記述
しておくと、チーム開発や再構築時にも安定する。
開発を進めている途中でRailsバージョンが最新だと気づいたため、最新バージョンで開発は進めることにしました。
ただ最新をインストールしたことにより、開発時にやらかしが増えることに…。
4. Slim導入でハマった話
・slimの仕組みは知ってたけど gem 'slim-rails' するの忘れてコードがそのまま表示された
・なぜコードが反映されないのかわからずハマった
原因
slim導入手順を勉強してなかった
学び
公式READMEや導入手順は必ず読む、Gem導入はチェックリスト化
5. i18n化での設計抜け
・enumのi18n化をするissueを切ったけど、マイグレーションとモデル設計をやってなかった
実装時に「そもそもテーブル設計から必要」と気づき詰んだ
原因
issue分割の粒度をミスった
学び
issueの粒度を丁寧に設計しないと、スケジュールが崩れるので、都度スケジュール管理はしていくこと
6. Rails バージョン8からenumの表記方法が変わった
Rails 7.2 以前
class Task < ApplicationRecord
enum status: { incomplete: 0, in_progress: 1, complete: 2 }
end
Rails 8.0
class Task < ApplicationRecord
enum :status, { incomplete: 0, in_progress: 1, complete: 2 }
end
・Rails 8.0.2.1 で実装しているのに、Rails7.2以前の記載方法で書いてたため、本番環境で確認したらエラー祭りでハマった
原因: 記載方法はわかっていたのに、色々モデル設計考えてる段階で記載方法がごちゃごちゃになってた
学び: Rails 8で変更になった内容はissue内でチェックリスト化して開発後確認する
7. まとめ
・公式ドキュメントを読む
• Gem導入やRailsバージョンは必ず確認
• issueは前提タスクまで丁寧に分割する
• バージョンアップで変わった仕様はチェックリスト化
同じやらかしを少しでも減らせれば幸いです
こちらもどうぞ
