プログラミング

FlaskでWebアプリを作る手順【個人開発入門】

読了時間: 約12分

Python Flaskは、個人開発に最適な軽量Webフレームワークです。シンプルな構造で学習コストが低く、小規模なWebアプリからREST APIまで幅広く対応できます。

この記事では、Flaskを使った個人開発の始め方を初心者向けに解説します。環境構築から実際にToDoアプリを作成し、無料でデプロイするまでの流れをステップバイステップで紹介します。

1. Flaskとは?なぜ個人開発に最適なのか

Flaskは、Pythonで書かれた「マイクロフレームワーク」です。必要最低限の機能だけを提供し、あとは必要に応じて拡張していくスタイルが特徴です。

Flaskが個人開発に向いている理由

  • 学習コストが低い: Python基礎があれば1週間で習得可能
  • 軽量でシンプル: 必要な機能だけを使える
  • 柔軟性が高い: 好きなライブラリを組み合わせられる
  • ドキュメントが豊富: 公式ドキュメント・日本語情報が充実
  • AI/MLとの相性が良い: PythonのAIライブラリをそのまま使える

Djangoと比較すると、Flaskは「小さく始めて必要に応じて拡張する」アプローチです。個人開発では、まずMVP(最小限の製品)を素早く作ることが重要なので、Flaskの軽量さは大きなメリットになります。

2. 環境構築

Step 1: Pythonのインストール確認

まず、Pythonがインストールされているか確認します。ターミナル(コマンドプロンプト)で以下を実行:

python --version
# Python 3.10.x など表示されればOK

Step 2: 仮想環境の作成

プロジェクトごとに仮想環境を作成することをおすすめします:

# プロジェクトフォルダを作成
mkdir my-flask-app
cd my-flask-app

# 仮想環境を作成
python -m venv venv

# 仮想環境を有効化(Mac/Linux)
source venv/bin/activate

# 仮想環境を有効化(Windows)
venv\Scripts\activate

Step 3: Flaskのインストール

pip install flask

インストール確認

pip list | grep Flask でFlaskが表示されれば準備完了です。

3. 最初のFlaskアプリを作る

最小構成のFlaskアプリを作成してみましょう。app.pyというファイルを作成します:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, Flask!'

@app.route('/about')
def about():
    return 'このサイトについて'

if __name__ == '__main__':
    app.run(debug=True)

アプリを実行

python app.py

ブラウザで http://127.0.0.1:5000/ にアクセスすると「Hello, Flask!」と表示されます。たったこれだけで最初のWebアプリが完成です。

コードの解説

  • @app.route('/'): URLパスとPython関数を紐付けるデコレータ
  • debug=True: 開発中は自動リロードとエラー表示が有効に

4. ToDoアプリを作成する

実践的なToDoアプリを作成してみましょう。HTMLテンプレートを使い、タスクの追加・表示ができるアプリを作ります。

フォルダ構造

my-flask-app/
├── app.py
├── templates/
│   └── index.html
└── static/
    └── style.css

app.py

from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)

# タスクを保存するリスト(本番ではDBを使用)
tasks = []

@app.route('/')
def index():
    return render_template('index.html', tasks=tasks)

@app.route('/add', methods=['POST'])
def add_task():
    task = request.form.get('task')
    if task:
        tasks.append(task)
    return redirect(url_for('index'))

@app.route('/delete/<int:index>')
def delete_task(index):
    if 0 <= index < len(tasks):
        tasks.pop(index)
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

templates/index.html

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ToDoアプリ</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <h1>ToDoリスト</h1>

    <form action="/add" method="POST">
        <input type="text" name="task" placeholder="タスクを入力">
        <button type="submit">追加</button>
    </form>

    <ul>
        {% for task in tasks %}
        <li>
            {{ task }}
            <a href="/delete/{{ loop.index0 }}">削除</a>
        </li>
        {% endfor %}
    </ul>
</body>
</html>

これで、タスクの追加・削除ができるToDoアプリの完成です。Jinja2テンプレートエンジンを使ってHTMLを動的に生成しています。

5. データベース連携

