Windowsバッチファイルを使って簡単に作成できるおみくじアプリの手順と機能解説

## はじめに
今回は、Windowsのバッチファイルを使用して「おみくじアプリ」を作成する方法をご紹介します。

このアプリは、実行するたびにランダムなおみくじの結果を表示し、その結果をログファイルに記録します。さらに、「大吉」が出た場合には、メッセージボックスで通知を行い、メールでもお知らせする機能を備えています。

この記事では、バッチファイルの作成手順から動作確認までを詳しく解説します。

## 前提条件
この記事の手順を実行するためには、以下の環境が必要です。

:::note info
**検証環境**
**Windows Server 2016 以降の環境:**
Windows Server（ここでは Windows Server 2022）で構築している状態です。
:::

また、管理者権限のあるユーザーアカウントと、基本的なバッチファイルの知識があることを前提としています。


**自宅のVirtualBox環境**
今回も VirtualBox 上で構築した検証環境を使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/3d9d22ff-457a-1b00-58af-ff9948466145.png)


:::note info
※検証には「Windows Server 2022」を使用します。
:::

## 知識整理
Windowsのバッチファイルを使用して、簡単なランダム処理とログ出力を行います。ランダム処理にはWindowsの%RANDOM%変数を使用し、ログには結果をテキストファイルに出力します。

### ディレクトリ構成
スクリプトやログファイルは以下のように整理します。
```
C:\
└── omikuji_app\
    ├── omikuji.bat        # メインのおみくじスクリプト
    ├── sendmail.ps1       # 大吉の場合にメール通知を行うスクリプト
    └── logs\              # ログを保管するディレクトリ
        └── omikuji.log    # 実行結果が出力されるログファイル
```

### 処理フロー
おみくじバッチファイルの処理の流れは次のようになります。

```omikuji.bat
+--------------------------------------------------+
| 1. LOGFILEの設定                                 |
|    - ログファイルのパスを C:\omikuji_app\logs\   |
|      omikuji.log に設定します。                   |
+--------------------------------------------------+
                           |
                           v
+--------------------------------------------------+
| 2. おみくじ結果の準備                            |
|    - 結果候補として「中吉」「小吉」「吉」などを  |
|      配列 expanded_results に格納します。        |
+--------------------------------------------------+
                           |
                           v
+--------------------------------------------------+
| 3. ランダムな結果を選択                          |
|    - ランダム数（0-8）を生成し、expanded_results|
|      配列から該当するおみくじ結果を選択します。  |
+--------------------------------------------------+
                           |
                           v
+--------------------------------------------------+
| 4. 結果の表示                                    |
|    - 選ばれたおみくじ結果を画面に表示します。    |
+--------------------------------------------------+
                           |
                           v
+--------------------------------------------------+
| 5. 結果をログに記録                              |
|    - 現在の日付と時間を取得し、                   |
|      選ばれたおみくじ結果をログファイルに書き込 |
|      みます。                                     |
+--------------------------------------------------+
                           |
                           v
+--------------------------------------------------+
| 6. 大吉の確認                                    |
|    - 選ばれた結果が「大吉」の場合、メール通知を  |
|      送信するため、PowerShellスクリプトを実行し |
|      ます。                                      |
+--------------------------------------------------+
                           |
                           v
+--------------------------------------------------+
| 7. メール送信とログ更新                          |
|    - PowerShellで大吉通知メールを送信し、         |
|      その処理結果をログファイルに記録します。    |
+--------------------------------------------------+
```

## 検証の流れ
おみくじアプリの作成手順を、以下の2つのステップで説明します。

**ステップ1：バッチファイルの作成**
**ステップ2：テストと動作確認**

:::note info
検証環境がすでに構築されていることを前提としています。
:::

## ステップ1：バッチファイルの作成
まず、以下の内容でバッチファイル omikuji.bat を作成します。このスクリプトはランダムにおみくじの結果を生成し、その結果をログに記録します。

