初めに

Deno は安全なデフォルトと優れた開発体験を備えた JavaScript/TypeScript ランタイムです。

V8、Rust、Tokio で作られています。

特長

  • デフォルトで安全。明示的に有効にしない限り、ファイル、ネットワーク、環境変数にアクセスできない
  • 設定不要で TypeScript を使える
  • 単一の実行可能バイナリ (deno)
  • 依存関係の検査 (deno info) やコードフォーマッタ (deno fmt) のようなユーティリティが組み込まれている
  • Deno で動くことが保証されたレビュー済 (安全性を検査済み) の標準モジュールがある
  • スクリプトを単一の JavaScript ファイルにバンドルできる

思想

Deno は現代のプログラマがプロダクト開発をできる安全なスクリプト環境となることを目指しています。

Deno は常に単一の実行可能ファイルとして配布されます。URL を Deno のプログラムに与えると、zip 圧縮でわずか15メガバイト以下の実行可能ファイルとなって実行できます。 Deno が明確に担っている役割は、ランタイムとパッケージマネージャーの両方です。使っているのはブラウザと互換性のある標準プロトコル、URL です。

Deno がとりわけ優れた代替となるのは、歴史的に bash や python で書かれてきた便利スクリプトです。

ゴール

  • 単一の実行可能バイナリだけを提供する (deno)。
  • 安全なデフォルトを提供する
    • 特別に許可しない限り、スクリプトはファイル、環境変数、ネットワークにアクセスできない
  • ブラウザとの互換性。完全に JavaScript で書かれていて、グローバルな Deno 名前空間 (またはそのための機能テスト) を使用しない Deno プログラムのサブセットは、モダンな Web ブラウザでも変更なしに実行できるようにする
  • ユニットテスト、コードフォーマッタ、リンターなどの組み込みツールを提供し、開発体験を向上させる
  • V8 の考え方をユーザーランドに漏らさない
  • 効率的な HTTP サーバーを提供する

Node.js との比較

  • Deno は npm を使用しない
    • URL とファイルパスで参照されるモジュールを使用する
  • Deno はモジュール解決アルゴリズムに package.json を使用しない
  • Deno の非同期操作はすべて Promise を返す。そのため Deno は Node と違った API を提供する
  • Deno はファイル、ネットワーク、環境変数にアクセスするために明示的な許可を要求する
  • Deno ではエラーが捕捉されなければ必ず死ぬ
  • 「ES モジュール」を使用し、require() はサポートしない。サードパーティのモジュールは URL でインポートする

    import * as log from "https://deno.land/std@$STD_VERSION/log/mod.ts";
    

他の重要な挙動

  • リモートにあるコードは最初の実行時に取得され、キャッシュされる。--reload フラグでコードが実行されるまでは更新されない。(だから飛行機の中でも仕事を続けられます)
  • リモートの URL から読み込まれたモジュールやファイルは、変更がなくキャッシュできるものと期待されている