5
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

はじめに

Deno Advent Calendar 2020 10日目の記事です🦕

2020/12/8にDeno@v1.6.0がリリースされました🥳
この記事では、v1.6.0に含まれる新機能について紹介します。

追記

記事を書いたあとで気づいたのですが、@maguro_tuna さんのZennの記事と内容がかぶっていました🙏🙇‍♂️

deno compile等についてこの記事よりも詳細に書かれているので、よろしければ、以下の記事も参照ください🙇‍♂️

要約

deno compileコマンドが実装され、アプリケーションを単一の実行可能ファイルとしてパッケージングできるようになった

deno compileコマンドが実装され、denoのアプリケーションを単一の実行可能ファイルとしてパッケージングできるようになりました。(イメージとしては、Node.jsのpkgパッケージが近いと思います)

使い方

$ deno compile --unstable <パッケージング対象のファイル>

上記のような形式でコマンドを実行すると、コマンドライン引数で指定されたファイル及びそのファイルから再帰的に依存されているモジュールがバンドルされ、単一の実行可能ファイルへとパッケージングされます。

試しに、std/examples/welcome.tsをパッケージングし、実行してみます。

$ deno compile --unstable https://deno.land/std@0.80.0/examples/welcome.ts
Download https://deno.land/std@0.80.0/examples/welcome.ts
Check https://deno.land/std@0.80.0/examples/welcome.ts
Bundle https://deno.land/std@0.80.0/examples/welcome.ts
Compile https://deno.land/std@0.80.0/examples/welcome.ts
Emit welcome
$ ./welcome
Welcome to Deno 🦕

うまく実行できました!

出力される実行可能ファイルの名前は、deno installコマンドと同様に、パッケージング対象のファイル名を元に決定されます。

出力される実行可能ファイルの名前を変更したいときは、--outputオプションで指定します。

$ deno compile --unstable --output awesome-cli cli.ts
$ ./awesome-cli

ユースケース

実践的な使い方としては、以下のように様々な使い方が考えられそうです。

  • Webアプリケーションのデプロイ
  • CLIツールをバイナリ形式で配布する(例: dem/deno-udd)
  • webview_denocarolと組み合わせて、シングルバイナリ形式でGUIアプリケーションを配布する

制限

現時点では以下のようにいくつか制限があります。

  • クロスコンパイルに対応していない
  • dynamic importが動作しない
  • パーミッションの指定に対応していない(--allow-read, --allow-net等)

これらの制限については、すでにissueが起票されており、将来的にはサポートされる可能性もあります。

deno lspコマンドによってLanguage Serverが起動できるようになった

deno lspコマンドが実装され、deno単体でLanguage Serverが起動できるようになりました。

現時点では、typescript-language-server等と比較すると、まだまだ実装されている機能は少ないです。

しかし、徐々に不足している機能が追加されていっているため、将来的にはvscode以外のエディタでもdenoを使った開発がしやすくなると思います。

現時点で実装されている機能

※LSPの仕様についてはlsp_spec_jaなどを参照ください

  • textDocument/definition
  • textDocument/formatting
  • textDocument/hover
  • textDocument/references
  • textDocument/completion (部分的)

使用方法

vscodeからdeno lspを使用する方法

vscodeからdeno lspを連携させるには、現時点ではvscode-deno-canaryが必要です。

以下のように、denolandで検索すると見つかると思います。

※vscode-deno(canaryではない方)をすでにインストールされている場合は、同一の補完候補が重複して表示されたりするため、一時的に無効化することを推奨します。

how-to-install-vscode-deno-canary.png

vim-lspからdeno lspを使用する方法

以下の設定をvimrcまたはinit.vimに記述すると、vim-lspからdeno lspを利用できるようになります。

vimrc
if executable("deno")
  augroup LspTypeScript
    autocmd!
    autocmd User lsp_setup call lsp#register_server({
    \ "name": "deno lsp",
    \ "cmd": {server_info -> ["deno", "lsp"]},
    \ "root_uri": {server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), "tsconfig.json"))},
    \ "whitelist": ["typescript", "typescript.tsx"],
    \ })
  augroup END
endif

isolatedModulesが常に有効化されるようになった

Deno@v1.4から--unstableオプションを指定したときのみ、TypeScriptのisolatedModulesが有効化されるようになりました

Deno@v1.6からこの挙動が変更され、常にisolatedModulesが有効化されるようになりました。(tsconfig.jsonによって変更することもできません)

この影響により、既存のアプリケーション・モジュールのコンパイルが失敗するようになる可能性があります。(修正方法についてはこちらの記事を参照ください)

TypeScriptがv4.1にアップグレードされた

Deno内部のTypeScriptがv4.1にアップグレードされました。
これにより、Template Literal Types等の機能がサポートされます。

詳細については、以下を参照ください:

まとめ

この記事ではDenoのv1.6.0でリリースされた新機能について紹介しました。
deno compileやdeno lspコマンドのサポートにより、さらに便利になったと思います。
興味があれば、ぜひDenoをさわってみてください!

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
5
Help us understand the problem. What are the problem?