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.jsontasksで定義されたタスクを実行するようフォールバックする機能が追加されています。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などのフォーマットのサポートが追加されています。

これらのフォーマットを有効化するためには、以下のオプションを指定する必要があるようです。

  • 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 serveDeno.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引数が削除されています
  • Tardataプロパティーがprivateに変更されています
  • Untarreaderblockプロパティーがprivateに変更されています