見出し画像

スマホがちょっとだけ自動化した話

しろくまです。ありがとうございます。

今日は、日々スマホを触ってて、
「え、これめんどくさ」と思うことがあったので、自動でやってくれるようにしてみた話をしようと思います。


きっかけ

きっかけは大きく分けて2つ。
①冒頭で述べた通り、怠惰心
②スマホでも自動で動くものって作れるのかなという好奇心
です。

ここからはちょっと順を追って話しますので、
次の章へ飛んでいただいても大丈夫です。

ところで皆さんも日々、スマホ、触りますよね。
現代社会では最早、ほぼ必要不可欠だと思います。

でもお仕事柄、
大学生のころまでと比べてPCに触れる機会が圧倒的に増えたことを機に、
私個人の感情としてちょっと変わってきたところがありました。

それはこちら。

・スマホってPCより不便じゃね


深い理由は特にないのですが、
普段「Ctrl + c」、「Ctrl + v」、「Ctrl + x」、「Ctrl + z」、「Ctrl + y」という便利ショートカットキーに頼りまくり、
マウスの戻る、進むボタンに頼りまくり、
そういうのが一発でできないの不便だなとか。

些細な理由です。

きっと上に書いたようなことも、
うまいことやればそんなんできひんはずがないんでしょうけれど、
要はあんまり使いこなせてないってことです。


以前、PCで自動化してみた話を書いたことがありましたが、
その時、スマホではできないんだろうか?と何となく調べてみてはいました。

私はすべてにおいてビギナーですから、
「ほえ~BatってWindowsでしか動かせないんだ~」とか、
「シェルスクリプトとかいうのならいけるかもしれんけどわからんのか~」とか、その程度です。


で、スマホでやるのはあきらめていました。
無理なんかな~と。



ですがどうにも我慢ならなかったんです。

大量に届くメールの数々が。

特にキャリアメールについてなんですけれど、
大学生の時にほとんどGmailに移行したのでもうほとんど使っていないのです。
毎日毎日、更新して全部削除フォルダにぶち込んで、ごみ箱から削除してを繰り返す日々。

ふと、気が付きました。
これやってること毎日大体一緒なんだから、自動化できるのでは?と。


長くなってしまいました、以上が経緯です。
よしやってみましょう。
そんなんできひんはずがない。



方針検討

まずはどうやったらできるのか調べてみます。
ちなみにAndroidユーザーです。(GooglePixcel 7a)

ネットで調べてみた結果。

★アプリを入れればできる!
・Tasker
・MacroDroid
・IFTTT
・Automate
・AutomateIt
<参考>
https://www.sms-datatech.co.jp/column/aut_android/

Microsoft Copilotさんに聞いてみた結果。

「TaskerやAutomateといった自動化アプリを使用するのが便利です。」

Microsoft Copilot

アプリか。今時なんでもあるなやっぱり。

また、既に同じようなことやってる人いないかな~っていうのも調べてみました。
どうやら「Tasker」を使っている人が一番多そうです。

よしそれでいk
有料です。「Tasker」。


結論!
MacroDroid」でいきます。

理由は~、、、
・なんかUI簡単そう
・それなりいろいろできそう
・同じようなことやってる人がいそう
だから!

決してお金ケチったとかまさかそんn

実際にやってみる(設計風)

アプリをインストールしてみました。
アイコンがおっきくてわかりやすいですね。
(最初、保存したマクロがどこいったのかわからなくてとまどいましたが)

最初は残り7日間だったのが減っていき、
広告を見ると日数を追加したり出来る


追加を押すとこちらのような画面になりました。

以下3つを定義するようです。
・トリガー
・アクション
・条件

こちらのサイト様を参考にさせていただきました。


自動化したい流れ(=アクション)としては以下のようにしようと思いました。

1.更新ボタンを押して、フォルダを最新化する
2.受信BOXを選択
3.その他ボタン>フォルダ内メール削除
4.メッセージRを選択
5.その他ボタン>フォルダ内メール削除
6.メッセージSを選択
7.その他ボタン>フォルダ内メール削除
8.ごみ箱を選択
9.その他ボタン>フォルダ内メール削除


あとはトリガーと条件ですが、条件は必須指定ではないようです。
ぽちぽち触って試しているうちに、
「画面がON」じゃないとうまくいかなさそうということがわかりましたので条件に追加しておくことにしました。


最後にトリガーについて。
こちらもいろいろ迷ったのですが、「通知を削除」に決めました。
ここはまあ正直何でもよいと思います。


以下、仕様をまとめてみます。

[動作環境]GooglePixcel 7aMacroDroid
・某キャリアメールアプリ

