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
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で待ち受けているわけではありません。
できました。
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を試す時なんかに利用しています。