いきなりPython 〜Hello! world編〜

何故にカエルの天敵であるヘビ(Python)をやらねば(?)いけなくなったのか。

とあるきっかけで、”Google App Engine上で動作する Twitterのbotを開発してみるイベント”
(通称BOT2UKU)のお誘いを受けて、ぜひ勉強会に参加してみたい!と思ってはみたものの、
そこでは、Pythonベースでの勉強だったという...。


Rubyも全くできないのに、Pythonとか無謀すぎる...とは思いつつ、
まぁ、それでも、言語は違えども、勉強にはなるかなぁと思って、とりあえずbot2kuを受講する際に必要な環境設定をして、
勉強会の資料をもとに、自分でちょっとやってみよう。なんて軽い気持ちでやったのが始まり。


とりあえず、BOT2UKUの"GAEでTwitterのbotを作る のまとめページ"を参照しながら設定しよう。
ど初心者でもわかる設定のしかた(Python版)

pythonをインストールする    
   私のPC環境:
   Windows Vista / Intel Core 2 Duo CPU / 32ビットオペレーションシステム
  インストールするPython version:python-2.5.4.msi 

2 pythonを便利に使うための設定をする
3 GAEのアカウント設定して使えるようにする。
4 GAEのSDK(開発用キット)のインストール

4番まで設定完了。さて、実際にGAEを動かしてみようかなと。
まずは、Hello, World!チュートリアルに従って、
helloworldという名前のディレクトリ(=フォルダ)を作成。
helloworld ディレクトリで、helloworld.py という名前のファイルを作成し、次のようなコンテンツを入れる。

print 'Content-Type: text/plain'
print ''
print 'Hello, world!'

次に、helloworld ディレクトリで、app.yaml という名前のファイルを作成し、次のようなコンテンツを入れる。

application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: helloworld.py

よし、ファイル作成完了。
次はアプリケーションのテスト。

ハンドラ スクリプトと設定ファイルを使用して、各 URL にハンドラをマッピングすれば、
アプリケーションは完成です。App Engine SDK に含まれる Web サーバーでこれをテストすることができます。

ハンドラ??マッピング??それって何だ??
ぐぐってみたけどよくわからない...orz

と、とりあえず、コマンド入力してみよう。

次のコマンドで helloworld ディレクトリまでのパスを指定し、Web サーバーを起動します。

google_appengine/dev_appserver.py helloworld/


....?
エラーでるぞ。
うーん、やっぱり「URLにハンドラをマッピング」ってのをしないとだめなのかなぁ(´・ω・`)
ああ、でも、Rubyの時って、rubyて入力してからでないと、rbファイル実行できないよな。
ってことは、これって、pythonって入力してしないとだめなんじゃね?
と思って、あれこれやったけど、syntax errorとかでてしまった。

も一度、整理しよう。
現在の作業環境

Python
C:\Python25

GAE
C:\Program Files\Google\google_appengine\dev_appserver.py

helloworld
C:\Program Files\Google\google_appengine\helloworld\helloworld.py
C:\Program Files\Google\google_appengine\helloworld\app.yaml

しかし、各urlに ハンドラをマッピングの意味がわからないまま(´・ω・`)ショボーン

