はじめに

今回は、2020年5月に正式版がリリースされたターミナルアプリケーション「Windows Terminal」の紹介をします。本稿では、前半でWindow Terminalの基本的な使い方について紹介し、後半でWindows TerminalからAzureのリソースを操作する方法について説明をしていきます。

Windows Terminalとは

Windows Terminalは、Windows OSにプリセットされているコマンドプロンプトに加え、PowerShell、WSL(Windows Subsystem for Linux)と呼ばれるWindowsからLinuxを利用する仕組みのコマンド実行など、いわゆるターミナルアプリケーションをひとつのアプリケーションに集約して使用することができる新しいツールです。また本連載で紹介していることから分かるように、Azureのリソースを操作することができるブラウザベースのCLIツールである「Azure Cloud Shell」もWindows Terminalに組み込まれています。

Windows Terminalを使ってみよう

ここからは実際にWindows Terminalをインストールしてさまざまなターミナルアプリケーションを実行できることを確認していきましょう。

Windows Terminalのインストール

Windows Terminalのインストールは、Microsoft Storeから行います。Microsoft Storeを開き、検索フォームに「Windows Terminal」と入力して検索します。検索結果に「Windows Terminal Preview」も含まれていますが、こちらは開発途中の機能を含むプレビュー版のため、ここでは通常の「Windows Terminal」の方を選択します。選択するとインストール画面になります。

  • Windows Terminalの検索

    Windows Terminalの検索

「Get」を選択すると「複数のデバイスで使用する」というダイアログが表示されるので、「必要ありません」を選択してインストールを開始します。

  • Windows Terminalのインストール

    Windows Terminalのインストール

しばらく待つとWindows Terminalのインストールが完了します。完了すると画面に「Launch」ボタンが表示されるので、選択してWindows Terminalを起動します。

  • Windows Terminalを起動する

    Windows Terminalを起動する

起動に成功するとWindows Terminalが表示されます。デフォルトではPowerShellのターミナルが1つ表示された状態で起動します。

  • Windows Terminalの初期画面

    Windows Terminalの初期画面

起動後の画面を見て分かるように、Windows Terminalでは複数のターミナルをタブで管理するようになっています。「+」マークを選択するとデフォルトとして設定されているターミナルを新たに1つ別タブで起動します。初期状態ではPowerShellのターミナルが起動します。さらに隣にある下矢印のマークを選択すると、異なる種類のターミナルも選択することができます。

  • 複数のターミナルを選択する

    複数のターミナルを選択する

Windows Terminalをインストールした直後の状態で基本的なターミナルの操作は可能になります。使い勝手のよさに関わる設定の変更やUIの変更などのカスタマイズを行いたい場合は追加で設定を行っていきます。

Windows Terminalの各種設定の変更方法

Windows Terminalでは、各種設定を「settings.json」というJSON形式のファイルで行います。Windows Terminal上部の下矢印のマークを選択して「設定」を選択するか、「Ctrl + ,」というショートカットキーを入力するとsetting.jsonが開くことができます。JSON形式のファイルのため、テキストエディタを使用して内容を編集していきます。まずはsetting.jsonの全体的な構造について確認してみましょう。

Windows Terminalの設定ファイル(settings.json)

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

    ・・・中略

    // ターミナルに関する設定・・・①
    "profiles":
    {
        ・・・中略

        // 各ターミナルの個別設定
        "list":
        [
            // PowerShellの設定
            {
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
            // コマンドプロンプトの設定
            {
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "Command Prompt",
                "commandline": "cmd.exe",
                "hidden": false
            },
            ・・・中略
        ]
    },

    // 配色に関する設定・・・②
    "schemes": [],

    // カスタムアクションに関する設定・・・③
    "actions":
    [
        { "command": {"action": "copy", "singleLine": false }, "keys": "ctrl+c" },
        { "command": "paste", "keys": "ctrl+v" },
        ・・・中略
    ]
}

settings.jsonは大きく分けて3つのブロックに分かれています。各ターミナルに関する情報を管理するプロファイルブロック(①)、Windows Terminalで扱うことのできる配色を管理するスキーマブロック(②)、ターミナル上で使用できるキーバインドを追加することができるアクションブロック(③)の3ブロックで構成されています。

