📚

Next.js × Supabaseで書籍ストックサービスを作成するまで〜技術選定理由・学習方法まとめ〜

2024/01/08に公開

実務ではJava(Spring Framework)とJavaScript(jQuery)とOracle DBを使ってSPAっぽい()業務系webアプリの実装をしてるのですが、最新の技術も習得した方が良いと感じていたため勉強のために作成しました。

技術選定の理由や参考にしたサイトについてまとめておきます。

リポジトリ

READMEに作成した機能や使用技術について記載しています。
https://github.com/serina-yam/search-book-nextjs

サービスのURLはこちらです。
https://main.d1h9h0rr432r2c.amplifyapp.com

サービス構成図

Diagram

技術選定

フロントエンド・バックエンド

選定技術: TypeScript / React / Next.js
選定理由:
以前基本設計のみ参加したプロジェクトがTypeScriptとReactを採用していたがモックをコードベースで作成した経験しかなかったため、一度自分で一から作成してみたかったため。
また、最新のライブラリでありサーバーサイドレンダリングをサポートしているNext.jsを使ってみたかったため。

書籍情報取得API

選定技術:Google Books API
選定理由:
Googleが公開しているAPIで信頼できることと、簡単に使用できるため。

DB

選定技術:Supabase
選定理由:
PostgreSQLデータベースをベースにしているため、普段Oracleユーザーである自分でも使いやすいと感じたため。

インフラ

選定技術: AWS Amplify
選定理由:
Next.js 12 以降をサポートしているAmplifyを使用することで簡単にデプロイすることができるため。
また、可用性・耐久性・拡張性が高いアプリケーションを構築することが可能なため。

CI / CD

選定技術: GitHub Actions
選定理由:
GitHubで開発を行っているためGitHubが提供しているサービスを利用すれば使い勝手が良いと感じたため。

認証

選定技術: Supabase
選定理由:
OAuth 2.0を用いて簡単にログイン機能を実装したかったため。

その他

CSSフレームワーク

選定技術: Tailwind CSS
選定理由:
クラス名をつける必要がないことによりCSSの実装に割く時間が短くなるため。

アイコン

選定技術: Lucide React
選定理由:
シンプルなアイコンを使用したかったため。また、「Copy JSX」ボタンを押すことで簡単にコードを生成して使用できるため。

デザインツール

選定技術: Figma
選定理由:
一度使用したことがあり使い勝手がわかっていたことと、webで使用でき共有もしやすいため。またプラグインが充実しているため画像加工も簡単に行えるため。

参考にしたサイト / 記事

React

React特有の書き方について最低限知っておいた方が良いことがわかりやすくまとまってます。
https://qiita.com/FumioNonaka/items/4361d1cdf34ffb5a5338#useref

Next.js

公式チュートリアルがわかりやすかったため、まずこちらで学習しました。
https://nextjs.org/learn-pages-router/basics/create-nextjs-app

Page RouterとApp Routerでの実装方法があるのですが、あまり詳しくなかったためこちらの記事が参考になりました。私は今回App Routerを使用して作成しました。
https://zenn.dev/collabostyle/articles/7377d383430bf3

App Routerの勉強はこちらが参考になりました。
https://zenn.dev/akfm/articles/next-app-router-navigation#app-routerの遷移実装
https://zenn.dev/yamadadayo123/articles/6cb4f586de0183

Tailwind CSS

Next.jsにTailwindを導入したかったため公式のこちらを参考に導入しました。
https://tailwindcss.com/docs/guides/nextjs

Google Books API

GitHubのTopicsからリポジトリを検索していくつか参考にしました。
https://github.com/topics/google-books-api

Supabase

データの取得方法についてはこちらの公式を参考にしました。
https://supabase.com/docs/reference/javascript/contains

認証方法についてはこちらの記事がわかりやすかったです。
https://zenn.dev/hrtk/articles/3da84e46c97267
https://qiita.com/masakiwakabayashi/items/716577dbfebf83665378

便利系ツール

Supabaseの型情報を自動生成

クエリの型定義を正確に行えるのでこちらを使って型情報の自動生成を行いました。
https://zenn.dev/k_kind/articles/supabase-type-generate

ER図生成

Supabase SchemaというサイトでSupabaseのER図を自動生成できます。
こちらの記事を参考にしました。
https://zenn.dev/takumikunn15/articles/cfd2ed144a9093

画像自動生成

404エラーと500エラーのページに画像を使用したかったため、せっかくなのでBingの画像生成ツールを使用してみました。

「本が積まれているペンで描いたようなイラスト」のような文言で生成された結果を見て文言を何度か修正して作成しました。

Image Creator from Microsoft Designer - Bing
https://www.bing.com/images/create

画像加工

背景透過やSVG画像への変換はFigmaで行いました。

背景透過はこちらのプラグインを使用しました。
https://www.figma.com/community/plugin/1126882239732656005

SVG変換はFigmaのエクスポートでSVGを選択してダウンロードしました。

サービス構成図の作成

アイコンが探しやすくシンプルで使いやすかったため、Miroというサービスを使用しました。
「+」押して表示される「IconFinder」や「Google Images」からアイコン・画像を探して使用しました。
https://miro.com/ja/

おわりに

Reactは習得までかなり苦戦しました。
ただ、少し書き慣れてくるとJavaと似たようにInterfaceが作成できたりuseStateの良さを実感でき、途中からメリットに気づくことができました。

SupabaseのようなBaaSサービスを使用することによって簡単にDB作成や認証機能を実装できて、BaaSの便利さを実感することもできました。

また、自分で一からしっかりなにか作成し終えたことがなかったため自信になりました。
仕事では触ることができそうにない興味のある技術を触ることができて楽しかったです。

Discussion