dev.nix リファレンス

このページでは、ワークスペース環境構成ファイルのスキーマについて説明します。このファイルは常に .idx/dev.nix に配置する必要があります。

Nix 言語の詳細については、公式の Nix 言語チュートリアルをご覧ください。

パッケージ

環境にインストールするパッケージ。

pkgs 引数を使用して、インストールするパッケージを選択できます(例: pkgs.python3)。pkgs の内容は、選択した channel チャンネル オプションによって異なります。

例:

{pkgs, ...}: {
  channel = "stable-23.11";
  packages = [pkgs.vim];
}

利用可能なパッケージは、stable-23.11 または unstable で検索できます。

タイプ: パッケージのリスト

デフォルト: [ ]

チャンネル

使用する nixpkgs チャンネル。

このチャンネルは、pkgs 引数のコンテンツを定義します。

タイプ: 「stable-23.05」、「stable-23.11」、「stable-24.05」、「stable-24.11」、「unstable」のいずれか

デフォルト: "stable-23.11"

env

デベロッパー環境内で設定される環境変数。

これらの変更は、すべてのシェルとプレビュー サーバーに伝播されます。環境変数は、アプリケーションで特定の環境変数セットが必要な場合に特に便利です。

各変数の値は、文字列または文字列のリストにできます。後者は連結され、コロンの文字が挿入されます。

PATH は常に拡張され、完全に置き換えられることはないため、リストである必要があります。

例:

{pkgs, ...}: {
  env = {
    HELLO = "world";
    # append an entry to PATH
    PATH = ["/some/path/bin"];
  };
}

タイプ: 属性セット((文字列のリスト)または任意)

デフォルト: { }

idx.extensions

IDX ワークスペースにインストールする Code 拡張機能。

これは、完全修飾された拡張機能 ID のリストです(${publisherId}.${extensionId} など)。

使用可能な拡張機能の一覧については、Open VSX Registry をご覧ください。拡張機能は、${publisherId}.${extensionId}dev.nix ファイルに入力します。

タイプ: リスト(空でない文字列またはパス)

デフォルト: [ ]

idx.previews.enable

IDX プレビューを有効にするには、このプロパティを true に設定します。

この機能を使用すると、アプリの開発中にアプリを自動的に実行して再読み込みできます。

型: boolean

デフォルト: true

: true

idx.previews.previews

構成をプレビューします。

IDX がデベロッパー環境で実行するコマンドを定義します。

例:

{pkgs, ...}: {
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = ["yes"];
        cwd = "subfolder";
        manager = "web";
        env = {
          HELLO = "world";
        };
      };
    };
  };
}

タイプ: (サブモジュール)の属性セット

デフォルト: { }

idx.previews.previews.<name>.activity

Android 起動アクティビティ

型: string

デフォルト: ""

idx.previews.previews.<name>.command

実行するコマンド

型: 文字列のリスト

デフォルト: [ ]

idx.previews.previews.<name>.cwd

作業ディレクトリ

型: string

デフォルト: ""

idx.previews.previews.<name>.env

設定する環境変数。

タイプ: 文字列の属性セット

デフォルト: { }

idx.previews.previews.<name>.manager

マネージャー

タイプ: 「web」、「flutter」、「android」、「gradle」のいずれか

idx.workspace.onCreate

ワークスペースが作成されて初めて開かれたときに実行するコマンド。

これは、開発環境の設定に役立ちます。たとえば、ここでは npm install を実行するように指定しています。

{pkgs, ...}: {
  idx.workspace.onCreate = {
    npm-install = "npm install";
    # files to open when the workspace is first opened.
    default.openFiles = [ "src/index.ts" ];
  };
}

タイプ: 属性セット(パスまたは文字列または ({ openFiles = [ string ];}))

デフォルト: { }

idx.workspace.onStart

ワークスペースが開くたびに実行されるコマンド。

これは、ビルドウォッチャーを開始する場合に役立ちます。たとえば、ここでは実行する 2 つのコマンドを指定しています。

{pkgs, ...}: {
  idx.workspace.onStart = {
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
    # files to open when the workspace is (re)opened.
    default.openFiles = [ "src/index.ts" ];
  };
}

タイプ: 属性セット(パスまたは文字列または ({ openFiles = [ string ];}))

デフォルト: { }

imports

インポートしたファイルを使用して dev.nix ファイルを拡張できます。

# dev.nix
{ pkgs, ... }: {
  imports = [
    ./some-file.nix
  ];
  # ...
}
# some-file.nix
{ pkgs, ... }: {
  packages = [
    pkgs.python3
  ];
  # ...
}

dev.nix にカスタム .nix ファイルをインポートする理由は複数あります。

  1. dev.nix ファイルが大きすぎて、メンテナンス性を向上させるためにモジュラー化したい。

    { pkgs, ... }: {
      channel = "stable-24.11";
      # ...
      imports = [
        ./env-cfg.nix
        ./preview-config.nix
      ];
    }
    
  2. ローカル環境に固有のオプションを構成し、ファイルを .gitignore リストに追加します。

    # dev.nix
    { pkgs, lib, ... }: {
      # ...
    
      imports = lib.optionals (builtins.pathExists ./dev.local.nix ) [ ./dev.local.nix ];
    }
    
    #.gitignore
    .idx/dev.local.nix
    

