🎃

失敗を共有するコミュニティをRailsで立ち上げるまでの道

に公開

はじめに

プログラミングやデザインの学習者が、日々の「失敗」を気軽に共有し、互いに学び合えるコミュニティ「失敗ログ専用タイムライン」の開発を始めました。Twitter風のシンプルなUIで、短文の失敗を投稿し、タグやグラフで関連する失敗を見つけられるサービスを目指しています。

本稿では、このプロジェクトのMVP(最小限の機能)を立ち上げるまでの技術的な道のりを紹介します。


1. プロジェクトの基本設計

開発を始める前に、サービスの核となる要素を定義しました。

  • コンセプト: 失敗を気軽に共有して学び合うコミュニティ
  • 主要機能: 失敗投稿、タイムライン、タグ検索、リアクション
  • 技術スタック:
    • バックエンド: Ruby on Rails 7
    • 認証: Devise gem
    • データベース: PostgreSQL (開発中はSQLite3)
    • デプロイ: Render

これらの要素に基づき、まずユーザー認証機能投稿機能の実装から着手しました。


2. Deviseでユーザー認証を実装する

ユーザー認証機能は、サービスのセキュリティと信頼性の基盤です。Railsでは、devise gemを利用することで、ログイン・新規登録・パスワードリセットといった複雑な機能を迅速に実装できます。

  1. Gemfiledeviseを追加し、bundle installを実行Ruby

    gem 'devise'

  2. Deviseの初期設定とUserモデルへの組み込みBash

    rails g devise:install rails g devise User

💡 開発中に遭遇した失敗:マイグレーションの重複エラー

失敗rails db:migrateを実行すると、SQLite3::SQLException: duplicate column name: emailduplicate column name: encrypted_passwordといったエラーが発生しました。

原因:Deviseを導入する前に、rails g model User name:string email:string encrypted_password:stringUserモデルを作成していたため、Deviseのマイグレーションファイルが、すでに存在するカラムを再度追加しようとしていました。

解決策:重複したカラムを定義しているマイグレーションファイルを直接編集し、emailencrypted_passwordのカラム定義をコメントアウトしました。その後、rails db:resetでデータベースを一度初期化し、再度rails db:migrateを実行することで、クリーンな状態でマイグレーションを適用できました。

  1. マイグレーションの実行Bash

    rails db:migrate

    これにより、usersテーブルに認証に必要なカラム(reset_password_tokenなど)が追加されました。

  2. 動作確認rails sでサーバーを再起動し、/users/sign_up/users/sign_inにアクセスして認証画面が表示されることを確認しました。


3. 投稿機能(Failureモデル)を実装する

認証機能が完成したら、いよいよサービスの中心機能である投稿機能に移ります。

  1. Failureモデルとマイグレーションの作成
    投稿内容を保存するためのFailureモデルを作成し、user:referencesUserモデルとの関連付けを設定しました。Bash

    rails g model Failure content:text tags:text resolved:boolean user:references rails db:migrate

  2. モデル間の関連付けUser.rbhas_many :failuresFailure.rbbelongs_to :userを定義し、ユーザーと投稿の紐付けを確立しました。

  3. 投稿フォームとタイムラインの作成

    • FailuresControllerを作成し、new, create, indexアクションを定義。
    • app/views/failures/new.html.erbに投稿フォームを作成。
    • app/views/failures/index.html.erbに投稿一覧を表示するタイムラインを実装。
    • ユーザーがcontenttagsを入力すると、その情報がデータベースに保存され、タイムラインに時系列で表示されるようになりました。

今後の展望

現段階で、ユーザーは新規登録・ログインを行い、自身の失敗を投稿し、それをタイムラインで確認できるようになりました。これは、プロジェクトのMVPとして重要なマイルストーンです。

今後は、投稿の編集・削除機能、タグ検索機能、そして失敗の関係性を可視化するグラフ機能など、より多くのユーザーに価値を届けられるよう開発を進めていきます。

Discussion