概要
Ruby on Rails, CakePHP, LaravelといったWebアプリケーションフレームワークには標準でデータベースマイグレーションツールが包含されている。
一方でデータベースマイグレーションをwebアプリケーションと別に管理したいケースもある。別に管理するためにはフレームワークに包含されているツールよりも、スタンドアロンで利用可能なツールの方が良い。本記事ではスタンドアロンで利用可能なデータベースマイグレーションツールを比較してみる。
データベースマイグレーションとは何か
データベースマイグレーションはRDBMSのdatabase・スキーマ定義をコード化し、テーブル・インデックス更新を自動化することである。主に下記を実施することができる。
- databaseの作成
- テーブルの作成・更新
- インデックスの作成・更新
- DBスキーマのバージョン管理(過去に実行されたSQLが特定のテーブルに保存される)
DBマイグレーションツール一覧
選定条件
- OSSである。
- スタンドアロンで導入、運用保守が可能である。
- GitHubやBitBucketでソースコードが公開されている、かつスター100以上である。(BitBucketはスタートがないため考慮しない)
- ライセンスが緩めである。(BSD,MIT,Apache2.0,etc...)
- ドキュメントが存在する。
ツール名 | 動作環境 | ライセンス | DSL/RawSQLのサポート | サポート対象RDBMS | ドキュメント |
---|---|---|---|---|---|
MyBatis Migration | Java | Apache2.0 | RawSQLのみ | JDBCドライバーが存在する RDBMS全て |
あり |
liquibase | Java | Apache2.0 | 両方 | MySQL,
PostgreSQL, Oracle, Sql Server, Sybase_Enterprise, Sybase_Anywhere, DB2 , Apache_Derby derby, HSQL, H2, Informix, Firebird, SQLite |
あり |
Flyway | Java | Apache2.0 | 両方 | Oracle,
SQL Server,
Aurora MySQL,
MariaDB, Percona XtraDB Cluster, PostgreSQL, Aurora PostgreSQL, Redshift, CockroachDB, SAP HANA, Sybase ASE, Informix, H2, HSQLDB, Derby and SQLite |
あり |
phpmig | PHP | None | RawSQLのみ | MySQL,
MariaDB, PostgreSQL |
GitHubのREADMEのみ |
phinx | PHP | MIT | 両方 | ? | あり |
ridgepole | Ruby | MIT | 両方 | RDBクライアント用 Gemが存在するRDBMS全て |
GitHubのREADMEのみ |
migrate | Go | MIT | DSLのみ |
SQLite3, PostgreSQL, MySQL, SQL Server, Cassandra, RedShift, |
あり |
sql-migrate | Go | MIT | 両方 |
SQLite, PostgreSQL, MySQL, SQL Server, Oracle |
GitHubのREADMEのみ |
goose | Go | MIT | 両方 | postgres, mysql, sqlite3 |
BitBucketのREADMEのみ |
alembic | Python | MIT | 両方 |
MySQL,
SQLServer, Postgresql, SQLite |
あり |
simple-db-migrate | Python | Apache2.0 | RawSQLのみ | MySQL,
SQLServer, Oracle |
GitHubのREADMEのみ |
yoyo-migrations | Python | Apache2.0 | 両方 | MySQL,
SQLServer, Postgresql, SQLite |
あり |
db-migrate | node.js | MIT | 両方 |
Mysql,
PostgreSQL, sqlite3, Mongodb |
あり |
node-pg-migrate | node.js | MIT | 両方 | PostgreSQL | あり |
dbmate | Go, Node.js, Python, Ruby, PHP, Rust, C++, etc. | MIT | 両方 | MySQL, PostgreSQL, SQLite, ClickHouse | GitHubのREADMEのみ |
(参考)
https://qiita.com/nownabe/items/1acce9f6b9f14f74c965
https://qiita.com/k-motoyan/items/6f64d650f14bfb180e54
https://qiita.com/narikei/items/8a71c5439edc9cb66550
https://qiita.com/okoppe8/items/c9f8372d5ac9a9679396