2022/08/29〜2022/09/04の最新情報

Deno v1.25.1 Deno v1.25.1がリリースされました。 Node.js互換に関する変更点 依存関係の解析結果に関するキャッシュが存在する場合、deno compileが失敗する問題が修正されています。 npm:URLで読み込まれたパッケージ内で、globalとglobalThisが一致するように修正されました。 node-fetchなどのglobal.Promiseを参照するパッケージが動かない問題があったようです。 semverの取り扱いに関するnpmとの互換性の向上 元々、Rustのsemver crateが使われていましたが、自前でパーサが実装されたようです。 *付きのConditional exportsがサポートされています。 { "exports": { ".": { "types": "./types/src/index.d.ts", "require": "./cjs/index.cjs", "import": "./esm/index.js" }, "./driver": { "types": "./types/src/driver/index.d.ts", "import": "./esm/driver/index.js" }, "./driver/*": { "types": "./types/src/driver/*.d.ts", "import": "./esm/driver/*.js" } } } package....

September 4, 2022

2021/08/22〜2022/08/28の最新情報

Deno v1.25.0 Deno v1.25.0がリリースされました。 以下の記事に変更点をまとめたため、詳しくはそちらを参照いただければと思います。 Deno v1.25 deno_std v0.153.0 deno_std v0.153.0がリリースされました。 std/encoding/csv: parse()が同期的に動作するように (破壊的変更) parse()の引数からBufReaderが削除されています これに伴い、parse()の戻り値がstring[][] | Record<string, unknown>[]に変更されています。 import { parse } from "https://deno.land/std@0.153.0/encoding/csv.ts"; const records = parse(`id,name 1,foo 2,bar`); console.log(records); // Output: [ [ "id", "name" ], [ "1", "foo" ], [ "2", "bar" ] ] std/http/cookie_mapモジュールが追加 MapライクなAPIをベースにCookieを管理するためのユーティリティモジュールが追加されました。 CookieMapはリクエスト及びレスポンスに関するCookieの管理に利用することができます。 import { CookieMap, mergeHeaders } from "https://deno.land/std@0.153.0/http/cookie_map.ts"; const req = new Request("http://localhost:3000", { headers: { cookie: "foo=bar; hoge=piyo;" }, }); const cookies = new CookieMap(req); cookies....

August 28, 2022

Deno v1.25

Deno v1.25がリリースされました。 この記事では主な変更点などについて解説します。 npmパッケージのサポート Denoでnpmパッケージのimportや実行が実験的にサポートされました。 npm installやnode_modulesなどを必要とせずにnpmパッケージを利用することができます。 import express from "npm:express@4.18.1"; const app = express(); app.get("/", (req, res) => { res.send("Hello"); }); app.listen(3000); このファイルを実行すると、npmパッケージがダウンロードされた後、ExpressによってHTTPサーバが起動します。 $ deno run --unstable --allow-env --allow-read --allow-net main.mjs $ curl http://localhost:3000 Hello 他のサードパーティモジュールなどと同様に、初回実行時のみnpmパッケージがダウンロードされ、DENO_DIRにキャッシュされます。(DENO_DIR/npm/registry.npmjs.orgに保存されるようです) また、npxライクにコマンドを実行することもできます。 $ deno run --unstable --allow-env --allow-read --allow-write npm:make-dir-cli@3.0.0 src/components 制限 現時点では利用するには--unstableが必要になります。 また、--allow-envや--allow-readも必要になります。 ロックファイル/型チェック/deno vendor/deno lsp/deno installなどでは、この機能はまだサポートされていません。 新しいHTTPサーバ (Flash) DenoにはHyperをベースにしたHTTPサーバ(Deno.serveHttp)が組み込まれています。 このHTTPサーバのさらなる高速化などを目的に、Flashという新しいHTTPサーバが実装されました。 Deno.serveというAPIによって、Flashを起動することができます。 const ac = new AbortController(); Deno....

August 28, 2022

2021/08/15〜2022/08/21の最新情報

