[Python] Bottleで初めてのHello Worldページを作成する
Bottleは軽量なPythonのWebフレームワークで、シンプルなWebアプリケーションを素早く作成できます。
Hello Worldページを作成するには、まずBottleをインストールし、次に基本的なルーティングを設定します。
@route('/')
デコレータを使ってルートURLにアクセスした際に表示する内容を定義し、run()メソッド
でサーバーを起動します。
これにより、ブラウザで Hello World
を表示する簡単なWebページが作成されます。
Bottleとは?
Bottleは、Pythonで書かれたシンプルで軽量なWebアプリケーションフレームワークです。
単一のファイルで構成されており、簡単に使えるため、特に小規模なアプリケーションやプロトタイプの開発に適しています。
Bottleは、WSGI(Web Server Gateway Interface)に準拠しており、さまざまなWebサーバーで動作します。
Bottleの特徴
特徴 | 説明 |
---|---|
軽量 | Bottleは単一のファイルで構成されており、依存関係が少ないため、非常に軽量です。 |
シンプルなAPI | 直感的なAPIを提供しており、初心者でも簡単に使い始めることができます。 |
WSGI準拠 | WSGIに準拠しているため、さまざまなサーバーで動作します。 |
テンプレートエンジン | 内蔵のテンプレートエンジンを使用して、動的なHTMLを生成できます。 |
静的ファイルの配信 | 静的ファイル(CSS、JavaScript、画像など)の配信が簡単に行えます。 |
他のフレームワークとの違い
Bottleは、FlaskやDjangoなどの他のWebフレームワークと比較して、以下のような違いがあります。
フレームワーク名 | 特徴 |
---|---|
Bottle | 軽量でシンプル、単一ファイルで構成される。 |
Flask | 拡張性が高く、プラグインが豊富。 |
Django | フルスタックフレームワークで、管理画面やORMが組み込まれている。 |
Bottleの用途
Bottleは、以下のような用途に適しています。
用途 | 説明 |
---|---|
プロトタイプ開発 | 短期間でのプロトタイプ作成に最適です。 |
小規模なWebアプリ | 小規模なアプリケーションやAPIの構築に向いています。 |
学習用 | PythonのWeb開発を学ぶための良い選択肢です。 |
静的サイトの配信 | 静的なコンテンツを簡単に配信できます。 |
Bottleのインストール
Bottleを使用するためには、まず必要な環境を整え、インストールを行う必要があります。
以下にその手順を詳しく説明します。
必要な環境
Bottleをインストールするためには、以下の環境が必要です。
環境 | 説明 |
---|---|
Python | Python 3.xがインストールされていること。 |
pip | Pythonのパッケージ管理ツールであるpipが必要。 |
テキストエディタ | コードを書くためのエディタ(例:VSCode、PyCharmなど)。 |
Bottleのインストール手順
Bottleのインストールは、pipを使用して簡単に行えます。
以下の手順に従ってください。
- コマンドラインを開く: Windowsでは
cmd
、macOSやLinuxでは「ターミナル」を開きます。 - Bottleをインストール: 以下のコマンドを入力して実行します。
pip install bottle
- インストールの確認: インストールが成功したかどうかを確認します。
インストール確認方法
Bottleが正しくインストールされたかを確認するためには、以下の手順を実行します。
- Pythonインタプリタを起動: コマンドラインで以下のコマンドを入力します。
python
- Bottleをインポート: Pythonインタプリタ内で以下のコードを入力します。
import bottle
print(bottle.__version__)
- 出力結果の確認: Bottleのバージョンが表示されれば、インストールは成功しています。
出力例は以下の通りです。
0.13.1
このようにして、Bottleのインストールと確認が完了します。
これでBottleを使ったWebアプリケーションの開発を始める準備が整いました。
Hello Worldページの作成
Bottleを使って、最初の Hello World
ページを作成してみましょう。
以下の手順に従って、簡単なWebアプリケーションを構築します。
プロジェクトの準備
まず、プロジェクト用のディレクトリを作成します。
以下の手順で準備を進めてください。
- 新しいディレクトリを作成: コマンドラインで以下のコマンドを実行します。
mkdir hello_bottle
cd hello_bottle
- Pythonファイルを作成: 任意のテキストエディタで
app.py
という名前のファイルを作成します。
最小限のコード構成
次に、app.py
に以下の最小限のコードを記述します。
from bottle import Bottle, run
app = Bottle()
@app.route('/')
def hello():
return "Hello, World!"
run(app, host='localhost', port=8080)

