Denoの直近の変更について
今週はDeno本体のリリースは行われていないですが、おそらく次のDeno v1.46でリリースされると思われる機能がいくつかマージされていたため、主要なものについて紹介いたします。
⚠️正式にDeno v1.46がリリースされる際には、仕様などに変更が入る可能性もあります🙏
CLI引数の簡略化
パーミッション引数の簡略化
例えば、--allow-readは-R, --allow-envは-Eのように短縮された形式で指定することができます。
# 例) 以下は`deno --allow-read --allow-env main.ts`と同等です
$ deno -ER main.ts
runの省略 (deno <script>のサポート)
deno runコマンドにおけるrunを省略できるようにする変更が導入されています。
$ deno main.ts
deno runでタスクの実行がサポート (deno run <task>)
deno runコマンドのエントリポイントとして指定されたファイルが存在しない場合、deno.jsonのtasksで定義されたタスクを実行するようフォールバックする機能が追加されています。deno run <entrypoint>のように実行された際に、<entrypoint>のファイルが存在しない場合はdeno task <entrypoint>として振る舞うイメージです。
# `deno.json`の`tasks.hello`が実行されます
$ deno run hello
deno fmtでのCSSやYAMLのサポート
deno fmtコマンドにCSS/SCSS/Sass/Less/YAMLなどのフォーマットのサポートが追加されています。
- feat(fmt): support CSS, SCSS, Sass and Less (denoland/deno#24870)
- feat(fmt): support YAML (denoland/deno#24717)
これらのフォーマットを有効化するためには、以下のオプションを指定する必要があるようです。
deno fmtコマンドに--unstable-cssまたは--unstable-yamlを指定するdeno.jsonの"unstable"フィールドで"fmt-css"または"fmt-yaml"を指定する
deno cleanコマンド
deno cleanコマンドが追加されています。現状ではDENO_DIRを削除する機能のみが提供されていますが、今後、より細かく振る舞いを制御できるようにすることなども想定されているようです。
deno_stdのリリース
deno_stdがリリースされています。
@std/csv@1.0.0
@std/csv@1.0.0がリリースされました。
@std/http@1.0.1
@std/http@1.0.1がリリースされています。
@std/http/route - URLPatternベースのルーティングモジュール
URLPatternを活用して簡易的なルーティングを実装するための実験的なモジュールが追加されています。
route()を呼ぶとDeno.ServeHandler型の関数を返却してくれるため、deno serveやDeno.serveなどと併用することができます。
import { type Route, route } from "jsr:@std/http@1.0.1/route";
const routes: Array<Route> = [
{
pattern: new URLPattern({ pathname: "/messages/:id" }),
handler: (
_req,
_info,
params,
) => new Response(`Message ${params?.pathname.groups.id}`),
},
{
pattern: new URLPattern({ pathname: "/authenticate" }),
method: "POST",
handler: () => new Response("OK"),
},
];
const handler = route(routes);
export default {
fetch(req: Request): Response {
return handler(req);
},
};
余談ですが、Deno.ServeDefaultExportという型が直近でDenoの本体に追加されているため、deno serveを使用する際の型の定義が行いやすくなりそうです。(おそらくDeno v1.46でリリースされると思います)
const handler = route(routes);
export default {
fetch(req) {
return handler(req);
},
} satisfies Deno.ServeDefaultExport;
@std/http/{header,method}
実験的なモジュールとして@std/http/headerと@std/http/methodが追加されています。
HTTPヘッダーやメソッドに関する定数が提供されています。
@std/streams@1.0.1
@std/streams@1.0.1がリリースされています。
@std/streams/fixed-chunk-streamが追加
入力を一定のサイズごとのチャンクに分割してくれるFixedChunkStreamが追加されています。
@std/archive@0.225.0
@std/archive@0.225.0がリリースされています。
APIに関する以下の破壊的変更が実施されています。
TarEntryのコンストラクターのheader引数が削除されていますTarのdataプロパティーがprivateに変更されていますUntarのreaderとblockプロパティーがprivateに変更されています