LoginSignup
37
31

More than 3 years have passed since last update.

Deno v1.4.0で実装された新機能の紹介

Last updated at Posted at 2020-09-21

はじめに

Deno@v1.4.0がリリースされました。
このリリースには多くの新機能が含まれています。
この記事ではそれらの新機能について紹介します。

まとめ

  • テストカバレッジの出力がサポートされた
  • deno runコマンドで--watchフラグがサポートされた
  • WebSocket APIが実装された
  • --unstableフラグを付与すると、isolatedModules及びimportsNotUsedAsValues: errorオプションが有効化されるようになった
  • deno installコマンドでインストールしたスクリプトがバンドルされるようになった
  • deno fmt及びdeno lintがチェックしたファイル数を表示するようになった
  • console.logでCSSによるスタイリングがサポートされた

テストカバレッジの出力がサポートされた

deno testコマンドにテストカバレッジのサポートが追加されました。
deno testコマンドを実行する際に、--coverage及び--unstableオプションを付与することで、テストカバレッジが出力されます。

$ deno test -A --coverage --unstable
Debugger listening on ws://127.0.0.1:9229/ws/d0d8502d-422f-4257-aa2a-db380af200e6
running 9 tests
test Application#evaluate ... ok (94ms)
test Application#exposeFunction ... ok (116ms)
test Application#onExit ... ok (78ms)
test Application#serveFolder ... ok (173ms)
test Application#serveFolder with prefix ... ok (199ms)
test custom executablePath ... ok (4ms)
test Chrome#evaluate ... ok (112ms)
test Chrome#load ... ok (119ms)
test Chrome#bind ... ok (106ms)

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out (1002ms)

test coverage:
file:///home/uki00a/ghq/github.com/uki00a/carol/deps.ts 100.000%
file:///home/uki00a/ghq/github.com/uki00a/carol/test_util.ts 82.609%
file:///home/uki00a/ghq/github.com/uki00a/carol/mod.ts 96.429%
file:///home/uki00a/ghq/github.com/uki00a/carol/chrome.ts 90.769%
file:///home/uki00a/ghq/github.com/uki00a/carol/locate.ts 53.488%
file:///home/uki00a/ghq/github.com/uki00a/carol/application.ts 88.462%
file:///home/uki00a/ghq/github.com/uki00a/carol/transport.ts 77.500%
file:///home/uki00a/ghq/github.com/uki00a/carol/logger.ts 87.500%

現時点(v1.4.0)では上記のようなテキスト形式の出力のみがサポートされます。将来的には、lcovjsonのようなフォーマットもサポートが検討されているようです。

deno runコマンドで--watchフラグがサポートされた

次のように、deno runコマンドを実行する際に--watch及び--unstableオプションを付与することで、Denoが指定されたファイルを監視します。そのファイル及び依存ファイルに変更が発生する度に、ソースコードの再コンパイル及び再実行が行われます。

$ deno run --watch --unstable sample.ts

現時点ではdeno runコマンドのみが--watchオプションをサポートしていますが、将来的にはdeno test等にも追加される見込みのようです。

WebSocket APIが実装された

Web標準に準拠したWebSocket APIが実装されました。使用する際は--allow-netフラグを指定する必要があります。

const ws = new WebSocket("ws://localhost:8080");

ws.addEventListener("open", () => {
  ws.send("Hello");
});

ws.addEventListener("error", (e) => {
  console.error(e);
});

ws.addEventListener("message", (e) => {
  console.log(e);
  ws.close();
});

ws.addEventListener("close", () => {
  console.log("closed");
});

この変更に伴い、std/wsモジュールで提供されていたWebSocketクライアント(connectWebSocket関数)は削除されました。(WebSocketサーバについては、従来どおりstd/wsモジュールで提供されます)

参考

--unstableオプションを付与すると、isolatedModules及びimportsNotUsedAsValues: errorオプションが有効化されるようになった

現時点では--unstableオプションを指定したときのみ、これらのオプションが有効化されます。将来的には、--unstableオプションの有無に関わらず、デフォルトでこれらのオプションが有効化される見込みのようです。

この変更により、次のような影響があります。(--unstableオプションを指定したときのみ)

interfacetype等をimportする際はimport typeを使う必要がある

// NG🙅‍♂️
import { Application } from "./application.ts";

// OK🙆‍♂️
import type { Application } from "./application.ts";

interfacetype等を再exportする際はexport typeを使う必要がある

// NG🙅‍♂️
export { Hoge } from "./hoge.ts";

// OK🙆‍♂️
export type { Hoge } from "./hoge.ts";

参考

deno installコマンドでインストールしたスクリプトがバンドルされるようになった

追記) いくつかのスクリプトのインストールで問題が発生したため、この変更はv1.4.1でrevertされました。現在、swcを使ってdeno bundleコマンドの再実装が行われており、それが完了次第、この変更は再度denoに取り込まれる見込みのようです(#7461)

deno installでインストールしたスクリプトが、その依存関係等も含め、単一のJSファイルにbundleされるようになりました。

これにより、ユーザがスクリプトの依存モジュールを再読込した際に、意図せずしてスクリプトが壊れてしまう問題を回避できるなどの利点があるようです。

deno fmt及びdeno lintがチェックしたファイル数を表示するようになった

deno fmt及びdeno lintを実行した際に、チェックが行われたファイル数が表示されるようになりました。

これによって、ちゃんとチェックが行われたかどうか分かりやすくなっています。

$ deno fmt
Checked 13 files
# v1.4.0以前は、エラーがなければ何も表示されなかった

console.logでCSSによるスタイリングがサポートされた

%cを使うことで、CSSによるスタイリングができるようになりました。

以下のコードを実行すると、Denoという文字の色が緑に、背景色が青で表示されます。

console.log("Hello %cDeno", "color: green; background-color: blue");

スクリーンショット 2020-09-21 19-17-15.png

現時点では、以下のスタイルがサポートされています。

  • color
  • background-color
  • font-weight
  • font-style
  • text-decoration-color
  • text-decoration-line

スタイリングを無効化したいときは、環境変数NO_COLORtrueを設定します。

参考

37
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
31