Denoの今後の計画について Deno公式からBig Changes Ahead for Denoという、Denoの今後の計画などに関する記事が公開されました。 今のところ、以下の点などに注力されていく予定のようです。 Node.jsとの互換性の向上 パフォーマンスの向上 エンタープライズユーザへのサポートの強化 開発体験の向上 これらに関連すると思われる直近での変更について簡単にまとめてみます。 npm:URLのサポート 現在、npm:URLによるnpmパッケージのimportに関する開発が行われています。 feat(unstable): initial support for npm specifiers (#15484) 例えば、以下のようにして、npmパッケージをimportすることができるようです。 import express from "npm:express@5"; import { expect } from "npm:chai@4.2"; この機能には、大まかに以下のような特徴があります。 デフォルトでnpmパッケージはnpmの公式レジストリからダウンロードされ、DENO_DIRにキャッシュされます。 Node.js互換モード(--compat)とは異なり、npm:URLで読み込まれたモジュール内のみにNode.jsのグローバルAPI(process/global/Bufferなど)が注入されます。 Node.js互換モード(--compat)とは異なり、現時点では--unstableなしで使用できる想定のようです。 型チェック, LSPのサポート, エントリポイントでのnpm:URLの指定(例: deno run npm:mkdirp path/to/dir)などの機能はまだ入っておらず、今後追加されていく予定のようです。 この機能はおそらく、次のv1.25でリリースされるのではないかと思われます。 新しいHTTPサーバ (Flash) HTTPサーバの高速化を目的に、Deno本体でFlashという新しいHTTPサーバが開発されています。 feat(ext/flash): An optimized http/1.1 server (#15405) feat(unstable): change Deno.serve() API (#15498)...

August 21, 2022

2021/08/08〜2022/08/14の最新情報

Deno v1.24.3 Deno v1.24.3がリリースされました。 fetch()でSOCKSがサポート 検証はしていないのですが、HTTP_PROXYやHTTPS_PROXY環境変数にsocks5:またはsocks5h:形式のURLを指定すると利用できそうです。 Deno.UnsafePointerViewへの機能追加 Deno.UnsafePointerViewに以下の3つのstaticメソッドが追加されています。 getCString getArrayBuffer copyInto これらのメソッドの挙動は、Deno.UnsafePointerViewの同名のインスタンスメソッドとほぼ同様です。 compilerOptions.jsxImportSourceが指定されていると、deno.json(c)をimportできない問題が修正 次のように、compilerOptions.jsxImportSourceが設定されたdeno.jsonが定義されていたとします。 { "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "preact" }, "importMap": "./import_map.json" } このファイルをImport assertionsを使用して読み込もうとすると、エラーが発生する問題が修正されています。 import config from "./deno.json" assert { type: "json" }; // => `error: Loading unprepared module` console.log(config); この修正は、Freshにおけるfeat: support JSX automatic mode (#610)の対応のために実施されたようです。 その他の修正 --allow-netに空の値を指定するとプロセスがパニックする問題が修正されています。 --locationオプションが指定されていないときはglobalThis.locationが上書きできるようになりました。 https://github.com/denoland/deno/releases/tag/v1.24.3 deno_std v0.152.0 deno_std v0.152.0がリリースされました。 std/crypto: subtle.timingSafeEqual()が追加 import { crypto } from "https://deno....

August 14, 2022

2021/08/01〜2022/08/07の最新情報

Deno v1.24.2 Deno v1.24.2がリリースされました。 FFIに関する改善 Deno.UnsafePointerView#getArrayBufferがpointerが指すデータのコピーではなく、pointerが指すデータを直接返すように修正されています。 また、Deno.PointerValueが追加されています。 これに合わせて、ポインタを取り扱う各APIの戻り値などでもこの型が使用されるように修正されています。 その他には、戻り値が64ビット値の関数に対してもV8 Fast API Callsによる最適化が適用されるようになりました。 その他の変更点 プロパティにErrorオブジェクトが設定されたオブジェクトをthrowすると、プロセスがパニックする問題が修正されました。 deno vendor: dynamic importに失敗した際に、プロセスがパニックする問題が修正されました。 deno lsp: import節の入力補完において、レジストリ補完の最中のみ/がコミット文字として使用されるように修正されました。 https://github.com/denoland/deno/releases/tag/v1.24.2 deno_std v0.151.0 deno_std v0.151.0がリリースされました。 Node.jsの互換レイヤーに関するバグ修正や機能の追加が実施されています。 変更点: node/fs: fs.existsSync()が例外をthrowする可能性がある問題が修正されました。 node/fs: fs.watchFile()とfs.unwatchFile()が実装されました。 node/http(s): http.request()などでprotocolを省略した際に、デフォルトで適切なプロトコルが設定されるように修正されました。 https://github.com/denoland/deno_std/releases/tag/0.151.0 Deno Merch Deno公式のショップサイトが公開されました。 https://merch.deno.com/ ソースコードも公開されており、Fresh/Twind/SWR/GraphQL Storefront API (Shopify)をベースに実装されているようです。 https://github.com/denoland/merch Freshのロードマップ Freshのロードマップが公開されました。 Roadmap (#563) 直近では、以下の変更が予定されているようです。 プラグインシステムの実装 (現状、Twindプラグインの実装が進行しているようです) <Head>コンポーネントの非推奨化 (<head>タグによって直接メタ情報を埋め込めるようにする予定のようです) https://github.com/denoland/fresh/issues/563 PrismaのDenoサポートについて Prismaの以下のissueで、Denoのサポートについて議論されています。...

August 7, 2022

2021/07/25〜2022/07/31の最新情報

Deno v1.24.1 Deno v1.24.1がリリースされました。 このリリースはバグ修正がメインです。 "unhandledrejection"イベントに関する修正 "unhandledrejection"イベントのリスナに関する型定義が修正されています。 また、モジュールのトップレベルで同期的にエラーが発生した際にも"unhandledrejection"イベントが発火されるように修正されています。 Deno.Child.unref()に関する修正 Deno.Child.unref()を呼ぶと、Deno.Child.stdoutやDeno.Child.stderrもunrefされるように修正されています。 その他の変更点 型チェック時(--check)に、TypeScriptのjsxFactoryとjsxFragmentFactoryオプションが自動で設定される問題が修正されています。 https://github.com/denoland/deno/releases/tag/v1.24.1 deno_std v0.150.0 deno_std v0.150.0がリリースされました。 http/http_errors createHttpErrorでheadersオプションがサポートされています。 import { createHttpError } from "https://deno.land/std@0.150.0/http/http_errors.ts"; import { Status, STATUS_TEXT } from "https://deno.land/std@0.150.0/http/http_status.ts"; const error = createHttpError( Status.Unauthorized, STATUS_TEXT[Status.Unauthorized], { headers: { "WWW-Authenticate": "Basic" } } ); error.headers; // => `Headers { "www-authenticate": "Basic" }` io/writers StringWriterにデータを書き込む際に、引数のUint8Arrayがコピーされるようになりました。 引数に渡したUint8Arrayが別の箇所で変更されると、StringWriter#toStringが返却する文字列にも影響が出てしまう問題があったようです。 import { StringWriter } from "https://deno.land/std@0.150.0/io/writers.ts"; const encoder = new TextEncoder(); const w = new StringWriter(); const bytes = encoder....

July 31, 2022

2021/07/18〜2022/07/24の最新情報

Deno v1.24.0 Deno v1.24.0がリリースされました。 以下の記事に変更点をまとめたため、詳しくはそちらを参照いただければと思います。 Deno v1.24 deno_std v0.149.0 deno_std v0.149.0がリリースされました。 semverモジュールが追加 deno_stdにsemverモジュールが入りました。 import * as semver from "https://deno.land/std@0.149.0/semver/mod.ts"; semver.valid("v1.2.3"); // => 1.2.3 semver.gt("2.0.0", "1.2.4"); // => true semver.satisfies("1.4.2", ">=1.x"); // => true testing/asserts assertRejectsがthenableなオブジェクトをサポートしました。 const error = await assertRejects(() => ({ then() { throw new Error("foo"); }, })); console.assert(error.message === "foo"); node process.on("beforeExit")がサポートされました。 https://github.com/denoland/deno_std/releases/tag/0.149.0 Denoについてのアンケート Deno公式でアンケートが公開されています。 https://unf275cfh14.typeform.com/to/k3eQB4Q3 https://twitter.com/deno_land/status/1550209370301952000

July 24, 2022

Deno v1.24

Deno v1.24がリリースされました。 この記事では主な変更点などについて解説します。 --checkオプション指定時のトランスパイルの挙動が変更 tscがトランスパイル用途では使用されなくなりました。 型チェック トランスパイル --check (v1.23) tsc tsc --no-check (v1.23) - swc --check (v1.24) tsc swc --no-check (v1.24) - swc これにより、トランスパイルの効率化が見込まれます。 また、tscの実行結果をSQLiteにキャッシュする仕組みも導入されており、型チェックについても効率化が図られています。($DENO_DIR/check_cache_v1にSQLiteのデータベースファイルが作成されます) FFI(Deno.dlopen)の改善 v1.23.3でV8 Fast API Calls+JITコンパイルの導入による最適化が実施されました。 今回のリリースでは、64ビット値を取り扱う関数に対してもV8 Fast API Callsを利用した最適化が適用されるように改善されています。 サブプロセスAPIへの変更 Deno v1.21 で入ったサブプロセスAPIに変更が加わっています。 Deno.Child.unref()とDeno.Child.ref()のサポート 挙動としてはDeno.refTimerやDeno.unrefTimerと同様で、Deno.Child.unref()を呼ぶと、対象の子プロセスがDenoの終了をブロックしなくなります。 const child = await Deno.spawnChild("some_long_running_process", { args }); child.unref(); (破壊的変更) Deno.Childの型定義が変更 Deno.spawnChildで返却されるDeno.Childのstdio関連のプロパティに関する型定義が変更されています。 v1.23.4...

July 24, 2022

2021/07/11〜2022/07/17の最新情報

Deno v1.23.4 Deno v1.23.4がリリースされました。 V8 Fast API Calls+JITコンパイルによるFFIの最適化 V8 Fast API Callsとtinyccを使用したJITコンパイルにより、FFI(Deno.dlopen)の最適化が行われています。 Deno.dlopenを呼んだ際に、下記の条件が満たされる外部関数へのバインディングに対して、自動でFast API Calls+JITコンパイルによる最適化が適用されます。 非Windows環境であること (Windowsではまだこれらの最適化がサポートされていません) パラメータ及び戻り値の型にスカラ型のみが含まれる場合 もしこれらの最適化を無効化したい場合は、callbackオプションにtrueを指定する必要があります。 const lib = Deno.dlopen( "some_lib.so", { some_func: { parameters: ["usize", "usize"], result: "usize", callback: true }, } ); 細かな詳細については、deno_ffiも参照ください。 perf(ext/ffi): leverage V8 Fast Calls #15125 fix(ext/ffi): trampoline for fast calls #15139 fix(ext/ffi): allow opting out of fast ffi calls #15131 その他の変更点 Request#json()などに続けてRequest....

July 17, 2022