Next.jsプロジェクトの初期設定


next.jsはnowと合わせると秒単位でWEBアプリを公開できるような超速フレームワークですが、それなりの規模のものを作ろうと思うと色々設定が必要です。

大分慣れてきたので振り返りもかねてプロジェクト初期設定の備忘録。

プロジェクト作成からGit設定、各種コンフィグ類の設定、必須ライブラリの導入とカスタムページの用意まで。

初期設定

プロジェクトの作成

コマンド1つで初期設定済みのフォルダを作ってくれます。

これは本当に便利なのでちょっとReact試したいときにも重宝します。

色々と自動作成してくれますが、個人的にはsrc/を作成してcomponents/pages/はそこに入れたい。

Gitの設定

上の操作でプロジェクトではローカルリポジトリが出来てるのでBitbucketやらgithubなんかにつなぐ。

やってることは以下の通り。

  1. リモートリポジトリをoriginにする
  2. (READMEなど作っていたら)リモートリポジトリの情報をとってきてマージ
  3. origin/masterを既定にしつつプッシュ

コンフィグ

Next.jsのポート番号設定でやったようにポート番号指定を行います。windowsなので%%にしてますがUnix系なら$npm_package_config_PORTです。

ついでに処理中で使う環境変数なんかも設定する。

process.env.BASE_URLなどが処理で使えます。

ライブラリの追加

フレームワーク

新規でフレームワークを使わずデザインを作るのは苦行です。

 

個人的にはBootstrapが好きなのですがReactとは主にjQuery部分で相性が悪い。

依存のないReact Bootstrapなんてのもありますが、色々と悪いとこどりしているようで正直使いにくいように感じます。

※Bootstrap臭がするなどと言われがちですがそれだけ使われているということだと思います。

 

ReactといえばMaterial uiといっても過言ではないらしいので本体、アイコン、テーブルライブラリを追加します。

※多少リッチなテーブルを使うならライブラリを使うことになると思う。

Typescript

基本的にjavascriptの自由度(という名の闇)を取り払うTypescriptは好きではないですが、Reactに関しては使わざるを得ない感じがします。

※現状の私だとPros/Consが拮抗してますが、もっと習熟すればメリットの方が大きくなるはず。

 

tsconfigをサンプルのwith-typescriptからとってきます。

そこに好きなパスを設定するためにbaseUrlpathsを追加。

この辺の設定はのちに必要に応じてググりつつ変えていくことになります。

pathsは相対パス以外でモジュールの指定をするために必須(ないとCannot find module : ts(2307))ですが、最終的な解決をしてくれるものではないのでこれだけ定義しても意味はないです(次のBabelも参照)。

Babel plugin

絶対パスや指定パスでモジュールを読み込めるようにプラグインを追加します。

階層が深くなると相対パスでimportするのが面倒になるのでわりと重要です。

またサーバーをそのまま使う場合、pages/内がそのままルーティングになるため配置換えしたくなる状況が多々ありますが、その時の面倒さが全く違います。

typescriptでエイリアスを設定しましたがそれだけだとコンパイルできる(Typescriptでエラーが出ない)だけで実行はできません。さらにいえばjsで作るならこっちの設定だけでいいです。

 

.babelrcを作成してコンポーネントなどをエイリアス設定します。

これでimport xx from "src/components/xx";import yy from "@libs/yy";のように書けて、深い階層からひたすら../する人生からおさらばできる。

rootを設定しているのでsrc/components/xxxとかでインポートできるんですが、node_modulesや他フォルダとの兼ね合いとかでModule not foundとなることがあるのでエイリアスを使ってインポートする方がよさそう。ライブラリと被らないような特殊なパスだと分かりやすいですし。

src直下のフォルダ(pages/以外)をパッケージ名と被らないようにして@を付けるのが今のところ使いやすいです。

ページ設定

_document.js

Material UI関連の諸々を書いておきます。

詳細はNext.jsで外部ライブラリのスタイルシート適応で。

 

Custom Document

この他にもベースをいじりたくなることはあると思うので_document.jsは必須。

_app.js

使わなくてもいいけど共通レイアウトやcss normarizeに使ってみる。

getInitialPropsを使うと全ページでSSRがかかるためできれば使わない。

 

ここまでやった後、Pageレイアウトを作るところから開発を始めています。


コメントを残す

メールアドレスが公開されることはありません。