Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?
@access3151fq

deno.json(Deno設定ファイル)の書き方

2021年9月14日リリースのv1.14で、deno.json(Denoの設定ファイル)が導入されした。
この記事では、設定ファイルの書き方について解説します。

なぜdeno.jsonが導入されたか

元々、DenoにはCargo.toml(Rust)やpackage.json(Node.js)のような設定ファイルが存在しませんでした。
しかし、

  • 権限指定用のコマンドラインフラグ(--allow-xxxなど)が増えた
  • 既にコマンドラインフラグで指定できるファイルが存在している(import-maptsconfig
  • deno fmtやdeno lintに対する細かい設定を可能にして欲しいという要望が出ていた

という理由から、設定ファイルが導入されることになりました。

deno.jsonの特徴

Node.jsにおけるpackage.jsonの反省を踏まえた設計になっています。

  • ブラウザと同様、deno.jsonが無くても動作する(あくまでオプションという扱い)
  • ファイル中にコメントを書く場合は、拡張子をjsoncにする必要がある
  • 未知のプロパティを許可しない(他のプログラムの設定ファイルとして使うことはできない)
  • モジュールの読み込みには関与しない
    • Denoにはパッケージの概念が無く、一つ一つのファイルがモジュールであり、web上のあらゆる場所から参照されうる
    • package.jsonの「パスのルートまで遡って設定ファイルを発見する」という動作は、URLからのimport時にサーバーに無駄な負荷をかける
  • 実行時のエントリポイントでのみ使用される

つまり、外部モジュールの読み込みには関与しません。
外部モジュールのトップにdeno.jsonが置いてあったとしても、外部モジュールをimportするプログラムからは単に無視されます。ここがpackage.jsonとの大きな違いです。

deno.jsonの構文

deno.json(例)
{
  "compilerOptions": {
    "allowJs": true,
    "lib": ["deno.window"],
    "strict": true
  },
  "lint": {
    "files": {
      "include": ["src/"],
      "exclude": ["src/testdata/"]
    },
    "rules": {
      "tags": ["recommended"],
      "include": ["ban-untagged-todo"],
      "exclude": ["no-unused-vars"]
    }
  },
  "fmt": {
    "files": {
      "include": ["src/"],
      "exclude": ["src/testdata/"]
    },
    "options": {
      "useTabs": false,
      "lineWidth": 80,
      "indentWidth": 2,
      "singleQuote": false,
      "proseWrap": "always"
    }
  }
}
  • compilerOptions: tsconfig.jsonと同じ内容を指定
  • lint: deno lintの設定
    • files:
      • include: lintするファイル
      • exclude: lintしないファイル
    • rules: deno lintで使用するルールを指定(ルールの一覧はhttps://lint.deno.land/ に掲載)
      • tags: ["recommended"]を指定するとデフォルトのルールセットになる
      • include: tagsに加えて適用するルール
      • exclude: tagsから除外するルール
  • fmt: deno fmtの設定
    • files:
      • include: フォーマットするファイル
      • exclude: フォーマットしないファイル
    • options: deno fmtの設定オプション
    • useTabs: "インデントにタブ(true)とスペース(false)のどちらを使用するか(デフォルト: false)
    • lineWidth: 1行当たりの文字数(デフォルト: 80)
    • indentWidth: インデントの文字数(デフォルト: 2)
    • singleQuote: 引用符にシングルクォーテーション(true)を使用するかダブルクォーテーション(false)を使用するか。(デフォルト: false)
    • proseWrap: 文章をMarkdownファイルで改行する方法(always又はnever又はpreserve、デフォルト: always

ファイル中にコメントを書く場合は拡張子をjsoncにします。
上記以外のプロパティがあった場合、エラーが発生します。

v1.14時点ではリンターとフォーマッタとtsconfigのみサポートされていますが、将来的にはコマンドラインフラグの指定やimport-mapの指定にも使えるようになる見込みです。

deno.jsonの使い方

コマンドラインフラグの--configで指定します。

> deno run --config ./deno.json ./mod.ts

なおファイル名ですが、将来的に自動検出が導入される予定なので、deno.jsondeno.jsoncとしておくのが良いようです。

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
2
Help us understand the problem. What are the problem?