新たなJavaScript/TypeScriptランタイム Denoを触ってみた

こんにちは。サービスグループの武田です。先日リリースされた新しいJavaScript/TypeScriptランタイムであるDenoを触ってみました。
2020.05.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。サービスグループの武田です。

JavaScriptはブラウザ上で動作するものというイメージもNode.jsの登場によって変化してきました。現在ではフロントエンドの開発には欠かせないものとなっていますし、AWS界隈でもAmplifyやCDKなどでお世話になっている方も多いのではないでしょうか。

さて、そんなJavaScript界隈にまた新しい波が到来しそうです。新たなJavaScript/TypeScriptランタイムとしてDenoが先日リリースされました。ちなみに「ディーノ」と読むらしいです。

さっそくインストールから実行まで試してみました。

Denoの特徴

Denoは次のような特徴を持ちます。

  • エンジンとしてV8を採用し、Rustで構築されたランタイム
  • サンドボックスで動作し、ファイルやネットワークアクセスには明示的な許可が必要
  • TypeScriptをネイティブサポート
  • インストールは単一バイナリのみ
  • 依存関係インスペクタやコードフォーマッタを組込み機能で提供
  • 標準モジュールを提供

環境

次のような環境で検証しています。

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.4
BuildVersion:	19E287

$ echo $BASH_VERSION
5.0.17(1)-release

環境構築

Denoをインストール方法はいくつか提供されています。macOSであればHomebrew、WindowsであればChocolateyなどのパッケージマネージャーがサポートされています。またRust製のためcargoでもインストール可能です。今回はオーソドックスにインストールスクリプトを使用してみました。

macOSやLinuxであれば次のコマンドで最新バージョンがインストールできます。

$ curl -fsSL https://deno.land/x/install/install.sh | sh

ちなみにバージョンを指定することもできます。

curl -fsSL https://deno.land/x/install/install.sh | sh -s v1.0.1

インストールできたら~/.bash_profileなどに次のコマンドを追記しておきましょう。

export DENO_INSTALL="$HOME/.deno"
export PATH="$DENO_INSTALL/bin:$PATH"

eval "$(deno completions bash)"

なおコマンド補完は次のシェルに対応しているようです。

  • zsh
  • bash
  • fish
  • powershell
  • elvish

実行してみる

それではDenoでスクリプトを実行してみましょう。evalで直接スクリプトを指定する方法と、runで実行ファイルを指定する方法があります。まずはevalです。

$ deno eval "console.log([...'node'].sort().join(''))"
deno

簡単ですね。続いてrunも試してみます。ローカルファイルの指定もできますし、URLの指定もできます。

$ deno run https://deno.land/std/examples/welcome.ts
Welcome to Deno ?

恐竜がお茶目ですね。ローカルサーバーを起動するスクリプトも試してみましょう。

server.ts

import { serve } from "https://deno.land/std@0.52.0/http/server.ts";

const s = serve({ port: 8008 });
console.log("http://localhost:8008/");

for await (const req of s) {
  req.respond({ body: "Hello World\n" });
}

実行時にnetを許可する必要があります。また必要なモジュールは初回実行時に自動でダウンロードしてくれます。

$ deno run --allow-net server.ts
http://localhost:8008/

別のターミナルでアクセスしてみます。

$ curl http://localhost:8008/
Hello World

TypeScriptのコードも簡単に実行できました。すばらです。

まとめ

まずはインストールしていくつかのスクリプトを実行してみました。インストール自体も簡単ですし、TypeScriptのスクリプトも簡単に実行できました。いきなりNode.jsを置き換えるものではありませんが、興味を持ってウォッチしていきたいです。

参考リンク