ChatGPTにお願いして常に画面スクロールするアプリを作ってもらった

## まえがき
もろもろの理由で常にPC動作する必要があったため、作成

## 仕様
AppleScriptなのでMAC用、PowerShellで書けば別にWindowsでもできそう。
13秒ごとに上下方向ランダムスクロール。スクロール数も上下ランダム
停止操作を行うまで無限ループ
ディレイ外すと当然PC操作受け付けなくなるため注意

## ChatGPTにコーディングしてもらったAppleScript
```AppleScript
repeat
	set randomNum to (random number from 1 to 13) -- 1から13までランダムに数字をセット。スクロール数をランダムにしている
	set randomDirection to (random number from 1 to 2) -- 上方向にスクロールするか下方向にスクロールするかランダムにセット
	
	tell application "System Events" -- スクロールに必要なシステム操作の呼び出し
		if randomDirection is 1 then -- もしランダム変数が1だったら
			repeat randomNum times -- スクロールの数だけ下矢印キーを押下する
				key code 125 -- 下矢印キー
				delay 0.2
			end repeat
		else -- それ以外だったら
			repeat randomNum times -- スクロールの数だけ上矢印キーを押下する
				key code 126 -- 上矢印キー
				delay 0.2
			end repeat
		end if
	end tell
	
	delay 13
end repeat
```
## あとがき
実際はこんなにコメントは出てこないが読みながら付け足した。
6往復ぐらいChatGPTと会話して「上下ランダムに」「ディレイが必要」とか言ってたらこれが出てきた。
コーディング時間は1時間未満。AppleScriptでシステム操作させるプログラムとか作ったことないので普通に自分でコーディングしたらおそらく3時間ぐらいかかるだろう。
これ以上の規模感のプログラムだとChatGPTでコーディングさせるのは逆にめんどそうだなと感じたが、この規模感なら便利だなぁと思った。

## 2024/07/01追記
放置していると定期的にハングアップする事象が発生。
結構再現性あり。
どうやらAppleScriptには例外処理が使えるっぽいので本来の例外処理の使い方ではないが
エラーになっても動いていている必要がある今回のプログラムの趣旨には必要なため修正。
```diff
repeat
	set randomNum to (random number from 1 to 13) -- 1から13までランダムに数字をセット。スクロール数をランダムにしている
	set randomDirection to (random number from 1 to 2) -- 上方向にスクロールするか下方向にスクロールするかランダムにセット
	
	tell application "System Events" -- スクロールに必要なシステム操作の呼び出し
		if randomDirection is 1 then -- もしランダム変数が1だったら
			repeat randomNum times -- スクロールの数だけ下矢印キーを押下する
+				try
					key code 125 -- 下矢印キー
+				on error
+					key code 125 -- 下矢印キー
+				end try
				delay 0.2
			end repeat
		else -- それ以外だったら
			repeat randomNum times -- スクロールの数だけ上矢印キーを押下する
+				try
					key code 126 -- 上矢印キー
+				on error
+					key code 126 -- 上矢印キー
+				end try
				delay 0.2
			end repeat
		end if
	end tell
	
	delay 13
end repeat
```
## 2024/07/09追記２
例外処理で強引にエラー突破していたが、超稀にエラーが発生する事象を確認
発生したエラーは以下
```
error "System Eventsでエラーが起きました: アプリケーションは実行されていません。" number -600
```
ループ内にSystem Eventsが実行されているか確認し、実行されていなければ起動する処理を追加
一旦これで様子見する

```diff
repeat
+    -- System Eventsが実行されていることを確認し、起動していない場合は起動する
+    tell application "System Events"
+        if not (exists process "System Events") then
+            launch
+        end if
+    end tell

    -- ランダムなスクロール数と方向を決定
    set randomNum to (random number from 1 to 13) -- 1から13までランダムに数字をセット。スクロール数をランダムにしている
    set randomDirection to (random number from 1 to 2) -- 上方向にスクロールするか下方向にスクロールするかランダムにセット

    -- System Eventsを使って矢印キーを押下
    tell application "System Events"
        if randomDirection is 1 then -- もしランダム変数が1だったら
            repeat randomNum times -- スクロールの数だけ下矢印キーを押下する
                try
                    key code 125 -- 下矢印キー
                on error
                    key code 125 -- 下矢印キー
                end try
                delay 0.2
            end repeat
        else -- それ以外だったら
            repeat randomNum times -- スクロールの数だけ上矢印キーを押下する
                try
                    key code 126 -- 上矢印キー
                on error
                    key code 126 -- 上矢印キー
                end try
                delay 0.2
            end repeat
        end if
    end tell

    -- 13秒待機
    delay 13
end repeat
```