Posted at

爆速でWebアプリを開発する


TL;DR

bottleでローカルteapotサーバ立てます。


超軽量フレームワーク

Webアプリ開発って最初に覚えることが結構たくさんあって挫折しちゃう人が多いみたいです。

でも何か動くものをWebに公開するだけなら超簡単なんです。そう、このbottleがあればね!


bottle

bottleはpython製のWebアプリケーションフレームワークです。

Flaskがマイクロフレームワークを名乗っていますが、それより小さくファイル1つ置くだけで使えてしまいます。

動かすだけなら何も覚えることはありません。一瞬です。


作るもの

ステータスコード 418を返すサーバを作ります。

Googleによる同様の実装はこちら

418についてはこちらにあるようにジョークコードですが、HTTPではUnusedとして予約されるそうなので、むやみに使うと刺されます。場をわきまえて使いましょう。


開発環境

この環境で作業します。



$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.2
BuildVersion: 18C54
$ python --version
Python 3.7.2


導入

pip installが推奨なのですが、せっかくなのでファイルをダウンロードして利用してみましょう。

macにwgetが入っていなかったため、curlでbottle.pyのファイルをダウンロードしてきます。

$ mkdir teapot

$ cd teapot
$ curl -L http://bottlepy.org/bottle.py > bottle.py

1ファイルとはいえ4000行以上あります。

$ wc -l bottle.py 

4418 bottle.py


開発

ドキュメントのこのあたりを見つつ次のように書きます。読めば何となく分かると思います。

https://bottlepy.org/docs/0.12/tutorial.html?highlight=httpresponse#the-response-object


teapot.py


from bottle import route, run, HTTPResponse

@route('/')
def teapod():
return HTTPResponse(status=418)

run(host='0.0.0.0', port=80)


フォルダ構造も超シンプルです

$ tree

.
├── bottle.py
└── teapot.py

0 directories, 2 files


起動

開発用にローカルでサーバを起動します。

$ python teapot.py 

Bottle v0.13-dev server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:80/
Hit Ctrl-C to quit.

ブラウザでlocalhostにアクセスします。

Listening on http://0.0.0.0:80/と出ますが、ここで見たように、0.0.0.0で待ち受けているわけではありません。

スクリーンショット 2019-05-13 午後11.22.51.png

できました。

Chromeとしてはエラーとして扱っていますが、よく見るとHTTP ERROR 418が返ってきていることがわかります。

(Chromeは400番代なのでエラー画面を出しているようで、これは完全に正しいです。)

念の為curlでも確認してみます。

$ curl -v http://localhost/

* Trying ::1...
* TCP_NODELAY set
* Connection failed
* connect to ::1 port 80 failed: Connection refused
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.54.0
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 418 I'm a teapot
< Date: Mon, 13 May 2019 14:26:14 GMT
< Server: WSGIServer/0.2 CPython/3.7.2
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
<
* Closing connection 0

curlは418 I'm a teapotと表示してくれますね。


まとめ

pythonのbottleフレームワークを使い爆速でWebアプリケーションを作成しました。

Hello, World!でもいいのですが、見飽きたと思うのでI'm a teapotを実装しました。

特に引っかかる要素が無いため私はCICDを試す時なんかに利用しています。


参考

https://bottlepy.org/