未経験からの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 をサポートしています。
Node.js との相違点
Deno の仕様の検討を始めたとき、多くの開発者は Node.js と比較を行います。
Node.js との違いをいかに上げます。
Deno | Node.js | |
開発言語 | Rust,TypeScript | C++,JavaScript |
モジュールのインポート方法 | URL | npm |
パッケージのインポート構文 | ESモジュール構文 | CommonJS構文 |
内部コード | API,標準ライブラリ | 標準ライブラリ |
権限 | サンドボックス | 全てにアクセス可能 |
まとめ
Deno は TypeScript による型チェックを行いながら、堅牢な Web アプリケーション開発の助けになるでしょう。
リリース間もないので、Node.js に比べサポートモジュールが少ないです。
個人的にはもっと盛り上がっていってほしい開発ツールです。