cronを使えないなら無料で使えるGoogleApp Engine(GAE)を使えばいいじゃない!
ということで、cronを使えない環境で、Google App Engineのcron機能を使って、同じことを実現する方法です。
以前、cronを使えない環境でcronを使う裏技!?という記事を書きましたが、この方法は継続性と安定性に若干不安があるので、GAEを試すことにしました。
以前の方法は、MySQL、PHP、cronをひとつのサーバで完結できるというメリットはあるんですけどね。
Twitterのbot運営には、継続性も、安定性も、重要ですから!
一度、GAEを使ってみたかったというのもあります:-)
なお、全部自分でやらずに、GAE-Cronに頼るのもいいと思います。
それでは以下、設定手順です。画像が多いので長文になっていますが、やってみるとそうでもない……はず。
(書いてあるとおりにやればできるように一応してあります。Windows7 Ultimate 64bit版で確認した内容です)
アプリケーションの登録
まず以下の手順で「アプリケーション」として登録する必要があります。
1.Google App Engineのウェブサイトを開きます
3.Googleのアカウントでログインします
4.「Welcome to Google App Engine」で「Create an Application」をクリックします
5.「Verify Your Account by SMS」で携帯メールアドレスを指定し、「Send」をクリックします
※「Username:」には、携帯メールアドレスの@より手前の部分を入力します
6.携帯に届いた「Google App Engine Code:」を確認します
7.「An Authentication Code Has Been Sent to」で、「Enter Account Code:」に「Google App Engine Code」を入力し、「Send」をクリックします
8.「Create an Application」で、以下の事項を入力して、「Create Application」をクリックします。
(1) Application Identifier: (アプリケーション識別子)
アプリケーション識別子.appspot.comという形で利用されます。
6文字以上30字以下で指定します。
(2) Application Title: (アプリケーション名)
(3) accept these terms (サービス使用許諾契約書に承諾する)
9.「Application Registered Successfully」と表示されたら登録完了です。
「Java 用の cron」 or 「Python 用の cron」
Google App EngineではJavaとPythonが動作います。
cronの設定の仕方は、どちらの言語を選択するかによって変わります。
Java 用の cron を使用したスケジュール タスク - Google App Engine
具体的な手順は、Google App Engine(GAE)でcron動かすやり方をゆとり向けにまとめてみたがわかりやすいです。
Eclipseをダウンロードしないといけないのが面倒だと思ったので、私は今回、Python 用の cron を使用することにします(あとJavaはなんとなく精神的ハードルが高い…)
Pythonは、軽量プログラミング言語としては実行速度が早く、可読性(保守性)が高いというメリットがあるそうですよ。
Python 用の cron を使用したスケジュール タスク - Google App Engine
具体的な手順は、GAEでcronを動かすメモがわかりやすいです。
こちらを参考に、手順を以下書いておきますね。
Python 用の cron を使用したスケジュール タスク - Google App Engineを設定する
1.ローカルに必要な環境(開発環境)を確認する
(1) Python 2.5
(2) App Engine SDK
2.Python 2.5のインストール
(1) Python JAPAN User's Groupのウェブサイトを開きます
※Pythonの公式サイトでは、現時点で2.5系の最新版2.5.5の「Windows用インストーラ」が公開されていないため、2.5.4の「Windows用インストーラ」へたどり着きやすいこちらを案内しています。
(3) 「Python標準リリース」をクリックします
(4) 「以前のバージョン」から、「Python 2.5」ではじまっている、「Windows用インストーラ」を選択します(ダウンロードを開始します)。
※Python 2.5は最新のバージョンではないためです
※ここでは「python-2.5.4.msi」を選択しました(あとで選択するApp Engine SDKに64bit版がないため、念のため)
(5) python-2.5.*.msiをインストールします。
※インストーラーの表示にしたがってインストールしてください
4.App Engine SDKのインストール
(1) ダウンロード - Google App Engineを開きます
(2) GoogleAppEngine-1.3.*.msiをクリックします
(3) App Engine SDKのインストールをインストールします。
※インストーラーの表示にしたがってインストールしてください
※Python 2.5をあらかじめインストールしておかないと、Google App Engine Launcherを起動しようとした時に、以下のように叱られます。
※何も警告がでず、以下の画面になれば環境構築完了です。
5.必要なファイルを準備する
GAEでcronを動かすメモをもとに、以下の3つのファイルを作成しましょう。
ソースの右上にある「copy to clipboard」をクリック、その後エディタに貼り付けて、必要部分を書き換えたら保存。これでOKです。ただし注意すべき点が一箇所あるので気をつけて以下の説明を読んでください(※部)。
(1) app.yaml
「Python App Engine アプリケーション」に必要な設定ファイル。
このファイルは、URL パスにおけるリクエスト ハンドラおよび静的ファイルとの間の関係を指定します。アプリケーション ID や最新バージョン識別子など、アプリケーション コードについての情報も記載されています。
私の場合こんな感じ。
あとでわからなくならないように、コメントを入れてあります。
識別子等の詳細はこちら。
# アプリケーション識別子 application: mitaina version: 1 runtime: python api_version: 1 # URL パターンのリストと、これらの処理方法 handlers: # handlers01 [cron01 - minutely job] - url: /cron/minutely script: minutely.py login: admin # handlers02 #- url: /cron/reply # script: reply.py # login: admin
※実行時やデプロイ時に以下のようにエラーがでた場合、インデントが間違っています。「script」や「login」の前には半角スペースを2ついれましょう。
Fatal error when loading application configuration:
Invalid object:
Unknown url handler type.
(2) cron.yaml
「Python アプリケーションのスケジュール タスクを設定」するのに必要なファイル。アプリケーションのルート ディレクトリに設置。
私の場合こんな感じ。
あとでわからなくならないように、コメントを入れてあります。
設定の詳細はこちら。
cron: # cron01 - description: minutely job url: /cron/minutely schedule: every 1 minutes timezone: Asia/Tokyo # cron02 #- description: reply_random #url: /cron/reply #schedule: every 2 minutes #timezone: Asia/Tokyo
(3) cronで実行するスクリプトファイル
(例) post.py, minutely.py
私の場合こんな感じ。
from google.appengine.api import urlfetch url = "http://example.com/cron/bot_minutely.php" result = urlfetch.fetch(url=url, method=urlfetch.GET, headers={'Cache-Control':'max-age=0'}, deadline=10) if result.status_code == 200: print result.content
6.準備したファイルをサーバにアップロードし、利用可能にします(デプロイ)
(1) Google App Engine Launcherを起動します
(2) 「File」−「Add Existing Application」を順にクリックします
(3) 「Application PATH」に、app.yamlとcron.yamlを保存したフォルダを指定し、「Add」をクリックします。
(4) Google App Engine Launcherに先程のフォルダが表示されていることを確認し、その行をクリックします。
(5) アクティブになった「Deploy」ボタンをクリックします。
(6) 「Deploy Applicaton to Google」と表示されるので、Googleのアカウントを入力し、「OK」をクリックします。
(7) Deploy状況が表示されるので、内容を確認します。
※コマンドラインでデプロイする場合は、GAEでcronを動かすメモが参考になります。
まとめ
最初に動くようになるまでだいぶ大変……ですが、ひとつ動くようになってコツをつかめば、らくちんです。cronはGAEにまとめるのがいいかもしれませんね!
……いっそcronに限らず、botはGAEにまとめられるとよりいいのですが、そのためにはPythonをちゃんと勉強しないと!!
追記(2011/08/29)
ご紹介いただきました!
ありがとうございます