実際のアプリでは、データをデータベースに保存します。SQLAlchemyを使ってSQLiteと連携する方法を紹介します。

Flask-SQLAlchemyのインストール

pip install flask-sqlalchemy

データベース設定を追加

from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tasks.db'
db = SQLAlchemy(app)

class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(200), nullable=False)

with app.app_context():
    db.create_all()

@app.route('/')
def index():
    tasks = Task.query.all()
    return render_template('index.html', tasks=tasks)

@app.route('/add', methods=['POST'])
def add_task():
    content = request.form.get('task')
    if content:
        new_task = Task(content=content)
        db.session.add(new_task)
        db.session.commit()
    return redirect(url_for('index'))

@app.route('/delete/<int:id>')
def delete_task(id):
    task = Task.query.get_or_404(id)
    db.session.delete(task)
    db.session.commit()
    return redirect(url_for('index'))

SQLAlchemyを使うことで、SQLを直接書かずにPythonオブジェクトとしてデータを操作できます。アプリを再起動してもデータが保持されます。

6. 無料でデプロイする

作成したアプリをインターネットに公開しましょう。Renderを使えば無料でデプロイできます。

準備するファイル

requirements.txt(依存パッケージ一覧):

Flask==3.0.0
Flask-SQLAlchemy==3.1.1
gunicorn==21.2.0

Procfile(起動コマンド):

web: gunicorn app:app

デプロイ手順

  1. GitHubにリポジトリを作成してコードをpush
  2. Renderにアカウント登録
  3. 「New Web Service」→ GitHubリポジトリを選択
  4. Build Command: pip install -r requirements.txt
  5. Start Command: gunicorn app:app
  6. 「Create Web Service」をクリック

無料デプロイの選択肢

  • Render: 無料枠あり、自動デプロイ対応
  • Railway: 月$5分の無料クレジット
  • PythonAnywhere: 初心者向け、日本語情報多め

7. 個人開発アイデア5選

Flaskで作れる個人開発アイデアを紹介します。ポートフォリオにも使えます。

1. ブックマーク管理アプリ

URLとタグを保存し、検索できるアプリ。CRUD操作の練習に最適。

2. 短縮URL生成サービス

長いURLを短縮して保存。リダイレクト処理の学習に。

3. 画像分類API

TensorFlowと連携し、画像をアップロードすると分類結果を返すAPI。AI連携の練習に。

4. シンプルなブログ

Markdown対応のブログシステム。認証機能も追加できる。

5. 天気情報取得API

外部APIを呼び出して天気情報を返すRESTful API。API連携の練習に。

8. よくある質問(FAQ)

Q. Flaskは初心者でも使えますか?

はい、初心者に最適です。Pythonの基本文法を知っていれば、数時間で最初のアプリを動かせます。

Q. FlaskとDjangoどちらを選ぶべき?

個人開発や小〜中規模のプロジェクトならFlaskがおすすめです。Djangoは大規模アプリ向けで学習コストが高めです。

Q. Flaskで作れるアプリの例は?

ToDoアプリ、ブログ、REST API、チャットアプリ、機械学習APIなど様々なWebアプリを作成できます。

Q. Flaskアプリを無料でデプロイするには?

Render、Railway、PythonAnywhereなどで無料デプロイが可能です。

Q. Flaskの学習にどれくらい時間がかかる?

Python基礎があれば、Flaskの基本は1週間程度で習得できます。

9. まとめ

この記事のポイント

  • 1. Flaskは軽量で学習コストが低い個人開発向けフレームワーク
  • 2. 最小構成のアプリは数行のコードで作成可能
  • 3. SQLAlchemyでデータベース連携も簡単
  • 4. Renderなどで無料デプロイが可能
  • 5. Python AIライブラリとの連携でAIアプリも作れる

Flaskは、「まずは動くものを作る」という個人開発のマインドセットにぴったりのフレームワークです。この記事で紹介したToDoアプリをベースに、自分のアイデアを形にしてみてください。

次のステップとして、REST APIの構築やAI機能の追加に挑戦してみるのもおすすめです。

関連記事