2023/12/26〜2023/01/01の最新情報

Deno.Connへのunrefとrefメソッドの追加 Deno.Connへunrefとrefメソッドを追加するPRがマージされています。 feat(unstable): Add Deno.Conn.ref()/unref() (denoland/deno#17170) Deno.Connのunrefを呼ぶと、Deno.unrefTimerなどと同様に、読み込み途中のコネクションが存在したとしてもプロセスの終了がブロックされなくなります。(ただし、効果があるのは読み込みに対してのみで、コネクションへの書き込みについてはunrefを呼んだ場合であってもブロックされます) これらはunstable APIのようなので、次のDeno v1.29.2あたりでリリースされる可能性がありそうです。 Deno.osUptime Deno.osUptimeというAPIを追加するPRがマージされています。 feat(unstable): Add “Deno.osUptime()” API (denoland/deno#17179) このAPIを利用することで、システムが起動してからの経過時間を数値として取得できるようです。 const uptime = Deno.osUptime(); これもunstable APIのため、次のDeno v1.29.2あたりでリリースされる可能性がありそうです。 Big news in Deno Land Ryan DahlさんとJerod SantoさんによりBig news in Deno Landというポッドキャストが公開されています。 ページ下部にTranscriptがあるため、そこから内容を閲覧することもできます。 https://changelog.com/jsparty/256 このポッドキャストでは、主にDenoでnpmサポートを導入した背景などについて解説されています。 また、Denoの将来についてもいくつか話が行われており、以下のような内容の話題が出ていました。 ShadowRealmなどを活用したパッケージごとのパーミッション管理のサポートについて --allow-writeを指定した際は、ファイルシステム全体ではなく、カレントディレクトリ配下への書き込みのみを許可すべきでは? Deno Deployにおける状態管理やCockroachDBやSpannerなどについて また、Denoの直近の開発方針としては、主に以下の点に注力されていく予定のようです。 npmサポートの拡充 (安定性の向上やdeno compileでのnpm:のサポートなど) Deno Deployでのnpm:のサポート https://deno.news/archive/55-deno-v129-and-npm-install-heat

January 1, 2023

2022/12/19〜2022/12/25の最新情報

今週はDenoでリリースが行われていないため、直近の話題や変更などについて紹介いたします。 Flash(Deno.serve)の書き換えについて 現在、Flash(Deno.serve)の書き換えが検討されているようです。 Flashで報告されている様々な問題の解決などが目的のようです。 以下のissueで解決予定の問題が列挙されています。 Flash HTTP server rewrite - umbrella issue (denoland/deno#17146) Deno.coreの削除について 現在、Denoの内部APIであるDeno.coreの削除が検討されているようです。 refactor: remove Deno.core (denoland/deno#16881) ひとまずはDeno.coreはDeno[Deno.internal].coreへ移動される予定のようで、deno_stdではすでに対応が実施されています。 refactor: handle Deno[Deno.internal].core (denoland/deno_std#3029) ただし、将来的にはDeno[Deno.internal].core自体も削除が予定されているようなので、もしDeno.coreを使用されている場合は、今のうちに対応をしておくとよいかもしれません。 deno_lintへのguard-for-inルールの追加 deno_lintでguard-for-inルールが実装されているようです。 feat: Add guard-for-in rule (denoland/deno_lint#1105) 次のDenoのリリースあたりでdeno lintコマンドから利用できるようになる可能性がありそうです。

December 25, 2022

2022/12/12〜2022/12/18の最新情報

Deno v1.29.0 Deno v1.29がリリースされました。 以下に変更内容をまとめたため、よろしければ参照ください。 Deno v1.29 deno_std v0.168.0 deno_std v0.168.0がリリースされました。 https://github.com/denoland/deno_std/releases/tag/0.168.0 std/archiveのファイル構成の変更 新しいファイルとしてstd/archive/untar.tsが追加されています。 これに伴い、std/archive/tar.tsからの下記の読み込みが非推奨化されています。 TarHeader Untar TarEntry 今後、これらのAPIを利用する際は、std/archive/untar.tsから読み込むことが推奨されます。 std/ioのファイル構成の変更 std/ioパッケージの下記ファイルが細分化されています。 std/io/readers.ts std/io/writers.ts std/io/util.ts 具体的にはstd/fsなどのように、各APIがそれぞれ単独のファイルで提供されるように構造が変わっています。 例えば、std/io/readers.tsに配置されていたStringReaderは、今後はstd/io/string_reader.tsから読み込むことが推奨されます。 より詳しくは公式のブログ記事を参照いただければと思います。 https://deno.com/blog/v1.29#changes-to-the-standard-modules std/dotenv - config()がload()へリネーム std/dotenvで提供されているAPIがリネームされています。 リネーム前 リネーム後 config load configSync loadSync ConfigOptions LoadOptions 古い名前のAPIも削除されずに残されてはいますが、現在は非推奨化されているため、もし使用されている場合は新しい名前への移行が推奨されます。 std/nodeの改善 std/node/httpのServerResponseクラスでTransfer-Encoding: chunkedが意図通りに動作しない問題が修正されています。 また、Buffer.toStringによるUTF-8のデコードが大幅に高速化されています。 Elsaの開発について Denoに影響を受けたJavaScript/TypeScriptランタイムであるElsaで、内部実装の書き換えが検討されているようです。...

December 18, 2022

Deno v1.29

Deno v1.29がリリースされました。 この記事では主な変更点などについて解説します。 サブプロセスAPIに関する変更 Deno.spawn, Deno.spawnSync, Deno.spawnChildの削除 Deno v1.28でDeno.Commandが実装されたため、下記のAPIが削除されています。 Deno.spawn Deno.spawnSync Deno.spawnChild このあたりの背景などについては、下記の記事で詳しく解説されています。 Deno.run と Deno.spawn と Deno.Command のどれを使えば良いのか また、Deno.Commandについてもv1.28.3でAPIが若干変更されています。 Deno.spawn系統のAPIからDeno.Commandへの移行について Deno.spawn()はDeno.Child#output(), Deno.spawnSync()はDeno.Child#outputSync()で代用できます。 const command = new Deno.Command("deno", { args: ["info", "--json"], }); const status = await command.output(); if (status.success) { console.info(new TextDecoder().decode(status.stdout)); } Deno.spawnChild()はDeno.Child#spawn()で代用できます。 const command = new Deno.Command("deno", { args: ["fmt", "--ext=json", "-"], stdin: "piped", stdout: "piped" }); const child = command....

December 18, 2022

2022/12/05〜2022/12/12の最新情報

今週のDenoに関するアップデート 今週はDenoのリリースが行われていないため、次のv1.29でリリース予定と思われる変更点についていくつか紹介します。 deno.json(c)でdeno benchコマンドの設定がサポート deno.json(c)にbenchフィールドが追加されており、filesフィールドによってベンチマーク対象のファイルを設定できます。 { "bench": { "files": { "include": ["./benchmark"] } } } https://github.com/denoland/deno/pull/16608 deno.json(c)でのロックファイルのサポート deno.json(c)のlockオプションでロックファイルに関する設定を変更できるようになりました。 lock: falseを指定すると、ロックファイルの適用が無効化されます。(--no-lockと同様の挙動) { "lock": false } またlockオプションにロックファイルのパスを指定することもできます。 { "lock": "./lock.json" } https://github.com/denoland/deno/pull/16781 deno initコマンドでdeno.jsoncの生成がサポート deno initコマンドでdeno.jsoncが生成されるようになりました。 https://github.com/denoland/deno/pull/16389 https://github.com/denoland/deno/pull/17002 Deno名前空間からspawn/spawnSync/spawnChildが削除 Deno v1.28.0でDeno.Commandが実装されたため、Deno.spawnなどのAPIが削除されました。 https://github.com/denoland/deno/pull/16893 Deno.TcpConnのsetNoDelayとsetKeepAliveが安定化 Deno v1.19で実装されたDeno.TcpConnのsetNoDelayとsetKeepAliveメソッドが安定化されています。 今後は--unstableなしで利用できるようになりそうです。 https://github.com/denoland/deno/pull/17003 Ultra v2 Ultraのv2がリリースされています。 Honoとの統合やTwind/react-query/react-router/react-helmetのサポートなどの様々な改善が実施されています。 以下の記事ではUltra v2の概要や使い方などについて解説されています。 Building Fullstack React Apps with Ultra https://github....

December 11, 2022

2022/11/28〜2022/12/04の最新情報

Deno v1.28.3 Deno v1.28.3がリリースされました。 大きな変更点として、Deno v1.28.0で実装されたDeno.Commandに関するAPIの変更が実施されています。(Deno.CommandAPIの見直しについて) また、Node.js互換性の改善についても引き続き実施されています。 node:moduleのcreateRequireで絶対パスがサポート deno runコマンドでnpm:と--inspect-brkの併用がサポート packages.jsonのexports.typesサポートに関する改善 その他の変更点 プロセス停止前に未解決のPromiseが存在する際のエラーメッセージが改善 (問題が発生している箇所がエラーメッセージに表示されるように) ReadableStreamのリーダー周辺の型定義の改善 Denoのトランスパイル結果のキャッシュとdeno test --coverageで生成されたカバレッジの整合性が取れなかった場合に、プロセスがパニックする問題が修正 deno replの履歴管理に関する信頼性の向上 https://github.com/denoland/deno/releases/tag/v1.28.3 deno_std v0.167.0 deno_std v0.167.0がリリースされています。 std/async/retryモジュールの追加 std/asyncにExponential backoffアルゴリズムに基づいたリトライ機能を提供するモジュールが追加されました。 import { retry } from "https://deno.land/std@0.167.0/async/retry.ts"; const result = await retry(async () => { const result = await doSomeAsyncOperation(); return result; }, { multiplier: 2, maxTimeout: 16_000, maxAttempts: 10, minTimeout: 500, }); std/testing/typesモジュールの追加 std/testingにTypeScriptの型をテストするためのモジュールが追加されています。...

December 4, 2022

2022/11/21〜2022/11/27の最新情報

Deno v1.28.2 Deno v1.28.2がリリースされました。 CPUプロファイリング 新機能として、以下の3メソッドが実装されています。 console.profile console.profileEnd console.timeStamp これらのAPIはDenoを実行する際に--inspectを指定した場合のみ有効化されます。 --inspectオプションが指定された状態でconsole.profile(label)が呼ばれると、console.profileEnd(label)の呼び出しまでの間に実行された処理に関するCPUプロファイルを計測することができます。 計測結果はChrome DevToolsの「Profile」タブから閲覧することができます。 Node.js互換性の改善 Import Mapsファイルの定義に/が含まれれているとマッピングがうまく動作しない問題が解消されています { "imports": { "preact/": "npm:preact/" } } module.createRequire()でURLオブジェクトがサポート deno infoで循環したnpm依存が適切に取り扱われるように改善 型定義ファイルの検出に関する挙動の改善 importのパスにディレクトリが指定された際の型定義ファイルの検出が改善 (import * as mod from ./sub_dirとすると、./sub_dir/index.d.tsなどのファイルが自動で探索されます) package.jsonでexportsとtypesの両方が定義されているときに、exportsから先に処理されるように修正 package.jsonでtypesエントリが未定義だった際に、mainで指定されたエントリポイントを元に型定義が解決されるように挙動が改善 その他の変更点 Deno.serveと--watchオプションを併用したときに、AddrInUseエラーが出る問題が解消されています。 https://github.com/denoland/deno/releases/tag/v1.28.2 deno_std v0.166.0 deno_std v0.166.0がリリースされました。 std/fmtに関する破壊的変更 std/fmt/bytesのprettyBytes()関数がformat()にリネームされています。 既存のprettyBytes()は非推奨化されており、今後のバージョンで削除される予定です。 また、std/fmt/durationのprettyDuration()も同様にformat()へリネームされています。 std/node - Node.js互換性の改善 Deno本体でのNode....

November 27, 2022

2022/11/14〜2022/11/20の最新情報

Deno v1.28.0 Deno v1.28がリリースされました。 以下に変更内容をまとめたため、よろしければ参照ください。 Deno v1.28 Deno v1.28.1 Deno v1.28.1がリリースされました。 deno installコマンドでnpm:がサポートされています。 その他には、npmパッケージサポートに関する細かなバグ修正などが実施されています: Conditional exportsで指定されたエントリポイントが型定義を持っていない場合にエラーが発生する問題が修正 npmパッケージにfoo.server.jsのようにベースネーム部分に.を含むファイルが存在する場合に、うまく読み込みができない問題が修正 あるnpmパッケージの依存関係のバージョンにdist tagが指定されていた際に、うまく取り扱われない問題が修正 scopedパッケージに対して@types/*パッケージの型定義が適切に適用されない問題が修正 --lock-writeを指定すると、deno.lockからnpmパッケージが消えてしまう問題が解消 https://github.com/denoland/deno/releases/tag/v1.28.1 deno_std v0.164.0 deno_std v0.164.0がリリースされました。 std/fmt: durationモジュールが追加 ミリ秒単位で指定された時間のフォーマットされた文字列を取得することができます。 import { prettyDuration } from "https://deno.land/std@0.165.0/fmt/duration.ts"; prettyDuration(130000, { ignoreZero: true, formatType: "full" }); // => "2 minutes, 10 seconds" 補足) prettyDurationは以下のPRでformatにリネームされています。この変更は、おそらくv0.166.0あたりでリリースされると思われるため、今後利用する際はprettyDurationではなくformatを使用するとよさそうです。 https://github.com/denoland/deno_std/pull/2896 std/node: 互換性の向上 node/fs: - read()でコールバックが非同期に呼ばれるように修正 node/http: ServerResponse.finishedが実装 node/http: --unstableが指定されていると、Buffer形式のレスポンスが適切に取り扱われない問題が修正 node/string_decoder: StringDecoder....

November 20, 2022

Deno v1.28

Deno v1.28がリリースされました。 この記事では主な変更点などについて解説します。 npmパッケージサポートの安定化 Deno v1.25で実装されたnpmパッケージサポートが安定化されました。 今後は--unstableなしでnpmパッケージを読み込むことができます。 $ cat main.js import chalk from "npm:chalk@5.1.2"; console.log(chalk.green("Deno")); $ deno run --allow-read --allow-env main.js ただし、リモートモジュールの中にnpm:が含まれていた際は、従来どおり--unstableが要求されるため注意が必要そうです。 その他にも以下の改善などが実施されています。 peerDependenciesがサポート deno info --jsonでnpm:がサポート import.meta.resolveでnpm:が無効化 今後npmパッケージサポートに関して計画されている変更内容についてはロードマップを参照ください。 ロックファイルの自動適用と生成がサポート Denoにはアプリケーションが依存するサードパーティモジュールの内容を元にハッシュ値を計算し、ロックファイルと呼ばれるファイルに保存する機能があります。 アプリケーションを実行する際にサードパーティモジュールから再度ハッシュ値を計算し、ロックファイルに書き込まれたハッシュ値と比較することで、サードパーティモジュールの内容が改ざんされていないことを保証することができます。(インテグリティチェック) この挙動を有効化するには、従来では--lockと--lock-writeの指定が必要でした。 このリリースでは、deno.json(c)が存在する場合、ロックファイル(deno.lock)の生成とインテグリティチェックが自動で実施されるように挙動が変更されました。 $ ls deno.json main.js $ deno run main.js $ ls deno.json deno.lock main.js この変更に合わせて、既存のオプションやインテグリティチェックに関する挙動も一部変更されています。 --lockオプションの引数がオプショナルに変更 (デフォルトはdeno.lock) ロックファイルに列挙されていないパッケージが見つかった際に、インテグリティチェックが失敗しないように挙動が変更 新しく検出されたパッケージについては、ハッシュが自動でロックファイルに書き込まれます。そのパッケージのインテグリティチェックについては、次回以降のDenoの実行から適用されます。 また、このロックファイルの自動適用と生成を無効化するために--no-lockという新しいオプションも追加されています。 Deno.Commandの追加 Deno.CommandというDenoからサブプロセスを生成するための新しいAPIが実装されました。 利用するには--unstableと--allow-runの指定が必要です。 使用例 コマンドの実行結果の非同期での取得: const command = new Deno....

November 20, 2022

2022/11/07〜2022/11/13の最新情報

Deno v1.27.2 Deno v1.27.2がリリースされています。 peerDependenciesのサポート DenoでnpmパッケージのpeerDependenciesがサポートされました。 あるパッケージでpeerDependenciesが定義されていた場合、以下のような動作をするようです。 依存グラフの中から祖先をたどっていき、もしpeerDependenciesで指定された要件を満たすパッケージが見つからなかった場合、通常のdependenciesと同様に依存が解決されます。(npm v7と同様の挙動) optionalPeerDependenciesについては、依存グラフの祖先に指定された要件を満たすパッケージが見つかった場合のみ解決されます。 それ以外の場合は、pnpmと同様の挙動でoptionalPeerDependenciesが解決されます。 https://github.com/denoland/deno/pull/16561 その他の変更点 いくつかのバグ修正が実施されています。 data:URLに対してロックファイルのremoteエントリが作られてしまう問題が修正されています。 Deno.serveHttpで起動したHTTPサーバで圧縮が有効化された状態でストリーミングを行う際に、各チャンクが適切にフラッシュされるように修正されています。 ローカルのnode_modules内のコードでrequireによる相対パス形式での読み込みが行われた際に適切に動作するように修正されています。 https://github.com/denoland/deno/releases/tag/v1.27.2 deno_std v0.163.0 deno_std v0.163.0がリリースされています。 std/semverモジュールでinc()とdiff()が非推奨化されました。 今後は、新しく追加されているincrement()とdifference()の使用が推奨されます。 (動作はそれぞれincとdiffと同様です) https://github.com/denoland/deno_std/releases/tag/0.163.0 denoland/fresh-wordpress-themes WordPressをHeadless CMSとして使いつつ、フロントエンドをFreshで開発するためのテンプレートがDeno公式で公開されました。 https://github.com/denoland/fresh-wordpress-themes 以下の記事で使用方法などが解説されています。 Introducing Fresh WordPress Themes esm.sh v98 esm.sh v98がリリースされました。 新機能としてTree shakingのサポートが追加されています。 exportsパラメータを指定することで適用されます。 https://github.com/ije/esm.sh/releases/tag/v98

November 13, 2022