定期的に実行するには…
前回、PythonでTwitterを制御するためのライブラリTweepyを使って特定の期間内のツイートをリツイートしてくれたユーザーに感謝ツイートをするプログラムを、cron(クロン)を使って定期的に実行する方法を解説しました。

しかしそこに立ちはだかったのは、コンピュータを起動し続け、スリープにさせてはいけないという、家庭用のコンピュータにはなかなか過酷な状況(多分持ち主にとっても)でした。
ということで何か解決策がないものかと考えてみようというのが今回のトピックです。
いくつかの方法を紹介していくので、もし興味がある方法、自分に合いそうだなという方法があれば、ぜひ試してみてください。
ということで始めていきましょう。
cron + スリープモード解除
一番最初に思い浮かぶのが、スリープモードなのがダメなら、プログラムを実行する時だけ、自動でスリープモードが解除されればいいという考えです。
実はMacにはスリープモードをスケジュール制御する機能があります。
それを使ってみようというのがこのアイデアです。
左上のアップルマークから、「システム環境設定…」をクリック。

「バッテリー」をクリック。

左下の「スケジュール」をクリック。

「起動またはスリープ解除」にチェックを入れ、起動したい日時を入力、また終わった後はスリープさせたいため、下の項目をスリープにして、スリープにさせたい日時を入力します。

この設定をして実際に待ってみたところ、確かにスリープが解除され、作成したプログラムが起動しました。

ただいくつか問題点があります。
今回、ちゃんとプログラムが起動されたのですが、実は最初はもう少し早め(プログラムが実行される3分前)にスリープ解除の設定をしていました。
その場合スリープは解除されたものの、パスワード入力画面で止まってしまい、短時間で再度スリープモードになってしまいました。
それで慌ててパスワードを解除し、再度スリープモード解除の時間を設定し直して、スリープにして待ったところ、プログラムが無事実行されました。
つまり実際にパスワードがかかったままだと、スリープモードは解除されても実際にはプログラムは実行されない可能性も考えられます。
スリープモードを解除しても、パスワードがかかった状態だとすぐにスリープモードに戻ってしまうため、もしかしたらプログラムが実行される前にスリープモードに戻ってしまうという危険性があります。
またプログラムを実行した後は、再度スリープモードになるように設定したのですが、一向にスリープモードにならず、スリープモードに何分後になりますよ、というウインドウが出て再度スリープモードになるには10分くらいかかってしまいそうでした。
他にもこのスリープモードの解除→プログラム実行→スリープモードが自分がコンピュータを使っているときに起きたら、それはそれで面倒なわけです。
ということでこの案は私的には無しですね。
iPhone + Carnetsで手動実行
物事を違う方向から考えるというのは大事なことです。
コンピュータの前にいないから実行できないのであれば、自分が常時持ち歩いている端末から実行できればいいのではないでしょうか。
つまりiPhoneから実行できるのであれば、多少の時間のブレはあるにしても、定期的に実行することは苦じゃないだろうということです。
そこでおすすめするアプリが「Carnets」というアプリです。

このアプリはiPhoneやiPad上でjupyter notebookが使えるアプリです。
コンピュータ上でjupyter notebookを使ってきた人としては、iPhoneやiPadでPythonを少しいじろうと思ったときにいつもと同じ感覚で使えるということは結構重要だと思います。
また他のPython開発環境アプリでは最初から組み込まれているライブラリしか使えなかったりします。
この「Carnets」では新しいライブラリをインストールすることも可能になっています。
この点は非常に大きいことでしょう。
今回の場合、「tweepy」を使っていますので、作成したプログラムを実行する前にインストールしておかなければいけません。
その場合は、
%pip install tweepy
とすることでインストールできます。
しかもいつも使っているpipを%pipとすればいいだけなので覚えやすいです。
ということで作成したプログラムを実行できる環境を持ち歩くというのはそこそこいいアイデアだと思います。
後はカレンダーアプリなどで、実行したいタイミングで通知してくれるようスケジュールを組めばいいというわけです。
ブログ用サーバー + corn
とはいいつつも、やはり人の手でやるのは限界があるし、なんといってもめんどくさい。
ぜひとも自動化したいわけです。
そこでもう一つの案として考えられるのは、我々ブロガーなら必ず使っている24時間常時起動しているウェブサーバーを使うという案です。
つまり前回、自分のコンピュータにcronを設定しましたが、それをウェブサーバーに設定できればそれこそ自動化+常時運用が叶うわけです。
またこの場合はcronで条件をいくつも記載していけば、複数のプログラムを時間差で実行するという複雑なことも可能になってきます。
せっかくブログをやってサーバーにお金を払っているので、これを使わない手はないですよね。
その方法に関しては次回、解説をしていきたいと思います。
Heroku
でもブロガーじゃないのでサーバーないよ、このためだけにサーバーを借りるなんてちょっともったいない、と考える人もいることでしょう。
またプログラムを間違えたら、サーバーが落ちてしまうことだってあるかもしれません。
ということはウェブサーバーはやはりウェブサーバー、Pythonプログラムを実行するサーバーは他に持っておきたいというのも十分理解できる話です。
そこで考えられるのが、プログラムを実行するためのサーバーを借りるということです。
その一つとしてよく聞く名前がHerokuです。

このHerokuという会社はPlatform as a Service、略してPaaSと呼ばれるソフトウェアを運用するためのプラットフォームを提供する企業です。
私もそれほど分かっているわけではありませんが、先ほど書いた「プログラムを実行するためのサーバー」だと考えておけばいいのかなと思っています。
やはりブロガーでもなければ、サーバー契約しているなんてことはないので、個人で借りやすい、むしろ少しだけなら無料で提供されているので、使用するまでの心理的ハードルは低いと思います。
こちらも今後、色々なサービスを作っていくには、経験しておいた方がいいことだと思うので、また解説したいと思います。
常時起動コンピュータを用意
最後のアイデアとしては、コンピュータを常時起動しておくのが難しいのであれば、逆に常時起動用のコンピュータを用意してしまえばいいのではないかということです。
最近ではRaspberry piというようなシングルボードコンピュータと呼ばれる製品も色々と世に出回っています。
このシングルボードコンピュータの利点としては、機能を抑えた設計になっており、その分価格が安い(本体だけなら¥7,000程度、キットでも¥15,000程度)、本体が小さく場所を取らない、パワーが低い分使用電力が低いということがあります。
つまり常時起動にもってこいのコンピュータというわけです。
ただし問題点としては、ディスプレイやキーボード、マウス等の付属品が単品はもちろん、キットでも入っていないこと。
また設定になかなか癖があるため、初心者にとってはハードルが高いことが挙げられます。
家でディスクトップPCを使っていて、ディスプレイ、キーボード、マウスを流用できる人であれば、本体だけ買って試してみるというのはありでしょう。
なぜなら常時起動に成功したら、これらのものがなくても、他のコンピュータから制御ができるので、いるのは最初だけなのです。
そのため、上記のものを持っていない人が買い揃えるとなると、結局はコンピュータ一台買った方が安いなんてことになりかねません。
ということでこのアイデアは、興味があってやってみたいものの、ノートPCしか持っていない私としては、ちょっと手が出しづらいため、機会があったら試すということに留めておきましょう。
次回はこのブログの運営に使っているレンタルウェブサーバーでPythonプログラムの定期実行を試していきたいと思います。

ではでは今回はこんな感じで。
コメント