[Python] Webフレームワーク「Bottle」のインストールから使い方を簡単に解説
Bottleは、Pythonで開発された軽量なWebフレームワークです。シンプルな構造で、単一のファイルで動作するため、小規模なプロジェクトやプロトタイプに最適です。
インストールは、Pythonのパッケージ管理ツールであるpip
を使用して簡単に行えます。コマンドラインでpip install bottle
を実行するだけで完了します。
基本的な使い方として、route
デコレータを使用してURLパスと関数を関連付けることができます。これにより、特定のURLにアクセスした際に実行される処理を定義できます。
Bottleは、テンプレートエンジンやリクエスト・レスポンスの管理機能も備えており、シンプルながらも強力なWebアプリケーションを構築することが可能です。
Bottleとは何か
Bottleは、Pythonで書かれたシンプルで軽量なWebフレームワークです。
特に小規模なアプリケーションやプロトタイプの開発に適しており、シンプルなAPIを提供します。
Bottleは、単一のファイルで構成されているため、インストールや設定が非常に簡単です。
Bottleの特徴
特徴 | 説明 |
---|---|
軽量 | Bottleは非常に小さく、依存関係が少ない。 |
シンプルな構文 | 直感的なルーティングと簡単なAPIを提供。 |
単一ファイル構成 | すべての機能が1つのファイルに収まる。 |
テンプレートエンジン | 内蔵のテンプレートエンジンを使用可能。 |
プラグイン対応 | 必要に応じて機能を拡張できるプラグインがある。 |
他のWebフレームワークとの比較
Bottleは、FlaskやDjangoなどの他のWebフレームワークと比較して、以下のような違いがあります。
フレームワーク | 特徴 |
---|---|
Bottle | 軽量でシンプル、単一ファイルで完結。 |
Flask | 中規模アプリ向け、拡張性が高い。 |
Django | 大規模アプリ向け、フルスタックフレームワーク。 |
Bottleの用途と適用範囲
Bottleは、以下のような用途に適しています。
- プロトタイプ開発: 短期間でのアプリケーション開発に最適。
- 小規模なWebアプリケーション: シンプルな機能を持つアプリケーションに向いている。
- APIの構築: RESTful APIの実装が容易。
- 学習用: PythonのWeb開発を学ぶための良い選択肢。
Bottleは、特に小規模なプロジェクトや学習目的での使用に適しており、シンプルさと使いやすさが魅力です。
Bottleのインストール
Bottleを使用するためには、まず必要な環境を整え、インストールを行う必要があります。
以下にその手順を詳しく説明します。
必要な環境
Bottleをインストールするための基本的な環境は以下の通りです。
環境要件 | 説明 |
---|---|
Pythonのバージョン | Python 3.xが必要です。 |
pip | Pythonパッケージ管理ツールが必要です。 |
インターネット接続 | パッケージをダウンロードするために必要です。 |
pipを使ったインストール手順
Bottleは、Pythonのパッケージ管理ツールであるpipを使用して簡単にインストールできます。
以下のコマンドをターミナルまたはコマンドプロンプトで実行してください。
pip install bottle
このコマンドを実行すると、Bottleが自動的にダウンロードされ、インストールされます。
インストールの確認方法
Bottleが正しくインストールされたかを確認するためには、Pythonのインタラクティブシェルを開き、以下のコードを実行します。
import bottle
print(bottle.__version__)
このコードを実行すると、インストールされたBottleのバージョンが表示されます。
表示されたバージョン番号が確認できれば、インストールは成功しています。
Bottleの基本的な使い方
Bottleを使ってWebアプリケーションを構築するための基本的な使い方を紹介します。
ここでは、最初のアプリケーションの作成から、ルーティング、テンプレートの使用、静的ファイルの提供までを解説します。
最初のBottleアプリケーション
まずは、最もシンプルなBottleアプリケーションを作成してみましょう。
以下のコードをapp.py
というファイルに保存します。
from bottle import Bottle, run
app = Bottle()
@app.route('/')
def home():
return "Hello, Bottle!"
run(app, host='localhost', port=8080)
このコードを実行すると、http://localhost:8080/
にアクセスすることで Hello, Bottle!
と表示されるWebアプリケーションが立ち上がります。

ルーティングの基本
Bottleでは、@app.route()
デコレーターを使用してURLパスに対する処理を定義します。
以下の例では、異なるURLに対して異なるレスポンスを返すルーティングを示します。
from 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."
run(app, host='localhost', port=8080)
このコードを実行し、http://localhost:8080/about
にアクセスすると、 This is the about page.
と表示されます。

