2014/02/28

EasyBotterをGAEのcronで動かすメモ

phaさん作成の「EasyBotter」を、Google App Engineで動かすためのメモです。

botが手動で動作するところまでは完了したものとして、それ以降を説明します。
大前提として、上記公式サイトに書かれていることは全て読んでおいてください。
非公式wikiも役に立ちます。


■利用するソフトウェアのバージョンなど

2014年2月13日現在のものです。
仕様変更などでこのページの通りにやってもうまく動かない可能性があります。

EasyBotter:2.1.3
Google App Engine SDK:1.8.9
Python:2.7.x

※Pythonの最新バージョンは3.x.xですが、GAEは3.x.x以降に対応していないので2.x.xのものを用意してください。


■準備

0.botを作る前に
EasyBotterのファイル群を入れるフォルダ名は、半角英数のみにしましょう。
日本語はもちろん、半角スペース、-(ハイフン)、_(アンダーバー)も入れないようにしてください。
これは半分、おまじないのようなものです。

1.botの準備
公式ページ、非公式wikiを参考に、bot.phpが手動アクセスで問題なく動くところまで完了させてください。

2.Google App Engineに登録する
https://appengine.google.com/
から登録します(Googleのアカウントが必要です)。
英語のページですが難しいことは言ってないので翻訳ツール使いながらがんばってください。

3.開発環境を作成する
htmlファイルをメモ帳で編集してサーバにアップロードするように、アプリケーションはSDK(ソフトウェア開発キット)と呼ばれる開発環境で作成・編集した上で、GAEで使えるようにします(デプロイといいます)。
今回用いるのはGoogleが用意したGoogle App Engine SDKというものです。
このSDKはPython(パイソン)というプログラミング言語で動いていますので、この両方をインストールする必要があります。
(本当はPython以外の言語に対応したSDKもあるのですが、Pythonが一番簡単なのでこれを使います。)
SDKのほうは、日本語が含まれていないフォルダにインストールしてください。

Pythonは以下のURLから自分のOSのものをダウンロードしてインストールしてください。
※何度も言いますが2.7.xを選んでください。
http://www.python.org/download/

Google App Engine SDKは以下のURLから「for Python」となっているもので自分のOSのものをダウンロードしてインストールしてください。
https://developers.google.com/appengine/downloads


■botをcronで動かそう

さて、いよいよ本題に入ります。

1.GAEでアプリケーションを作成する
先ほど登録したGAEにログインし、「Create Application」をクリックしてアプリケーションを作成します。
初回だけ携帯電話のメールアドレスが必要になります。

「Application Identify」がアプリケーションのサブドメイン名になります。
後から変更できないのできちんと考えてつけましょう。
また、ここも半角英数のみにして記号は入れないようにしておいてください。
「Check Acailability」で使用可能かチェックできます。
「Application Title」はアプリケーションのタイトルです。こちらは後から変更できます。
その下の拡張メニューについては、botを動かす上で特に関係ないのでデフォルトでOKです。

2.アプリケーションを追加する
Google App Engine SDKをインストールすると、Google App Engine Launcherというものが一緒についてきているはずです。
これはコマンドを叩かなくてもクリックでGAEにアプリケーションをデプロイしてくれるツールです。
デプロイというのは簡単に言うとweb上で利用可能にするという意味です。
飛行機のようなアイコンのツールを起動してみてください。
日本語には対応していませんが、全部カタカナに直してぐぐれば親切に教えてもらえるので、びびることはありません。

「File」メニューから「Add New Application」を選択してみましょう。
「Application Name」には、先ほど登録した「Application Identify」と同じものを入れます。
「Parent Directory」には、アプリケーションのフォルダを指定します。
直接書かなくても「Browse」ボタンで見慣れたブラウザが出てきます。
ここで指定するフォルダは、EasyBotterが入っているフォルダである必要はありません。自分の分かりやすいところでいいです。
Pythonが正しくインストールされていれば、「Runtime」にPythonの選択肢が出てくるので選びましょう。
「Port」と「Admin Port」は分からなかったらデフォルトか、「8080」とかでいいです。
うまいこと動かなくてポートが問題の気がするなら「8081」とか「8082」とか試してみましょう。
「Create」ボタンを押すと、一覧に作成したアプリケーションが追加されています。

3.cronの設定をする
先ほどアプリケーションの追加のときに指定したフォルダを見てみると、アプリケーションの名前の新しいフォルダができています。
ここにcronの設定を記述していきます。
これもいくつか方法があるので、自分で分かる方はがんばってください。
分からない方は、これから簡単な方法を説明します。

