お金をかけずにサーバーの勉強をしよう

Denoインストール

2024年10月13日
メニューへ戻る

TypeScript実行環境の Deno(ディーノ)をインストールします。

サーバーサイドの JavaScript実行環境といえば今でも Node.jsが鉄板ですね。

なお Node.jsのインストールについては、Node.jsインストール に書いています。

私は Node.jsの環境を作って初めて JavaScriptのコードを書いたのですが、言語仕様がこの数年でどんどん変わってしまっているためか、技術ブログ等をあたってもどれが最新の書き方なのかが未だに良く分かっていません。

そして関数は基本的に前の処理を待たずに実行される非同期処理がデフォルトの動作で、処理の順番をつけたければそういう風に書かないといけない。

同期処理させるにも asyncを使うか Promiseかで書き方が違っていて覚えるのに大変苦労しました。
昔ながらの WEBシステムを Node.jsと Expressフレームワークで作ってはみたものの、同期処理/非同期処理の棲み分けに悩みましたね。

極めつけは TypeScriptでした。

C++や Javaでオブジェクト指向プログラミングを習い覚えた身としては、JavaScriptではデータ型を特定しないのにどうにも馴染めず、一方で TypeScriptではデータ型もあればクラスも使えるんだという話を聞いて「じゃTypeScriptにしよう。Node.jsで動くらしいし。」と思いました。

しかし実際は素の Node.jsだけでは動かず、TypeScriptモジュールをインストールして、更に実行前にトランスパイルという作業で JavaScriptに書き換えないといけないのだとか。

一連の作業を自動化してしまえば良いのでしょうが、「そんな面倒なことをする前に JavaScriptをちゃんと覚えよう…」と TypeScriptからは離れてしまいました。

ただ TypeScriptの方が JavaScriptよりも楽に書けそうだという心残りがありましたので、「TypeScriptをそのまま実行できりゃなぁ…」という薄っすらとした意識は持っていたところ、もう大分前に Denoというものが開発されていたことを知りました。

Deno
Denoは Node.jsと同じで、元々 WEBブラウザ用のプログラミング言語であった JavaScriptを PC上で実行するためのプログラムです。
Node.jsを作ったライアン・ダールさんが、Node.jsを作ったときの後悔から作ったものなのだそうです。

特徴はいくつもありますが、私的にはトランスパイルなしに TypeScriptをそのまま実行できる(厳密には内部でJavaScriptにしているらしい)ので、やっと TypeScriptの勉強ができるようになって嬉しかったです。

何はともあれ、まずは味わってみるのが信条ですので早速インストールと洒落込みます。

2024年10月13日時点での最新バージョンは 2.0です。

環境は Lubuntu 24.04でやっていますが、他のディストリビューションやバージョンでも何も変わらないでしょう。

インストール手順は、Denoのホームページにあります。
Installation

Lubuntuですから [Linux]タブを選びます。 Denoのインストール

では手順に沿ってインストールしてみましょう。

最近の流行りで個々のユーザーのホームディレクトリ下にインストールされるタイプですね。
ですのでインストールに管理者権限はいらないものの、個々のユーザー毎にインストールしないといけないことになります。
※ホームディレクトリの [.profile] [.bashrc] の両ファイルが書き換えられます。

subro@Lubuntu2404:~$ curl -fsSL https://deno.land/install.sh | sh
######################################################################## 100.0%
Archive:  /home/subro/.deno/bin/deno.zip
  inflating: /home/subro/.deno/bin/deno
Deno was installed successfully to /home/subro/.deno/bin/deno
Edit shell configs to add deno to the PATH? (Y/n) Y

info: backing '/home/subro/.profile' up to '/home/subro/.deno/.shellRcBackups/.profile.bak'
info: backing '/home/subro/.bashrc' up to '/home/subro/.deno/.shellRcBackups/.bashrc.bak'

Deno was added to the PATH.
You may need to restart your shell for it to become available.

Set up completions?
> [ ] bash  (Y/n) [Enter]キー

Run '/home/subro/.deno/bin/deno --help' to get started

Stuck? Join our Discord https://discord.gg/deno

インストールできました。

