失敗を共有するコミュニティをRailsで立ち上げるまでの道
はじめに
プログラミングやデザインの学習者が、日々の「失敗」を気軽に共有し、互いに学び合えるコミュニティ「失敗ログ専用タイムライン」の開発を始めました。Twitter風のシンプルなUIで、短文の失敗を投稿し、タグやグラフで関連する失敗を見つけられるサービスを目指しています。
本稿では、このプロジェクトのMVP(最小限の機能)を立ち上げるまでの技術的な道のりを紹介します。
1. プロジェクトの基本設計
開発を始める前に、サービスの核となる要素を定義しました。
- コンセプト: 失敗を気軽に共有して学び合うコミュニティ
- 主要機能: 失敗投稿、タイムライン、タグ検索、リアクション
-
技術スタック:
- バックエンド: Ruby on Rails 7
- 認証: Devise gem
- データベース: PostgreSQL (開発中はSQLite3)
- デプロイ: Render
これらの要素に基づき、まずユーザー認証機能と投稿機能の実装から着手しました。
2. Deviseでユーザー認証を実装する
ユーザー認証機能は、サービスのセキュリティと信頼性の基盤です。Railsでは、devise
gemを利用することで、ログイン・新規登録・パスワードリセットといった複雑な機能を迅速に実装できます。
-
Gemfile
にdevise
を追加し、bundle install
を実行Rubygem 'devise'
-
Deviseの初期設定と
User
モデルへの組み込みBashrails g devise:install rails g devise User
💡 開発中に遭遇した失敗:マイグレーションの重複エラー
失敗:rails db:migrate
を実行すると、SQLite3::SQLException: duplicate column name: email
やduplicate column name: encrypted_password
といったエラーが発生しました。
原因:Deviseを導入する前に、rails g model User name:string email:string encrypted_password:string
でUser
モデルを作成していたため、Deviseのマイグレーションファイルが、すでに存在するカラムを再度追加しようとしていました。
解決策:重複したカラムを定義しているマイグレーションファイルを直接編集し、email
とencrypted_password
のカラム定義をコメントアウトしました。その後、rails db:reset
でデータベースを一度初期化し、再度rails db:migrate
を実行することで、クリーンな状態でマイグレーションを適用できました。
-
マイグレーションの実行Bash
rails db:migrate
これにより、
users
テーブルに認証に必要なカラム(reset_password_token
など)が追加されました。 -
動作確認
rails s
でサーバーを再起動し、/users/sign_up
や/users/sign_in
にアクセスして認証画面が表示されることを確認しました。
3. 投稿機能(Failureモデル)を実装する
認証機能が完成したら、いよいよサービスの中心機能である投稿機能に移ります。
-
Failure
モデルとマイグレーションの作成
投稿内容を保存するためのFailure
モデルを作成し、user:references
でUser
モデルとの関連付けを設定しました。Bashrails g model Failure content:text tags:text resolved:boolean user:references rails db:migrate
-
モデル間の関連付け
User.rb
にhas_many :failures
、Failure.rb
にbelongs_to :user
を定義し、ユーザーと投稿の紐付けを確立しました。 -
投稿フォームとタイムラインの作成
-
FailuresController
を作成し、new
,create
,index
アクションを定義。 -
app/views/failures/new.html.erb
に投稿フォームを作成。 -
app/views/failures/index.html.erb
に投稿一覧を表示するタイムラインを実装。 - ユーザーが
content
とtags
を入力すると、その情報がデータベースに保存され、タイムラインに時系列で表示されるようになりました。
-
今後の展望
現段階で、ユーザーは新規登録・ログインを行い、自身の失敗を投稿し、それをタイムラインで確認できるようになりました。これは、プロジェクトのMVPとして重要なマイルストーンです。
今後は、投稿の編集・削除機能、タグ検索機能、そして失敗の関係性を可視化するグラフ機能など、より多くのユーザーに価値を届けられるよう開発を進めていきます。
Discussion