BurnToastを使ってWindows10で簡単にトースト通知を行う

[1]:https://docs.microsoft.com/ja-jp/windows/uwp/design/shell/tiles-and-notifications/adaptive-interactive-toasts?tabs=builder-syntax
[2]:https://github.com/Windos/BurntToast
[3]:https://steviecoaster.dev/Toast-everything/

## 記事の概要

Windows10はOS標準の通知方法として[トースト通知][1]というものを使用しています。

ちゃんと実装しようと思うと面倒くさいため、ここでは**powershellのモジュール**として公開されている**[BurnToast][2]**を使用して簡単にトースト通知を実現する方法を記載します。

## [BurnToast][2]とは

Windows10でトースト通知を行うためのpowershellのモジュールです。
非常に簡単な表現でトースト通知を行うことが出来ます。

導入方法などは[公式ドキュメント][2]を参照ください。

## 簡単な使用例

### 好きな文字列を通知の中に入れる

```powershell
Import-Module BurntToast

$toastParams = @{
    Text = "ここへ好きな文字列を記入"
}

New-BurntToastNotification @toastParams
```

上記を実行すると、以下の画像のような通知が出力されます。

![toast_notification_ex1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302006/58032683-9026-a698-392a-89e230605b17.png)

### 好きな文字列＋好きなタイトルを通知の中に入れる

```powershell
Import-Module BurntToast

$toastParams = @{
    Text = "ここへ好きな文字列を記入"
    Header = (New-BTHeader -Id 1 -Title "タイトル")
}

New-BurntToastNotification @toastParams

```

上記を実行すると、以下の画像のような通知が出力されます。

![toast_notification_ex2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302006/227e4a2f-3cec-c6f6-468d-75c496013236.png)

### 好きな文字列＋好きなタイトル＋好きなリンク先を通知の中に入れる

```powershell
Import-Module BurntToast

$url = "https://www.google.com"

$toastParams = @{
    Text = "ここへ好きな文字列を記入"
    Header = (New-BTHeader -Id 1 -Title "タイトル")
    Button = (New-BTButton -Content 'リンク' -Arguments $url)
}

New-BurntToastNotification @toastParams

```

上記を実行すると、以下の画像のような通知が出力されます。
**リンクボタン**をクリックすると指定したリンク先（ここではwww.google.com）へ遷移します。
_C:\hogehoge\hugahugaのように、フォルダパスを指定すればエクスプローラーが指定したフォルダを開きます。_

![toast_notification_ex3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302006/55d374b2-8158-cb3c-80fc-17393547a880.png)


## ちょっとだけ便利かもしれない使用例

TODOをテキストファイルに記載しておいて、それをトースト通知させてみました。

```text:todo.txt
2021/02/11    10:15    参考書を読む
everyday      23:45    筋トレ

```

1番左に日付、真ん中に時間、3番目にTODOの内容を書いています。
この日付、時間に通知を行います。

```powershell:todo.ps1
Import-Module BurntToast


while (1) {
    $today = Get-Date -Format "d"
    $everyday = "everyday"
    $time = Get-Date -UFormat "%H:%M"

    # todoファイルの内容から現在時刻で通知するべきtodoを取得
    $allTodoList = (Get-Content "C:\todo.txt")
    $todayTodoList = $allTodoList | Select-String -Pattern $today | Select-String -Pattern $time
    $everydayTodoList = $allTodoList | Select-String -Pattern $everyday | Select-String -Pattern $time

    if ($todayTodoList) {
        $toastParamsTodayTodoList = @{
            Text = $todayTodoList
            Header = (New-BTHeader -Id 1 -Title "今日のTODO")
        }

        New-BurntToastNotification @toastParamsTodayTodoList
    }

    if ($everydayTodoList) {
        $toastParamsEverydayTodoList = @{
            Text = $everydayTodoList
            Header = (New-BTHeader -Id 1 -Title "毎日のTODO")
        }

        New-BurntToastNotification @toastParamsEverydayTodoList
    }

    # todo.txtに1分単位で通知時刻を記載しているため、ループは1分間隔で実行する
    Start-Sleep -Seconds 60
}
```

## おわりに

[BurnToast][2]に実装されている機能はまだまだたくさんあります。
ここに書けなかった部分についてはまた改めてまとめようと思います。

## 参考

[BurnToast][2]
[Using Toast notifications in Powershell][3]