最近よく耳にする(目にする)JavaScript及びTypeScriptのランタイム環境のDenoに触ってみようと思いました。
そこで、ここではMacにDenoをインストールする方法を見ていきます。
ちなみにDenoは「ディーノ(ディノ)」と読むようです。「デノ」ではありません。
DenoをMacにHomebrewでインストール
それではDenoをMacにインストールする方法を見て行きましょう。
Denoの公式サイトに各環境毎の方法が書いてあります。
私の環境ではHomebrewをインストールしているので、Homebrewを使ってインストールします。
ちなみにHomebrewのインストール方法はこちらです。
では、DenoをMacにインストールして行きましょう。
ターミナルを起動して、次のbrewコマンドを使えば簡単にインストールできます。
brew install deno
このコマンドを実行するだけでDenoのインストールは完了です。
シェルでMacにDenoをインストール
Homebrewをインストールしていなくても、MacにDenoはインストールできます。
ターミナルから次のコマンドを実行します。
curl -fsSL https://deno.land/x/install/install.sh | sh
これでインストール自体はできました。このままでも実行することはできますが、PATHを通して使えるようにしておきましょう。
インストール完了時にもターミナルに設定するパスの表示があるはずです。
ここでは、.zshrcファイルにパスを記述します。
.zshrcファイルをターミナルから開きます。
open ~/.zshrc
次のように開いた.zshrcに記述します。
export DENO_INSTALL="/Users/[ホーム名]/.deno"
export PATH="$DENO_INSTALL/bin:$PATH"
[ホーム名]のところは各自のMacの設定によります。
これを保存して、ターミナルを再起動して完了です。
Denoを実行してみる
MacにDenoをインストールすることができたので、Denoをターミナルから実行して見ましょう。
ターミナルから起動するには、deno と入力するだけです。
deno
実行すると次のように対話型のシェルが立ち上がります。
% deno
Deno 1.0.5
exit using ctrl+d or close()
>
プロンプト に足し算などを入力して実行すると、値が返って来ます。
Denoを閉じる時は、ctrl+d か close()で終了できます。
いくつかファイルを作成して実行してみます。
まず、TypeScriptでHello World的なコードを書いてみましょう。
const greeting: string = "Hello, Deno!";
console.log(greeting);
任意のファイル名(ここではlesson.ts)を付けて保存します。
ターミナルからのファイルの実行コマンドは次のような形になります。
deno run [ファイル名]
実際にlesson.tsファイルを実行してみましょう。
deno run lesson.ts
コマンドを実行すると、ターミナルに次のように返って来ます。
% deno run lesson.ts
Compile file:///Users/[ファイルの保存場所]/lesson.ts
Hello, Deno!
Hello, Deno! と表示されているのがわかります。
また、公式サイトにある次のサンプルコードをターミナルから実行してみます。
deno run https://deno.land/std/examples/welcome.ts
自分のPC上の保存したファイルではなく、公式サイト上にあるファイルを実行するという形ですね。
次のように結果が返って来ます。
% deno run https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕
ここではTypeScriptのファイルでやってみましたが、もちろんJavaScriptファイルでも可能です。
また別の機会にDenoについては詳しくやっていこうと思いますが、もう一つ公式サイトのサンプルを実行してみます。
import { serve } from "https://deno.land/std@0.57.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" });
}
これをlesson.tsファイルとして保存して、ターミナルから実行してみます。
% deno run lesson.ts
error: Uncaught PermissionDenied: network access to "0.0.0.0:8000", run again with the --allow-net flag
こんな風にエラーが表示されました。こういったところが、Denoの安全性というものの一つのようです。
指示にあるようにflagを付けてターミナルから実行してみます。
% deno run --allow-net lesson.ts
http://localhost:8000/
サーバーが起動します。
http://localhost:8000/ にブラウザからアクセスすると、「Hello World」と表示されるのが確認できます。[control] + [C]キーを押すことで、サーバーはストップすることができます。
ここではネットワークにアクセスするに当たってDenoを実行する時の許可のオプションを使いましたが、Denoを実行する際の安全性の確保のためのオプションは細かく設定されています。それは次のhelpコマンドでターミナルから確認することができます。
deno run --help
ターミナルに、次のように表示されます。
% deno run --help
deno-run
Run a program given a filename or url to the module.
By default all programs are run in sandbox without access to disk, network or
ability to spawn subprocesses.
deno run https://deno.land/std/examples/welcome.ts
Grant all permissions:
deno run -A https://deno.land/std/http/file_server.ts
(略)
USAGE:
deno run [OPTIONS] <SCRIPT_ARG>...
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
--cached-only
Require that remote dependencies are already cached
--cert <FILE>
Load certificate authority from PEM encoded file
-c, --config <FILE>
Load tsconfig.json configuration file
-h, --help
Prints help information
(略)
ARGS:
<SCRIPT_ARG>...
script args
以上、簡単にDenoの実行方法について触れてみました。
Denoをアップデートする
またDenoはまた新しいものですから、仕様が追加や変更が施されてドキュメントなどの実行方法では簡単なものでもうまく動かないこともあると思います。
その場合は、Denoのバージョンが変わっていて、古いバージョンでは実行できないコマンドだったりすることもあります。
その時はDenoのバージョンを最新のものに更新してみましょう。
それには次のコマンドをターミナルから実行するだけです。
deno upgrade
これだけでDenoの最新バージョンがインストールされて利用できることになります。
それにしても、Node.jsをインストールする場合と比べて作業環境の構築がすごく楽ちんだと感じました。
Denoが話題になっているのもわかるような気がします。
最後に
DenoをMacにインストールする方法についてまとめてみました。
Denoをターミナルから対話型シェルで実行する方法、ファイルの実行方法、Denoのアップグレード方法について扱いました。
Denoについてはまた別の機会に詳しくまとめていきたいと思います。