かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Visual Studio Codeの拡張機能で環境変数を取りたい取得したい!

ここらへんになるとnode.jsとかelectronの範疇になるんですね。 一生懸命VS Codeの拡張機能のAPIリファレンス眺めてて悩んでました。

ということでprocess.envから取得できます。先日作ったjava -versionを出力ウィンドウに出力するプログラムをJAVA_HOME環境変数からフルパス指定で実行する方法は以下のような感じになります。

'use strict';
import * as vscode from 'vscode';
import * as child_process from 'child_process';
import * as path from 'path';

export function activate(context: vscode.ExtensionContext) {

    var outputChannel = vscode.window.createOutputChannel("java");

    // ここ!
    var javaHome = process.env['JAVA_HOME'];
    var javaCommand = '"' + path.join(javaHome, "bin", 'java.exe') + '"';


    let disposable = vscode.commands.registerCommand('extension.sayHello', () => {
        child_process.exec(javaCommand + " -version", (error, stdout, stderror) => {
            outputChannel.appendLine(stdout);
            outputChannel.appendLine(stderror);
        });
    });

    context.subscriptions.push(disposable);
}

export function deactivate() {
}

パスの結合はimport * as path from "path";で読み込んだpathのjoinがいい具合にやってくれるので楽ちんです。