Nuxt3で簡単なToDoアプリを作っていく 〜環境構築〜

## 概要
普段は Vue3, Nuxt2, Composition APIでフロントの開発をしています。
「Nuxt3が良すぎる」「Nuxt3速い」「もうComposition APIには戻れない」みたいなことを聞くので、ところどころNuxt2, Composition APIと比較しながらNuxt3を触ってみます。

個人的な備忘録も兼ねようと思うので、環境構築から行っていきます。
Nuxt3を触ったことがない方や、Vue.jsのフロント開発をされたことがない方にとって参考になれば嬉しいです。
## この記事のゴール
Nuxt3の環境が構築できる

## 環境を作っていいく
Nuxt3の公式ドキュメントに沿ってやっていきます。

https://nuxt.com/docs/getting-started/installation#new-project

### Node.jsの確認
Node.jsのバージョンは16.11以上が必要そうです。

最新のLTSバージョンが18系になるので、最新をインストールで問題ないです。

https://nodejs.org/ja/

```
$node --version
v18.13.0
```

### インストール
npxコマンドでインストールを行います。
詳細は省きますが、npxは`node package executer`の略でpackage.jsonに書いていないパッケージなんかも必要あればインストールしてくれるらしい。
```
$npx nuxi init nuxt3-sample
```
`nuxt3-sample`の部分は好きなプロジェクト名にしてください。
![スクリーンショット 2023-02-25 17.12.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639493/64d0f750-6c69-5d8d-af30-3f829716a033.png)

あっという間に完了...
Nuxt2の時はプロジェクト名や言語（JavaScript or TypeScript）やら10項目以上のやり取りが必要だったが、Nuxt3にはないらしい。

<details><summary>Nuxt2環境構築時</summary>

```
$npx create-nuxt-app nuxt2-sample
~~~~~~~~ 省略 ~~~~~~~~~~~
? Project name: nuxt2-sample
? Programming language: TypeScript
? Package manager: Yarn
? UI framework: None
? Template engine: HTML
? Nuxt.js modules: (Press <space> to select, <a> to toggle all, <i> to invert selection)
? Linting tools: (Press <space> to select, <a> to toggle all, <i> to invert selection)
? Testing framework: None
? Rendering mode: Universal (SSR / SSG)
? Deployment target: Server (Node.js hosting)
? Development tools: (Press <space> to select, <a> to toggle all, <i> to invert selection)
? What is your GitHub username? use_name
? Version control system: Git
```
</details>

### 起動まで
インストールができたっぽいので、指示に従ってコマンドを実行していく。
```
$cd nuxt3-sample
$yarn install
$yarn run dev
```

http://localhost:3000 にアクセスする。
無事画面が表示されました👏
![スクリーンショット 2023-02-25 17.52.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639493/96e921e7-0a0b-dbd9-c523-60202d4b5ec7.png)

## ディレクトリの構造
初期のディレクトリはこんな感じ
```
.
├── .gitignore
├── .npmrc
├── .nuxt
├── README.md
├── app.vue
├── node_modules
├── nuxt.config.ts
├── package.json
├── public
├── tsconfig.json
└── yarn.lock
```
Nuxt2の時と比べて、ディレクトリ数が少ない。
pagesやcomponentsなどのディレクトリはドキュメント見ながら必要なものを自分で追加していくことになりそう。
あとは、nuxt.configがtsファイルになっている。

<details><summary>ちなみにこっちがNuxt2のディレクトリ構成</summary>

```
.
├── .editorconfig
├── .git
├── .gitignore
├── README.md
├── components
├── node_modules
├── nuxt.config.js
├── package.json
├── pages
├── static
├── store
├── tsconfig.json
└── yarn.lock
```

</details>

### app.vue
デフォルトのエントリポイントになります。
先ほど表示されたのは、こちらのコンポーネントの内容になります。
Nuxt2の`pages/index.vue`に当たりそうです。
```vue
<template>
  <div>
    <NuxtWelcome />
  </div>
</template>
```
オートインポートされた`<NuxtWelcome />`コンポーネントが表示されています。

余談ですが、`.nuxt/components.d.ts`にオートインポート可能なコンポーネントが確認できます。
```
'NuxtWelcome': typeof import("../node_modules/@nuxt/ui-templates/dist/templates/welcome.vue")['default']
```
`/node_modules/@nuxt/ui-templates/dist/templates/welcome.vue`から呼び出されているようです。

#### app.vueの中身を書き換える
`<NuxtWelcome />`を、Hello Nuxt3に書き換えると
```vue
<template>
  <div>
    <h1>Hello Nuxt3</h1>
  </div>
</template>
```
表示が変わりました。
![スクリーンショット 2023-02-25 18.19.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639493/6a5eef75-f641-37fa-7074-b5a38c14cf60.png)

環境の構築と、読み込みの確認ができたと思います。
## まとめ
備忘録いらないくらい楽に構築できました。
Nuxt2と比べて、インストールの時間が短縮され、不要なものを削ぎ落としたシンプルな構成になっています。
UIフレームワークや、Testingフレームワークなどは別途自身でインストールする必要がありますが、すぐに稼働できるのは嬉しいです。（この選択、結構面倒だったので、他の人もそう思ってたんだなぁ...）
また、ディレクトリ構成は自分で選択して作成していく必要がありますが、自分と同じNuxt2で経験している方はそこまで苦しまないように思います。
次回はフォーム入力バインディングを使って実際にコードを書いていきたいと思います。

https://qiita.com/nishikor/items/c5e2e0682a4a7d522846