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が実現してくれているので、とても良いと思います。

Related.