Denoがリリースされたので触ってみる

2020-05-14

Denoのv1.0が出たので、雑に触ってみた。

Deno

  • Node.jsの作者が作った新しいJavaScripとTypeScriptのランタイム
  • Typescriptがビルトイン
  • package.jsonのようなパッケージ管理はなく、すべてURLでインポートする。
  • テストもフォーマッターも入っている。
  • 読み方はディーノだと思う。
  • コアの部分がRust

https://deno.land/v1

インストール

自分は、macなのでhomebrew形式でインストールしてみる。

brew install deno

その他のインストール方法は以下を参照。

https://deno.land/manual/getting_started/installation

Hello world

以下コマンドを実行する

$ deno run https://deno.land/std/examples/welcome.ts

Welcome to Deno 🦕

恐竜が可愛い。

  • 公式ではrunコマンドがついているので付けた方がいいのかも。後ほど実行したサーバー起動のコマンドはrunなしだと失敗した。

安全なランタイム

  • 以下のコマンドを実行する
deno run https://deno.land/std/examples/curl.ts https://example.com

ただこれだとエラーが返ってくる。Denoは安全なランタイムが売りなので、許可フラグをつけて実行しないといけない。 これを利用して自分のブログRyo Katsuse BlogのHTMLを返すコマンドを実行する

deno run --allow-net=ryokatsu.dev https://deno.land/std/examples/curl.ts https://ryokatsu.dev/

長くなるから結果は記載しないが、レンダリング後のHTMLが返ってくるのが確認できた。

サーバーの起動

公式にあるサンプルをもとにサーバーを起動してみる。

適当なserver.tsファイルを作成する。

import { serve } from "https://deno.land/std@0.50.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 run  --allow-net server.ts

これでサーバーが起動できる。ちなみにNode.jsだと以下。

var http=require('http');
var server = http.createServer(function(req, res) {
   res.writeHead(200, {'ContentType’: 'text/plain'});
   res.end('HelloWorld');
});
server.listen(8000);

その他

  • 現時点でNode.jsから移行することは厳しいと思う。

    • ブログのボトルネックにも記載があったけどTSCが遅いみたい。今後型チェックはRustになる。
    • package管理しているものの中にDenoに置き換え可能なものが揃っていなそう。
  • フロントエンド開発はまだ厳しい(Deno澤さんも何かのLTで発言してた。)

TODO

  • どんなAPIがあるか確認してみる

ソースコードはこちらのリポジトリにあります。

Google Analyticsを使っています。