まずは「main.py」を開きましょう。
メインという名の通り、ここに動かしたいプログラムを書いていきます。
cronで複雑なプログラムを動かしたい場合はもうちょっと色々整理したほうがいいのですが、今回botを動かしたいだけなのでここに直接書いていきましょう。
最初から書いてあるのはサンプル的なコードなので、全部消してしまって以下のコードをコピペしてください。

main.pyの中身

from google.appengine.api import urlfetch
url = "bot.phpのURL"
result = urlfetch.fetch(url=url,
method=urlfetch.GET,
headers={'Cache-Control':'max-age=0'},
deadline=10)

bot.phpのURLのところには、準備の段階で手動で動かしたbot.phpのアドレスを入れます。

次に、アプリケーションの呼び出し元の設定をします。
app.yaml」を開いてみましょう。
このファイルに関しては、threadsafeという項目と、handlersという項目を修正します。

app.yamlの中身
application: アプリケーション名
version: 1
runtime: python27
api_version: 1
threadsafe: no

handlers:
- url: /.*
  script: main.py
  login: admin

libraries:
- name: webapp2
  version: "2.5.2"

threadsafeはnoにしてください。
handlersの項目は、そのままコピペしてもらってOKです。
yamlファイルはインデント(字下げ)を解析するので、コピペしない場合は url の u と script の s と login の l が揃うように注意してください。

最後に、このアプリケーションを決まった間隔で実行させるための設定を行います。
同じフォルダに、「cron.yaml」という新規ファイルを作成してください。

cron.yamlの中身
cron:
- description: cron job name
  url: /.*
  schedule: every 5 minutes

cron job nameは好きに名前をつけてもいいですし、このままでも動きます。
scheduleのところの間隔を、botを動かしたい間隔に変更します。

(例)
1時間ごと→every 1 hours
5分ごと→every 5 minutes

4.アプリケーションをデプロイする
設定ができたら、Google App Engine Launcherに戻ります。
一覧からアプリケーションを選択して、右上の「Deploy」ボタンを押してみましょう。
実行結果のウィンドウが表示され、デプロイの結果を見ることができます。
何かミスをしていてエラーになっているときも、ここに詳しく表示されますので、errorという言葉を探してその付近を読んでみましょう。
分からなかったら翻訳ツールと検索ツールを活用しましょう。

うまいこといくと、成功した日時が表示されます。
completed とか successful とかいう言葉が見つかればできたということです。
You can close this window now.と言われたらこのウィンドウは閉じてもいいです。

ブラウザでGoogle App Engineのほうに戻り、「My Applications」のページを見てみましょう。
デプロイしたアプリケーションのステータスが Running になっていたら動いているということです。
ダッシュボードのページでサマリーを見ることができるので、動きを確認してください。
最後に、あなたが何をせずとも、bot.phpで指定したとおり動いていることが確認できたら、botの自動実行作業は完了です。
お疲れ様でした。


(読まなくてもbot作成には問題ない余談)
「ダウンロード」とはインターネットやDVD-ROMなどからファイルを持ってくることを言います。
「インストール」とはファイルを展開して自分のPCなどで使えるようにすることです。
「ダウンロード」は本屋で本を買ってくること、「インストール」は本を読んで自分の知識にすることに例えられます。
「デプロイ」はさしずめ自分の本を違う人に貸して読んでもらうといったところでしょうか。


■番外編:アプリケーションの停止・削除

Google App Engineは1アカウント10個までしかアプリケーションを登録できません。
また、無料の容量には制限がありますので、あまりにも容量を食うようなアプリケーションだと課金が必要になります。
(自動的に課金されていくシステムではないので安心してください。bot動かす程度ではオーバーしません。)
GAEを利用する全世界の人のためにも、使わなくなったアプリケーションは削除しましょう。
そうでなくとも、botを一定期間だけ停止させたいというときがあると思います。

そのようなときには、GAEのアプリケーションのメニューから、Administration -> Apprication Settingsを選び、ページをスクロールして「Disable or Delete Application」で手続きしましょう。
Disableボタンを押すといったんアプリケーションが停止状態になります。
これはまた任意のタイミングで再起動させることができます。
停止状態から更にDeleteボタンを押すと、削除処理に入ります。
これは72時間の間にキャンセルができます。それを過ぎると削除されます。

2 件のコメント: