Slackの次世代開発プラットフォームについて
Slackの次世代開発プラットフォームが発表されました。
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.configprocess.exitCodeprocess.stdin.setRawModeprocess.hrtime.bigint
process.nextTickのNode.jsとの互換性が向上しました
- 下記APIが追加されました
fs- 下記APIが追加されました
fs.readSyncfs.readfs.rmfs.rmSync
- 下記APIが追加されました
http- Node.jsとの互換性が向上しました。(
Server#listen()の引数なしの形式のサポート、ServerResponse#end()で空のレスポンスのサポートなど)
- Node.jsとの互換性が向上しました。(
utilutil.isBuffer/util._extend/util.stripVTControlCharactersが追加されましたutil.isRegExpのNode.jsとの互換性が向上しました
eventsEventEmitterが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/httpやdeno_std/wsへの依存が削除 (破壊的変更)
Deno本体でDeno.serveHttpやDeno.upgradeWebSocketなどが安定化されたため、std/httpやstd/wsへの依存が削除されました。
この影響により、Application.prototype.handle()がstd/httpのServerRequestを受け付けないよう変更されています。
またContext.prototype.upgrade()もstd/wsではなくWeb標準のWebSocketを返すように変更されています。
Application.prototype.fetchEventHandlerが削除 (破壊的変更)
Deno Deploy向けの変更です。
Deno Deploy Beta 2でDeno.listenやDeno.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");
Cookie APIでignoreInsecureオプションのサポート
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はブラウザでも動くはずなので、用途に応じて使い分けるとよさそうな気がします。