generated at
Denoとは
Denoとは
RustV8エンジンをベースに実装されたJavaScript/TypeScriptランタイムです
作者はNode.jsの開発者でもあるRyan Dahlさんです
Node.jsにおける設計ミスや反省点等を修正すべく開発されました

Denoの特徴
Rustで記述されている
DenoのコアはRustで記述されています
また、ネイティブ拡張もRustで記述することができます(Pluginと呼びます)
PluginシステムはDeno v1.13.0で廃止され、代わりにFFIが導入されました

TypeScriptを標準でサポート
DenoではTypeScriptコードをスクリプトとして実行できます
tscが内部に組み込まれており、型チェックも行えます
また、通常のJavaScriptコードを実行することもできます

パーミッションシステム
Denoはパーミッションシステムを採用しており、権限を与えない限り、デフォルトでは以下のような処理は実行できません
ディスクIO( --allow-read / --allow-write )
ネットワークIO( --allow-net )
外部プロセスの実行( --allow-run )
環境変数の参照( --allow-env )

モジュールシステム
DenoはES Modulesを標準のモジュール形式としてサポートしています
デフォルトではCommon JS形式のモジュールは読み込めません (ただし、 npm: 経由でなら読み込めます)

パッケージ管理
Denoにはnpmyarnのようなパッケージマネージャは存在しません
Denonpmjsrパッケージを管理する仕組みを標準で提供しています
また、Denoは任意のURLからのJavaScript/TypeScriptモジュールの読み込みもサポートしています
スクリプトを実行する際に、Denoが自動的にサードパーティモジュール(npm/jsr/ https: )などのをインストールしてくれます(一度インストールしたモジュールは、ローカルにキャッシュされます)
そのため、都度、npm installなどを実行する必要がありません
typescript
import { parse } from "https://deno.land/std@0.68.0/encoding/csv.ts"; // このファイルを実行する際に、自動でインストールされます console.log(await parse("a,b,c\n1,2,3"));

ブラウザ(Web標準)との互換性
Denoはブラウザ(Web標準)との互換性を意識しています。
ある機能を実現する上でWeb APIが活用できる場合は、極力Web APIをベースに機能が提供されます
例えば、DenoでHTTPリクエストを送信したいときはFetch APIを使います
また、Denoに組み込まれているHTTPサーバー(Deno.serve)もFetch APIをベースに実装されています
現時点では、以下のような機能が提供されています

標準モジュールが豊富
Denoにはdeno_std標準モジュールが存在します
deno_stdGoの標準モジュールに大きな影響を受けており、※以下のような様々な機能が提供されています
std/testing - アサーション等
std/encoding/yaml - YAML
std/encoding/toml - TOML
std/encoding/csv - CSV
std/io - IO
std/http - HTTPサーバ
std/flags - コマンドライン引数の解析
std/uuid - UUIDの生成
std/node - Node.jsの互換レイヤ
std/wasi - WASI
等...
deno_stdは初期の頃はGoの影響をかなり受けていたものの、現在はどちらかというとWebやDenoのAPIをベースにした機能などが多くを占めます

生産性を重視
Denoでは生産性が重視されており、以下のような機能が処理系に最初から組み込まれています
テストランナ(deno test)
リソースリークの検知
カバレッジの取得
ベンチマーキング(deno bench)
ソースコードのフォーマット (deno fmt)
deno fmtコマンドの内部では、dprintというRust製のフォーマッタが使用されています
APIドキュメントの出力 (deno doc)
リンタ (deno lint)
Rustで書かれており、とても速いのが特徴です
バンドラ(deno bundle)
現時点では、webpack程高機能ではありません
ただし、Deno v1.5にてツリーシェイキング等に対応するなど、徐々に高機能化しつつあります
LSP (deno lsp)
Deno本体にはLSPサーバーが組み込まれています
vscode-denoなどと連携することで、自動補完やシンボルジャンプなどの機能を提供してくれます

最新のJavaScript仕様に準拠
Denoの組み込みAPIや標準モジュール(deno_std)は、PromiseAsync Iterator, using / await using 等の最新機能を念頭に設計されています

Node.jsとの互換性
DenoNode.jsとの互換性もサポートします
具体的にはnpmパッケージやNode.js組み込みモジュールの読み込みなどができます

jsrのファーストクラスサポート
jsrDeno/Node.js/Bunなどの様々なランタイムからの使用が想定されたパッケージレジストリです
Denojsrをファースクラスでサポートしており、パッケージのダウンロード(deno add)や公開(deno publish)などをDenoから行うことができます

Jupyterとの連携
Deno本体にはJupyterカーネルが組み込まれています (deno jupyter)

denoに関する情報
Deno公式のモジュールレジストリ
各モジュールのAPIドキュメントを参照できます

開発環境
公式でvscode-denoという拡張が提供されています
coc.nvimを使用しているのであれば、coc-denoがおすすめです


その他

ソース

参考