0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【個人開発】掲示板アプリを1日でリリース

Posted at

完成品

先日の記事のシステムに引き続き、AIを用いた個人開発の練習に打ち込んでいます。

まだこちらもMVPと称して簡単な画面しか作成していませんが

以下のようなアプリを作成しました。

ユーザー登録は実装済みですが、有効なメールアドレスが登録されメール送信されるため、
ログイン画面に表示されているデモログインをご利用ください。

ログイン画面

image.png

ユーザー登録画面

image.png

メール認証

スクリーンショット 2025-11-02 22.39.58.png

ホーム画面

image.png

ユーザー編集画面

image.png

こだわりポイント

このアプリのポイントは、

ユーザーの投稿したコメントが、リアルタイムで他のログインしているユーザーにも

表示されるような仕様になっているところです。

(動画やGIFを埋めようと色々努めましたが、結局何をやっても小さくなったりしたので

以下キャプチャを貼ります。ご容赦ください。)

① 左画面の公開ユーザーから投稿する

image.png

② 右画面(シークレットブラウザ)の公開ユーザー2が、動的に1の投稿を取得することを確認

image.png

③ 右画面からも同様に投稿する

image.png

④ 左画面も動的に投稿を取得することを確認

image.png

技術的にはSupabase Realtimeを使用し、WebSocketで動的に通信しています。

アーキテクチャ
┌─────────────────────────────────────────────────────────┐
│                    ユーザーAのブラウザ                     │
│  ┌──────────────────────────────────────────────────┐   │
│  │  Next.js App (React)                             │   │
│  │  useEffect(() => {                               │   │
│  │    subscribeToNewPosts((newPost) => {            │   │
│  │      setPosts([newPost, ...posts]); ← 画面更新    │   │
│  │    });                                           │   │
│  │  }, []);                                         │   │
│  └──────────────────┬───────────────────────────────┘   │
│                     │ WebSocket接続                      │
└─────────────────────┼───────────────────────────────────┘
                      │
                      ↓
┌─────────────────────────────────────────────────────────┐
│              Supabase Backend (クラウド)                │
│  ┌────────────────────────────────────────────────┐     │
│  │  Realtime Server (WebSocketサーバー)            │    │
│  │  - クライアントのWebSocket接続を管理              │     │
│  │  - PostgreSQLの変更を検知                        │     │
│  │  - 接続中の全クライアントに通知                     │    │
│  └───────────────┬────────────────────────────────┘    │
│                  │ LISTEN/NOTIFY                       │
│                  ↓                                     │
│  ┌────────────────────────────────────────────────┐    │
│  │  PostgreSQL Database                           │    │
│  │  - posts テーブル                               │    │
│  │  - INSERT時にNOTIFYを発行                       │    │
│  └────────────────────────────────────────────────┘     │
└─────────────────────┬───────────────────────────────────┘
                      │
                      ↓ WebSocket経由で通知
┌─────────────────────────────────────────────────────────┐
│                    ユーザーBのブラウザ                     │
│  画面が自動更新される!                                     │
└─────────────────────────────────────────────────────────┘

WebSocket(ウェブソケット)とは?
通常のHTTP通信との違い:
【通常のHTTP】
クライアント → サーバー: リクエスト送信
クライアント ← サーバー: レスポンス返す
(都度接続・切断)

【WebSocket】
クライアント ⇄ サーバー: 常時接続
サーバーから自発的にデータを送信可能!

メリット:
✅ リアルタイム通信
✅ 低レイテンシ
✅ サーバーからプッシュ通知可能

いい感じに実装できたので勉強がてら

React Nativeでネイティブアプリも作成しようかと思います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?