[処理概要]
・メール受信の通知を受け取り、各種フォルダのメールを削除して、
 ユーザーに通知する

[条件]
・スマホの画面がONであること

[INPUT(トリガー)]
・メール受信の通知をユーザーが削除

[処理の流れ]
1.メールアプリを起動
2.更新ボタンを押して、フォルダを最新化する
3.フォルダを選択
4.フォルダ内のメールを削除
※手順3と4をフォルダの分だけ繰り返す

[OUTPUT(結果)]
・処理が完了したらユーザーに通知する




実際にやってみる(実装風1日目)

まずは実現方法の調査です。
画面を触る操作は絶対必要だと思いますし、その辺は大体みんな必要だと思うので、
誰かやってるやろ精神で調べました。

参考にさせていただきました、ありがとうございます。

画面タッチくらいしかほとんどやることはないので、ベースはこれだけで作れそうです。


今度は場所を指定してタッチしたいので、
画面の座標を取得したい!
(「MacroDroid」内の機能は使えなくなってた)

1ミリに入りました、ありがとうございます。
開発者向けオプション、初めて使用しました。
こういう時に使われるものだったんですね。


(ここまでおよそ1時間)


ちなみにもう、この2つの組み合わせだけで、
正常パターンは動かせるようになりました。
(ぱちぱち)

やっていることは単純で、
ボタンの座標を取得して、X軸Y軸指定してタッチ操作をさせる、
それを繰り返しているだけです。

これで完成!でもいいんですが、
普段QAをやっている身からすると、異常系もやっぱり考慮したいですよね。

例えば、フォルダ選択時にフォルダ内にメールが存在しなかった場合、
削除ボタンが表示されません。
(※のちほどフラグ〜、、、)

削除ボタンをクリックすることによって、フォルダの選択状態も併せて解除される挙動になっているため、
削除ボタンがクリックできなかった場合、フォルダの選択状態が解除されずに次の処理に行ってしまいます。
そうなると処理結果が変わって来る。。

なんとか、ボタンクリック時にクリック先の情報を取得して、
条件分岐とかできないかな、、
と考え始めるとここが思ったより沼で。
(ここまで+2時間)

参考にさせていただいたものの思うようにはまらず。

初日はここで終わることにしました。
(Twitterで報告)





実際にやってみる(実装風2日目)

1週間後の週末。
条件分岐いい感じのなかったな~と思いながら平日を過ごし、
土曜日の朝やたらと早起きしたので、別件のお勉強していました。

お勉強中にわからないことをMicrosoft Copilotさんに聞きながらやっていたのですが、
ふと気が付きました。

実装入ってからCopilotさんに聞いて無くね?


そこで、ボタンをクリックすることができたかどうかをチェックする方法があるか聞いてみることにしました。

MacroDroidでボタンをクリックできたかどうかをチェックする方法はいくつかあります。以下の手順を試してみてください。

1. UI画面操作の使用

MacroDroidの「UI画面操作」アクションを使用して、特定のボタンをクリックすることができます。このアクションを使用する際に、クリック後の画面の変化を条件として設定することで、クリックが成功したかどうかを確認できます。

2. 画面コンテンツの確認

「画面コンテンツ」トリガーを使用して、特定のテキストや要素が表示されているかどうかを確認します。例えば、ボタンをクリックした後に表示されるメッセージや画面の変化をチェックすることができます。

3. ログの使用

MacroDroidの「ログ」アクションを使用して、ボタンがクリックされたタイミングでログを記録することができます。これにより、後でログを確認してクリックが成功したかどうかを判断できます。

具体的な手順UI画面操作の設定
「アクションを追加」→「UI画面操作」→「クリック」を選択し、クリックしたいボタンの位置を指定します。
画面コンテンツの確認
「条件を追加」→「画面コンテンツ」→「テキストが表示されている」を選択し、クリック後に表示されるテキストを指定します。
ログの設定
「アクションを追加」→「ログ」→「ログを記録」を選択し、クリックが成功した場合のメッセージを設定します。


これらの手順を組み合わせることで、ボタンがクリックされたかどうかを確認することができます。設定中に何か問題があれば、いつでもお知らせくださいね!

Microsoft Copilot

くださいね!←かわいい

別にこの中に明確な回答があったわけではないのですが、
特定のボタンをクリックというところが引っ掛かりまして。

座標指定じゃなくてボタンの名前とかでクリックするようにできたよな~と。


参考にさせていただきまして。ありがとうございます。
テキスト一致でボタンをクリックさせることができるみたいです。


