おもろいことしかやらない

🗣: バイクに乗ったり、ものづくりしたり、ひたすら寝たり。

Denoことはじめ

最近はQiitaをチェックする頻度が減っていたのですが、Nodeよりも強いjsが出たよと聞いて触らずにはいられませんでした。チュートリアルから読み取れた一部の内容を、めっちゃざっくりとまとめておきます。

※ちなみに私はNodeに関してはlocalhostHello Worldしかしたことがありません。

何が"強い"かというと、

  • 1つの実行ファイルで動作する(node_modulesは必要ない)
  • Node.jsに比べてセキュア
  • 依存性の書き方がシンプルになった

という点らしいです。

Deno自体は依存性なしでファイルを実行します。( 1つの実行ファイルで動作する)

コマンドをインストールすれば、即開始できます。 Shell (Mac, Linux):

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

ウェッブ上にあるファイルをシンプルに実行してみます。

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

https://deno.land/std/examples/welcome.tsにアクセスすると、ドキュメントページが迎えてくれます。

シンプルなHTTPリクエストをするアプリの例(セキュア)

例の通り下記のコマンドを叩くと、

deno run https://deno.land/std/examples/curl.ts https://example.com

エラーが出ます。

Download https://deno.land/std/examples/curl.ts
Warning Implicitly using master branch https://deno.land/std/examples/curl.ts
Compile https://deno.land/std/examples/curl.ts
error: Uncaught PermissionDenied: network access to "https://example.com/", run again with the --allow-net flag
    at unwrapResponse ($deno$/ops/dispatch_json.ts:43:11)
    at Object.sendAsync ($deno$/ops/dispatch_json.ts:98:10)
    at async fetch ($deno$/web/fetch.ts:591:27)
    at async https://deno.land/std/examples/curl.ts:3:13

ここで私たちはプログラムに対して、ネットワークにアクセスするための特権を明示的にしておかなければなりません。

deno run --allow-net=example.com https://deno.land/std/examples/curl.ts https://example.com

--allow-netフラグはその役割を持っています。

DenoのAPIはDenoからグローバルに参照することができます。(依存性の書き方がシンプル)

APIは下記から参照することができます。

doc.deno.land

その他

ファイルの読み込み(Ex)

for (let i = 0; i < Deno.args.length; i++) {
  let filename = Deno.args[i];
  let file = await Deno.open(filename);
  await Deno.copy(file, Deno.stdout);
  file.close();
}

これは仮にfilenameにファイルのパスが渡されていたとして、見ての通りファイルの内容が標準出力されます。

copy()はカーネル→ユーザーディレクトリ→カーネルの必要なコピーしかしていません。 ファイルからは同僚のメモリが読み出され、そのまま出力されます。これはDenoにおいてのI/O出力の普遍的な設計を表しています。

テストも書くことができます。

assertion utilitiesをimportするだけでそれが実現できます。 非同期関数についても用意があるようです。

deno.land

Chrome Developer Tool向けのデバッガの用意もあります。

インストール後にinspectを有効にすると、localhost:4500にアクセスすることでログイン中のリポジトリのjsファイルが見れるようになっています(ちょっとゾワっとする) f:id:letterneginr:20200524174524p:plain https://deno.land/manual/tools/debugger

感想

セキュリティ周りについていいお勉強になりそうだと思いました。 バックエンド色の強いチュートリアルが多かったので、今回はこれ以上深入りしないようにします^^;

Deno を参照することでテストやAPIも呼べる点がシンプルで、実装しやすそう。 jsのフレームワークを勉強して、余裕が出てきそうだったらまた触りたいです。