IDX ワークスペースのカスタマイズ

Project IDX の目標は、できる限り開発者にとっての利便性を高めることです。IDX がこれを実現する方法の一つは、デベロッパーが特定のプロジェクトに適したツールをワークスペースにインストールし、ワークスペースが機能するように設定をカスタマイズする自由と柔軟性を持たせることです。

Nix + IDX

IDX は、Nix を使用して各ワークスペースの環境構成を定義します。Nix は純粋に機能するパッケージ マネージャーであり、各依存関係に一意の識別子を割り当てます。つまり、最終的には、同じ依存関係の複数のバージョンを環境にシームレスに含めることができます。また、再現可能で宣言的です。IDX のコンテキストでは、ワークスペース間で Nix 構成ファイルを共有して、同じ環境構成を読み込むことができます。

IDX は、.idx/dev.nix ファイルを使用して、コード リポジトリから直接プレビュー環境とワークスペース パッケージの構成を定義します。このファイルで定義できる属性とパッケージ ライブラリは、Nix 属性セット構文に従います。

次の例は、プレビューを有効にする基本環境構成を示しています。

{ pkgs, ... }: {

  # Which nixpkgs channel to use.
  channel = "stable-23.11"; # or "unstable"

  # Use https://search.nixos.org/packages to find packages
  packages = [
    pkgs.nodejs_18
  ];

  # Sets environment variables in the workspace
  env = {
    SOME_ENV_VAR = "hello";
  };

  # Search for the extensions you want on https://open-vsx.org/ and use "publisher.id"
  idx.extensions = [
    "angular.ng-template"
  ];

  # Enable previews and customize configuration
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = [
          "npm"
          "run"
          "start"
          "--"
          "--port"
          "$PORT"
          "--host"
          "0.0.0.0"
          "--disable-host-check"
        ];
        manager = "web";
      };
    };
  };
}

Nix 属性とパッケージ ライブラリ

荷物

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

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

例:

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

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

Type: パッケージのリスト

デフォルト: [ ]

チャンネル

使用することもできます。

このチャネルでは pkgs 引数の内容を定義します。

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

デフォルト: "stable-23.11"

env

開発環境内で設定される環境変数。

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

例:

{pkgs, ...}: {
  env = {
    HELLO = "world";
  };
}

Type: 任意の属性セット

デフォルト: { }

idx.extensions

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

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

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

型: 空でない文字列またはパスのリスト

デフォルト: [ ]

idx.previews.enable

IDX プレビューを有効にするには、これを true に設定します。

この機能により、アプリの開発中に自動的に実行と再読み込みが行われるようになります。

タイプ: ブール値

デフォルト: 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.*.command

実行するコマンド

タイプ: 文字列のリスト

デフォルト: [ ]

idx.previews.previews.*.cwd

作業ディレクトリ

タイプ: string

デフォルト: ""

idx.previews.previews.*.env

設定する環境変数。

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

デフォルト: { }

idx.previews.previews.*.manager

マネージャー

タイプ: webflutter のいずれか

idx.workspace.onCreate

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

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

{pkgs, ...}: {
  idx.workspace.onCreate = {
    npm-install = "npm install";
  };
}

Type: 属性セット(パスまたは文字列)

デフォルト: { }

idx.workspace.onStart

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

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

{pkgs, ...}: {
  idx.workspace.onStart = {
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
  };
}

Type: 属性セット(パスまたは文字列)

デフォルト: { }

services.docker.enable

ルートレス Docker を有効にするかどうか。

タイプ: ブール値

デフォルト: false

例: true