bottle.pyを使ってpythonでWEBサイトやWEBサービスを作ってみる

2017.11.26

bottle.py は 1 ファイルで WEB アプリケーションを作るためのすべてが詰まっている

github のリポジトリ。

https://github.com/bottlepy/bottle

django のようなフルスタックの WEB フレームワークも便利は便利なのですが、本当に便利だと感じるまでにかかる時間は割と必要です。

フルスタックなだけに、いろいろなことについて、フレームワークなりのやり方があって、無視して独自の方法で行ってしまうと、後からメンテナンスが大変になったりします。

bottle.py なら必要最低限の機能しか提供していないため、ある程度自分で実装方法や使用するライブラリを考えながら使えるため、小回りが利きます。

ただ、自由度が高いだけに、後でメンテナンスが楽になるか苦行になるかは自分次第という感じです。

さっそくインストール

インストール方法は、いつも通りのやり方が使えます。

pip install bottle

「pip」が使える環境であれば、このコマンドを実行するだけですぐに bottle.py が使える状態になります。

このほかに github から bottle.py をダウンロードしたり、clone して pip の管理から切り離して利用することもできます。

まずは Hello World を出してみる

hello.py というファイル名で適当なばしょにファイルを作って、中に下記のコードを書きます。

from bottle import route, run, template

@route('/hello/<name>')
def index(name):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

後は、このコードをコマンドラインからでも、idle からでも実行すれば、http サーバが起動してブラウザからリクエストを待ち受ける状態になります。

下記の URL にアクセスすると今回作成した hello world プログラムにアクセスできます。

http://localhost:8080/hello/world

run(host='localhost', port=8080)

http サーバを実行しているコードのパラメータにしている、8080 がポート番号になりますので、この番号を変えることで任意のポートでアプリケーションを動作させることができます。

ちょっとだけ解説

@route('/hello/<name>')
def index(name):

このコードは「http://localhost:8080」の後ろのアドレスを意味しています。

つまり、http://localhost:8080/hello/にアクセスしてきたとき、次の行に書かれている「def index(name):」が呼び出せるようになります。

この時、「」の位置に記載されてる文字列が、index の name パラメータとして受け取られルカたちになります。

return template('<b>Hello {{name}}</b>!', name=name)

「template()」で表示するテンプレートを表していますが、この例では「Hello {{name}}!」がテンプレートになり、「{{name}}」の部分に、name で受け取ったパラメータを代入してブラウザ上に表示される形になります。

ここからさらにいろいろな処理を行いたい場合は、@route()とその後に続く関数のセットを増やして、ページを増やしたり、関数の中身にほかの python ファイルを呼び出したりして、いろいろな機能を盛り込んでいく形になります。

感想

シンプルな構造で WEB アプリケーションを実装するのが好きで、自分でディスパッチャーを作って、呼び出すクラスやメソッドを振り分けて・・・と、
WEB アプリケーションをフレームワークを使わずに作るときの儀式的な部分がイメージしやすい形で、bottle.py が実現してくれているので、とても良いと思います。

関連記事