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_install で denoland/deno_website2 の /src/database.json
経由で決まっている点とか。
あるいはモジュールの話 https://twitter.com/bouzuya/status/1253263178059800581 とか。
とかとか。