このコードは、Bottleをインポートし、アプリケーションを作成して、ルートURL/
にアクセスした際に Hello, World!
と表示するものです。
@routeデコレータの使い方
@route
デコレータは、特定のURLパスに対する処理を定義するために使用します。
上記のコードでは、@app.route('/')
がルートURLに対する処理を指定しています。
デコレータを使うことで、関数を簡単にURLに関連付けることができます。
サーバーの起動方法
次に、Bottleのサーバーを起動します。
コマンドラインで以下のコマンドを実行します。
python app.py
これにより、Bottleの開発用サーバーが起動し、localhost:8080
でアプリケーションが実行されます。
ブラウザでの確認
サーバーが起動したら、Webブラウザを開き、アドレスバーに以下のURLを入力します。
http://localhost:8080
ブラウザに Hello, World!
と表示されれば、Bottleを使った最初のWebアプリケーションが成功したことになります。
これで、Bottleの基本的な使い方を理解できました。
次のステップに進む準備が整いました。
Bottleの基本的なルーティング
Bottleでは、URLパスに基づいて異なる処理を行うことができます。
これを「ルーティング」と呼びます。
以下に、Bottleの基本的なルーティングの使い方を説明します。
URLパスの設定
URLパスを設定するには、@route
デコレータを使用します。
以下の例では、異なるURLパスに対して異なる関数を定義しています。
from bottle import Bottle, run
app = Bottle()
@app.route('/')
def home():
return "ホームページ"
@app.route('/about')
def about():
return "このアプリケーションについて"
run(app, host='localhost', port=8080)
このコードでは、/
にアクセスすると「ホームページ」、/about
にアクセスすると「このアプリケーションについて」と表示されます。
パラメータの受け渡し
URLパスにパラメータを含めることもできます。
以下の例では、ユーザー名をURLから受け取る方法を示します。
@app.route('/hello/<name>')
def greet(name):
return f"こんにちは、{name}さん!"
run(app, host='localhost', port=8080)
このコードでは、/hello/太郎
のようにアクセスすると、「こんにちは、太郎さん!」と表示されます。
<name>
の部分がパラメータとして受け取られます。
GETリクエストの処理
GETリクエストは、URLを通じてデータを取得するために使用されます。
以下の例では、クエリパラメータを使ってデータを受け取ります。
@app.route('/greet')
def greet_user():
name = bottle.request.query.name or "ゲスト"
return f"こんにちは、{name}さん!"
run(app, host='localhost', port=8080)
このコードでは、/greet?name=太郎
のようにアクセスすると、「こんにちは、太郎さん!」と表示されます。
クエリパラメータが指定されていない場合は「ゲスト」と表示されます。
POSTリクエストの処理
POSTリクエストは、データをサーバーに送信するために使用されます。
以下の例では、フォームからデータを受け取る方法を示します。
from bottle import request
@app.route('/submit', method='POST')
def submit_form():
name = request.forms.get('name')
return f"こんにちは、{name}さん!"
run(app, host='localhost', port=8080)
このコードでは、HTMLフォームから送信されたデータを受け取り、ユーザーに挨拶を返します。
フォームの例は以下の通りです。
<form action="/submit" method="post">
名前: <input type="text" name="name">
<input type="submit" value="送信">
</form>
このようにして、Bottleを使った基本的なルーティングの方法を学ぶことができました。
これを基に、さらに複雑なアプリケーションを構築することができます。
テンプレートを使ったページ作成
Bottleでは、テンプレートエンジンを使用して動的なHTMLページを作成することができます。
これにより、コードの再利用性が高まり、アプリケーションの保守が容易になります。
以下に、テンプレートを使ったページ作成の方法を説明します。
テンプレートエンジンの概要
Bottleには、内蔵のテンプレートエンジンであるSimpleTemplate
が用意されています。
このテンプレートエンジンを使用することで、HTMLファイルにPythonの変数やロジックを埋め込むことができます。
テンプレートを使うことで、HTMLの構造を分離し、コードの可読性を向上させることができます。
テンプレートファイルの作成
まず、テンプレートファイルを作成します。
プロジェクトディレクトリ内にviews
というフォルダを作成し、その中にhello.html
というファイルを作成します。
以下の内容をhello.html
に記述します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>挨拶ページ</title>
</head>
<body>
<h1>こんにちは、{{ name }}さん!</h1>
</body>
</html>
このテンプレートでは、{{ name }}
の部分が動的に置き換えられる変数です。
テンプレートの読み込みと表示
次に、Bottleでテンプレートを読み込み、表示するためのコードをapp.py
に追加します。
以下のように記述します。
from bottle import Bottle, run, template
app = Bottle()
@app.route('/greet/<name>')
def greet(name):
return template('views/hello', name=name)
run(app, host='localhost', port=8080)

