Denoがリリースされたので触ってみる
Denoのv1.0が出たので、雑に触ってみた。
Deno
- Node.jsの作者が作った新しいJavaScripとTypeScriptのランタイム
- Typescriptがビルトイン
- package.jsonのようなパッケージ管理はなく、すべてURLでインポートする。
- テストもフォーマッターも入っている。
- 読み方はディーノだと思う。
- コアの部分がRust
インストール
自分は、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があるか確認してみる