Windows Terminalのテーマを変更しよう

settings.jsonの基本的な構造について説明したので、まずはWindows Terminalのルックアンドフィールを変更してみましょう。ここでは例として、コマンドプロンプトのターミナルテーマを新しいものに変更していきます。新しいテーマの適用は、スキーマブロックに新しい配色の定義を追加してそれをプロファイルブロックの対象となるターミナルの中から参照することで行うことができます。

settings.jsonをテキストエディタで開き、「schemes」の中身を以下のリストのように編集します。

新しい配色の定義をschemesブロックに追加(settings.json)

{
    ・・・中略
    "schemes": [
        {
            "name": "Retro", // schemes内で一意になる名前をつける・・・①
            "background": "#000000",
            "black": "#00ff00",
            "blue": "#00ff00",
            "brightBlack": "#00ff00",
            "brightBlue": "#00ff00",
            "brightCyan": "#00ff00",
            "brightGreen": "#00ff00",
            "brightPurple": "#00ff00",
            "brightRed": "#00ff00",
            "brightWhite": "#00ff00",
            "brightYellow": "#00ff00",
            "cyan": "#00ff00",
            "foreground": "#00ff00",
            "green": "#00ff00",
            "purple": "#00ff00",
            "red": "#00ff00",
            "white": "#00ff00",
            "yellow": "#00ff00"
        }
    ],
    ・・・中略
}

「schemes」リストの中に追加したオブジェクトは、新しい配色定義としてWindows Terminalで認識されるようになります。オブジェクトの中には「name」フィールドがあり、これはschemes内で一意となる名前である必要があります(①)。この「name」フィールドをキーにして、配色定義を参照することができるようになるためです。「name」フィールド以降の各フィールドで細かい色の設定を行っていきます。この配色定義では背景(background)を黒色に、それ以外の全ての項目が緑色になるように指定しています。

新しい配色定義を追加したら、それをプロファイルブロック内のコマンドプロンプトの定義ブロックから参照するように変更していきます。以下のリストのように「profiles」ブロック内のコマンドプロンプトの定義箇所を編集します。

コマンドプロンプトのテーマを変更する(setting.json)

{
    ・・・中略
    "list": [
        ・・・中略
        {
            "name": "Command Prompt",
            "commandline": "cmd.exe",
            "hidden": false,
            "colorScheme" : "Retro", // 作成した配色のnameを指定する・・・①
            "cursorColor" : "#FFFFFF",
            "cursorShape": "filledBox",
            "fontSize" : 14,
            "padding" : "5, 5, 5, 5",
            "tabTitle" : "Command Prompt",
            "fontFace": "PxPlus IBM VGA8",
            "experimental.retroTerminalEffect": true // レトロエフェクトを有効にする・・・②
        },
        ・・・中略
    ],
    ・・・中略
}

「profiles」ブロック内で「name」フィールドが「Command Prompt」となっているものがコマンドプロンプトの定義箇所です。ここに「colorScheme」フィールドを追加し、先程作成した配色定義の名前を指定することでコマンドプロンプトのテーマが変更されます(①)。それ以降のフィールドではこのテーマに合うようにカーソルの色やフォントなどを微調整しています。また「experimental.retroTerminalEffect」をtrueに設定することで、ブラウン管のディスプレイでプロンプトを表示した時のようなややかすれた文字になるように表現を変更することもできます(②)。

この内容でsettings.jsonを保存し、コマンドプロンプトのターミナルを開いてみましょう。テーマの変更前のコマンドプロンプトは以下の図のような見た目でした。

  • テーマ変更前のコマンドプロンプト

    テーマ変更前のコマンドプロンプト

テーマを変更した後では、以下のような見た目に変更されています。

  • テーマ変更後のコマンドプロンプト

    テーマ変更後のコマンドプロンプト

文字が緑色になっており、かすれたような表現がされていることが分かるかと思います。このように、配色を定義して使用することでターミナルの見た目を簡単に変更することができました。