テンプレートの使用方法
Bottleには内蔵のテンプレートエンジンがあり、HTMLを動的に生成することができます。
以下の例では、テンプレートを使用して動的なコンテンツを表示します。
from bottle import Bottle, run, template
app = Bottle()
@app.route('/')
def home():
return template('<b>Hello, {{name}}!</b>', name='Bottle')
run(app, host='localhost', port=8080)
このコードを実行すると、http://localhost:8080/
にアクセスした際に Hello, Bottle!
と表示されます。
{{name}}
の部分が動的に置き換えられています。

静的ファイルの提供
Bottleでは、静的ファイル(CSSやJavaScript、画像など)を提供することも簡単です。
以下の例では、static
フォルダ内のファイルを提供します。
from bottle import Bottle, run, static_file
app = Bottle()
@app.route('/static/<filename>')
def server_static(filename):
return static_file(filename, root='./static')
run(app, host='localhost', port=8080)
このコードを実行し、http://localhost:8080/static/yourfile.css
にアクセスすると、static
フォルダ内のyourfile.css
が提供されます。
これにより、Webアプリケーションにスタイルやスクリプトを追加することができます。
Bottleの詳細な機能
Bottleは、Webアプリケーションを構築するための多くの便利な機能を提供しています。
ここでは、リクエストとレスポンスの操作、フォームデータの処理、リダイレクトとエラーハンドリング、プラグインの利用について詳しく解説します。
リクエストとレスポンスの操作
Bottleでは、リクエストやレスポンスを簡単に操作できます。
リクエストオブジェクトを使用して、クエリパラメータやヘッダー情報を取得することができます。
以下の例では、クエリパラメータを取得してレスポンスに表示します。
from bottle import Bottle, run, request
app = Bottle()
@app.route('/greet')
def greet():
name = request.query.name or "Guest"
return f"Hello, {name}!"
run(app, host='localhost', port=8080)
このコードを実行し、http://localhost:8080/greet?name=John
にアクセスすると、 Hello, John!
と表示されます。


フォームデータの処理
Bottleは、POSTリクエストで送信されたフォームデータを簡単に処理できます。
以下の例では、フォームから送信されたデータを受け取り、表示します。
from bottle import Bottle, run, request, template
app = Bottle()
@app.route('/form', method='GET')
def form():
return '''
<form action="/submit" method="post">
Name: <input name="name" type="text" />
<input value="Submit" type="submit" />
</form>
'''
@app.route('/submit', method='POST')
def submit():
name = request.forms.get('name')
return f"Hello, {name}!"
run(app, host='localhost', port=8080)
このコードを実行し、http://localhost:8080/form
にアクセスして名前を入力すると、送信後に「Hello, [名前]!」と表示されます。

リダイレクトとエラーハンドリング
Bottleでは、リダイレクトやエラーハンドリングも簡単に行えます。
以下の例では、特定の条件に基づいてリダイレクトを行い、エラーハンドリングを実装します。
from bottle import Bottle, run, redirect, error
app = Bottle()
@app.route('/redirect')
def redirect_example():
return redirect('/new_location')
@app.route('/new_location')
def new_location():
return "You have been redirected here!"
@app.error(404)
def error404(error):
return "404 Error: Page not found."
run(app, host='localhost', port=8080)
このコードを実行し、http://localhost:8080/redirect
にアクセスすると、/new_location
にリダイレクトされます。