Denoの本体は [~/.deno/bin/deno] という実行ファイルです。
このファイルが 1つあるだけというシンプルさで、これで何もかもやるんですね。

subro@Lubuntu2404:~$ ls -l .deno/bin/
合計 143208
-rwxr-xr-x 1 subro subro 146644560 10月  9 03:43 deno

インストールはこれで完了です。

[PATH]環境変数に denoコマンドの場所が追加されていますので、一度ターミナルを閉じて改めてターミナルを起動すると [PATH]環境変数が有効になります。

が、面倒くさいので以下の通り実行して、[.bashrc]ファイルを読み込ませてしまいます。

subro@Lubuntu2404:~$ . .bashrc

denoコマンドを見つけられるようになっているか whichコマンドで確認します。

subro@Lubuntu2404:~$ which deno
/home/subro/.deno/bin/deno

これで良さげです。

[deno]を実行してみます。

subro@Lubuntu2404:~$ deno
Deno 2.0.0
exit using ctrl+d, ctrl+c, or close()
REPL is running with all permissions allowed.
To specify permissions, run `deno repl` with allow flags.
>

うまく動いています。

Node.jsの nodeコマンドと同じように、専用のコマンドプロンプト(>)になりました。

Ctrl+dで終了です。

サーバー環境を作るとすると、Denoで作ったプログラムを実行する専用のユーザーを作って、そのユーザーのホームディレクトリで上の作業をする程度しかやることがなさそうですね。


では TypeScriptで WEBサーバーを作ってみましょう。
チュートリアルにあるものを動かすだけですが。

HTTP Server: Hello World
ここに載っているものを実際に動かしてみます。

[~/work/deno]デイレクトリをワーキングディレクトリにしていますのでご注意下さい。

[~/work/deno/HelloWorld.ts] という名前で TypeScriptファイルを作りました。

function handler(_req: Request): Response {
  return new Response("Hello, World!");
}

Deno.serve(handler);

TypeScriptのソースファイルの様子。

subro@Lubuntu2404:~/work/deno$ ls -l
合計 4
-rw-rw-r-- 1 subro subro 109 10月 13 07:24 HelloWorld.ts

この TypeScriptファイルを実行します。

subro@Lubuntu2404:~/work/deno$ deno run --allow-net HelloWorld.ts
Listening on http://0.0.0.0:8000/

[--allow-net]オプションは、ネットワークの使用を許可するというものです。
ネットワーク以外にも、ファイルの読み書きを許可するディレクトリを指定できたりします。

Denoはセキュリティを高めるため、実行環境でサーバーリソース制限を非常に強くしており、何もオプションを使用しないと何もできないと考えた方が良いです。

このセキュリティ強化も Denoの売りの一つになっています。

[8000/tcp] で待ち受けているようですので、WEBブラウザでアクセスしてみました。
URLは [http://localhost:8000] です。
Denoのサンプル画面 1
ちゃんと動いていますね。

あとはもうお好きなように TypeScriptを書いて実行していけば良いのではないでしょうか。

私は「Denoすげ〜な」「Deno最高!」「婆さんはしつこい。Node.jsは用済み。」とか思っていたんですが、Dinoの刺客(TypeScript実行環境) Bunがリリースされています。

Bun
Node.jsの5倍、Denoの2倍速いと謳っています。

オマケで Deno製の WEBフレームワークがありますのでご紹介します。
FRESH

ここでは「Fresh(Deno製フレームワーク)」で扱っています。

Denoと FRESHは絵が可愛いので、女性エンジニアに受けるような気がします。
そして女性エンジニアに受けが良いと自然と男共もそれに倣うのが日本 IT界の嗜み。
日本では Bunを蹴散らすかも知れません。

サーバーサイド JavaScript界隈も賑わっています。

Node.jsからの離脱を促すかと思われた Denoも npmパッケージ利用をできるよう方向転換してきました。

Node.jsの牙城が崩れることになるのか、今後何を担ぎ上げれば良いのか、時間というリソースを投下するのに値する新技術は何か、しばらく目が離せない状況になってきました。


Denoの日本語書籍は無いようです。
実行環境がこんなにシンプルじゃ仕方ないかも知れません。