結果的に、以下のように修正しました。
・削除ボタンがクリックできたかどうかをチェックする
・削除ボタンがクリックできた場合、処理続行
・削除ボタンがクリックできていない場合、フォルダの選択状態を元に戻す処理を実行してから、元の処理に戻る


あと、ここの時点で当初の仕様を変更し、処理を2つに分割することにしました。

(1)メールをごみ箱に移動する処理
(2)ごみ箱のメールを削除する処理

2つに分けることで、
ごみ箱に移動された後に任意で、
本当に削除して問題ないメールか確認できるようになるのでより安全かなということで。


さあー大体できたからテストだー。





実際にやってみる(テスト風)

改めて仕様についてまとめます。

[動作環境]GooglePixcel 7aMacroDroid
・某キャリアメールアプリ

------------------------------------------------------------------
[処理概要1]
・メール受信の通知を受け取り、各種フォルダのメールをごみ箱に移動して、
 ユーザーに通知する

[条件]
・スマホの画面がONであること

[INPUT(トリガー)]
・メール受信の通知をユーザーが削除

[処理の流れ]
1.メールアプリを起動
2.更新ボタンを押して、フォルダを最新化する
3.受信フォルダを選択
4.フォルダ内のメールを削除
5.フォルダ内にメールが存在しなかった場合、フォルダの選択状態をリセット
6.メッセージRフォルダを選択
7.フォルダ内のメールを削除
8.フォルダ内にメールが存在しなかった場合、フォルダの選択状態をリセット
9.メッセージSフォルダを選択
10.フォルダ内のメールを削除
11.フォルダ内にメールが存在しなかった場合、フォルダの選択状態をリセット

[OUTPUT(結果)]
・処理が完了したらユーザーに通知する

------------------------------------------------------------------
[処理概要2]
・処理概要1の完了通知を受け取り、ごみ箱のメールを削除して、
 ユーザーに通知する

[条件]
・スマホ画面がONであること
・処理概要1が完了していること

[INPUT(トリガー)]
・処理概要1の通知をユーザーが削除

[処理の流れ]
1.メールアプリを起動(ユーザーがアプリを終了した場合を考慮)
2.ごみ箱を選択
3.フォルダ内のメールを削除
4.フォルダ内にメールが存在しなかった場合、フォルダの選択状態をリセット

[OUTPUT(結果)]
・処理が完了したらユーザーに通知する

まず処理概要1から。
ちゃんとケースは組んでいませんが、結果はこちらでした。

えーちょっと一旦待ってくd債あー、、
なんか名前だと取得できないボタンがあるみたいでした。
一部は座標に差し替えます。

2回目

ううむ、空の場合が全部だめだった。
んだけど、原因は軽微で、待機の設定漏れでした。

条件分岐のところ、待ち時間の設定をしていなかったので、
結果が取得される前に判定を始めちゃってたみたい。

自動化する場合って本当にちゃんと待機する時間をあげられてるかで、
個人的には結構苦労してます。。

3回目

受信BOXが空の場合がダメでした。
これは調査不足が原因だったです。
(覚えてるかな〜※実装1日目ののちほどフラグ〜、、、)

他は、空だった場合に削除ボタンが表示されないのですが、
受信BOXだけは削除ボタンは表示されないけれど、
別のコンテキストメニューが表示されており、
そのメニューを閉じるという手順が漏れてました。

4回目

ようやく全部OKになりました。
ちなみに処理概要2の方は、
処理概要1を参照して作っていたのと、テストで見つかった不備を反映させながら進めていたので一発OKでした。

よーっしゃー完成だー




と言いたいところでしたが、
どうにも時間がかかりすぎな気がしたので、
全体的に待機時間を見直しました。

何回かモンキー的にポチポチテストしてようやく完成です。





成果物お披露目&初回稼働

実際のマクロがこちらです。

ローカル変数に削除有無(true/false)定義
クリック[削除]に成功した場合、trueになる


ちなみに初稼働は、、、
うまくいった。
メッセージRだけだったけれど!

でも2回目はなんかうまくいかんかった。

しばらくは、微調整しながらの運用になりそうです。

 でも概ね思っていた通りになったので何より!



やってみて思ったことは、まず結構楽しかったです。
アプリ開発というと大げさに言いすぎているけれど、やりたいことから落とし込んでいって形にしていくところとか、やってみてよかったなって思いました。

あとはとってもちっちゃい単位でやってたのですぐ目に見える成果がでる、これもよかったです。
自分のメールだけだから誰にも迷惑かからないし、ポンポン試せました。

自分が実現したいことから考えていくといい視点になりそうです。

あとは、待機時間の設定、本当に大事。


また今後もいろいろやってみたいと思います。
以上、ありがとうございました~。


いいなと思ったら応援しよう!