3
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?

【個人開発】あなたの環境に合ったデスクセットを提案してくれるアプリ【Next.js / TypeScript / Vercel / Supabase】

3
Last updated at Posted at 2026-08-16

はじめに

新規アプリを製作しました。

GitHubリポジトリ

背景

絵を描く趣味の愛さんという女性の友人がいました。
彼女には悩みがありました。

  • デスク周りを整えたいけど、何がいいかわからない
  • Instagramとかで調べても部屋の雰囲気に合うかわからない
  • お金が足りるか不安

そこで、
検索条件から自分の理想とするデスク周りを提案するアプリを作成しました。
メーカーに問わられず、商品を提案することで問題解決を行いました。

アプリ内容

このアプリでは以下のことができるようにしました。

  • 予算、スペース、色から検索でき、条件に合致したものを提案します。

ほかのアプリとの差別化

一般的なアプリ

  • 商品を探す→商品単位で比較

このアプリ

  • 検索条件からデスクセット単位で提案→セット内の商品を確認

使用技術

  • Next.js
  • React
  • Tailwindcss
  • Vercel
  • Supabase
  • Vitest
  • GitHub Actions

選定理由

Next.js

ReactベースでWebアプリケーションを構築でき、
Server Component / Client Componentの使い分けを実践できるため採用しました。

また、Server ComponentやSSR/SSGなどを利用することで、
CSRのみの場合と比較し、SEOに適したページができるためです。

Tailwindcss

CSSは自由にカスタマイズしやすく、デザインしやすいためです。

Supabase

PostgreSQLを利用でき、DBとStorageをまとめて管理できるため採用しました。

Vitest

React Testing Libraryと組み合わせて、コンポーネントのユーザー操作をテストするために採用しました。

システム構成

  • フロントエンド:React + TypeScript
  • UI:Tailwindcss
  • DB:Supabase
  • テスト:Vitest
  • CI/CD:GitHub Actions

それぞれの画面役割

ホーム画面

image.png

image.png

アプリの最初は、Home画面になります。
このアプリの趣旨やどんな人にお勧めするか、ターゲットを明確にしています。
検索条件から、自分の情報を入力します。
予算、スペース、色で選び、あなたの理想のデスク周りを提案します。

検索結果画面

image.png

検索結果画面では、条件で選んだ候補が表示されます。
一覧で出るので、簡単な比較もできます。
もし気になるセットがあれば、「詳細を見る」ボタンを押して、詳細画面に遷移します。

詳細画面

image.png

詳細画面では、商品のセットの中身が表示されます。
各商品のリンクを貼っているので、気になれば、各サイトから購入していただけます。

ER図

各セット名に対し、各商品を紐づけるように設定しました。

workspace_sets

workspace_items

workspace_sets

Name Type option
id int8
title varchar
budget int8 non-null
space int8 non-null
color varchar non-null
use_case varchar non-null

workspace_items

Name Type option
id int8
workspace_set_id int8
category varchar non-null
item_name varchar non-null
image_url varchar non-null
url varchar non-null

こだわったこと

Server Component / Client Componentの使い分け

検索フォームではユーザー操作が必要なため、Client Componentとしました。
一方、検索結果の取得やページの表示はServer Componentを利用しています。

検索条件をURLパラメータで管理

検索条件をURLに保持することで、検索結果から詳細画面へ遷移した場合でも、検索条件を維持した状態で検索結果画面へ戻れるようにしました。

アプリ製作で苦労したこと

検索条件の状態管理

検索条件を画面内の状態として管理していたため、検索結果から詳細画面へ遷移し、検索結果画面へ戻った際に検索条件を保持できない問題が発生しました。

検索 → 詳細 → 戻るという操作で検索条件が失われる問題に遭遇しました。
検索条件をURLパラメータとして管理する方式に変更することで解決しました。

  • Next.jsでsearch/[id]/pageからsearch/pageに戻った際の問題

商品の画像問題

商品画像を利用する場合、著作権や各サービスの利用規約を確認する必要があります。
また、商品が製造中止になったさいの対応が一つずつ必要になります。
時間がかかってしまうので、AIで画像を作成し固定しておきます。

そのほかの苦労したポイントは以下の記事にまとめています。

  • CI/CDでのエラー話

  • Supabase Storageから取得した画像が表示されない問題

  • Git clone直後におきたImportエラーになる件(Cannot find module '' or its corresponding type declarations)

今後の改善

現在はSupabaseのテーブルに直接商品情報を登録しています。
そのため管理者にとってデータの登録に手間がかかります。

  • 管理者画面からの商品登録
  • 商品情報の更新・削除
  • 商品の販売終了への対応
  • 検索条件の拡張

上記の開発を追加することで管理者が扱いやすくなります。

開発を振り返って

フロントエンド領域を中心に、
Next.jsのServer Component / Client Componentの使い分け、URLパラメータを利用した検索状態の管理に取り組みました。

また、VitestによるテストやGitHub ActionsによるCI/CDまで実装し、
アプリケーションの実装だけでなく、テスト・デプロイまで含めた開発を経験しました。

今後は管理者画面を追加し、商品データを継続的に管理できる構成へ発展させたいと考えています。

3
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
3
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?