Deno 1.0が5月13日にリリースされました。作者はnode.jsの作者であるRyan Dahl氏なので、まず試してみる価値が十分あるでしょう。
サンプルプロジェクト
https://github.com/thundermiracle/try-deno
自分が試して簡単なREST APIを作って、感じた良い点
1. TypeScriptがビルトインで入っている
個人的に静的な解析がチーム開発にすごく重要なこと、特に技術者のレベルが高くない場合は必須だっと、考えています。TypeScript大好きですね。
2. セキュリティ面を考えると、DenoがSandboxに入って、デフォルトは安全である
例えばREST APIを起動するときに。
deno run --allow-net ./src/server.ts
--allow-net
明記しないと、APIサーバが立ち上がりません。
3. requireではなく、importをサポートする
CJSは良いんですが、今の時代はやっぱりimportですね。
nodejs
// Bad(☔☔☔)
const fs = require("fs");
Deno
// Good(🌟🌟🌟)
import { readFileStrSync } from "https://deno.land/std/fs/mod.ts";
4. awaitがトップレベルに使える
nodejs v14.3から使えるようになったが、古いプロジェクトのバージョンアップは無理っすね。
nodejs
// Bad(☔☔☔)
async function job1() {...}
async function job2() {...}
// wrapper for async functions
async function doAllJobs() {
await job1();
await job2();
}
doAllJobs();
Deno
// Good(🌟🌟🌟)
async function job1() {...}
async function job2() {...}
await job1();
await job2();
5. Goodbye、node_modules
プロジェクトごとで大量なnode_modulesファイルをインストールしなければいけないのが本当によろしくないです。少なくて削除するとき時間かかるでしょう。
Denoの場合はurl importで、Windowsの場合AppDataにダウンロードするからプロジェクトの間パッケージのシェアができ、とても便利でしょう。
nodejs
# after git clone
# Bad(☔☔☔)
cd project1-folder
npm install # tremendous duplicated node_modules
npm start
cd project2-folder
npm install # tremendous duplicated node_modules
npm start
Deno
# after git clone
// Good(🌟🌟🌟)
cd project1-folder
deno run server.ts # Deno will download & cache packages automatically if not exist
cd project2-folder
deno run server.ts # Deno will download & cache packages automatically if not exist
完了
その他の部分はexpressとすごく似ているため、大差がないです。ただただTypeScriptに好感がありすぎで、Denoの普及を期待しています。笑。