皆さんこんにちは。おっくんです。
去る 2024 年 3 月 28 日に Deno 1.42 がリリースされました。
今回も、リリースノートを参考に 変更事項の気になるところを紹介します。
Deno 1.42
Deno 1.42 での変更事項をDeno 1.42 リリースノートを元に確認します。
JSR の登場と、deno publish
and deno add
JSR という新しい、JavaScript と TypeScript パッケージ用の新しいオープン ソース レジストリが公開されました。
このレジストリへの登録、パッケージの公開、インストールを行うのが、deno publish
と deno add
です。
deno add
をリリースノートを例に使用し、確認します。
$ deno add @std/assert Created deno.json configuration file. Add @std/assert - jsr:@std/assert@^0.222.1
すると、deno.json の imports セクションに記載されます。
{ "imports": { "@std/assert": "jsr:@std/assert@^0.222.1" } }
imports セクションに記載されていますので、実行ソースには @std/assert
と書くことで、jsr:@std/assert@^0.222.1
がインポートされます。
import { assertEquals } from "@std/assert"; assertEquals(1, 2);
deno add
は、npm:
指定子を使用したパッケージ追加も可能です。
$ deno add npm:cowsay Add cowsay - npm:cowsay@^1.6.0
import cowsay from 'cowsay'; console.log(cowsay.say({ text: 'Hello, World!' }));
deno add は、主にパッケージの利用者側が使用するコマンドですが、deno publish
は、パッケージの提供者側が使用するコマンドです。
deno publish を使うことで、JSRにパッケージを公開することができます。
詳細は、JSRのドキュメントを参照してください。
deno task
クロスプラットフォームのシバンをサポート
クロスプラットフォームでのシバンをサポートしました。 このことで、deno.json への記述が少々楽になります。
リリースノートを参考に次のように記述できます。
[main.ts]
#!/usr/bin/env -S deno run console.log("Hello there!");
[deno.json]
{ "tasks": { "hi": "main.ts" } }
実行すると、次のようになります。
$ deno task hi Task hi ./hi.ts Hello there!
終了ステータス変数のサポート
Deno task クロスプラットフォームシェルが、終了ステータス変数をサポートしました。
リリースノートを参考に次のように記述できます。
{ "tasks": { "output": "deno eval 'Deno.exit(10)' || echo $?", "safe": "deno eval 'console.log(`...`)' || exit $?", "throw": "deno eval 'throw new Error()' || exit $?" } }
動かすと、次のようになります。
$ deno task output Task output deno eval 'Deno.exit(10)' || echo $? 10 $ deno task safe Task safe deno eval 'console.log(`...`)' || echo $? ... $ deno task throw Task throw deno eval 'throw new Error()' || echo $? error: Uncaught (in promise) Error throw new Error() ^ at file:///usr/src/app/1_42/$deno$eval:1:7
リダイレクトサポートの強化
入力リダイレクト他、リダイレクトサポートが強化されました。
リリースノートの紹介では、次のように使用できます。
{ "tasks": { "input-redirect": "gzip < file.txt", "stdout-err": "deno run main.ts >&2", "stderr-out": "deno run main.ts 2>&1" } }
タスクの説明をサポート
JSONCファイルを使用するとき、コメントを使用してタスクに説明を追加できます。
{ "tasks": { // This task prints "Hello, World!" "hi": "./hi.ts", /* This task prints "Goodbye, World!" */ "output": "deno eval 'Deno.exit(10)' || echo $?", /** * Throw Error */ "throw": "deno eval 'throw new Error()' || echo $?", "safe": "deno eval 'console.log(`...`)' || echo $?" } }
以上のように、コメント追加すると、deno task
を実行すると次のように表示されます。
$ deno task Available tasks: - hi // This task prints "Hello, World!" ./hi.ts - output // This task prints "Goodbye, World!" deno eval 'Deno.exit(10)' || echo $? - throw // // Throw Error deno eval 'throw new Error()' || echo $? - safe deno eval 'console.log(`...`)' || echo $?
Deno 2 での deno install
の仕様変更について
deno install
は、これまでグローバルに実行可能コードをインストールすることができるツールでした。
しかし、フィードバックとして今回登場した deno add
のように、依存関係をインスト―ルするツールとして機能することを期待したという意見が上がったそうです。
Deno 2では、deno install
は、deno add
のエイリアスになります。
これまで通りの動作は、deno install -g
または、deno install --global
で実行できるようになります。
パフォーマンスの向上
Deno 1.42 では、パフォーマンスが大幅に向上しています。 その中でもリリースノートでは、Linux環境での起動時間の10%向上、setTimeout setInterval の改善などが挙げられています。
V8、 TypeScript のアップデート
Deno 1.42 にはTypeScript 5.4.3が同梱されます。 また、V8 12.3が同梱されます。 Iterator.prototype.map などが使用できるようになります。
環境変数 DENO_FUTURE の追加
環境変数 DENO_FUTURE が追加されました。
DENO_FUTURE=1
を設定することで、Deno 2で行われる変更が有効になります。
この環境変数を適用することで、window グローバルの削除や Deno 名前空間のメソッドの削除が行われます。
比較すると、次のようになります。
$ deno eval 'console.log(window)' Window {} $ DENO_FUTURE=1 deno eval 'console.log(window)' undefined
window グローバルが削除されていることが確認できます。
その他
- Node.js と npm の互換性
crypto の関数の追加や、各種機能のサポート - deno lint --fix
deno lint --fix
で自動修正が可能になりました。自動修正可能なルールは今後も拡充予定です - --watch-exclude=... フラグの導入
--wathc を使用する際に、特定ファイルは再起動をしたくない場合に使用できます - jsrタグと、リントルール verbatim-module-syntax の追加
- アプリケーションの実行時に、型チェックを行わなくなりました
- LSP(言語サーバー)の改善
まとめ
Deno 1.42 のリリースノートを見てきました。
Deno 1.41 のリリースノート記事でも紹介した新しいパッケージレジストリJSRへの対応が紹介されました。 先日、プライベートでJSRにモジュールを登録してみましたが、比較的簡単にモジュール公開まで出来ました。 公開されているメソッドが自動的にドキュメントになったり、コメントを適切に設定していくことでそれもまたページに反映されます。 使いやすくて見やすくスコアも示されるなど、モチベーションを喚起するようなデザインも一つの特徴と感じました。 ぜひ触ってみてください。
Deno 1.43が5月1日に公開されています。こちらの記事も近日公開予定です。
採用情報
虎の穴では一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
カジュアル面談やエンジニア向けイベントも随時開催中です。ぜひチェックしてみてください。 toranoana-lab.co.jp