また、存在しないページにアクセスすると、404エラーメッセージが表示されます。
プラグインの利用
Bottleは、プラグインを使用して機能を拡張することができます。
以下の例では、bottle-sqlite
プラグインを使用してSQLiteデータベースに接続します。
from bottle import Bottle, run, request, response
from bottle_sqlite import SQLitePlugin
app = Bottle()
app.install(SQLitePlugin(dbfile='mydb.sqlite'))
@app.route('/add', method='POST')
def add_item(db):
item = request.forms.get('item')
db.execute("INSERT INTO items (name) VALUES (?)", (item,))
return "Item added!"
run(app, host='localhost', port=8080)
このコードを実行する前に、SQLiteデータベースを作成し、items
テーブルを用意する必要があります。
プラグインを使用することで、データベース操作が簡単になります。
プラグインは、必要に応じて機能を追加するための強力な手段です。
Bottleを使ったデータベース操作
Bottleを使用してデータベースと連携することで、データの保存や取得が容易になります。
ここでは、SQLiteとの連携、ORMの導入と使用、データベースのCRUD操作について詳しく解説します。
SQLiteとの連携
Bottleは、SQLiteデータベースと簡単に連携できます。
以下の例では、SQLiteデータベースに接続し、テーブルを作成する方法を示します。
import sqlite3
from bottle import Bottle, run
app = Bottle()
# データベース接続
def get_db():
conn = sqlite3.connect('mydatabase.db')
return conn
@app.route('/setup')
def setup():
db = get_db()
cursor = db.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS items (id INTEGER PRIMARY KEY, name TEXT)')
db.commit()
db.close()
return "Database setup complete!"
run(app, host='localhost', port=8080)
このコードを実行し、http://localhost:8080/setup
にアクセスすると、items
テーブルが作成されます。
ORMの導入と使用
ORM(Object-Relational Mapping)を使用することで、データベース操作をより簡単に行うことができます。
ここでは、SQLAlchemy
を使用したORMの導入と使用方法を示します。
まず、SQLAlchemy
をインストールします。
pip install sqlalchemy
次に、以下のコードを使用してORMを設定します。
from bottle import Bottle, run, request
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
app = Bottle()
engine = create_engine('sqlite:///mydatabase.db')
Base = declarative_base()
Session = sessionmaker(bind=engine)
class Item(Base):
__tablename__ = 'items'
id = Column(Integer, primary_key=True)
name = Column(String)
Base.metadata.create_all(engine)
@app.route('/add', method='POST')
def add_item():
session = Session()
item_name = request.forms.get('name')
new_item = Item(name=item_name)
session.add(new_item)
session.commit()
session.close()
return "Item added!"
run(app, host='localhost', port=8080)
このコードを実行し、POSTリクエストで/add
にアイテム名を送信すると、データベースに新しいアイテムが追加されます。
データベースのCRUD操作
CRUD(Create, Read, Update, Delete)操作を使用して、データベース内のデータを管理します。
以下の例では、アイテムの追加、取得、更新、削除を行います。
@app.route('/items', method='GET')
def get_items():
session = Session()
items = session.query(Item).all()
session.close()
return "<br>".join([f"{item.id}: {item.name}" for item in items])
@app.route('/update/<id>', method='POST')
def update_item(id):
session = Session()
item = session.query(Item).filter(Item.id == id).first()
if item:
item.name = request.forms.get('name')
session.commit()
session.close()
return "Item updated!"
@app.route('/delete/<id>', method='POST')
def delete_item(id):
session = Session()
item = session.query(Item).filter(Item.id == id).first()
if item:
session.delete(item)
session.commit()
session.close()
return "Item deleted!"
run(app, host='localhost', port=8080)
このコードを実行すると、以下の操作が可能になります。
GET /items
: データベース内のすべてのアイテムを取得。POST /update/<id>
: 指定したIDのアイテムを更新。POST /delete/<id>
: 指定したIDのアイテムを削除。
これにより、Bottleを使用したデータベース操作が可能になります。
ORMを使用することで、データベースとのやり取りがより直感的に行えるようになります。
Bottleのデプロイ方法
Bottleアプリケーションを本番環境にデプロイする方法はいくつかあります。
ここでは、開発環境での実行、WSGIサーバーでのデプロイ、Herokuへのデプロイ、Dockerを使ったデプロイについて詳しく解説します。
開発環境での実行
Bottleアプリケーションは、開発環境で簡単に実行できます。
以下のコードを使用して、ローカルサーバーを立ち上げます。
from bottle import Bottle, run
app = Bottle()
@app.route('/')
def home():
return "Hello, Bottle!"
run(app, host='localhost', port=8080)
このコードを実行すると、http://localhost:8080/
でアプリケーションにアクセスできます。
開発中はこの方法で簡単にテストが可能です。
WSGIサーバーでのデプロイ
本番環境では、WSGIサーバーを使用してBottleアプリケーションをデプロイすることが推奨されます。
以下は、gunicorn
を使用したデプロイの例です。
まず、gunicorn
をインストールします。
pip install gunicorn
次に、以下のコマンドを使用してアプリケーションを起動します。
gunicorn -w 4 -b 0.0.0.0:8000 app:app
ここで、-w 4
はワーカーの数を指定し、-b 0.0.0.0:8000
はバインドするアドレスとポートを指定します。
app:app
は、app.py
ファイル内のapp
オブジェクトを指します。
Herokuへのデプロイ
Herokuは、簡単にアプリケーションをデプロイできるクラウドプラットフォームです。
以下は、BottleアプリケーションをHerokuにデプロイする手順です。
- Heroku CLIのインストール: Heroku CLIをインストールします。
- アプリケーションの作成: Heroku上に新しいアプリケーションを作成します。
heroku create your-app-name
Procfile
の作成: アプリケーションのルートディレクトリにProcfile
を作成し、以下の内容を記述します。
web: gunicorn -w 4 -b 0.0.0.0:$PORT app:app
- Gitリポジトリの初期化: アプリケーションをGitリポジトリに追加します。
git init
git add .
git commit -m "Initial commit"
- Herokuにデプロイ: 以下のコマンドでアプリケーションをHerokuにデプロイします。
git push heroku master
- アプリケーションの起動: デプロイが完了したら、以下のコマンドでアプリケーションを開きます。
heroku open
Dockerを使ったデプロイ
Dockerを使用すると、アプリケーションをコンテナ化して簡単にデプロイできます。
以下は、BottleアプリケーションをDockerでデプロイする手順です。
Dockerfile
の作成: アプリケーションのルートディレクトリにDockerfile
を作成し、以下の内容を記述します。
FROM python:3.9
WORKDIR /app
COPY . /app
RUN pip install bottle gunicorn
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "app:app"]
- Dockerイメージのビルド: 以下のコマンドでDockerイメージをビルドします。
docker build -t my-bottle-app .
- Dockerコンテナの実行: 以下のコマンドでコンテナを実行します。
docker run -p 8000:8000 my-bottle-app
これで、http://localhost:8000/
でアプリケーションにアクセスできるようになります。
Dockerを使用することで、環境の違いを気にせずにアプリケーションをデプロイできます。
これらの方法を使用して、Bottleアプリケーションをさまざまな環境にデプロイすることができます。
選択する方法は、プロジェクトの要件や運用環境に応じて決定してください。
Bottleの応用例
Bottleを使用して、さまざまなアプリケーションを構築することができます。
ここでは、シンプルなブログアプリの作成、RESTful APIの構築、ユーザー認証機能の実装について詳しく解説します。
シンプルなブログアプリの作成
Bottleを使ってシンプルなブログアプリを作成することができます。
以下の例では、ブログ記事を表示し、新しい記事を追加する機能を実装します。
from bottle import Bottle, run, request, template
app = Bottle()
posts = []
@app.route('/')
def index():
return template('<b>Blog Posts:</b><br>{{!posts}}<br><form action="/add" method="post">New Post: <input name="post" type="text"><input value="Add" type="submit"></form>', posts="<br>".join(posts))
@app.route('/add', method='POST')
def add_post():
post = request.forms.get('post')
posts.append(post)
return index()
run(app, host='localhost', port=8080)
このコードを実行すると、http://localhost:8080/
にアクセスしてブログ記事を表示し、新しい記事を追加することができます。
RESTful APIの構築
Bottleを使用してRESTful APIを構築することも可能です。
以下の例では、シンプルなタスク管理APIを実装します。
from bottle import Bottle, run, request, response
app = Bottle()
tasks = []
@app.route('/tasks', method='GET')
def get_tasks():
response.content_type = 'application/json'
return {'tasks': tasks}
@app.route('/tasks', method='POST')
def add_task():
task = request.json.get('task')
tasks.append(task)
response.status = 201
return {'task': task}
@app.route('/tasks/<index>', method='DELETE')
def delete_task(index):
if 0 <= int(index) < len(tasks):
removed_task = tasks.pop(int(index))
return {'removed': removed_task}
response.status = 404
return {'error': 'Task not found'}
run(app, host='localhost', port=8080)
このコードを実行すると、以下の操作が可能になります。
GET /tasks
: タスクのリストを取得。POST /tasks
: 新しいタスクを追加。DELETE /tasks/<index>
: 指定したインデックスのタスクを削除。
ユーザー認証機能の実装
Bottleを使用して、簡単なユーザー認証機能を実装することもできます。
以下の例では、ユーザーのログイン機能を実装します。
from bottle import Bottle, run, request, template, redirect, response
app = Bottle()
users = {'user': 'password'} # 簡易的なユーザー情報
@app.route('/')
def home():
return template('<b>Welcome! Please <a href="/login">login</a>.</b>')
@app.route('/login', method='GET')
def login_form():
return '''
<form action="/login" method="post">
Username: <input name="username" type="text" />
Password: <input name="password" type="password" />
<input value="Login" type="submit" />
</form>
'''
@app.route('/login', method='POST')
def login():
username = request.forms.get('username')
password = request.forms.get('password')
if users.get(username) == password:
response.set_cookie("username", username)
return redirect('/welcome')
return "Login failed!"
@app.route('/welcome')
def welcome():
username = request.get_cookie("username")
if username:
return f"Hello, {username}!"
return redirect('/')
run(app, host='localhost', port=8080)
このコードを実行すると、http://localhost:8080/
にアクセスしてログインフォームが表示されます。
正しいユーザー名とパスワードを入力すると、ウェルカムメッセージが表示されます。

これらの応用例を通じて、Bottleを使用したさまざまなアプリケーションの構築方法を学ぶことができます。
シンプルな構造を持つBottleは、迅速な開発を可能にし、さまざまなニーズに応じたアプリケーションを作成するのに適しています。
まとめ
Bottleは、シンプルで軽量なPythonのWebフレームワークであり、特に小規模なプロジェクトやプロトタイプの開発に適しています。
Bottleの基本的な使い方から、データベース操作、デプロイ方法、応用例までを学ぶことで、実践的なスキルを身につけることができます。
ぜひ、Bottleを使って自分のアイデアを形にしてみてください。