Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@amuyikam

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

More than 1 year has passed since last update.

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を試す時なんかに利用しています。

参考

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
amuyikam

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?