Bottleは、PythonでWebアプリケーションを開発するための軽量なフレームワークです。このフレームワークはシンプルで、初心者にも扱いやすく、Pythonの学習を進める上でも非常に役立ちます。この記事では、Bottleを使ってWebアプリケーションを開発する方法を完全かつ包括的に説明します。
1. Bottleとは?
Bottleは、非常にシンプルで軽量なPythonのWebフレームワークです。フレームワーク自体が小さく、依存関係も最小限に抑えられているため、素早く開発を始めることができます。多くの大規模なフレームワーク(例えばDjangoやFlask)と比較して、Bottleは非常に小さなフットプリントを持っており、シンプルなWebアプリケーションやAPIの開発に最適です。

2. Bottleのインストール
Bottleを使うには、まずPythonがインストールされている必要があります。次に、Bottleをインストールします。以下のコマンドを実行することで、Bottleを簡単にインストールできます。
bashpip install bottle
これで、Bottleフレームワークを使ってPythonでWebアプリケーションを作成できる準備が整いました。
3. 最初のBottleアプリケーションを作成
次に、最も基本的なBottleアプリケーションを作成してみましょう。以下は、非常にシンプルな「Hello, World!」を表示するアプリケーションの例です。
pythonfrom bottle import Bottle, run
app = Bottle()
@app.route('/')
def home():
return "Hello, World!"
run(app, host='localhost', port=8080)
このコードを実行することで、ローカルホスト(localhost
)の8080ポートでサーバーが立ち上がり、ブラウザでアクセスすると「Hello, World!」と表示されます。
コードの説明:
-
Bottle
クラスをインポートし、app
というインスタンスを作成します。 -
@app.route('/')
デコレーターを使用して、ルートURL(/
)にアクセスしたときに実行される関数home()
を定義します。 -
run(app, host='localhost', port=8080)
はアプリケーションをローカルサーバーで実行するためのコマンドです。
4. URLルーティング
Bottleでは、URLパスとPythonの関数をマッピングするために「ルート」を定義します。上記の例でも使われている @app.route()
デコレーターを使って、特定のURLパスに対するリクエストを処理する関数を指定できます。
複数のルートを定義する例:
pythonfrom bottle import Bottle, run
app = Bottle()
@app.route('/')
def home():
return "Welcome to the home page!"
@app.route('/about')
def about():
return "This is the about page."
@app.route('/hello/' )
def greet(name):
return f"Hello, {name}!"
run(app, host='localhost', port=8080)
このコードでは、以下の3つのルートを定義しています:
-
/
: ホームページ -
/about
: アバウトページ -
/hello/
: パラメーターとして名前を受け取り、挨拶を返すページ
URLのパラメーターは
のように <...>
で囲んで指定します。例えば、/hello/Taro
にアクセスすると、Taro
という名前を使って「Hello, Taro!」と表示されます。
5. テンプレートエンジンの使用
Bottleは、HTMLを動的に生成するためにテンプレートエンジンをサポートしています。標準では、SimpleTemplate
が使用されますが、Jinja2などの他のテンプレートエンジンも使用することができます。
以下の例では、Bottleのデフォルトテンプレートエンジンを使ってHTMLを生成します。
pythonfrom bottle import Bottle, run, template
app = Bottle()
@app.route('/')
def home():
return template('Hello, {{name}}!', name="World")
run(app, host='localhost', port=8080)
template()
関数は、テンプレート文字列に埋め込まれた変数({{name}}
)を置き換えます。この場合、name
という変数を「World」に設定して、ブラウザに「Hello, World!」と表示します。
6. フォームデータの処理
Bottleでは、ユーザーから送信されたフォームデータを簡単に受け取ることができます。以下は、フォームデータを受け取って表示する簡単な例です。
pythonfrom bottle import Bottle, run, request, template
app = Bottle()
@app.route('/')
def form():
return '''
'''
@app.route('/submit', method='POST')
def submit():
name = request.forms.get('name')
return template('Hello, {{name}}!', name=name)
run(app, host='localhost', port=8080)
この例では、/
ルートでフォームを表示し、フォームが送信されると /submit
ルートでそのデータを受け取ります。ユーザーが入力した名前がrequest.forms.get('name')
で取得され、テンプレートに渡されて表示されます。
7. 静的ファイルの提供
Bottleは、静的ファイル(CSS、JavaScript、画像など)を提供することもできます。@app.route()
と static_file()
を使って、特定のディレクトリ内のファイルを提供します。
pythonfrom bottle import Bottle, run, static_file
app = Bottle()
@app.route('/static/' )
def server_static(filename):
return static_file(filename, root='./static')
run(app, host='localhost', port=8080)
この例では、/static/filename
にアクセスすることで、./static
フォルダ内のファイルを提供します。
8. データベースとの連携
Bottleはデータベースとの連携も簡単に行えます。ここでは、SQLiteデータベースを使ってデータを保存し、表示する例を示します。
pythonimport sqlite3
from bottle import Bottle, run, request, template
app = Bottle()
# データベースの接続
def connect_db():
return sqlite3.connect('example.db')
@app.route('/add', method='POST')
def add_entry():
name = request.forms.get('name')
conn = connect_db()
c = conn.cursor()
c.execute('INSERT INTO users (name) VALUES (?)', (name,))
conn.commit()
conn.close()
return 'User added!'
@app.route('/list')
def list_entries():
conn = connect_db()
c = conn.cursor()
c.execute('SELECT * FROM users')
users = c.fetchall()
conn.close()
return template('{{users}}', users=users)
run(app, host='localhost', port=8080)
このコードでは、ユーザーの名前をデータベースに保存するフォームと、データベースに保存された名前をリスト表示するページを作成しています。
9. 結論
Bottleはそのシンプルさと柔軟性から、Webアプリケーションの開発に非常に適したフレームワークです。シンプルなWebアプリケーションから、データベース連携を含むより複雑なアプリケーションまで、幅広い用途に対応できます。また、ドキュメントが豊富で、学習をサポートする情報が揃っているため、PythonでWebアプリケーションを作りたいと考えている人にとって非常に良い選択肢です。