未経験からのDeno入門|Denoとは

概要

Deno は JavaScript 及び TypeScript の開発をサポートする V8 エンジン のランタイムです。

Deno は Node.js の開発者である。Ryan Dahl,(ライアン・ダール)によって開発された言語であり、Node.js の良くない機能を改善するように設計されました。

Deno の構成要素

  • Rust
    Deno のコアは Rust で記述されました。 Node.js は C++で記述されています。

  • Tokio
    Rust で書かれたイベントループ

  • TypeScript /JavaScript

  • V8
    Chrome や Node.js で使用されている JavaScript ランタイム

Deno のセキュリティ

RyanDahl が Deno を開発した理由は、現在の Node.js のセキュリティ面の改善でした。

Deno は Node.js とは違いサンドボックスで実行されます。
つまり、外部で作られたソフトウェアがシステム全体に影響を与えることがありません。

Deno がアクセスできないシステムは以下の通りです。

  • ファイルシステム

  • ネットワーク

  • 他スクリプトの実行

  • 環境変数

Deno モジュール

Node.js では、ある モジュール を使用するときに依存している モジュール のバージョンが適切に設定されておらずに、正しいバージョン&モジュールに設定したはずが、そのモジュールでもまた同じ依存問題が発生するという、依存関係地獄に苦しんだ開発者が多いかと思います。これは npm などの集中型レジストリは管理が難しく、それらの npm モジュールを利用する上で仕方のないことです。

そこで Deno は、プラウザと同じように、URL によってモジュールをロードします。
URL インポートによって、URL 元の適切なモジュールでバージョン管理されたモジュールをインストールできます。そこで一つの疑問が浮上します。
当たり前の疑問なのですが、URL でインストールするならば、そのモジュールを読み込むためのホストサーバーがダウンしている場合はどうなるのかという疑問が浮かびますが。普通であればそのモジュール読み込みるはずがありません。
Deno はその問題に対しても解決策を設定しています。Deno は import で読み込んだモジュールをキャッシュします。なので開発者はその読み込んだモジュールキャッシュも Git などのバージョン管理システムで保持する必要があります。

また Deno では、デフォルトで依存関係を整理する、機能が存在します。
これは、CLI で簡単に実行できます。

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

動作保証済みモジュール

Deno では動作が保証されている標準モジュールが存在しており、まだ開発段階である Deno をサポートしています。

deno.land/std

Node.js との相違点

Deno の仕様の検討を始めたとき、多くの開発者は Node.js と比較を行います。

Node.js との違いをいかに上げます。

DenoNode.js
開発言語Rust,TypeScriptC++,JavaScript
モジュールのインポート方法URLnpm
パッケージのインポート構文ESモジュール構文CommonJS構文
内部コードAPI,標準ライブラリ標準ライブラリ
権限サンドボックス全てにアクセス可能

まとめ

Deno は TypeScript による型チェックを行いながら、堅牢な Web アプリケーション開発の助けになるでしょう。

リリース間もないので、Node.js に比べサポートモジュールが少ないです。
個人的にはもっと盛り上がっていってほしい開発ツールです。