Windows Terminalのsettings.jsonを使った設定のカスタマイズは多岐に渡りますが、基本的には前述した3つの大きなブロックのいずれかに属するものになるので、構造さえ理解できれば柔軟に設定を変更することができるようになり自分の手に馴染んだターミナルに仕上げていくことができるようになります。

Windows TerminalからAzureを操作してみよう

ここからはWindows Terminalに含まれている「Azure Cloud Shell」というターミナルを使用してAzureのリソースを操作していきたいと思います。Azure Cloud Shellはこれまでブラウザベースのシェル環境としてAzureから提供されていましたが、Windows Terminalにデフォルトで統合されており、カスタマイズされたWindows Terminalの機能を使ってAzureリソースを操作することができるようになっています。

Windows Terminal上からAzure Cloud Shellを起動しよう

それでは早速Windows TerminalからAzure Cloud Shellを起動してみましょう。Azure Cloud ShellはWindows Terminalのインストール時点ですでに使用可能なターミナルとして構成されているため、Windows Terminal上部の下矢印マークから「Azure Cloud Shell」を選択することで起動することができます。

  • Windows TerminalからAzure Cloud Shellを起動する

    Windows TerminalからAzure Cloud Shellを起動する

新しいタブでAzure Cloud Shellが開くと以下の図のようにAzureへのログインを促すメッセージが表示されます。表示内容に従って、ブラウザからhttps://microsoft.com/deviceloginにアクセスします。

  • Azureへのログインを促すメッセージ

    Azureへのログインを促すメッセージ

指定のURLを開くと「コードの入力」と画面に表示されますので、Azure Cloud Shellのターミナル上に表示されているコードを入力して「次へ」を選択します。

  • コードの入力

    コードの入力

コードの入力に成功すると、次にAzureのサインイン画面が表示されるのでログインしたいAzureアカウント情報を入力して「次へ」を選択、続く画面でパスワードの入力を行います。

  • Azureサインイン画面

    Azureサインイン画面

Azureへのログインが完了すると、ブラウザの画面は閉じて構わない旨のメッセージが表示されます。

  • Azureサインインに成功した場合の画面

    Azureサインインに成功した場合の画面

Windows TerminalのAzure Cloud Shellのタブに戻ると、Azureへのログインが成功したことを検知して「認証完了。」とメッセージが表示されます。ログインしたAzureの環境に、複数のテナントが存在する場合は以下の図のようにテナントの選択肢が表示されるのでいずれかの番号を入力します。

  • テナントの選択

    テナントの選択

テナントを選択し、接続情報の保存についての質問に回答するとAzure Cloud Shellが利用できる状態となります。

なお、テナントの選択後「クラウドシェルアカウントがまだ設定されていません。」と表示された場合は、Webブラウザから「https://shell.azure.com」にアクセスしてクラウドシェルの初期設定をします。

  • Azure Cloud Shellの初期設定画面

    Azure Cloud Shellの初期設定画面

クラウドシェルの初期設定画面ではまず使用するシェルの種類を選択します。ここでは「Bash」を選択します。次にクラウドシェルの設定情報を保存するためのストレージアカウントの選択を要求されるので、サブスクリプションを選択して「ストレージの作成」からストレージを作成します。

  • クラウドシェルで使用するストレージの作成

    クラウドシェルで使用するストレージの作成

ストレージの作成まで完了すると、ブラウザ上でAzure Cloud Shellのプロンプトが表示されます。これでクラウドシェルアカウントの設定は完了となるのでWindows Terminalに戻ってテナントの選択をやり直します。

  • Azure Cloud Shellが利用可能状態になる

    Azure Cloud Shellが利用可能状態になる

これでWindows Terminal上からAzureリソースを操作する準備が整いました。以降はAzure CLIのコマンドを主にAzureリソースを操作していきます。

Azure CLIコマンドを使ってAzureのリソースを操作しよう

Azure Cloud ShellにログインすることでAzure CLIコマンドの実行が可能になります。Azure CLIでは「az」というコマンドを用いてログインしているAzureのリソースを操作することができます。 ここでは例としてAzure CLIを使ってAzure上にLinux VMを構築し、そのVMにSSH接続するところまでをWindow Terminal上で実行できるか試していきます。 まずはAzure CLIに利用するサブスクリプションを設定する必要があるため、現在のテナントに含まれているサブスクリプションのリストを表示します。

