LoginSignup
8
8

More than 3 years have passed since last update.

小中規模 Next.js Application で利用する技術選定

Last updated at Posted at 2020-06-06

小〜中規模の Next Application を開発することになった場合に選択する技術、ライブラリ等について個人的に整理をしたのでメモとして残しておきます。

作成する Application の前提条件

  • 画面数が1~10ページ程度で、画面間で共通のモデルを利用したい
  • Next.js Application からバックエンドのシステムに対して API 呼び出しがある
  • 入力項目が多いので途中で離脱しても状態を保持したい
    • ユーザーに紐づく入力情報をバックエンドに一時保存する仕組みが必要
    • 入力情報をフロント側では一元管理したい
  • 入力フォームの要素はある程度パターン化されている
    • ボタンやテーブル表示などは component に切り出せる
    • トンマナ, fontサイズ等の変数は共通化したい

事前に必要な知識

Next.js

Application の実行環境

  • AWS Amplify
    • CI/CD環境の構築, 環境毎のURLを発行したりが容易にできる
    • AWS のリソース管理をしないといけないのでハードルが少し高い
    • ただし他の AWSリソースとの連携がしやすくなる
    • コスト面は低いのでおすすめ
  • Vercel
    • https://vercel.com/
    • CI/CD環境の構築, 環境毎のURLを発行したりが容易にできる
    • Integration が提供されていて簡単に利用できる
    • 個人利用であれば無料
    • チーム利用になると料金はやや高い
    • 開発フェーズでサクッとPull Request毎に動作環境作って確認したいという用途であれば、個人利用でもできるのでおすすめ

React.js

ディレクトリ構成

# ディレクトリ構成の例

app
 L assets # 画像やcssファイルを定義
   L favicon.ico
   L app.css
 L components # Pages内で呼び出す Component を定義
    L atom # 原子、これ以上分解できない単位の Componet を定義
      L Button.tsx
      L ListItem.tsx
    L molecules # 分子、原子がいくつか組み合わさって構成された Component を定義
      L Header.tsx 
      L Footer.tsx 
      L List.tsx
    L Todo.tsx
 L pages # Next.js のページファイル
 L hooks # カスタム hooks を定義
 L stores # store関連のファイルを定義
 L reository # API, 環境依存な外部リソースの呼び出し処理を定義
    L xxxApi.ts 
 L @types # 型定義ファイルを自作したものを配置
    L xxxx.d.ts
 L types # Application 固有のモデルの型定義
    L Todo.ts

Component ディレクトリ内の構成

Application 内で扱う Component の数によってディレクトリの分解を検討する必要があります。
atomic design をベースに基本要素である atom(原子), molecules(分子) というディレクトリ単位だけも
小さなプロジェクトでもファイルを分けやすいので最初の時点で作成しておくとよさそうです。

最初の段階でディレクトリを分けすぎているとどこにどの粒度のcomponentを配置したらいいのか混乱してしまうので段階的に分ける

Storeの扱い

扱う store の大きさによって Redux を採用しつつ、技術検証な色がある案件であれば Recoil の採用を検討するのが良いかと思います

React Hooks の利用について

CSS の扱い

CSS フレームワーク

8
8
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
8
8