```omikuji.bat
@echo off

REM ログファイルのパス
set LOGFILE=C:\Users\Administrator\Desktop\omikuji_app\logs\omikuji.log

REM ランダムにおみくじを引く（0〜8の範囲）
set /a RANDOM=%random% %% 9

REM おみくじの結果を取得
if %RANDOM%==0 set result=中吉
if %RANDOM%==1 set result=小吉
if %RANDOM%==2 set result=吉
if %RANDOM%==3 set result=末吉
if %RANDOM%==4 set result=凶
if %RANDOM%==5 set result=大凶
if %RANDOM%==6 set result=中吉
if %RANDOM%==7 set result=吉
if %RANDOM%==8 set result=大吉

REM 結果を表示
echo 今日の運勢: %result%

REM 日時を取得してログファイルに結果を書き込む
echo %date% %time% - 今日の運勢: %result% >> %LOGFILE%

REM 大吉が出た場合、sendmail.ps1 を実行してメール通知を行う
if "%result%"=="大吉" (
    powershell -ExecutionPolicy Bypass -File C:\Users\Administrator\Desktop\omikuji_app\sendmail.ps1 -Subject "おみくじ結果" -Body "大吉が出ました！"
    echo %date% %time% - 大吉が出たため、メール通知を送信しました。 >> %LOGFILE%
)

REM エンターキーを押して終了するまで待機
pause

```

「大吉」が出るとメールが送られ、ログにも記録されます。

:::note 
**バッチファイルの中でのポイントは以下になります。**
・**「大吉」の出現確率を下げる**
通常、結果の出現確率は全て均等です。しかし、「大吉」の特別感を維持するため、少しだけ出にくく設定しています。

・**「大吉」が出たらメール通知**
 「大吉」が出た場合、指定されたメールアドレスに通知が送信されます。これにより、どこにいても幸運が訪れたことを知ることができます。
:::

Windows環境では、メール送信を自動化するためにPowerShellを使用します。以下のスクリプトで「大吉」が出た際にメールを送信します。

```sendmail.ps1
param (
    [string]$Subject,
    [string]$Body
)

# 送信元と送信先のメールアドレス
$MAIL_FROM = "xxxx@gmail.com"
$MAIL_TO = "xxxx@gmail.com"

# blat.exeを使ってメール送信
& blat.exe - -f $MAIL_FROM -t $MAIL_TO -s $Subject -body $Body

```

sendmail.batはPowerShellのSend-MailMessageコマンドを利用してメールを送信します。-Fromには送信元のメールアドレス、-Toには送信先のメールアドレス、-SmtpServerにはSMTPサーバーのアドレスを指定します。

必要に応じてメールサーバー情報を設定してください。

:::note alert

**※注意: ファイルの文字エンコーディングがUTF-8などの場合、バッチファイル実行時に文字化けする可能性があります。ファイルは「Shift-JIS」で保存してください。**
:::

## ステップ2：テストと動作確認
作成したバッチファイルをテストします。以下のコマンドでバッチファイルを実行し、正しく動作するか確認します。

```
C:\omikuji_app\omikuji.bat
```

**実際の検証画面**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/281d6c02-11f9-bfcc-d9c2-89dcbcef224f.png)


実行後、ログファイルC:\omikuji_app\logs\omikuji.logにおみくじの結果が記録されていることを確認します。

```omikuji.log
2024/09/25 20:50:12.85 - 今日の運勢: 中吉 
2024/09/25 20:50:16.56 - 今日の運勢: 小吉 
2024/09/25 20:50:19.41 - 今日の運勢: 吉 
2024/09/25 20:50:22.79 - 今日の運勢: 末吉 
2024/09/25 20:51:38.84 - 大吉が出たため、メール通知を送信しました。 
```

このようにして、バッチファイルからsendmail.batを呼び出し、「大吉」が出た場合に自動でメール通知が行われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/e32cb992-08b2-3125-af0d-c8382b081f50.png)

「大吉」が出た場合には、メッセージボックスで通知し、メールでお知らせする機能も正常に動いていることが確認できましたので、検証は大成功ですね！

## まとめ
この記事では、Windowsのバッチファイルを使って「おみくじアプリ」を作成する方法を紹介しています。

このアプリは、実行するたびにランダムな結果を表示し、その結果をログファイルに記録します。「大吉」が出た場合には、メッセージボックスで通知し、さらにメールでもお知らせする機能もあります。

Linuxでもシェルスクリプトを使いメール通知機能付き簡単おみくじアプリを作成しているので、おすすめ記事でチェックしてみてくださいね！

## おすすめ記事
https://qiita.com/free-honda/items/b40f98bd14d15c59eac1

https://qiita.com/free-honda/items/d87cb5fedce714a87e34