今回はサクッとTypeScriptの開発環境を用意するには何がいいのかなと思って調べたところ
Vite が良いらしいという情報を得たので、じゃぁちょっと勉強してみようかなということでやってみようと思う。
そもそも Vite(ヴィート) とは?
- Viteは、フロントエンド開発のための超高速ビルドツール/開発サーバー
- 主にWebアプリケーションを作るために使用します
- Vite自体はNode.js上で動作するCLIツールなので、必ずNode.jsが必要
- 主にReactやVueなどのWebフレームワークと組み合わせて利用します
とのこと
環境構築
React
+TypeScript
を利用する開発環境の構築例
npm create vite@latest my-app -- --template react-ts
cd my-app
npm install
npm run dev
久しぶりにNode.js
を使ったのでnpm
のバージョンが古いとか言われたり
npm
のバージョンをあげようとしたらそもそもNode.js
のバージョンが古いとか言われたり
そもそも俺はNode.js
のバージョン管理に何を使っていたんだったか...思い出せねぇ...と
紆余曲折あったものの、上記のコマンドですんなり環境構築、実行することが出来ました。
Reactはいらないんだよな、HTMLでjsのようにtsが使えたらなぁ...
というニーズにも応えてくれるようで、その場合は以下のコマンドで環境を構築すればいい。
npm create vite@latest my-app -- --template vanilla-ts
cd my-app
npm install
npm run dev
--template vanilla-ts
を指定することで、html
でts
が普通に使える世界に転生できる。
個人的に求めていたのはこれかもしれない、jsは好きだけど型がない、かといってtsは標準では使えないのでなんかしら環境構築が必要だからだるいなぁ。
もっとサクッっとそういう環境が作れないもんかね...というおじさんのニーズを満たしてくれる可能性を感じる
結構前からParcelとかゼロコンフィグを謳ったものはあったが(アレも良かったけど)
結構ごちゃごちゃして重かったり、長々と使っていると結局webpackにするかってなることも多かった
Viteはそんなおじさんの期待に応えられるのではないか、いやまだ使ってないからわからないが
希望を感じている。
SPAではなく昔ながらのマルチページサイトにしたい場合は?
Reactを利用するとSPA構成になるが、vanilla-ts
など、html
でts
が使えるだけのシンプルなセットアップにした場合について
基本的なフォルダ構成、ファイル配置について
Vite
はプロジェクトルート直下にhtml
ファイルを置けばページとして扱われるようだ
/public
ではなくプロジェクトルート、またsrc/
はあくまでJS/TS/CSS
などを入れる場所とのこと
my-project/
├─ index.html ← トップページ
├─ about.html ← 別ページ
├─ contact.html ← 別ページ
├─ vite.config.ts ← 必要ならここで設定(必要に応じて自分でファイルを作る)
├─ src/
│ ├─ main.ts
│ ├─ about.ts
│ └─ contact.ts
├─ public/
├─ tsconfig.json
└─ package.json
これでnpm run dev
を実行すればサーバーが立ち上がりURLを指定すれば各ページにアクセスができる。
また開発時は特に問題ないが、ビルドをする場合は設定に追加が必要になる。
npm run build
でビルドを実行した場合、デフォルトではindex.html
しかビルドされないので、about.html
など追加ページがあればvite.config.ts
を作成し設定を追加してやる必要がある。
以下のようにすれば、npm run build
をした際に、about.html
とconcat.html
もビルドに含まれ、求めている結果が得られるだろう。
import { defineConfig } from 'vite';
import { resolve } from 'path';
export default defineConfig({
build: {
rollupOptions: {
input: {
main: resolve(__dirname, 'index.html'),
about: resolve(__dirname, 'about.html'),
contact: resolve(__dirname, 'contact.html'),
},
},
},
});
ちなみにvite.config.ts
はデフォルトでは存在しない。
それはVite
がゼロコンフィグを重視しているからだろう。
私自身も設定がだるいと思っているからこういうVite
のようなツールを探すわけだが、そう思うと早速邪道を歩み始めたなという気はしなくもない。
話を元に戻す。
また、このファイルを作成するとおそらくpath
なんてないぞと、型定義が見つからないというエラーが出るはずだ。
これはVite
がブラウザ向けのプログラムを書くのが主であり、Node.js
の型情報などは含まれていないためである。
なのでimport
したvite
とかpath
に関する型情報が必要であれば自分で入れる必要がある。
結論をいえば以下のコマンドを実行すれば解決だ。
nom install -D vite @type/node
HMRが効かない
最近ではおなじみのHMR、ソースコード変更したらブラウザに変更が勝手に反映される。
古の時代を生きたおじさんからすると便利な時代になったものだと思うが
ソースコードを変更してからF5を推すまでが一連の動作として体に染みつきすぎており
HMRで変更されてるのにF5を押して「あっ...」となるおじさんも大量にいたであろう。
話を元に戻す。
vanilla-ts
を指定してプロジェクトを作るとデフォルトだとHMRは動作しない。
正直そこまで不便は感じないが、HMRがないとダメだと言う軟弱モノはHMRを使いたいファイル内に以下のソースコードを記載する必要がある。
if (import.meta.hot) {
import.meta.hot.accept();
}
また処理によってはこの方法ではうまくHMRが動作しないこともある、その時はHMRの仕組みを理解していれば自己解決できるだろう。
それにわざわざこんなレガシー環境を欲しがる人は素直にF5でいいだろとも思う。
まとめ
数行のコマンドでjsさながらにtsが使える開発環境が用意されるというのは実にありがたいことである
どのプログラムの歴史もだんだんとビルド工程が複雑になり、makefileとかいろいろ
ビルドプロセスを組む時代を経て、テンプレかされるという一途をたどり安定する
webの世界もだんだんとそうなってきているのだろうか
無職だからこれが実用に耐えうるのかどうかしらないが、個人的な用途としては
充分満たされるレベルに整ってきている
「あぁ、ブラウザで最初からtsが使えたらいいのに」という願いはほぼ叶ったに等しいレベルへ到達していると感じる。
そして思う、次はブラウザで最初からテンプレートエンジンが使えたらいいのに...と