【プログラミング未経験者向け】パソコン作業を自動化!やってみよう、プログラミング!

なよじです。

本記事では端的に、いつもやってる作業をプログラムで自動化してみよう!って話をします。

 

例えば、皆さん、毎日こんな作業してませんか??

  • 懸賞サイトをポチポチ
  • ソシャゲのデイリーミッションをポチポチ
  • ポチポチポチポチ・・・

決まった動作のPC作業を、繰り返しやることって結構ありますよね。

今日はそんな決まった動作の作業について、プログラミングによって自動化する方法をご紹介したいと思います。

感覚的にプログラミングが出来ますので、未経験の方にもおすすめです(^ー^♪

本記事はむしろプログラミング未経験の方に向けた内容にしてます~。

 

使用するソフトについて

早速使用するソフトを紹介します!!今回はRaiMan’s SikuliXというソフトを使用します。

 

RaiMan’s SikuliX

RaiMan’s SikuliXとは、Windowsの操作を自動化するツールです。

ボタンを見つける、そのボタンをクリックする、といった、人間がする一つ一つの操作をプログラミング言語で表現します。

 

導入方法

では早速導入してみましょう!下記のSikuliX公式ホームページからダウンロードしてください。

https://raiman.github.io/SikuliX1/downloads.html

以下2つをダウンロードします。

 

ダウンロードしたら、どこでも良いので同じフォルダに配置してください。

 

 

あとは、sikulix.jarをダブルクリックして実行するだけです!

 

 

↑↑こんな画面が出てきたら準備完了です♪

実行できない方はJAVAがインストールされていないので、以下からJRE(Java Runtime Environment)をダウンロードし、インストールしてください。
https://www.java.com/ja/download/

画面の紹介

次に、簡単に画面の部品を紹介します。名前もつけちゃいます(^ー^♪

 

 

  1. :エディタ部。プログラムを記載する箇所です。説明不要かと思います~♪
  2. :カメラ。非常によく使うボタンです!クリックしたいボタンや、画像などのスクリーンショットを取るのに使います。
  3. :作業領域ボタン。自動操作をする画面の範囲を設定するのに使います。
  4. :実行ボタン。①に作成したプログラムを実際に実行する場合に使います。

※部品名はなよじが適当につけたのでご注意を。笑

 

プログラミングやってく

プログラミングというのは、プログラミング言語を使って、やりたいことを記載する作業のことです。

記載した内容をプログラム言語翻訳機が読み取って、コンピュータが理解できるよう変換し

コンピュータがその作業を実行してくれます(^^♪

そのため、私達はその翻訳機が理解出来るよう、正しくプログラミング言語を記載する必要があります。

 

それでは実際にプログラミングやってみましょう。

SikuliXでは「Python」というプログラミング言語を使用します♪

演習用のページを作っておきましたので↓を開いてください!

Sikulix演習用ページ1

このページ下部のボタンを自動で押すプログラムを作っていきます(^ー^♪

左上のボタンを押したら真ん中のボタンがでて、真ん中のボタンを押したら右下のボタンが出て、右下のボタンを押したらもとに戻るようになっています。

 

ところで、ネットサーフィンで普段見ているWebサイトをポチポチするときってどんなことしてますか?

ネトゲのデイリー作業を想像してくださっても構わないです。

  • ブラウザやゲーム画面を探し、画面のどこを見るか決める
  • 画面からボタンを探してクリックする
  • どんどんクリックして、見たい情報を見る。目的を達成する。
  • 繰り返す。

超ザックリ、こんな感じですよね。

 

プログラムもそれをそのまま書けばいいんです(^^

ということで、

  • 作業する領域を決める。
  • ボタンを探してクリックする。
  • 目的を達成するまでの手順を決める。
  • 繰り返す。

という流れで、演習をすすめていきたいと思います♪

 

作業領域を決める

まずは作業領域を決めましょう~!

ここでは、要はデスクトップの「どこで作業をするか」を決めます。

例えばネットサーフィンでWebサイトをポチポチするときって、無意識にブラウザを見てその画面の中で作業をしていますよね?

同じように、自動化をする場合も、まずは「どこで作業をするか」を決めます!

 

まずは、エディタ部に下記のように入力してください。

sagyo=
次に=の後ろにカーソルがある状態で、作業領域ボタンを押下します。
あ、実際にやってみるのはもう少し読んでからにして下さい!!
押下すると、画面全体がグレーっぽくなります。※ならない場合は後述する方法で対応してください。
今回演習する表を、ドラッグアンドドロップで範囲選択してください。↓みたいな感じ!
スクリーンショット機能を使うと、たまに画面全体がグレーっぽくならず、固まってしまうことがあります。そうなるとどこもクリックできなくなります(;;)
ただ、直し方があるのでご安心ください(^^♪
そうなったらまず、焦らずに以下の手順を実施してみてください。
1.Windowsボタンを押して一番下のバーを右クリックしてタスクマネージャを起動します。
2.タスクマネージャが起動したら、キーボードの「↑」「↓」ボタンjavaを選択します。
3.「Alt」ボタンと「E」ボタンを同時に押すと、SikuliXが終了するので、クリックができるようになります。
それでは、実際に作業領域ボタンを押下してみてください!
うまくできた場合は、エディタ部が以下のように表示されているかと思います♪
こう書くことで、「sagyo」という変数に「赤枠の作業領域」を代入した。って意味になります。
「sagyo」が、ドラッグアンドドロップで選択した画面のことを意味してるって思って下さい!
ここまで出来たら、一旦保存しておきましょう。
「Ctrl」ボタンと「S」ボタンを同時に押すと保存画面が出るので、好きなところに保存してください。
保存すると「~.sikuli」というフォルダが作成されます。次開くときはこのフォルダ自体を開けばOKです~!

ボタンを探して、クリックする

次に、作業領域(選択した画面)の中でボタンを探します。
まず「何を探すか」を決めます。今回は「まずクリック」って書いてある黄色いボタンですよね。
エディタ部の2行目に以下を記載します。
targetButton1=
そして、今回はカメラをクリックして、ボタンをドラッグアンドドロップして選択しましょう。
↓こんな感じ!
イケてますでしょうか(^^
これで、「sagyo」って変数名で作業領域を、targetButton1って変数名でクリックするボタンをプログラムに教えてあげました。
この2つがわかれば、クリックするまでにはあとはどうしたら良いですか??
「作業領域」から「クリックするボタン」を「探して」「クリックする」だけですよね!
プログラムにしたらこうなります。
sagyo.find(targetButton1).click()
そのままでしょ!(^^
sagyo.find(targetButton1)で、「作業領域」から「クリックするボタン」を「探し」ます。
そして、探したボタン.click()で、ボタンを「クリック」します。 って感じです♪
ここまでの3行を書いたら実行って押してみて下さい。
ちゃんと演習ページを表示してから実行ね!黄色いボタンをクリックしてくれるはずです!

どんどんクリックする

黄色いボタンがクリック出来たかと思います。
同じように、次の緑のボタン、次の青のボタンを探してクリックするプログラムを作ってみて下さい♪
答えはすぐ書いちゃいますけど、見ずにやってみて!
こんな感じになりましたでしょうか~!
ところで、先程は黄色いボタンをカメラで撮って、そのボタンの写真を作業領域から探すようにプログラムを組みましたが
実は黄色いボタンと完全に一致するボタンを探しているわけではありません。初期設定では70%一致しているボタンを探します。
何%一致していたらOKかっていう類似度を設定するには、設定したいボタンの画像をクリックして下さい。(最後の青いボタンをクリックしてみてください)
↓のような画面が出ると思うので、マッチングタブをクリックしてみてください。
すると、下記のような画面になります。
A.には、今の画面が表示されていて、クリックした画像がマッチしている部分が赤く表示されます。
B.には、類似度が表示されています。デフォルトだと70%(0.7)です。
上記の通り、最後のボタンはどちらのボタンも同じボタンと認識してしまっています。
これでは、場合によっては右上のボタンが押されて押されてしまってもおかしくない状態です。
そのため、類似度を上げて正しい右下のボタンだけを認識出来るように設定する必要があります。
今回の演習では、94%まで上げると、正しいボタンだけを認識するようになりました。
設定したらOKを押していただけたら、反映されます。エディタ部にも94って出ます(^ー^♪
これで、3つのボタンを自動で押すプログラムができました!

繰り返す

最後、繰り返してみましょう!
さいごのボタンを押したら、また最初から同じ作業を繰り返す方法をお伝えします。
ソシャゲの周回や、懸賞サイトのポチポチなど、同じ作業を繰り返す場面も結構ありますよね~。
それではやってみましょう。どうやるかというと、
  • 今までの処理を「関数」という単位にまとめて
  • 繰り返し処理で呼び出す。

ということをします。

 

関数にまとめる

まずは関数という単位にまとめてみましょう。例として、click3Buttonsという関数は下記のように記載します。

def click3Buttons():
<タブ> ~クリック処理~
今までの処理の先頭行に「def click3Buttons():」を挿入し、末尾行に「end」を挿入し、各行の先頭に「タブ」を入れたら関数化が完了です!
関数の上に(下でもいいですが)click3Buttons()と記載して、関数が呼べて今までと同じ動きをしていることを確認してください。
(こんな感じになってるかな)
今までの処理をclick3Buttons()という処理の名前にまとめて、その処理を呼び出す形に変えました。
あとはこの処理を複数回呼び出せば、繰り返せます!

繰り返し処理で呼び出す

繰り返し呼び出すってどうやるの?って考えると、最初に思いつくのは
click3Buttons()
click3Buttons()
click3Buttons()
・・・
ですよね(^^♪ やってみてください!
繰り返せますよね~!でもこれ、100回繰り返すんだったら100回かくの?とか、無限に繰り返すのできないの?って思いませんか?

 

 

大丈夫です。ちゃんと書き方があります☆

 

ループ処理という、どのプログラミング言語にもあるメジャーな下記2つの制御構文があります!
  • For文
  • While文

 

細かい話は抜きにして、実際の使用例だけ紹介します♪

10回ループしたい場合

以下のように書いてみて下さい!

for i in range(10):
<タブ>click3Buttons()

 

無限ループしたい場合

以下のように書いてみて下さい!
while True:
<タブ>click3Buttons()
途中で止める場合は「Shift」ボタンと「Alt」ボタンと「C」ボタンを同時押ししてください。
演習は以上で終了です。これだけでも、色々と自動化できそうな気がしませんか?(^^♪
こんな感じで、自分が実際にやっている作業を、一個一個プログラムにすれば良いのです!
あとはPythonという言語を勉強しながら、いろんなことを自動化していけば
プログラミングの勉強にもなるし、生活の効率化も出来るしで一石二鳥です!

補足情報

あと、いくつか補足情報を記載しますー!
スマホの操作の自動化についてと、よく使う構文を記載しておきます。

Androidエミュレータ

Androidエミュレータを利用すると、PC上でAndroid OSを動かすことができます。
代表的なエミュレータとして、Noxなどがあります。

NoxPlayerは完全無料なAndoroidエミュレーターです。お好きなスマホゲームやアプリをPCの大画面でプレイでき…

これを利用することで、スマホアプリの操作も自動化できたりします(^^♪
iPhoneは出来ないかもです(><
スマホアプリによっては外部ツールの利用を禁止していたりします。
垢BAN等食らっても当ブログでは何も保証できないので十分ご注意下さい。

よく使う構文

あまり多くないですが、メモしておきます!コピペで活用していただけたら!

処理を止める

ミリ秒単位で処理を止めることができます。例えば、100ミリ秒処理を止める場合は、↓↓

sleep(100)
ただ、ほんとに0.1秒か?ってくらい止まる気がします。笑

ボタンが存在するかどうかで処理を変える

if文を使います。if文は超一般的な構文なので是非覚えてください。
if sagyo.exists(targetButton1):
<タブ>存在した場合の処理
else:
<タブ>存在しない場合の処理

findで見つからなかった場合に処理を続ける

作業領域.find(ボタン)で、ボタンが見つからなかった場合、エラーでプログラムが止まります。
止まってほしくない場合は、try-catch構文でエラー(例外)を捕捉して無視します。
これも一般的な構文ですが、例外の前に覚えることはいっぱいありますので、後回しにしても良いかもです!
try:
<タブ>作業領域.find(ボタン)処理
except FindFailed:
<タブ>pass

関数に作業領域を渡す

今回紹介した関数では、処理をまとめるだけしかしていませんでしたが、
関数は値を受け取ることや、値を戻すことが出来ます。
if test(sagyo):
<タブ>処理def test(sagyo):
<タブ>sagyoを使った処理
<タブ>return True
def test(sagyo)で、test関数ではsagyoという何かを受け取ることを定義しています。(引数といいます)
return Trueで、Trueという情報がtest関数から帰ってくるため、if test・・ とif文の中で使えています。(戻り値といいます。)

最後にPythonプログラミングをおすすめする理由

実際、世の中でプログラミングが注目されてます!例えば、

  • 小学校プログラミング教育の全面実施

文科省によって、小学生からプログラミング教育を導入する動きがあります。

文部科学省では、2020年度からの小学校プログラミング教育の全面実施に向けて、平成30年3月に「小学校プログラミング教育の手引(第一版)」を作成し、「小学校を中心としたプログラミング教育ポータル」※を通じた実践事例の発信などの支援策を実施してきました。

http://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1403162.htm

「小学校プログラミング教育の手引き」を読んでみたところ、プログラミングという教科が追加されるわけでなく、

プログラミングの楽しさや面白さ、達成感などを味わえる題材などでプログラミングを体験する例」を各教科でやる感じなのかな・・・?

子供に質問されて答えられないのも辛いので、少しはやっておいても良いかと思います(^^♪

 

  • 基本情報処理試験でプログラミング言語「Python」の採用

基本情報処理試験とは・・・以下、引用の通りです。

基本情報技術者試験は、ITに関する基本的な知識・技能を評価するための国家試験です。

(中略)

当該試験の出題見直しについては、午後試験で出題するプログラム言語に関し、教育機関・産業分野における利用状況等を踏まえ、「COBOL」を廃止し、「Python」を追加します。

https://www.ipa.go.jp/about/press/20190124.html

大体のSEが受ける(はず)のこの試験に採用されているあたり、

「Python」がどれだけよく使われているかがわかります。

普段から自動化で「Python」を利用していたら、基本情報技術者試験の対策にもなりますね(白目)。笑

 

長くなりましたが、以上です!

要望があったら第2段とか書きます~(^-^)!

 

最新情報をチェックしよう!