blog.bouzuya.net

2020-04-23 『 Denobook 02 』を読んだ / deno v0.41.0 をインストールした

Denobook 02 』を読んだ。そして deno (denoland/deno) (v0.41.0) をインストールした。

deno は V8, Rust, Tokio を使った TypeScript の処理系だ。詳細は公式の Manual の introduction などを参照すると良い。

ぼくは deno を名前や概要なら知っているけれど試していない状態だった。『 denobook 02 』を読むのに合わせて試してみることにした。

公式の Manual の setup によると次の 1 行だ。

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

macOS なら Homebrew を使って brew install deno でも良いそうだがぼくは↑にした。シェルスクリプトでインストールした場合は追加で bash の設定をすすめられる。

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

ぼくは fish を使っているのですこし違うが↑の意図する環境変数 PATH に $HOME/.deno/bin を追加する設定を追加した。

$ deno --version
deno 0.41.0
v8 8.2.308
typescript 3.8.3

動いた。


deno のリポジトリに近づく目的で↑のインストールスクリプトの内容を確かめた。

https://deno.land/x/install/install.sh

スクリプトの内容はざっと書くとこうだ。 GitHub のリリースページから OS にあった zip をダウンロードして unzip して $HOME/.deno/bin/deno に配置して実行権限を付与する。引数でバージョン指定ができる。終わり。

deno は Rust で書かれており単一の実行可能ファイルになっている。だから deno の 1 ファイルを配置しているだけだ。このあたりは公式の Manual の Philosophy にも書かれている。

Deno aims to be a productive and secure scripting environment for the modern programmer.

Deno will always be distributed as a single executable. Given a URL to a Deno program, it is runnable with nothing more than the ~15 megabyte zipped executable. Deno explicitly takes on the role of both runtime and package manager. It uses a standard browser-compatible protocol for loading modules: URLs.

Among other things, Deno is a great replacement for utility scripts that may have been historically written with bash or python.

https://deno.land/std/manual.md#philosophy


アンインストールは $HOME/.deno と環境変数の修正かな。

アップグレードは deno upgrade でできそう。詳細はそのうち見る。 dvm という nvm のような複数バージョンの切り替えもあるみたいだけど安定していないし時期尚早 (つらくても常に最新版にすべき) という気はする。


denobook 02 のうち deno を素朴に使う章は試した。 deno install に関しては一部仕様が変わってしまっているので --allow-read などの位置を変えるなどの一部の修正が必要だった。開発中 なので仕方ない。

A word of caution: Deno is very much under development.


ぼくは Rust と TypeScript の両方に興味がある。その衝突地点のひとつであるところの deno は今後も見ていく・書いていくと思う。

たとえば https://deno.land/x/install/install.sh の実体は denoland/deno_installdenoland/deno_website2/src/database.json 経由で決まっている点とか。

https://github.com/denoland/deno_website2/blob/400c8d27f26bc4aca2a2ebee4dece6af1d3ae0df/src/database.json#L572-L577

あるいはモジュールの話 https://twitter.com/bouzuya/status/1253263178059800581 とか。

とかとか。