Deno を始める - 第7回 (All in one な deno のサブコマンド)

| 4 min read
Author: masahiro-kondo masahiro-kondoの画像

ここまで Deno の様々な機能を見てきました。今回は、Deno のツール(サブコマンド)について見ていきます。

Contents

Deno のサブコマンド

#

第1回でも軽く紹介したように、deno CLI は多くのサブコマンドを提供しています。表にして本連載で取り上げたものは該当の箇所にリンクを貼ってみました。

サブコマンド 説明 本連載での言及
bench Run benchmarks
bundle Bundle module and dependencies into single file
cache Cache the dependencies 第2回
check Type-check the dependencies
compile Compile the script into a self contained executable
completions Generate shell completions
coverage Print coverage reports
doc Show documentation for a module
eval Eval script
fmt Format source files
info Show info about cache or info related to source file 第1回
init Initialize a new project 第1回
install Install script as an executable 第6回
lint Lint source files
lsp Start the language server
repl Read Eval Print Loop
run Run a JavaScript or TypeScript program 毎回
task Run a task defined in the configuration file 第3回
test Run tests
types Print runtime TypeScript declarations
uninstall Uninstall a script previously installed with deno install
upgrade Upgrade deno executable to given version 第1回
vendor Vendor remote modules into a local directory 第2回

Node.js でいうと node / npm コマンドに加え、複数のサードパーティ製 npm パッケージをインストールし、設定ファイルをいくつか書いて整うレベルの機能が最初から揃っています。実際、install サブコマンドも第6回の deployctl まで使う機会がありませんでした[1]

以下、これまで触れていなかったサブコマンドのいくつかを軽く見てみましょう。

fmt

#

JavaScript / TypeScript のフォーマッタです。JSX/TSX、JSON に加えて Markdown 中のコードブロックのフォーマットにも対応しています。

deno fmt で実際にカレントディレクトリのファイルをフォーマットします。
--check オプションをつけるとフォーマット箇所をプレビューできます。

fmt --check

deno fmt | Manual | Deno

repl

#

REPL(read-eval-print-loop) を使うとコードスニペットの動作を素早く確認できます。TypeScript にも対応していますが、型チェックは行われず JavaScript にトランスパイルされ実行されます。

deno repl | Manual | Deno

lint

#

JavaScript / TypeScript の Linter です。deno_lint docs にあるルールに基づいて静的コード分析を行います。

deno lint | Manual | Deno

test

#

JavaScript / TypeScript コードをテストするための組み込みのテストランナーです。テストコードは Deno.test API と assert 用のライブラリを使用して書きます。

import { assertEquals } from "https://deno.land/std@0.165.0/testing/asserts.ts";

// Compact form: name and function
Deno.test("hello world #1", () => {
const x = 1 + 2;
assertEquals(x, 3);
});

Testing | Manual | Deno

coverage

#

テスト実行時に --coverage オプションをつけてカバレッジ情報を出力しておけば、coverage サブコマンドでカバレッジを視覚的に確認したり、カバレッジレポートを作成したりできます。

Coverage | Manual | Deno

doc

#

JSDoc 形式のコメントを書いておくと、deno doc コマンドでドキュメントを生成できます。

deno doc | Manual | Deno

compile

#

Deno のスクリプトを自己実行可能なシングルバイナリにコンパイルします。現状不安定版の機能です。

メッセージを表示するだけの Deno のコードをコンパイルしてサイズを確認すると 94Mbyte でした。

deno compile https://deno.land/std/examples/welcome.ts
$ ls -lh welcome
-rwxrwxrwx 1 masahiro-kondo staff 94M 11 25 11:29 welcome

Deno をライブラリとしてスタティックリンクしているようです。Worker が使えないなどの制約があり、サイズは大きいですがシングルバイナリとして配布できるのが嬉しいケースもあるかもしれません。

deno compile | Manual | Deno

completions

#

シェルで Deno のコマンドを補完してくれる設定を出力します。筆者は ohmyzsh を使っているので以下のように plugins 配下に設定を書き出しました。

mkdir ~/.oh-my-zsh/custom/plugins/deno
deno completions zsh > ~/.oh-my-zsh/custom/plugins/deno/_deno

.zshrc に以下のように deno plugin を追加しました。

plugins=(git deno)

これでコマンド入力途中に TAB キーで保管してくれたり候補を出したりしてくれるようになります。

shell completions

Set Up Your Environment | Manual | Deno

types

#

Deno ランタイムの TypeScript 型定義を表示するサブコマンドです。型定義ファイルを作成して利用できます。

deno types > lib.deno.d.ts

最後に

#

Deno はビルトインの最適化されたツールをサブコマンドとして提供しており、deno CLI と 公式の VS Code 拡張をインストールするだけで環境が整います。これも開発体験のよさにつながっていると思います。

この連載執筆で Deno に入門してエコシステムを理解しつつあるので、アプリやライブラリを書いていきたいと思っています。

連載はこれで終了ですが、また Deno 関連の面白い話題があったらブログ記事などで取り上げていこうと思います。


  1. これは URL import に依るところも大きいです。 ↩︎

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  2. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  3. GitHub Codespaces を使いはじめる (2022-05-18)
  4. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  5. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  6. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  7. Nuxt3入門(第3回) - ユニバーサルフェッチでデータを取得する (2022-10-06)
  8. 第1回 OpenAPI Generator を使ったコード生成 (2022-06-04)
  9. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  10. Nuxt3入門(第2回) - 簡単なNuxtアプリケーションを作成する (2022-10-02)