Flaskを使用してリンク短縮アプリケーションを構築するための完全かつ包括的なガイドを以下に示します。このガイドでは、PythonのFlaskフレームワークを使用して、リンクを短縮するシンプルなウェブアプリケーションを作成し、SQLiteデータベースを使用してリンク情報を管理します。
必要な環境と依存関係
まず、FlaskとSQLiteを使用するために、以下のパッケージをインストールする必要があります。これを行うには、以下のコマンドを使用して仮想環境を作成し、依存関係をインストールします。

bash# 仮想環境の作成
python3 -m venv venv
# 仮想環境のアクティブ化
source venv/bin/activate # Mac/Linuxの場合
venv\Scripts\activate # Windowsの場合
# 必要なパッケージのインストール
pip install flask flask_sqlalchemy
これで、FlaskとSQLite用のORMであるSQLAlchemyをインストールしました。
アプリケーション構造
アプリケーションは以下のような構造になります:
csharpurl_shortener/
├── app.py # メインのアプリケーションファイル
├── templates/ # HTMLテンプレートを格納するディレクトリ
│ ├── index.html # メインページ
│ └── result.html # リンク短縮結果ページ
├── static/ # 静的ファイル(CSS、JavaScript)
└── database.db # SQLiteデータベース
Flaskアプリケーションの作成
次に、app.py
という名前でFlaskアプリケーションのメインファイルを作成します。
pythonfrom flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
import random
import string
app = Flask(__name__)
# SQLiteデータベースの設定
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# データベースのインスタンス化
db = SQLAlchemy(app)
# URL短縮データベースモデル
class URL(db.Model):
id = db.Column(db.Integer, primary_key=True)
original_url = db.Column(db.String(2048), nullable=False)
short_url = db.Column(db.String(8), unique=True, nullable=False)
def __repr__(self):
return f'{self.original_url} >'
# データベースの作成
with app.app_context():
db.create_all()
# URL短縮のためのランダム文字列生成関数
def generate_short_url(length=8):
characters = string.ascii_letters + string.digits
return ''.join(random.choice(characters) for _ in range(length))
# メインページのルート
@app.route('/')
def index():
return render_template('index.html')
# URL短縮の処理
@app.route('/shorten', methods=['POST'])
def shorten():
original_url = request.form.get('original_url')
# URLが空でないか確認
if not original_url:
return "URLを入力してください", 400
# 既に同じURLが存在する場合
existing_url = URL.query.filter_by(original_url=original_url).first()
if existing_url:
return render_template('result.html', short_url=existing_url.short_url)
# 新しい短縮URLの生成
short_url = generate_short_url()
# URLをデータベースに保存
new_url = URL(original_url=original_url, short_url=short_url)
db.session.add(new_url)
db.session.commit()
return render_template('result.html', short_url=short_url)
# 短縮URLをリダイレクトするルート
@app.route('/' )
def redirect_to_url(short_url):
url_entry = URL.query.filter_by(short_url=short_url).first_or_404()
return redirect(url_entry.original_url)
if __name__ == '__main__':
app.run(debug=True)
説明
- Flaskの設定:
SQLALCHEMY_DATABASE_URI
でSQLiteのデータベースを設定し、SQLALCHEMY_TRACK_MODIFICATIONS
は不要な変更追跡を無効にしています。 - URLモデル:
URL
クラスで、original_url
とshort_url
を管理します。short_url
は一意でなければなりません。 - データベースの作成:
db.create_all()
を使用して、最初にデータベースを作成します。 - 短縮URL生成関数:
generate_short_url
は、指定された長さのランダムな英数字文字列を生成します。 - ルートの定義: メインページ(
/
)、URL短縮ページ(/shorten
)、短縮URLリダイレクト(/short_url
)のルートを定義します。
HTMLテンプレートの作成
次に、templates
ディレクトリ内に2つのHTMLテンプレートを作成します。
1. index.html
htmlhtml>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL短縮サービスtitle>
head>
<body>
<h1>URL短縮サービスh1>
<form action="/shorten" method="POST">
<label for="original_url">元のURL:label>
<input type="text" name="original_url" id="original_url" required>
<button type="submit">短縮button>
form>
body>
html>
2. result.html
htmlhtml>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>短縮URLの結果title>
head>
<body>
<h1>短縮URLが作成されましたh1>
<p>短縮されたURL: <a href="/{{ short_url }}" target="_blank">{{ short_url }}a>p>
<p><a href="/">新しいURLを短縮するa>p>
body>
html>
アプリケーションの実行
すべての設定が完了したら、次のコマンドを使用してFlaskアプリケーションを起動します。
bashpython app.py
ブラウザで http://127.0.0.1:5000
にアクセスし、URLを短縮することができます。
結論
このチュートリアルでは、Flaskを使ってURL短縮アプリケーションを作成し、SQLiteデータベースを使用して短縮URLとその元のURLを保存する方法を学びました。このアプリケーションはシンプルですが、必要に応じて機能を追加することができます(例: URLの有効期限設定、ユーザー認証機能など)。