Windows Terminal に Anaconda Powershell Prompt を追加するには?


あらすじ

Windows 10で、Windows TerminalAnaconda PowerShell Promptを追加する話です。
検索してもAnaconda Promptを追加できるものしか見つからなかったので、この記事を書きました。

※Jsonファイルによる設定だけでなく、GUI設定ができるようになったので、追記しました。

イントロ

[Anaconda](https://docs.conda.io/projects/conda/en/latest/glossary.html## イントロ

長いことCondaに触れている人なら、誰しも最新の環境で利用したいと願っていることでしょう。

以前のアップデート

Anaconda PromptPowershellに対応しましたが、それでも完璧な対応ではありませんでした。conda initすることにより、次回からPowershellの起動毎に、condaコマンドのための環境変数%PATH%を設定し、(base)仮想環境をactivateするという、待ち時間の苦痛を強いるものだったからです。

その後のアップデート

現在はAnacondaもしくはMinicondaのインストール直後からAnaconda PowerShell PromptAnaconda Promptに分かれてあらかじめショートカットが用意されており、非常に便利になっています。

統合ターミナルの登場

このような状況のなか、Windows Terminalというものが登場しました。
様々な種類のターミナルを、単一ウィンドウ内でタブとして使うことができる優れものです。
しかも、PowerShellの起動時間が短縮されており、ストレスフリーです。

これはもう、Anaconda Powershell Prompt
Windows Terminalに追加するしかないですよね。
さて、どうやったらよいのでしょうか?

設定方法

まず、設定ファイルは、PowerShell風に言うと、

$env:LocalAppData\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json

に置いてあります。Cmd風に言うと、

%LocalAppData%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json

に置いてあります。

そして、このjsonファイルに、以下を追記します。

{
    "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44b9}",
    "name": "Anaconda Prompt",
    "startingDirectory" : "%HOMEPATH%",
    "commandline": "%userprofile%\\Documents\\PowerShell\\conda.cmd",
    "icon": "%SystemDrive%\\tools\\miniconda3\\Menu\\Iconleak-Atrous-PSConsole.ico",
    "hidden": false
}

設定項目の詳細

  • guidには、New-GUIDを使用して作成した値を入れるらしいです。しかし面倒なので、Powershellguidをコピーペーストして、1文字変えただけとしました。

  • nameは自分が分かれば何でもいいと思います。

  • iconは好きなものを使っていいですが、私は、公式のアイコンにリンクしました。

  • commandlineには以下のバッチファイルを実行するように指定しています。

%userprofile%\Documents\PowerShell\conda.cmd
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoExit -Command "& 'C:\tools\miniconda3\shell\condabin\conda-hook.ps1' ; conda activate 'C:\tools\miniconda3' "

このバッチファイルの中身は、C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)にあるショートカットファイルのうち、PowerShellの方のリンク先文字列をコピーペーストしただけです。

stackoverflowなどを見てみると、「commandlineには、スタートメニューのショートカットファイルから
リンク先文字列をコピーして貼り付ける」と書いてあるものが多いです。しかし、これは動作しません。

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)にあるショートカットファイルのプロパティは以下ですが、これをコピーペーストしてcommandlineに指定しても正常なコマンドとして受け取ってもらえないからです。

-Command以降の部分がどうしてもエラーになって上手くいきませんでした。といっても、Powershellの引数の受け取りかたが謎すぎるから私には理解できないだけかもしれません。なにか方法があるのでしょう。

時間がもったいないので、この文字列をバッチファイルに書き込み、それを実行させることにしました。

追記

@nmoa さんからコメント頂いた結果、commandlineに以下の設定をしたら正常に動作しました。

"%windir%/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy ByPass -NoExit -Command \"& 'C:/tools/miniconda3/shell/condabin/conda-hook.ps1' ; conda activate 'C:/tools/miniconda3' \""

そのため、jsonは下記のようになります。

{
    "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44b9}",
    "name": "Anaconda Prompt",
    "startingDirectory" : "%HOMEPATH%",
    "commandline": "%windir%/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy ByPass -NoExit -Command \"& 'C:/tools/miniconda3/shell/condabin/conda-hook.ps1' ; conda activate 'C:/tools/miniconda3' \"",
    "icon": "%SystemDrive%/tools/miniconda3/Menu/Iconleak-Atrous-PSConsole.ico",
    "hidden": false
}

さらに、コメントいただく前は以下の画像のように、conda環境を呼び出すためのコマンドが表示されていました。

修正を行った後はキレイさっぱりです。

設定ファイル例

そして最終的に、私の場合は以下のような設定になりました。
コメント欄で教えていただいた結果を反映しています。

%LocalAppData%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",

    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles
	        "fontFace": "Cascadia Code PL",
                "useAcrylic": true,
                "acrylicOpacity": 0.7
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
            {
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "cmd",
                "commandline": "cmd.exe",
                "hidden": false
            },
            {
                //"guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
                //"hidden": false,
                //"name": "PowerShell",
                //"source": "Windows.Terminal.PowershellCore"
	        "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
	        "name": "PowerShell Core",
	        "source": "Windows.Terminal.PowershellCore",
	        "hidden": false
            },
            {
                "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
                "hidden": false,
                "name": "Azure Cloud Shell",
                "source": "Windows.Terminal.Azure"
            },
            {
                "guid": "{46ca431a-3a87-5fb3-83cd-11ececc031d2}",
                "hidden": false,
                "name": "kali-linux",
                "source": "Windows.Terminal.Wsl"
            },
            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl"
            },
            {
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44b9}",
                "name": "Anaconda Prompt",
                "startingDirectory" : "%HOMEPATH%",
                "commandline": "%windir%/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy ByPass -NoExit -Command \"& 'C:/tools/miniconda3/shell/condabin/conda-hook.ps1' ; conda activate 'C:/tools/miniconda3' \"",
                "icon": "%SystemDrive%/tools/miniconda3/Menu/Iconleak-Atrous-PSConsole.ico",
                "hidden": false
            }
        ]
    },

    // Add custom color schemes to this array
    "schemes": [],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}

結果

以下が設定反映後の状態です。いかがでしょうか。

追記 2021/04/29



参考

設定項目について、より詳しく知りたい人は、[Editing Windows Terminal JSON Settings](https://github.com/microsoft/terminal/blob/master/doc/user-docs/UsingJsonSettings.md## 参考

環境

この記事での環境は以下です。

  • Windows 10 Pro 1909
  • Chocolatey v0.10.15
  • Miniconda3 4.7.12.1
  • Windows Terminal 0.11.1333.0

私の場合は、Chocolateyを利用してMiniconda3Windows Terminalをインストールしています。
直接公式サイトからダウンロードしても、ほぼ同じで行けると思います。

Excelsior!