はじめに
本連載では、Python上で動作するWebサーバ&WebアプリケーションフレームワークであるTornadoでアプリケーション開発を行う方法について紹介します。本連載で扱う内容は、次のとおりです。
- Tornadoの特徴
- Tornado利用のための環境設定手順
- Hello, Worldアプリケーションの作成
- データベースと連携したアプリケーションの作成
- その他、役立つTornado関連のテクニック
導入の今回は、まずTornadoの特徴と環境設定手順、「Hello, World」アプリケーションの作成までを紹介します。
対象読者
- PythonによるWebアプリケーション開発に興味がある方
- Pythonを触ったことがある方
- Webアプリケーションの開発をこれから学ぶ方、もしくは学び始めたばかりの方
必要な環境
- Python 2.6 以上
- Tornado 4.2
Tornadoについて
今回紹介するTornadoは、Apache Licence 2.0に基づくオープンソースのノンブロッキングなWebサーバ&Webフレームワークです。TornadoはFriendFeedによって開発され、Facebookに吸収されたのちにオープンソース化されたフレームワークで、以下のような特徴があります。
* ノンブロッキングI/O
- リアルタイム性
- シンプルなテンプレート
- シングルスレッド、シングルプロセス
Djangoがフルスタック型のフレームワークなのに対して、Tornadoは自分で必要なコンポーネントを組み合わせていくタイプのフレームワークとなっています。
Tornadoは非常に多機能で、本家ドキュメントも充実しています。対照的に日本語情報は少ないのですが、活用できれば大いに役立つことと思います。
Tornadoを使ってみよう!
インストール
インストールは以下のようにpipで行います。
$ pip install tornado
Hello World
以下は公式のHello Worldのコードです。最小限の記述しかされていない短いコードですがちゃんと動きます。
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.current().start()
上のコードをapp.pyという名前で保存してから以下のように実行してみてください。
$ python app.py
ローカルホストの8888番(http://localhost:8888/)にアクセスして、以下のようなHello Worldの文字が表示されれば成功です。
コードの解説
app.pyの中で重要な以下の2点を解説していきます。
- RequestHandler
- Applicationオブジェクト
RequestHandler
RequestHandlerクラスはHTTPリクエストを処理するための基底クラスです。実際のリクエストを処理するためには、RequestHandlerクラスのサブクラスを作成する必要があります。以下のコード片を見てみましょう。
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
このコード片では、RequestHandlerクラスを継承してMainHandlerクラスを作っています。リクエストを扱う際には、TornadoはこのMainHandlerクラスをインスタンス化し、リクエストのHTTPメソッドに対応したメソッドを呼び出します。この例では、getメソッドだけ定義しているので、HTTP GETリクエストにのみ対応できます。getメソッド以外には、POST、DELETE、PUTなどに対応した、post, delete, putメソッドなどがあります。
このようにHTTPリクエストの種類に応じて、処理するメソッドを自動的に切り分けられるので、一つのメソッドをシンプルにすることができます。
Applicationオブジェクト
Applicationオブジェクトは、アプリケーション全体の設定をするために使われます。
application = tornado.web.Application([
(r"/", MainHandler),
])
このコード片ではApplicationクラスのインスタンスを作成しています。重要なことは、Applicationインスタンスを作成する際に引数としてタプルのリストを渡すことです。このタプルにはURLとハンドラの対応を記述します。これにより、どこのリクエストに対してどのハンドラで処理をするのかということをTornadoに教えています。上の例の場合、"http://example.com/"にアクセスした時にはMainHandlerで処理を行うということを示しています。仮にr"/hoge/"と記述していた場合は、"http://example.com/hoge/"にアクセスする必要があります。