Windows Terminalを痛くしてみた。

# はじめに
みなさんWindows Terminalは使っていますか？
自分はPowerShellやコマンドプロンプト、git bashなどのコンソールアプリケーションをまとめられるため大変重宝しています。
最近WSLなども使い始めたので今後もWindows Terminalを触る機会が増えそうです。

さて、そんなWindows Terminalですが、手軽に背景画像を設定できるのをご存知でしょうか？
今回は背景に好きな画像を設定して日々の開発を楽しくする方法をご紹介します。

# 今回やること
* Windows Terminalの背景に好きな画像を設定
* 背景画像を入れ替えるプログラムを作成
* ログオン時にプログラムを実行して自動で背景画像を切替

# 事前準備
Windows Terminalが入ってない人は下記ページから入手しましょう。

[Windows Terminal を入手 - Microsoft Store ja-JP](https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701)

# Windows Terminalの背景に好きな画像を設定

Windows Terminalに背景画像を設定するのは簡単です。
まずWindows Terminalを開き `Ctrl + ,` を入力して設定ファイルを開きます。
設定ファイルはjson形式で記述されていて`profiles`がコンソールの設定を記述する箇所となっています。
その中でも`defaults`がコンソール共通の設定、`list`が登録している各コンソールの設定となっています。

こちらに`backgroundImage`と`backgroundImageOpacity`を設定します。
`backgroundImage`には背景画像のパスを、`backgroundImageOpacity`には画像の透過度を指定します。

下記の例では`backgroundImage`は`C:\\background\\image.jpg`を指定し、
`backgroundImageOpacity`には`0.2`を指定しています。
ここはお好みで調整してください。

```json:setting.json設定例
"profiles":
{
    "defaults":
    {
        // 全体で設定したい場合
        "backgroundImage" : "C:\\background\\image.jpg",
        "backgroundImageOpacity" : 0.2
    },
    "list":
    [
        {
            "guid": "{014ab2cb-3ce7-46ef-ae0d-8f8ac3f4ae89}",
            "name": "Windows PowerShell",
            "commandline": "powershell.exe",
            "hidden": false,
            // 個別に設定したい場合
            "backgroundImage" : "C:\\background\\another_image.jpg",
            "backgroundImageOpacity" : 0.2
        },
        {
            "guid": "{0c9317b5-9087-4444-9065-a6171ad190e9}",
            "name": "コマンド プロンプト",
            "commandline": "cmd.exe",
            "hidden": false
        },
        {
            "guid": "{ffe449c2-7821-401e-bf88-eccceb437483}",
            "hidden": false,
            "name": "Azure Cloud Shell",
            "source": "Windows.Terminal.Azure"
        }
    ]
}
```

これらを設定した上でファイルを保存します。
すると指定した画像が背景に設定されるようになったかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232125/536012b9-ccc3-6d58-11d0-8e733f389b7d.png)

# 背景画像を入れ替えるプログラムの作成

WindowsTerminalに背景画像を設定できるようになりましたが、毎日同じ画像だと飽きてしまうかもしれません。
そのため、背景画像を自動で入れ替えるプログラムを作成します。

今回背景画像を変える方法としてWindows環境ならどこでも実行できるようにバッチファイルを選びました。
以下が背景画像を更新するプログラムとなります。

```bat:change_background_image.bat
@echo off
setlocal enabledelayedexpansion

rem 画像が保存されているフォルダへ移動
cd C:\background\source

rem ファイル数のカウント
set cnt=0
for %%f in (*jpg) do set /a cnt=cnt+1

rem 対象のファイルが1件も存在しない場合は処理を終了
if %cnt% == 0 exit /b

rem ランダムにファイルのインデックスを取得
set /a randomIndex=%RANDOM% %% %cnt%

set n=0
for %%f in (*jpg) do (
    rem インデックスに一致した順番の画像を指定場所へコピー
    if !n! == %randomIndex% (
        copy /y %%f C:\background\image.jpg 
        exit /b
    )
    set /a n=n+1
)
endlocal

exit /b
```

先ほどと同様に好きな画像を`C:\background\source`に置き、こちらのプログラムを実行します。
すると`C:\background\image.jpg`のファイルが`C:\background\source`に保存されている画像変わったかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232125/f4227329-182f-96a6-ed33-01ab7dfd196a.png)
（背景に設定する画像は右側にキャラクターが映っているものが良いかもしれませんね。）


### 注意点
今回WindowsTerminalの方にjpg画像を設定したため、ここでランダムで変えられる背景画像もjpg画像に限られます。
最初にpng画像やgif画像を設定した場合はプログラム上の`(*jpg)`となっている箇所を書き換えてください。
pngやjpgなど複合して使いたい場合は一度すべての画像をどちらかの形式に変換しておくか、プログラムの方でWindowsTerminalの設定ファイルごと書き換える必要があります。
それらの方法は今回は割愛します。

<br>
これで背景画像を入れ替えるプログラムは完成です。

# ログオン時にプログラムを実行して自動で背景画像を切替

背景画像を書き換えるプログラムができたのでそちらを定期実行するようにします。
今回定期実行にはタスクスケジューラを利用します。

まずタスクスケジューラを起動します。
`Win + R`で「ファイル名を指定して実行」を開き、`taskschd.msc`を入力し、エンターを押します。
※すべてのアプリに「タスクスケジューラ」と入力して起動でも構いません。

起動したら画面上部のタブの`操作`から`基本タスクの作成`を選択します。
あとは以下の手順でタスクを作成します。
<hr>
タスク名はなんでも良いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232125/a958f564-1a60-3486-afdd-5f4cd4663934.png)

今回はログオン時にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232125/77670e28-66f4-67c9-01fa-498f2eea569d.png)

プログラムの開始を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232125/1c59c129-d81a-10f6-824d-68dc2b471760.png)

プログラムの箇所は先程作成したバッチファイルにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232125/35fc5089-a26c-83c4-d19e-7c372c8c5271.png)

完了を押すとタスクが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232125/caaf32f2-ca83-28ed-29b8-7f8e618197f9.png)

タスクスケジューラライブラリの箇所で先程作成したタスクが追加されていればOKです。
右クリックから実行できるので設定できているか不安な方は実行してみましょう。
![タスクスケジューラ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232125/4aa5c6c4-4001-bd70-b8af-e7ba53e32d2b.png)

最後にログオンしてみて背景画像が切り替わっていれば完成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232125/6093d6f5-eb89-ff0d-8a12-db71f097d5f6.png)

# 最後に
少しでもWindowsTerminalに触る時間が楽しくなれば幸いです。
それでは良いTerminalライフを！