サブスクリプション名の一覧表示

az account list --query [].name

azコマンドの実行に成功すると、サブスクリプション名のリストが表示されます。その中から使用したいサブスクリプション名をコピーして次のコマンドで使用します。

サブスクリプションの設定

az account set --subscription '<設定したいサブスクリプション名>'

サブスクリプションを設定することでそのサブスクリプション内にリソースを作成することができるようになります。 次はリソースグループを新規作成します。今回のサンプル用にリソースグループを新規作成することで、動作確認が終わった後でリソースグループごと削除することでリソースの削除漏れをなくすことができます。

リソースグループの新規作成

az group create --location japaneast --name zerokara-winterm

ここではリソースグループの配置場所を東日本にするために「japaneast」と指定してリソースグループを作成しています。リソースグループの作成が完了するとJSON形式のレスポンスが表示されます。JSONのうち「provisioningState」フィールドの値が「Succeeded」であればリソースグループの作成は成功です。ブラウザからAzureポータルにアクセスし、リソースグループの一覧を表示することでも同様に確認することが可能です。 リソースグループが作成されたら、その中にLinuxのVMを作成します。今回はUbuntuのVMを構築します。

Linux VM(Ubuntu)の新規作成

az vm create -n wintermVM -g zerokara-winterm --image UbuntuLTS --generate-ssh-keys

「-n」オプションでVMの名称を、「-g」オプションでリソースグループを、「--image」オプションでVMの種類をそれぞれ指定しています。「--generate-ssh-keys」というオプションを付与することでSSH接続に必要な公開鍵と秘密鍵がAzure Cloud Shellの仮想的なディレクトリ内とVM上に作成されます。VMの作成に成功するとVMのIPアドレスなどが記載されたJSONが表示されます。

Linux VMにSSH接続する

ssh <ユーザー名>@<パブリックIPアドレス>

作成されたLinux VMにAzure Cloud Shellから接続するためには、sshコマンドを使用します。Azure Cloud Shellでは標準でBash環境としてターミナルが起動しているため、sshコマンドも利用可能となっています。Azure Cloud Shellに「<ログインユーザー名>@Azure:~$」の形式でプロンプト表示されているもののログインユーザー名がそのままsshコマンドで使用するユーザー名になります。パブリックIPアドレスはVM作成後のJSON内の「publicIpAddress」フィールドの値を使用します。 sshコマンドを実行すると、初回の接続のため接続確認がされるので「yes」と入力します。その後SSH接続に成功すると以下の図のようなUbuntuのウェルカム画面が表示され、プロンプトの表示も「<ユーザー名>@Azure」から「<ユーザー名>@」に切り替わっていることが分かるかと思います。

  • Linux VMへのSSH接続後の画面

    Linux VMへのSSH接続後の画面

これでVMの作成とSSH接続まで確認することができました。Windows TerminalおよびAzure Cloud Shellを使用することでひとつの画面上でAzureの操作からさらに作成したVM内へのアクセスまで一貫して行えることが分かりました。 もしリソースが今後不要なのであれば、以下のコマンドを実行してAzure上からリソースグループごとリソースを削除します。

リソースのクリーンアップ

# Linux VMからログアウトする
exit

# リソースグループごとVMを削除する
az group delete -n zerokara-winterm

しばらく待つとリソースグループの削除が完了します。

まとめ

今回はWindows Terminalについて紹介しました。複数のターミナルアプリケーションをまとめて操作できるうえ、各種設定の柔軟性が高いことから長く使い続けることで自分の手に馴染ませることができるツールとなっていることが分かりました。また、Azureのリソースを操作することができるAzure Cloud Shellもデフォルトで使用できるため、Azureユーザーにとっても有用なツールとしての活躍が期待できると思います。 次回は、Azure Static Web Appsを使って静的WebアプリをAzureにホストする方法について紹介する予定です。

WINGSプロジェクト 秋葉龍一著/山田祥寛監修
<WINGSプロジェクトについて>テクニカル執筆プロジェクト(代表山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・雑誌/Web記事の執筆、講演等を幅広く手がける。一緒に執筆をできる有志を募集中