『Pythonエンジニア養成読本』読書会便り ~基礎やTipsから質疑応答の内容まで~

第4回 入門Webアプリケーション開発

この記事を読むのに必要な時間:およそ 5 分

Bottle

ここで,この書籍で使用しているWebフレームワークBottleについての説明になりました。BottleはWebフレームワークとして以下の4つの機能を提供しています。また,これらの機能はだいたいのWebフレームワークで提供されています。

  • ルーティング:指定されたURLと処理するコードを対応付ける仕組み
  • テンプレートエンジン:HTMLを返却するときにテンプレートに変数などを入れる仕組み
  • HTTPユーティリティ:HTTPリクエストやレスポンスを扱うためのクラスや関数
  • サーバ:開発用のWebサーバ

また,Bottleの特徴として1つのファイルでフレームワークが実装されているため,フレームワークをどのように作るのかという勉強にも向いているとのことです。Bottleのソースコードリーディングをそのうち実施予定とのことです。

ここで,ルーティングで使用しているデコレータについて「デコレータとはどういうものなのか?」という質問がありました。

Bottleでは以下のようにrouteデコレータを使用して/helloにアクセスきたらhello()メソッドを実行する」という指定を行います(これをルーティングといいます⁠⁠。

ルーティングの指定

@route('/hello')
def hello():
    # テンプレートの描画
    return template('Hello {{string}}', string='World')

デコレータはある関数をラップする関数です。デコレータを指定することによってある関数に機能を追加したりできます。

なお,デコレータはシンタックスシュガー糖衣構文であり,以下の2つのコードはどちらも同じ動作をします。Webフレームワークだと他に「このURLはログイン必須」というデコレータでログインチェックを行ったりできるものがあります。

デコレータの例

def spam(...):
    ...
spam = ham(spam)

@ham
def spam(...):
    ...

Bottleにはテンプレートエンジンも付属しています。プログラムからHTMLを返すときには,文字列を連結する必要がありますが,テンプレートエンジンを使用することにより,HTMLテンプレートの中に値を埋め込むことができます。例えば以下のテンプレートはbasketの内容を一つずつ取り出し,リストで出力しています。

Bottleのテンプレート

<ul>
  % for item in basket:
    <li>{{item}}</li>
  % end
</ul>

PythonのWebフレームワークのテンプレートエンジンは他にはJinja2MakoDjangoテンプレートなどがあります。Bottleのテンプレートは最低限の機能に対応しています。

Bottleのテンプレートエンジンには継承機能があります。継承はヘッダー,フッターの共通化などに利用できます。

ここで「テンプレートのrebase()について使い方がわかりにくかった」という質問がありました。include()はテンプレートの中に他のテンプレートを読み込む機能で,rebase()は逆にベースとなる親テンプレートの指定した個所に,子の内容が展開されるというところが違うという説明がありました。

写真3 議論の様子

写真3 議論の様子

他に「Webサーバはどうするのか?」という質問がありました。回答は以下のようにありました。PHPも最近はテスト用のWebサーバを内蔵しているが,Bottle付属のWebサーバもテスト用のもので,実際にWebサービスとして公開する場合には使用しません。PythonのWebフレームワークはWSGI: Web Server Gateway interfaceに則っているので,WSGIに対応したアプリケーションサーバーを使用します。よく使われるのはuWSGIGunicornです。Tornadoは付属しているアプリケーションサーバーを使用します。

著者プロフィール

鈴木たかのり(すずきたかのり)

一般社団法人PyCon JP,副代表理事,株式会社ビープラウド所属。

部内のサイトを作るためにZope/Ploneと出会い,その後必要にかられてPythonを使い始める。PyCon JPでは2011年1月のPyCon mini JPからスタッフとして活動し,2014年-2016年のPyCon JP座長。他の主な活動は,Pythonボルダリング部(#kabepy)部長,Python mini Hack-a-thon(#pyhack)主催など。

共著書に『Pythonによるあたらしいデータ分析の教科書(2018 翔泳社刊)』『Pythonプロフェッショナルプログラミング 第3版(2018 秀和システム刊)』『Pythonエンジニア ファーストブック(2017 技術評論社刊)』『いちばんやさしいPythonの教本(2017 インプレス刊)』などがある。

最近の楽しみはPython Boot Campの講師で訪れた土地で,現地のクラフトビールを飲むこと。2019年は世界各国のPyConでの発表に挑戦している。趣味は吹奏楽とボルダリングとレゴとペンシルパズル。

Facebook:takanory.net

Twitter:@takanory

Github:takanory