🥑
nextjsのセットアップ
はじめに
本記事はnextjsをセットアップする際のまとめになります。
Kazu T+先生での動画を元に作成(というかパクリ)してますのでもし良ければ見てみてください。
動画でのパッケージマネージャーはyarn
を使用してますが、本記事ではpnpm
を使用します。
pnpm
はyarn
よりインストールが速く、node_modules
の容量を抑えてくれます。
セットアップするツール
- Nextjs
- TypeScript
- Apollo Client(GraphQL)
- Tailwind
- Prettier
- graphql-codegen
手順
1. pnpmのインストール
npm install --global pnpm
pnpm --version
node
のバージョンがv14
だとインストールできなかったので、最新のv16
まで上げました。
2. create-next-app
pnpm dlx create-next-app .
pnpm dlx
はyarn
でいうnpx
になります。
3. Apollo Client + heroicons + cross-fetch のインストール
pnpm add @apollo/client graphql @apollo/react-hooks cross-fetch @heroicons/react
-
Apollo Client
は、GraphQLの状態管理ライブラリ。 -
heroicons
は、かわいいアイコンです。 -
cross-fetch
は、fetchライブラリ。
4. prettierの設定
4-1. ファイルの作成
touch .prettierrc
.prettierrc
に設定内容の記述
4-2. .prettierrc
{
"singleQuote": true,
"semi": false
}
vscode
のsettings
でRequire Config
とFormat On Save
にチェック。
5. TypeScript の導入
5-1. ファイルの作成
touch tsconfig.json
5-2. 必要なモジュールのインストール
pnpm add -D typescript @types/react@17.0.41 @types/node
5-3. 開発serverの起動
pnpm run dev
起動するとtsconfig.json
に自動で記述される。
5-4. AppPropsに型を追記
_app.jsx
import { AppProps } from 'next/app'
function MyApp({ Component, pageProps }: AppProps) {
return <Component {...pageProps} />
}
export default MyApp
現在、pages
フォルダにあるファイルの拡張子は.js
もしくは.jsx
になっているので、
.ts
と.tsx
に変更してTypeScript
の型宣言が機能できるようにする。
6. Tailwind CSS の導入
6-1. 必要なモジュールのインストール
pnpm add tailwindcss@latest postcss@latest autoprefixer@latest
tailwind.config.js
とpostcss.config.js
の生成。
6-2. pnpm dlx tailwindcss init -p
tailwind.config.js
のcontent
に設定を追記
6-3. tailwind.config.js
module.exports = {
content: [
"./pages/**/*.{js,ts,jsx,tsx}",
"./components/**/*.{js,ts,jsx,tsx}",
],
darkMode: false,
theme: {
extend: {},
},
variants: {
extend: {},
},
plugins: [],
}
globals.css
の編集
6-4. globals.css
@tailwind base;
@tailwind components;
@tailwind utilities;
7. GraphQL codegen
graphql-codegen
とは、GraphQLのSchemaからTSの型定義を自動生成してくれる便利な子です。
graphql-codegen/cli
のインストール
7-1. pnpm add -D @graphql-codegen/cli
graphql-codegen
のセットアップ
7-2. pnpm graphql-codegen init
7-2-1. どのアプリでビルドするか
Welcome to GraphQL Code Generator!
Answer few questions and we will setup everything for you.
? What type of application are you building? (Press <space> to select, <a> to toggle all, <i> to
invert selection, and <enter> to proceed)
>( ) Backend - API or server
( ) Application built with Angular
(*) Application built with React
( ) Application built with Stencil
( ) Application built with other framework or vanilla JS
今回のプロジェクトはNextjsですので、デフォルトを選択しましょう。
7-2-2. 対象URIのエンドポイント
? Where is your schema?: (path or url) (http://localhost:4000) http://localhost:4000/api/graphql
7-2-3. スキーマの保存場所
? Where are your operations and fragments?: (src/**/*.graphql) queries/**/*.ts
7-2-4. 必要なプラグイン
? Pick plugins: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
>(*) TypeScript (required by other typescript plugins)
(*) TypeScript Operations (operations and fragments)
(*) TypeScript React Apollo (typed components and HOCs)
( ) TypeScript GraphQL files modules (declarations for .graphql files)
( ) TypeScript GraphQL document nodes (embedded GraphQL document)
( ) Introspection Fragment Matcher (for Apollo Client)
( ) Urql Introspection (for Urql Client)
この子が何をしてるのか調べましたがいまいち分からなかったです。
「どのプラグインを利用して型の宣言をしますか?」とかなんですかね?
すみません、調査不足で申し訳ありませんが、デフォルトの3つを選択します。
7-2-5. 型定義の出力場所
? Where to write the output: (src/generated/graphql.tsx) types/generated/graphql.tsx
7-2-6. インストロペクションファイルの作成
? Do you want to generate an introspection file? (Y/n) n
7-2-7. configファイルの作成
? How to name the config file? (codegen.yml) codegen.yml
7-2-8. 実行コマンドの命名
? What script in package.json should run the codegen? gen-types
7-3. プラグインのインストール
pnpm install
@graphql-codegen/typescript
のインストール
7-4. pnpm add -D @graphql-codegen/typescript
7-5. GraphQLの型宣言作成
pnpm gen-types
「7-2-2. 対象URIのエンドポイント」で指定したエンドポイントのサーバを起動させ、
「7-2-3. スキーマの保存場所」で指定したファイルにスキーマを書き実行。
Discussion