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
マネージャー
タイプ: web
、flutter
のいずれか
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