ごらくらいふ

プログラミングしたりゲームしたり

Hello Deno

退屈を感じていたので、名前だけは聞いていた Deno を触ってみた。

https://deno.land/

今回、公式サイトトップを眺めながら hello world まで触っただけの完全に雑多なメモ。

Deno とは

  • JavaScript TypeScript のランタイムである
  • セキュアなランタイムである
    • 明示的に有効にしない限り、ファイル・ネットワーク・環境へのアクセスが不可

Deno のインストール

Deno は単一の実行可能バイナリが配布される。

Ubuntu on WSL2 の環境にインストールを試みる。 シェル環境においては、インストールスクリプトを実行すればよい。

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

Oops !!

unzip コマンドが必要だったが、環境に存在していなかった。

Error: unzip is required to install Deno (see: https://github.com/denoland/deno_install#unzip-is-required).

unzip をインストールした。ついでにzipも。

sudo apt install unzip zip

PATHを通す

export DENO_INSTALL="$HOME/.deno"
export PATH="$DENO_INSTALL/bin:$PATH"

フォーマッターや各種ツールが一つのバイナリにまとまっていて、それでなお 72MB ほどというので、キュッと収まっている印象がある。

Getting Started

deno run https://deno.land/std/examples/welcome.ts
# Download https://deno.land/std/examples/welcome.ts
# Warning Implicitly using latest version (0.90.0) for http://deno.land/std/examples/welcome.ts
# Download https://deno.land/std@0.90.0/examples/welcome.ts
# Check https://deno.land/std/examples/welcome.ts
# Welcome to Deno!

deno runでそのままスクリプトを実行できるらしい。 インストールスクリプトcurlで取って shに 流しておいて言うのもなんだが、ちょっと緊張する。 だからこそ、ファイルやネットワークや環境へのアクセスはデフォルトで遮断してあるのだなと実感した。

Downloadの部分はそのまま素直に受け取っていいだろう。 Checkはよくわからない。

スクリプトの内容は素直。

console.log("Welcome to Deno!");

再実行したら、スクリプト本体によるWelcome to Deno!だけが出力された。 スクリプトはキャッシュされるらしい。

ドキュメント

モジュールはネットワーク上にある

  • Node.js では npm を使ってパッケージをローカルに取得し、名前の解決をNode.jsに任せて import していた
  • Deno では モジュールの所在を URL で指定する
  • 標準のモジュールでさえ、インターネット上で配布されている
    • それは監査済みである、とのこと

感想

node.jsを触ったときのように、TypeScriptのコードを書いてdenoでさっと実行できるのは手軽になってよい。 eslintを足したりpretterを入れたり、@typesを入れたりと、そういう手間がなくなった。

モジュールにどう依存してるかが import 文の URL しかないので、 dependabot が仕事しにくくなりそう。 いや、grepして最新と突き合わせるだけか?

調べたいこと

  • std module さえ無い状態でできることの確認
  • stdinとstdoutの扱い方
    • とりあえずこれさえ押さえれば、何かしら使える