sekine

2014.12.23

Pythonの軽量WebフレームワークBottleを試してみた(その1) – ルーティング編 (Advent Calendar 23日目)

この記事はPython Advent Calendar 2014 – Qiita 23日目
アライドアーキテクツ Advent Calendar 23日目の記事です。

こんにちは。関根です。

最近は社内の有志でPythonの勉強会を開いたり、
また定期的にPythonもくもく会などを開催したりしています。

Pythonもくもく会はおかげさまで順調に回を重ねており、つい先日3回目が終了しました。
また来月も開催予定ですので、お時間の合う方のご参加をお待ちしています。

Web業界をはじめとして他の業種の方や、専門分野の異なる方も参加するゆるい会になっていますので、気兼ねなく参加できると思います。(初心者の方も大歓迎です!)

はじめに

PythonでWebアプリケーションを作成する場合、フルスタックのフレームワークから、軽量のものまで様々な選択肢が存在します。

Djangoのようなフルスタックのフレームワークは、慣れればとても便利な機能が多く、使いやすいと思います。しかしフルスタックであるがゆえに、最初に覚えることが多く、これからPythonを初めてみようかなという人には若干敷居が高いように感じます。

これまで社内で何度かDjangoの勉強会を行ってきましたが、チュートリアルを行って、理解してもらうだけでも結構大変だった印象があります。

そこで本日は、Python初心者の方でもお手軽に試すことができるPythonの軽量WebフレームワークであるBottleを紹介し、またBottleの主要な機能であるルーティングについて説明していきたいと思います。

Bottleとは

BottleとはPython製の軽量Webフレームワークです。動作が速く、シンプルなのが特徴です。

Bottle is a fast, simple and lightweight WSGI micro web-framework for Python. It is distributed as a single file module and has no dependencies other than the Python Standard Library.

公式サイトより引用

個人的な感想としては、簡単なアプリケーションをお手軽に作りたい場合や、状態をあまり持たないAPIサーバなどを開発するのに向いていると思っています。

また1つのファイルのみで提供されているので、フレームワークの作り方とか、仕組みなどを勉強する場合にも、とても良い教材になるのではないでしょうか。需要があれば、ソースコードリーディングもやりたいと思っています。

それでは実際にBottleを用いてHelloWorldアプリケーションを作成して、
フレームワークの雰囲気を掴んでみることにしましょう。

インストール

まずはBottleのインストールを行います。Bottleは1つのファイルで提供されているので、次のようにダウンロードして使用することも可能です。

しかし後ほどライブラリを使用するときのために、今回のサンプルでは、virtualenvとpipを利用して、仮想環境を作成していきます。(virtualenv、pipについてはここでは詳細を解説しません。Web上にたくさんの記事や、ドキュメントが存在していますので、そちらを参考にしてください。)

参考リンク

仮想環境の作成

まずは仮想環境を作成します。

Bottleのインストール

続いてBottleをインストールします。とても簡単ですね。

念のためインストールされているか、確認します。

確認

HelloWorldの作成

いよいよHelloWorldアプリケーションの作成です。hello_world.pyというファイルを作成して、次のソースをそのまま入力して、保存します。

起動

次にコマンドラインから下記のコマンドを打ち込み、ブラウザから、http://localhost:8080/hello にアクセスします。

成功すると、画面上にHello World!の文字が表示され、プログラムを起動したコンソールにはアクセスログが表示されます。たった数行記載するだけで、簡単なアプリケーションを作成することができるようになりました。素晴らしいですね。

ルーティング

上記のHelloWorldのサンプルでは、routeデコレーターで、/helloに対応する関数のマッピングを指定しました。Bottleのルーティングでは他にも、さまざまな指定ができるので、簡単にご紹介したいと思います。

ダイナミックルーティング

デコレーターの中で、次のように指定することでダイナミックにルーティングの指定をする事ができるようになります。またnameに該当する箇所を関数の中で取得して使用する事ができます。

また次のようにルーティングの指定をintやfloatの数値に限定したり、
任意の正規表現やファイルパスなどに限定することも可能です。

HTTPメソッド

GETメソッドや、POSTメソッドを明示的に指定したい場合には、@get、@post、@put、@deleteデコレーターを使用します。またrouteメソッドに明示的に引数を記述することも可能です。

まとめ

いかがでしたでしょうか? 今回はBottleをご紹介する第1回目の記事ということで、主にBottleの概要とルーティングについて解説しました。

今回学習したルーティングと簡単なテンプレートの書き方さえ覚えれば、すぐにでもアプリケーションを作っていくことが可能です。次回は主にレスポンスの返却方法と、テンプレートの使い方について解説していこうと思います。

追記(2015/04/03)
一部内容修正致しました。またルーティング以降の内容を次の書籍に書きました!

Pythonエンジニア養成読本

ぜひ参考にして頂ければ幸いです!