Slackの次世代開発プラットフォームについて

Slackの次世代開発プラットフォームが発表されました。

CLISDKなどでDenoが採用されるようです。


Deno v1.16.2

Deno v1.16.2がリリースされました。

このリリースはバグ修正などがメインです。

  • deno testのsub-steps APIを使った際に、テストレポートに実行されたステップ数が表示されるようになりました。
  • deno test --docでコードブロックにCRLFが含まれていると、適切にタイプチェックが行われない問題が修正されました
  • リモートモジュールのdynamic importに時間がかかる問題が改善されました。

https://github.com/denoland/deno/releases/tag/v1.16.2

deno_std v0.115.0

deno_std v0.115.0がリリースされました。

std/fsでの破壊的変更やstd/nodeのNode.jsとの互換性向上などが実施されています。

std/fs

fs/mod.tsからcopy()copySync()がexportされなくなりました (これらのAPIは--unstableに依存するためです)

std/node

  • wasiパッケージが実装されました。
  • process
    • 下記APIが追加されました
      • process.config
      • process.exitCode
      • process.stdin.setRawMode
      • process.hrtime.bigint
    • process.nextTickのNode.jsとの互換性が向上しました
  • fs
    • 下記APIが追加されました
      • fs.readSync
      • fs.read
      • fs.rm
      • fs.rmSync
  • http
    • Node.jsとの互換性が向上しました。(Server#listen()の引数なしの形式のサポート、ServerResponse#end()で空のレスポンスのサポートなど)
  • util
    • util.isBuffer/util._extend/util.stripVTControlCharactersが追加されました
    • util.isRegExpのNode.jsとの互換性が向上しました
  • events
    • EventEmitterがES6のクラス形式からES5形式の実装に変更されました。(これによりNode.jsとほぼ互換になったはず)

https://github.com/denoland/deno_std/releases/tag/0.115.0

Denoの設定ファイルにタスクやパーミッション管理の仕組みを追加する提案

下記issueにて、Denoの設定ファイル(--config)にタスク管理の仕組みを追加することが提案されています。

具体的には設定ファイル内で"tasks"というプロパティを定義し、そこでdeno runに与えるデフォルトのエントリーポイントの定義や、deno lintなどで検査対象のファイルなどを定義できるようにすることが想定されているようです。

また、これに関連して、設定ファイルでパーミッションの定義ができるようにする提案もなされています。


Oak v10.0.0

Oakのv10.0.0がリリースされました。

deno_std/httpdeno_std/wsへの依存が削除 (破壊的変更)

Deno本体でDeno.serveHttpDeno.upgradeWebSocketなどが安定化されたため、std/httpstd/wsへの依存が削除されました。

この影響により、Application.prototype.handle()std/httpServerRequestを受け付けないよう変更されています。

またContext.prototype.upgrade()std/wsではなくWeb標準のWebSocketを返すように変更されています。

Application.prototype.fetchEventHandlerが削除 (破壊的変更)

Deno Deploy向けの変更です。

Deno Deploy Beta 2Deno.listenDeno.serveHttpなどがサポートされたこともあり、Application.prototype.fetchEventHandlerが削除されました。

今後は、Deno DeployでもDeno CLIと同様にApplication.prototype.listenを使用する必要があります。

許容されるリクエストボディのサイズに制限がかかるようになりました (破壊的変更)

DDos攻撃への対策のため、許容されるリクエストボディのサイズに制限が掛けられました (デフォルトは最大10Mibまで)

この制限を無効化したいときは、context.request.body()limitオプションに0またはInfinityを設定する必要があります。

context.request.body({ type: "json", limit: 0 });

Routerミドルウェアでcontext.paramsの型がルート文字列を元に推論されるように変更されました。(破壊的変更)

例えば、以下のコードにおけるcontext.paramsの型が"/users/:name"の文字列を元に推論されます。

const router = new Router();

router.get("/users/:name", (context) => {
  context.response.body = `Hello ${context.params.name}`;
});

testing.createMockContextから返却されるContextオブジェクトにcookiesプロパティが追加されました。

例)

import { testing } from "https://deno.land/x/oak@v10.0.0/mod.ts";

const context = testing.createMockContext();
await context.cookies.get("foo");

Cookies.prototype.setの呼び出し時にignoreInsecure: trueを指定すると、非HTTPS環境でCookieのSecure属性を設定しようとした際に発生するエラーを回避できるようになりました。

context.cookies.set("foo", "bar", { secure: true, ignoreInsecure: true })

https://github.com/oakserver/oak/commit/b85ffc3d48af6b0d6c3b3a37aa5142dbc068cffd

deno_sqlite3

deno_sqlite3はDenoのSQLiteモジュールです。

deno-sqliteがWASMベースなのに対し、こちらはFFIをベースに実装されています。

ベンチマークによるとdeno-sqliteよりも高速に動作するようです。

ただし、deno-sqliteはブラウザでも動くはずなので、用途に応じて使い分けるとよさそうな気がします。


https://github.com/littledivy/deno_sqlite3