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

## あらすじ

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

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

## イントロ

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

長いこと`Conda`に触れている人なら、誰しも最新の環境で利用したいと願っていることでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/27fdf7d2-b150-d67f-5377-23903044a7c5.png)

# 以前のアップデート

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

# その後のアップデート

現在は`Anaconda`もしくは`Miniconda`のインストール直後から`Anaconda PowerShell Prompt`と`Anaconda Prompt`に分かれてあらかじめショートカットが用意されており、非常に便利になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/6ee2c5c9-e53a-2005-ab8f-5e29be117d0d.png)

# 統合ターミナルの登場

このような状況のなか、[`Windows Terminal`](https://github.com/microsoft/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`](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/new-guid?view=powershell-7)を使用して作成した値を入れるらしいです。しかし面倒なので、`Powershell`の`guid`をコピーペーストして、１文字変えただけとしました。

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

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

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

```shell:%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`に指定しても正常なコマンドとして受け取ってもらえないからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/dae99444-713d-3bea-136a-9bf86203b2b5.png)

`-Command`以降の部分がどうしてもエラーになって上手くいきませんでした。といっても、[Powershellの引数の受け取りかたが謎すぎるから](https://blog.shibata.tech/entry/2016/03/29/193153)私には理解できないだけかもしれません。なにか方法があるのでしょう。

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

### 追記


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

```json-doc
"%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環境を呼び出すためのコマンドが表示されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/78ce16c5-3810-86c7-740c-6b6e29c14260.png)
修正を行った後はキレイさっぱりです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/b82b6917-0287-b652-6113-84c1e711e5fb.png)



## 設定ファイル例

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

```json-doc:%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": []
}
```

## 結果

以下が設定反映後の状態です。いかがでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/38f41cbd-4609-2d8d-8e3e-d45e8cd9ddc9.png)

## 追記 2021/04/29

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/b515458b-e3ed-872a-3497-1954657e677b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/91d4d95d-5841-b75d-504b-6fba25bece04.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/161a1215-d5d7-8eb2-0a01-4d1e9f5f387b.png)



## 参考

設定項目について、より詳しく知りたい人は、[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`を利用して`Miniconda3`と`Windows Terminal`をインストールしています。
直接公式サイトからダウンロードしても、ほぼ同じで行けると思います。

**Excelsior!**