【初心者向け】Alembic入門：SQLAlchemyとデータベースマイグレーションを始めよう

# はじめに
最近、筆者はWeb開発の勉強として個人開発をしています。話題のClaude 3.7 sonnetを用いて色々やっていた時、**Alembic**といった単語が急に出てきました。これは何だと思いながら、とりあえず調べて少し理解しないと開発が進められなかったので、まとめるに至りました。
ソフトウェア開発の現場では、時間の経過とともに変化するデータベースのスキーマ（構造）を管理するのが難しい場合があります。**Alembic**は、PythonのSQLAlchemy向けの軽量なデータベースマイグレーションツールで、これらのスキーマ変更を体系的に管理するのに役立ちます。Alembicを使うことで、テーブルの追加や変更などをバージョン管理しながら実行し、アプリケーションコードとデータベースの同期を取りやすくします。手動による更新ミスや不整合を防ぎながら、着実にデータベースを進化させることが可能です。

## Alembicとは？

Alembicは、SQLAlchemyのオブジェクトリレーショナルマッパー（ORM）と併用して、データベースのスキーマ変更（マイグレーション）を管理するためのツールです。SQLAlchemyの作者によって開発され、アップグレードやダウングレードを行うための仕組みが整っています。スキーマ変更を段階的に管理し、手動でデータベースを操作するのではなく、バージョンを追って確実に更新できるのが特長です。

### データベースマイグレーションとは？

**データベースマイグレーション**とは、データベースの構造（スキーマ）を段階的かつ管理された形で変更していくことを指します。以下のような操作を、手動ではなくスクリプト（コード）によって記述し、トラブルを最小限に抑えながら進めます。

- 新しいテーブルの追加  
- カラムのデータ型や制約の変更  
- 不要になったカラムの削除  

こうした変更を適切に履歴管理し、**アップグレード**と**ダウングレード**の両方を行えるようにすることで、データベースの整合性を保ちつつ変更を重ねられます。

## インストールと初期設定

Alembicはpipを使ってインストールできます。ターミナルで次のコマンドを実行してください。

```
pip install alembic
```

インストールが完了したら、プロジェクトディレクトリでAlembicの初期化を行います。プロジェクトのルートディレクトリ（SQLAlchemyのモデルやデータベース関連のコードが置かれている場所）で、以下のコマンドを実行します。

```
alembic init alembic
```

このコマンドを実行すると、`alembic`というディレクトリが生成され、同時に`alembic.ini`という設定ファイルが作成されます。Alembicの環境やバージョン情報を管理するスクリプト類もこのディレクトリ内に格納されます。マイグレーションを実行する前に、`alembic.ini`内のデータベース接続情報と、`alembic/env.py`ファイルにあるSQLAlchemyモデルのメタデータの設定を確認しておきましょう。

## マイグレーションの作成と適用

### 1. マイグレーションスクリプトの作成

新しいマイグレーション（スキーマ変更の単位）を作成するには、`alembic revision`コマンドを使用します。以下の例では、ユーザー用のテーブルを作成するマイグレーションスクリプトを生成します。

```
alembic revision --autogenerate -m "create users table"
```

上記の`-m`オプションにはマイグレーションの概要を記述し、`--autogenerate`フラグを付けると、現在のデータベースやSQLAlchemyモデルとの比較情報をもとに自動生成を行います。コマンド実行後、`alembic/versions`ディレクトリに新しいファイルが作成されます。ファイル名にはユニークなIDと、先ほど指定したメッセージが含まれます。作成されたスクリプトの中身を確認し、必要に応じて修正すると良いでしょう。

### 2. マイグレーションの適用

作成したマイグレーションスクリプトをデータベースに適用し、スキーマを更新するには、`alembic upgrade`コマンドを実行します。

```
alembic upgrade head
```

Alembicでは**`head`**というキーワードが、最新のマイグレーション（最終的なバージョン）を指します。このコマンドによって、新しく作成したマイグレーションが適用され、データベースのスキーマが最新状態にアップグレードされます。

## よく使われるコマンド一覧

| コマンド                                 | 説明                                                                       |
|------------------------------------------|----------------------------------------------------------------------------|
| `alembic init alembic`                   | Alembicの初期設定を行い、必要なファイルやディレクトリを生成する            |
| `alembic revision -m "メッセージ"`       | 新しいマイグレーションスクリプトを作成する（`--autogenerate`で自動生成も可）|
| `alembic upgrade head`                   | すべての未適用マイグレーションを実行して、データベースを最新にアップグレード |
| `alembic downgrade -1`                   | 直前のマイグレーションを取り消し、1つ前のバージョンにダウングレードする     |
| `alembic history`                        | マイグレーションの履歴を一覧表示し、各リビジョンのIDやメッセージを確認する   |

たとえば、最近加えた変更を取り消したいときは`alembic downgrade -1`を使うことで、最新バージョンからひとつ前の状態に戻せます。`alembic history`コマンドは、これまでのマイグレーション履歴を確認したり、各バージョンが適用済みかどうかを調べたりするのに便利です。

## まとめ

Alembicを使うことで、Pythonアプリケーションのデータベーススキーマを安全かつ管理しやすい方法で更新できます。マイグレーションスクリプトをバージョン管理することにより、コードの変更と連動しながらデータベース構造を進化させることが可能です。本記事では、Alembicの基本的な使い方として、インストール・初期設定・マイグレーションの作成方法・よく使うコマンドなどを紹介しました。実際にプロジェクトに導入し、複数回スキーマ変更を行いながら操作に慣れていくことで、Alembicの恩恵を最大限に得られるようになるでしょう。


## 参考文献

- [Alembic Official Documentation](https://alembic.sqlalchemy.org/en/latest/) 
- [SQLAlchemy Official Documentation](https://github.com/sqlalchemy/alembic)