Denoを触ってみる
Denoとは
Deno(ディーノ)とは、JavaScript/TypeScriptのランタイム環境です。
Node.jsを開発したRyan Dahlが開発しており、2018年に開始されたJsConfで「Node.jsに関する10の反省点」というタイトルで発表されました。
では、具体的にNode.jsのどのような部分が反省点だったのでしょうか?
- APIの設計においてPromiseを使用しなかったこと
- 古いGYPビルドシステムを採用したこと
-
package.json
とnode_modules
を採用したこと - モジュールのインポートで拡張子を除外したこと
- index.jsによりモジュール依存関係の解決を採用したこと
- JavaScriptのコアエンジンV8によるサンドボックス環境を破壊するような実装をしたこと
...
と挙げています。
それらの反省点を踏まえて、開発されたのがDenoです。
ロゴは、🦕ですね。
ちなみに、DenoはNodeのアナグラムとなっており、nodeをアルファベット順に並び替えるとDenoとなります。
Denoの特徴に関しては、他の記事で紹介されているので、詳細はそちらをご確認ください。
インストール
$ brew install deno
$ deno -V
deno 1.33.3
それでは、試しにcreate-react-app
でアプリケーションを作ってみたいと思います。
$ deno install -A --unstable -n deno-create-react-app https://deno.land/x/create_react_app/mod.ts
$ deno-create-react-app init deno-sample
$ cd deno-sample
$ deno-create-react-app run
触ってみた第一印象は、起動が爆速だなという印象ですね。
あとは、無駄なコンソール出力も少なくミニマムな印象があります。
それでは、アプリのディレクトリ構造を見てみましょう。
びっくりするぐらい中身が少ないですね...
試しに、npmでcreate-react-app
を実行した場合は、このような感じです。
比較すると、node_modules
がなく、package.json
がないことが印象的です。
また、Reactの設定ファイルを見てみると、import
部分にURLが直接記述されています。
export * as ReactDOM from "https://jspm.dev/react-dom@17.0.0"
import * as React from "https://jspm.dev/react@17.0.0"
const { default: any, ...rest } = React
const react = React.default
export { react as React }
export { rest as react }
これを見て分かる通り、node_modules
のようにパッケージをダウンロードするのではなく、レジストリと呼ばれる場所を参照しています。
ファイルをコンパイルする時に、import
に記載されたモジュールをローカルにダウンロードし、キャッシュ化させています。
キャッシュ化されているので、コンパイル時に都度ダウンロードすることはないようです。
ただ、create-react-app
のソースコードを見てみると、Reactを毎回URLでimportするのが煩わしいためか、deps.ts
というファイルでReactを一度読み込んで、exportしてページで流用する方法を取っています。
トラブルシューティング
-
create-react-app
を入れようとしたら、正常にインストールはできているようなんですが、PATHが通っていないと怒られました。
$ deno install -f -A --unstable -n deno-create-react-app https://deno.land/x/create_react_app/mod.ts
/Users/user/.deno/bin/deno-create-react-app
ℹ️ Add /Users/user/.deno/bin to PATH
export PATH="/Users/user/.deno/bin:$PATH"
- 自分の試し方が悪かったのか、
deno-create-react-app run -w
を実行しても、ホットリロードが実行されませんでした...
Discussion