FrontWorks.dev

【Deno】v2にもなったので改めてDenoを使ってみた

投稿日
最終更新日

なにかと話題に上がっているDenoですが、やっぱり使い慣れているNode.jsをずっと使い続けていました。

ですが、先日v2がリリースされたのをきっかけに色々見ていたらめちゃくちゃ進化していたので、現在は個人プロジェクトで試しています。

本日は改めて、Denoの概要とざっくりHello Worldを試してみたいと思います!

Denoとは?

Denoは、Node.jsの生みの親であるRyan Dahl氏が設計した次世代JavaScript/TypeScriptランタイムです。Denoの主な目的は、Node.jsの設計上の課題を克服することです。

特徴

  • セキュリティがデフォルトで有効

    • Denoでは、ファイルシステムやネットワークなどへのアクセスがデフォルトで制限されています。必要な権限をコマンドラインで指定することで、意図しない動作を防ぎます。

  • TypeScriptがネイティブサポート

    • TypeScriptのコードをそのまま実行できます。コンパイルの手間を軽減します。

  • モジュール管理の改善

    • npmを使用せず、URLベースのモジュール管理を採用しています。package.jsonの管理が不要になります。

  • シンプルな標準ライブラリ

    • Denoには標準で高品質なユーティリティが多数含まれています。

現代のフロントエンドでは当たり前のようにTypeScriptで書かれているのでデフォルトで対応しているのは良いですね。

標準ライブラリも便利な物が多いイメージです。

それでは次はインストールです。

インストール方法

以下のコマンドを使用してください。

macOS/Linux

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

homebrewでもインストールできます。

brew install deno

Windows

PowerShellを管理者権限で開き、以下のコマンドを実行します。

iwr https://deno.land/install.ps1 -useb | iex

その他、詳しい内容はインストール方法を参考にしてください。

確認

インストール後、以下のコマンドでバージョンを確認できます。

deno --version

使い方

ここでは、Denoを使った簡単なスクリプトを作成し、実行してみます。

Hello World

以下のコードを hello.ts という名前で保存します。

console.log("Hello, Deno!")

実行するには次のコマンドを入力してください。

deno run hello.ts

以下の表示が出れば成功です!

Hello, Deno!

権限を使ったスクリプト

次のコードはファイルの内容を読み取るスクリプトです。

const decoder = new TextDecoder("utf-8");
const data = await Deno.readFile("example.txt");
console.log(decoder.decode(data));

example.txt には以下のような内容を入れておきました。

This is example.txt.
Hello, World!

このスクリプトを実行する際は、ファイルアクセスの権限を付与する必要があります。

deno run --allow-read readFile.ts

そうすると、 example.txt の中身が表示されたかと思います。

権限について

ちなみに、Denoはセキュリティを重視して設計されており、スクリプトがシステムリソースやネットワークにアクセスする際に、明示的な権限を要求します。

これにより、悪意のあるスクリプトがシステムに被害を与えるリスクを最小限に抑えることができます。

| 権限フラグ | 説明 |

|--|--|

|--allow-read | ファイルやディレクトリを読み取るための権限。|

|--allow-write | ファイルやディレクトリを書き込むための権限。|

|--allow-net |ネットワークアクセスを許可する権限。|

|--allow-env|環境変数へのアクセスを許可する権限。|

|--allow-run|外部コマンドを実行する権限。|

|--allow-ffi|外部関数インターフェース (FFI) の使用を許可。|

|--allow-all|すべての権限を付与(安全性に注意)。|

さらに詳しい説明はこちらから

ちなみに、省略形もあるようで今回の --allow-read-R でも良いみたいです。

先程の readFile.ts を権限を付けずに実行すると以下のようなエラーが表示されます。

┏ ⚠️  Deno requests read access to "<ファイルまでのパス>/example.txt".
┠─ Requested by `Deno.readFile()` API.
┠─ To see a stack trace for this prompt, set the DENO_TRACE_PERMISSIONS environmental variable.
┠─ Learn more at: https://docs.deno.com/go/--allow-read
┠─ Run again with --allow-read to bypass this prompt.
┗ Allow? [y/n/A] (y = yes, allow; n = no, deny; A = allow all read permissions) >

HTTPサーバーの作成

次は、Denoの標準ライブラリを使って簡単なHTTPサーバーを作成してみましょう。

server.tsというファイルを作成して、以下の内容を記述してください。

import { serve } from "https://deno.land/std@0.192.0/http/server.ts";

const handler = (request: Request): Response => {
  return new Response("Hello from Deno!", { status: 200 });
};

serve(handler);

できたら、以下のコマンドで実行してみましょう。

deno run --allow-net server.ts

http://localhost:8000 が開いて見れるようになっているかと思います。

さすがにフレームワークを使うときは不要だと思いますが、簡易的なローカルサーバーを立てる時はこれでも良さそうです。

終わりに

いかがでしたでしょうか?

Denoは、モダンなJavaScript/TypeScriptのランタイムとして、新しい可能性を広げています。

本記事で紹介した基本的な使い方を参考に、ぜひDenoの世界を探求してみてください。

今後も使っていくなかで新たな発見があればどんどん記事にしていきたいと思います!