タイプ: パスのリスト

デフォルト: [ ]

サービス

ワークスペースの起動時に有効にする一般的なサービス。

たとえば、Postgres を有効にして pgvector 拡張機能を使用するには、dev.nix に次の行を追加します。

    services.postgres = {
      extensions = ["pgvector"];
      enable = true;
    };

以降のセクションでは、サポートされているすべてのサービスと、構成可能なオプションについて説明します。

services.docker.enable

Rootless Docker を有効にするかどうか。

型: boolean

デフォルト: false

: true

services.mongodb.enable

MongoDB サーバーを有効にするかどうか。

型: boolean

デフォルト: false

: true

services.mongodb.package

使用する MongoDB パッケージ。

タイプ: パッケージ

デフォルト: <derivation mongodb-6.0.11>

services.mongodb.port

Mongod がリッスンするポートを構成します。

デフォルトでは、TCP は無効で、Mongod は /tmp/mongodb/mongodb.sock でのみリッスンします。

接続するには、接続文字列 mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock を使用します。

タイプ: 16 ビットの符号なし整数(0 ~ 65535 の範囲内)

デフォルト: 0

services.mysql.enable

MySQL サーバーを有効にするかどうか。

サーバーは、パスワードなしのユーザー root で初期化されます。そのため、追加のユーザーを作成してデータベースを作成するには、mysql -u root を使用します。

型: boolean

デフォルト: false

: true

services.mysql.package

使用する MySQL パッケージ。

タイプ: パッケージ

デフォルト: pkgs.mysql

: pkgs.mysql80

services.postgres.enable

PostgreSQL サーバーを有効にするかどうか。

型: boolean

デフォルト: false

: true

services.postgres.enableTcp

Postgres が TCP でリッスンするかどうか。

型: boolean

デフォルト: true

: true

services.postgres.package

使用する PostgreSQL パッケージ。

タイプ: パッケージ

デフォルト: pkgs.postgresql

: pkgs.postgresql_15

services.postgres.extensions

インストールする Postgres 拡張機能。

タイプ: リスト(「age」、「apache_datasketches」、「cstore_fdw」、「hypopg」、「jsonb_deep_sum」、「periods」、「pg_auto_failover」、「pg_bigm」、「pg_cron」、「pg_ed25519」、「pg_embedding」、「pg_hint_plan」、「pg_hll」、「pg_ivm」、「pg_net」、「pg_partman」、「pg_rational」、「pg_relusage」、「pg_repack」、「pg_safeupdate」、「pg_similarity」、「pg_topn」、「pg_uuidv7」、「pgaudit」、「pgjwt」、「pgroonga」、「pgrouting」、「pgsql-http」、「pgtap」、「pgvector」、「plpgsql_check」、「plr」、「plv8」、「postgis」、「promscale_extension」、「repmgr」、「rum」、「smlar」、「tds_fdw」、「temporal_tables」、「timescaledb」、「timescaledb-apache」、「timescaledb_toolkit」、「tsearch_extras」、「tsja」、「wal2json」のいずれか)

デフォルト: [ ]

: [ "pgvector" "postgis" ];

services.pubsub.enable

Google Pub/Sub エミュレータを有効にするかどうか。

エミュレータの使用に関するその他のドキュメントについては、https://cloud.google.com/pubsub/docs/emulator#using_the_emulator をご覧ください。

型: boolean

デフォルト: false

: true

services.pubsub.port

Pub/Sub がリッスンするポートを構成します。

タイプ: 16 ビットの符号なし整数(0 ~ 65535 の範囲内)

デフォルト: 8085

services.pubsub.project-id

Pub/Sub エミュレータの実行に使用するプロジェクト ID。このプロジェクトはテスト専用です。存在する必要はなく、ローカルでのみ使用されます。

型: パターン [a-z][a-z0-9-]{5,29} に一致する文字列

デフォルト: "idx-pubsub-emulator"

services.redis.enable

Redis サーバーを有効にするかどうか。

型: boolean

デフォルト: false

: true

services.redis.port

Redis がリッスンするポートを構成します。

デフォルトでは、TCP は無効になっており、Redis は /tmp/redis/redis.sock でのみリッスンします。

タイプ: 16 ビットの符号なし整数(0 ~ 65535 の範囲内)

デフォルト: 0

services.spanner.enable

Google Cloud Spanner エミュレータを有効にするかどうか。

型: boolean

デフォルト: false

: true

services.spanner.fault-injection

トランザクションへのランダムなフォールト インジェクションを有効にするかどうか。

型: boolean

デフォルト: false

: true

services.spanner.grpc-port

エミュレータをバインドする TCP ポート。

タイプ: 16 ビットの符号なし整数(0 ~ 65535 の範囲内)

デフォルト: 9010

services.spanner.rest-port

REST リクエストが処理されるポート

タイプ: 16 ビットの符号なし整数(0 ~ 65535 の範囲内)

デフォルト: 9020