未経験からのDeno入門|出力

概要

前回環境構築を行い、外部ファイルで Hello World の出力を試したかと思います。

今回は自作で Hello World と、HTTP サーバー起動してみます。

ログ出力

mkdir deno
cd deno
touch log.ts
log.js
console.log("hello world");

実行コマンドを打ち込む

deno run log.ts

HTTP リクエストの要求

Deno アプリケーションで HTTP サーバーを作成します。

Deno の公式 web サイトに、サンプルコードがあるのでそれを流用します。

helloworld.ts

import { serve } from "https://deno.land/std@0.88.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
  req.respond({ body: "Hello World\\n" });
}

コード解説

Deno はローカルにコアモジュールを持ちません。 また別途インストールする必要もありません。外部から HTTP 接続するためのモジュールをインポートしています。

モジュールのインポートをするには、https://deno.land/std/http/server.tsのURLをESモジュール構文で追加します。またこのURLは常に最新のモジュールをインストールします。

import { serve } from 'https://deno.land/std/http/server.ts'

そしてコードを見ると、Node.js の構文をまったく一致しないことに気が付くかと思います。

const s = serve({ port: 8000 })
console.log('http://localhost:8000/')
for await (const req of s) {
  req.respond({ body: 'Hello World\\n' })
}

server()から返却されたオブジェクトをループして、サーバからの要求に応答しています。

このコードを実行してみましょう。

deno run helloworld.ts

ネットラークエラーが出力されました。

Deno はとても安全なランタイムです。

そのため、ネットワークへのアクセス権などの【特権】を持っていません。

ネットワークアクセス権を持たせプログラムの実行を許可するために、許可フラグを与える必要があります。

deno run --allow-net helloworld.ts

これでポート 8000 でサーバーが開かれました。

以下にアクセスできるはずです。

総括

実際に起動までしてみましたが。Node.js と比べセキュリティ面で優秀さが少しでてきました。