最近 Deno を触り始めた。
エディタには Visual Studio Code を使っているのだが、現状では、通常の TypeScript での開発のような「ゼロコンフィグで様々な支援を受けることができる」という状態にはなっていない。
Deno での構文がエラーになるし、インテリセンスも効かない。
これでは不便だし、TypeScript を使うメリットが半減してしまうので、対策を調べた。
Visual Studio Code (以下、VSCode)のバージョンは1.46.0
、Deno のバージョンは1.1.0
で、動作確認している。
まずサンプルとして、以下の内容のserver.ts
を用意する。
そして$ deno run --allow-net server.ts
を実行すると、サーバが立ち上がる。また、Deno のバージョン情報がターミナルに表示される。
import { listenAndServe } from "https://deno.land/std/http/server.ts"; listenAndServe({ port: 8080 }, (req) => { if (req.method === "GET") { switch (req.url) { case "/": req.respond({ status: 200, headers: new Headers({ "content-type": "text/plain", }), body: "Hello Deno.", }); break; default: req.respond({ status: 404, headers: new Headers({ "content-type": "text/plain", }), body: "Not found", }); break; } } }); console.log("Server running on localhost:8080"); console.log(Deno.version);
このコードの内容については、本記事の主題ではないので詳しくは触れない。
問題は、1 行目のコード。
import { listenAndServe } from "https://deno.land/std/http/server.ts";
パスとして URL を指定しており、これが Deno の特徴のひとつなのだが、通常の TypeScript ではこのような書き方はしないため、VSCode がエラーを出してしまっている。
そして、末尾のconsole.log(Deno.version);
でもエラーが出ている。
TypeScript にDeno
というオブジェクトは存在しないので、当然ではある。
だが Deno で実行する場合はDeno
は存在するので、Deno のプロジェクトにおいてはこのエラーは出て欲しくない。
何より、インテリセンスが機能しないが厳しい。
これらのエラーを消すために、まず、以下の拡張機能をインストールして有効にする。
次に、$ yarn add -D typescript-deno-plugin typescript
で必要なパッケージをインストールする。
これで、ファイルを開き直すとエラーが消えている。
インテリセンスも機能している。
node_modules
さえあれば問題ないようなので、package.json
やyarn.lock
は削除してしまう。
ちなみに、node_modules
に入っているtypescript
と Deno が使う TypeScript は別物であり、Deno を実行した時はあくまでも Deno が搭載している TypeScript を使用する。
そのため、$ yarn add
で入れた TypeScript のバージョンによって実行結果が変わってしまう、ということはない。
これで、Deno でも VSCode の支援を受けながら開発できるようになった。
Deno で使う訳ではない npm パッケージ(typescript-deno-plugin
とtypescript
)をインストールしなければならないのは不格好で不便だが、Deno はまだ新しい言語であり、仕方ないのかもしれない。