🦕
Deno v1.0を触ってみる
Deno(ディーノ)とは
- https://deno.land/ (opens new window)
- 今月v1.0がリリースされたJavaScriptとTypeScriptのセキュアなランタイム
- Node.jsの開発者がつくった改良版
そのままでTypeScriptがサポートされてるのがいい感じ。恐竜が可愛い。
触ってみる
インストール
インストール方法はいくつかサポートされている。Homebrewで導入。
$ brew install deno
サンプルコードの実行
$ deno run https://deno.land/std/examples/welcome.ts
Download https://deno.land/std/examples/welcome.ts
Warning Implicitly using master branch https://deno.land/std/examples/welcome.ts
Compile https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕
https://deno.land/std/examples/welcome.ts (opens new window)には何が書いてるのかみてみる。
console.log("Welcome to Deno 🦕");
リモートにホスティングされたTypeScriptのコードをダウンロードしてコンパイルして実行できる。
さらに公式サイトにあるソースコードをコピペして実行してみる。
import { serve } from "https://deno.land/std@0.52.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" });
}
2行目移行のインデントがちょっと違和感。 実行してみる。
$ deno run hello.ts
Download https://deno.land/std@0.52.0/http/server.ts
# 〜中略〜
Download https://deno.land/std@0.52.0/path/_util.ts
Compile file:///Users/shtnkgm/Desktop/hello.ts
error: Uncaught PermissionDenied: network access to "0.0.0.0:8000", run again with the --allow-net flag
at unwrapResponse ($deno$/ops/dispatch_json.ts:43:11)
at Object.sendSync ($deno$/ops/dispatch_json.ts:72:10)
at Object.listen ($deno$/ops/net.ts:51:10)
at listen ($deno$/net.ts:152:22)
at serve (https://deno.land/std@0.52.0/http/server.ts:261:20)
at file:///Users/shtnkgm/Desktop/hello.ts:2:13
さっきよりもいろいろダウンロードされた後に、Uncaught PermissionDeniedエラーがでた。
--allow-net
オプションをつけないとデフォルトのセキュリティ設定では実行できないらしい。
$ deno run --allow-net hello.ts
http://localhost:8000/にブラウザでアクセスするとHello (opens new window) Worldが表示された
runコマンドのhelpをみてみる
$ deno run --help
--allowのものを抜粋するとこんな感じ。
OPTIONS:
-A, --allow-all
Allow all permissions
--allow-env
Allow environment access
--allow-hrtime
Allow high resolution time measurement
--allow-net=<allow-net>
Allow network access
--allow-plugin
Allow loading plugins
--allow-read=<allow-read>
Allow file system read access
--allow-run
Allow running subprocesses
--allow-write=<allow-write>
Allow file system write access
runコマンド以外のサブコマンド
$ deno --help
fmtでソースコードのフォーマットやtestでユニットテスト実行が標準できそう。
SUBCOMMANDS:
bundle Bundle module and dependencies into single file
cache Cache the dependencies
completions Generate shell completions
doc Show documentation for a module
eval Eval script
fmt Format source files
help Prints this message or the help of the given subcommand(s)
info Show info about cache or info related to source file
install Install script as an executable
repl Read Eval Print Loop
run Run a program given a filename or url to the module
test Run tests
types Print runtime TypeScript declarations
upgrade Upgrade deno executable to given version
コードフォーマットしてみる
$ deno fmt hello.ts
さっき違和感を感じたインデントが修正された。
import { serve } from "https://deno.land/std@0.52.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" });
}