Edited at

Deno: インストール〜Webサーバ起動

Denoはまだ開発中で1.0になっていません。そのため、この記事の内容は将来的に変更されるかもしれませんのでご注意ください。

この記事はmacOS Mojaveで行った内容です。

Unix環境の方は記事中のコマンドは問題なく実行できると思いますが、Windowsの方は試せていません。もし動かなければGitHub - denoland/deno: A secure TypeScript runtime on V8の内容を見てください。


Denoとは

Node.jsのoriginal authorであるRyan Dahl氏が開発しているTypeScriptをV8で動かすラインタイム実行環境です。

DenoはNode.jsの反省点を活かして開発しています。

Ryan Dahl氏がjsconf.euでそのことについて話している動画がYouTubeにあるので興味がある方はぜひ御覧ください。

Node.jsに関する10の反省点 Ryan Dahl - JSConf EU 2018

また日本語で書かれた記事は以下の記事が詳しいです。

Node.js における設計ミス By Ryan Dahl - from scratch


インストール

インストール方法はREADMEにも記載されています。

shellでは以下のコマンドを実行

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

power shellでは

iex (iwr https://deno.land/x/install/install.ps1)

この時点でdenoコマンドが使えるようになっているので、試しに https://deno.land にあるサンプルを実行してみます。

$ deno https://deno.land/thumb.ts

👍


Hello, World

試しにHello, Worldを表示するプログラムをTypeScriptで書いて実行してみます。

console.log('Hello, World');

$ deno hello.ts

Hello, World


Webサーバを起動する

本題のWebサーバを起動します。

import { serve } from "https://deno.land/x/http/mod.ts";

const addr = '127.0.0.1:8080';
const s = serve(addr);

async function main() {
for await (const req of s) {
req.respond({ body: new TextEncoder().encode('<h1>Hello World</h1>') });
}
}

main();
console.log(`Server is running. Access to http://${addr}`);

http.tsというdeno標準ライブラリを使います。

将来的にはTop-level awaitもサポートされるので、そうなればasync関数を作って呼び出すようなことをしなくても良いかもしれません。

$ deno hello_http.ts --allow-net

Server running on 127.0.0.1:8080. Access to http://127.0.0.1:8080

実行時に--allow-netというオプション引数を付与しています。

denoはデフォルトでインターネット上からアクセスできません。ユーザーが許可しない限り、ネットワークにアクセスできないためセキュアです。

ブラウザからlocalhost:8080にアクセスしてHello, Woldが表示されればWebサーバは起動しています。


あとがき

Denoはまだまだプロダクションでは使うには若すぎますが、プロダクションでも使えるようになってきたら、人気に火がつくかもしれません。

また、内部はRustを使って開発されており、tslintやprettierといったTypeScript使いに馴染みのあるツールが使われていてモダンな技術スタックになっていて面白いので、今後もWatchし続けたいと思います。

最後までお読みいただきありがとうございます。質問や不備があればTwitter(@shisama_)またはコメント欄までお願いいたします。