このコードでは、/greet/<name>
にアクセスすると、指定された名前を使ってhello.html
テンプレートが表示されます。
動的なコンテンツの表示
テンプレートを使用することで、動的なコンテンツを簡単に表示できます。
例えば、複数の変数をテンプレートに渡すことも可能です。
以下のように、複数の変数を使った例を示します。
@app.route('/greet/<name>/<age>')
def greet_user(name, age):
return template('views/hello', name=name, age=age)
# hello.htmlの内容を以下のように変更
<h1>こんにちは、{{ name }}さん!あなたは{{ age }}歳です。</h1>
このように、/greet/太郎/25
のようにアクセスすると、「こんにちは、太郎さん!あなたは25歳です。」と表示されます。

テンプレートを使うことで、動的なコンテンツを簡単に生成できることがわかります。
これで、Bottleを使ったテンプレートの基本的な使い方を理解できました。
テンプレートを活用することで、より複雑で魅力的なWebアプリケーションを作成することができます。
静的ファイルの配信
Bottleを使用してWebアプリケーションを構築する際、静的ファイル(CSS、JavaScript、画像など)を配信することがよくあります。
ここでは、静的ファイルの配信方法について説明します。
静的ファイルとは?
静的ファイルとは、サーバーからクライアントにそのまま配信されるファイルのことを指します。
これには、以下のようなファイルが含まれます。
ファイルタイプ | 説明 |
---|---|
CSS | スタイルシートファイルで、Webページのデザインを定義します。 |
JavaScript | クライアントサイドのスクリプトで、Webページの動的な動作を実現します。 |
画像ファイル | PNG、JPEG、GIFなどの画像ファイルで、Webページにビジュアルコンテンツを提供します。 |
静的ファイルの配置場所
Bottleでは、静的ファイルを特定のディレクトリに配置することが推奨されます。
一般的には、プロジェクトのルートディレクトリ内にstatic
というフォルダを作成し、その中に静的ファイルを配置します。
以下のような構成になります。
hello_bottle
│
├── app.py
├── views
│ └── hello.html
└── static
├── style.css
└── script.js
静的ファイルのルーティング設定
静的ファイルを配信するためには、Bottleでルーティングを設定する必要があります。
以下のように、app.py
に静的ファイルのルーティングを追加します。
from bottle import Bottle, run, template, static_file
app = Bottle()
@app.route('/static/<filepath:path>')
def server_static(filepath):
return static_file(filepath, root='./static')
@app.route('/greet/<name>')
def greet(name):
return template('views/hello', name=name)
run(app, host='localhost', port=8080)
このコードでは、/static/<filepath:path>
というルートを設定し、static_file関数
を使って静的ファイルを配信します。
これにより、http://localhost:8080/static/style.css
のようにアクセスすることで、CSSファイルを取得できるようになります。
静的ファイルをHTMLテンプレートに組み込むには、以下のように<link>
や<script>
タグを使用します。
<link rel="stylesheet" type="text/css" href="/static/style.css">
<script src="/static/script.js"></script>
このようにして、Bottleを使った静的ファイルの配信が可能になります。
静的ファイルを適切に管理することで、Webアプリケーションの見た目や動作を向上させることができます。
Bottleアプリケーションのデプロイ
Bottleアプリケーションを開発した後は、実際にユーザーがアクセスできるようにデプロイする必要があります。
ここでは、デプロイの方法や注意点について説明します。
開発環境と本番環境の違い
開発環境と本番環境にはいくつかの重要な違いがあります。
環境 | 説明 |
---|---|
開発環境 | 開発者がアプリケーションを作成・テストするための環境。デバッグが容易で、エラーメッセージが詳細に表示される。 |
本番環境 | 実際のユーザーがアクセスする環境。セキュリティやパフォーマンスが重視され、エラーメッセージは一般的に表示されない。 |
本番環境では、アプリケーションの安定性やセキュリティを確保するために、適切な設定や監視が必要です。
WSGIサーバーでのデプロイ
BottleはWSGI(Web Server Gateway Interface)に準拠しているため、WSGIサーバーを使用してデプロイすることができます。
一般的なWSGIサーバーには、GunicornやuWSGIがあります。
以下は、Gunicornを使用したデプロイの手順です。
- Gunicornのインストール: コマンドラインで以下のコマンドを実行します。
pip install gunicorn
- アプリケーションの起動: 以下のコマンドを実行して、アプリケーションを起動します。
gunicorn app:app -b 0.0.0.0:8000
ここで、app:app
はapp.py
内のBottleアプリケーションのインスタンスを指します。
- ブラウザでの確認:
http://localhost:8000
にアクセスして、アプリケーションが正しく動作しているか確認します。
Herokuを使ったデプロイ
Herokuは、簡単にアプリケーションをデプロイできるクラウドプラットフォームです。
以下は、Herokuを使ったデプロイの手順です。
- Heroku CLIのインストール: Heroku CLIをインストールします。
- Herokuアカウントの作成: Herokuのウェブサイトでアカウントを作成します。
- アプリケーションの作成: コマンドラインで以下のコマンドを実行します。
heroku create
- Procfileの作成: プロジェクトのルートディレクトリに
Procfile
というファイルを作成し、以下の内容を記述します。
web: gunicorn app:app
- アプリケーションのデプロイ: 以下のコマンドを実行して、アプリケーションをHerokuにデプロイします。
git add .
git commit -m "Deploy to Heroku"
git push heroku master
- アプリケーションの起動: デプロイが完了したら、以下のコマンドでアプリケーションを起動します。
heroku open
他のクラウドサービスでのデプロイ
Bottleアプリケーションは、他のクラウドサービスでもデプロイ可能です。
以下は、一般的なクラウドサービスの例です。
サービス名 | 説明 |
---|---|
AWS Elastic Beanstalk | AmazonのPaaSで、簡単にアプリケーションをデプロイできます。 |
Google Cloud Run | Googleのコンテナベースのサービスで、Dockerコンテナを使ってデプロイできます。 |
DigitalOcean App Platform | シンプルなインターフェースでアプリケーションをデプロイできるサービスです。 |
これらのサービスでは、各サービスのドキュメントに従ってデプロイを行うことができます。
デプロイ先の選択は、アプリケーションの要件や予算に応じて行うと良いでしょう。
以上が、Bottleアプリケーションのデプロイに関する基本的な情報です。
適切な環境でアプリケーションを運用することで、ユーザーに快適な体験を提供することができます。
Bottleの応用例
Bottleはシンプルなフレームワークですが、さまざまな機能を活用することで、より複雑なアプリケーションを構築することができます。
ここでは、Bottleの応用例をいくつか紹介します。
フォームのデータ送信と処理
Bottleを使用して、HTMLフォームからデータを送信し、処理することができます。
以下は、ユーザー名を入力するフォームの例です。
from bottle import Bottle, run, request, template
app = Bottle()
@app.route('/')
def form():
return '''
<form action="/submit" method="post">
名前: <input type="text" name="name">
<input type="submit" value="送信">
</form>
'''
@app.route('/submit', method='POST')
def submit():
name = request.forms.get('name')
return f"こんにちは、{name}さん!"
run(app, host='localhost', port=8080)
このコードでは、ユーザーが名前を入力して送信すると、挨拶が表示されます。
JSON APIの作成
Bottleを使って、JSON形式のAPIを作成することも可能です。
以下は、簡単なJSON APIの例です。
from bottle import Bottle, run, response
app = Bottle()
@app.route('/api/greet/<name>')
def greet_api(name):
response.content_type = 'application/json'
return {'message': f'こんにちは、{name}さん!'}
run(app, host='localhost', port=8080)
このAPIに/api/greet/太郎
のようにアクセスすると、以下のようなJSONレスポンスが返されます。
{"message": "こんにちは、太郎さん!"}
セッション管理の実装
Bottleでは、セッション管理を行うためにbeaker
ライブラリを使用することができます。
以下は、セッションを使った簡単な例です。
- beakerのインストール:
pip install beaker
- セッション管理の実装:
from bottle import Bottle, run, request, response
from beaker.middleware import SessionMiddleware
app = Bottle()
# セッションの設定
session_opts = {
'session.auto': True,
'session.type': 'file',
'session.data_dir': './data/sessions',
'session.auto': True,
}
app = SessionMiddleware(app, session_opts)
@app.route('/set/<name>')
def set_session(name):
session = request.environ.get('beaker.session')
session['name'] = name
session.save()
return f"セッションに{name}を保存しました。"
@app.route('/get')
def get_session():
session = request.environ.get('beaker.session')
name = session.get('name', 'ゲスト')
return f"こんにちは、{name}さん!"
run(app, host='localhost', port=8080)
このコードでは、/set/太郎
にアクセスすると、セッションに名前が保存され、/get
にアクセスすると、その名前が表示されます。
データベースとの連携
Bottleは、SQLiteやMySQLなどのデータベースと連携することができます。
以下は、SQLiteを使用した簡単なデータベースの例です。
- SQLiteのインストール:
pip install sqlite3
- データベースとの連携:
import sqlite3
from bottle import Bottle, run, request
app = Bottle()
# データベースの初期化
def init_db():
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)')
conn.commit()
conn.close()
@app.route('/add', method='POST')
def add_user():
name = request.forms.get('name')
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute('INSERT INTO users (name) VALUES (?)', (name,))
conn.commit()
conn.close()
return f"{name}をデータベースに追加しました。"
@app.route('/users')
def list_users():
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute('SELECT * FROM users')
users = c.fetchall()
conn.close()
return str(users)
init_db()
run(app, host='localhost', port=8080)
このコードでは、/add
にPOSTリクエストを送信すると、ユーザー名がデータベースに追加され、/users
にアクセスすると、データベースに保存されたユーザーのリストが表示されます。
以上が、Bottleの応用例です。
これらの機能を組み合わせることで、より複雑で機能的なWebアプリケーションを構築することができます。
まとめ
この記事では、Bottleを使ったWebアプリケーションの基本的な使い方から、応用例まで幅広く紹介しました。
Bottleはシンプルで軽量なフレームワークであり、小規模なプロジェクトやAPIの構築に特に適していますが、さまざまな機能を活用することで、より複雑なアプリケーションにも対応可能です。
これを機に、Bottleを使って自分自身のWebアプリケーションを作成してみることをお勧めします。