テストその1
C:\Program Files\Google\google_appengine\dev_appserver.py helloworld/
を入力すると、EmEditorでdev_appserver.pyが開く(´・ω・`)


テストその2
インタプリタpythonと入力して実行してみる。
C:\Program Files\Google\google_appengine>python dev_appserver.py helloworld/

結果

C:\Program Files\Google\google_appengine>python dev_appserver.py helloworld/
Traceback (most recent call last):
  File "dev_appserver.py", line 60, in <module>
    run_file(__file__, globals())
  File "dev_appserver.py", line 57, in run_file
    execfile(script_path, globals_)
IOError: [Errno 2] No such file or directory: 'C:\\Program Files\\Google\\google
_appengine\\google\\appengine\\tools\\dev_appserver_helloworld.py'

なんかPATH通ってなくない?\\とかになってる...。
ちなみに、line57、line60はこんな感じになってた。

def run_file(file_path, globals_, script_dir=SCRIPT_DIR):
  """Execute the file at the specified path with the passed-in globals."""
  sys.path = EXTRA_PATHS + sys.path
  script_name = os.path.basename(file_path)
  script_name = SCRIPT_EXCEPTIONS.get(script_name, script_name)
  script_path = os.path.join(script_dir, script_name)
  execfile(script_path, globals_)    ←line 57

if __name__ == '__main__':
  run_file(__file__, globals())      ←line 60


とりあえず、も一度ユーザー環境設定見直そう。
PATH>>C:\Program Files\Ruby-1.8\bin;C:\work;C:\Python25;C:\Python25\Scripts;C:\Python25\Lib\site-packages;C:\Program Files\Google\google_appengine\;C:\helloworld

う〜ん。これがあっているかどうかもよくわからなくなってきた。
なんか設定いじってしまってるのかもしれないと思い、GoogleAppEngine_1.2.0をREPAIRした。

で、今度は、最後のhelloworldの前まで入力してみた。

C:\Program Files\Google\google_appengine>python dev_appserver.py
Invalid arguments
Runs a development application server for an application.

dev_appserver.py [options] 

Application root must be the path to the application to run in this server.
Must contain a valid app.yaml or app.yml file.

お?Invalid argumentsってでた。
ってことは、引数がないって事??

dev_appserver.py [options]

この [options] ってところに値「helloworld」を入れろって事かな?
よし、今度こそ!

C:\Program Files\Google\google_appengine>python dev_appserver.py helloworld

INFO     2009-10-05 11:29:29,216 appengine_rpc.py] Server: appengine.google.com
Allow dev_appserver to check for updates on startup? (Y/n): 

おおおお?!うまくいきそう??とりあえず、「Y」入力

Allow dev_appserver to check for updates on startup? (Y/n): y
dev_appserver will check for updates on startup.  To change this setting, edit C
:\Users\sachiko/.appcfg_nag
INFO     2009-10-05 11:29:46,438 appcfg.py] Checking for updates to the SDK.
WARNING  2009-10-05 11:29:46,967 datastore_file_stub.py] Could not read datastor
e data from c:\users\sachiko\appdata\local\temp\dev_appserver.datastore
WARNING  2009-10-05 11:29:46,967 datastore_file_stub.py] Could not read datastor
e data from c:\users\sachiko\appdata\local\temp\dev_appserver.datastore.history
WARNING  2009-10-05 11:29:47,049 dev_appserver.py] Could not initialize images A
PI; you are likely missing the Python "PIL" module. ImportError: No module named
 _imaging
INFO     2009-10-05 11:29:47,398 dev_appserver_main.py] Running application hell
oworld on port 8080: http://localhost:8080

なんかエラーでまくってるけど大丈夫だろうか...
とりあえず、ブラウザにhttp://localhost:8080を入力してみよう。

....orz 
やっぱりだめだった(´;ω;`)
にゅ〜ん、わからんよぉう。

そして、ふたたび、ぐぐる→ぐぐる→ぐぐる→ぐぐr(ry
と、無限loopしかけたところに、ヒントを発見!!!!!
それはここだーーーーーーーーー!ヽ(≧▽≦)ノ
GAE+Vista Ulitmateでのdev_appserver.pyの起動

調べてみたら、まさにこれと全く同じ!!
C:\Windows\System32\drivers\etc\hostsをエディタで開いたら、
::1 localhostとなっている!!!><

というわけで
「::1 localhost」になってるところを、「127.0.0.1 localhost」に編集しなおす。
で、再度 http://localhost:8080にアクセス。

できたーーーーーーーー!Hello, world! ヽ(≧▽≦)ノ