2024年度最新版スタンドアロンDBマイグレーションツールOSSの比較

# 概要
Ruby on Rails, CakePHP, LaravelといったWebアプリケーションフレームワークには標準でデータベースマイグレーションツールが包含されている。
一方でデータベースマイグレーションをwebアプリケーションと別に管理したいケースもある。別に管理するためにはフレームワークに包含されているツールよりも、スタンドアロンで利用可能なツールの方が良い。本記事ではスタンドアロンで利用可能なデータベースマイグレーションツールを比較してみる。

# データベースマイグレーションとは何か
データベースマイグレーションはRDBMSのdatabase・スキーマ定義をコード化し、テーブル・インデックス更新を自動化することである。主に下記を実施することができる。
- databaseの作成
- テーブルの作成・更新
- インデックスの作成・更新
- DBスキーマのバージョン管理(過去に実行されたSQLが特定のテーブルに保存される)

# DBマイグレーションツール一覧
選定条件 
* OSSである。
* スタンドアロンで導入、運用保守が可能である。
* GitHubやBitBucketでソースコードが公開されている、かつスター100以上である。(BitBucketはスタートがないため考慮しない)
* ライセンスが緩めである。(BSD,MIT,Apache2.0,etc...)
* ドキュメントが存在する。

<table>
<tr>
  <th width="50">ツール名</th>
  <th width="50">動作環境</th>
  <th width="50">ライセンス</th>
  <th width="50">DSL/RawSQLのサポート</th>
  <th width="50">サポート対象RDBMS</th>
  <th width="50">ドキュメント</th>
</tr>
<tr>
  <td><a href="https://github.com/mybatis/migrations">MyBatis Migration</a></td>
  <td>Java</td>
  <td>Apache2.0</td>
  <td>RawSQLのみ</td>
  <td>JDBCドライバーが存在する<br>RDBMS全て</td>
  <td><a href="http://www.mybatis.org/migrations/">あり</a></td>
</tr>
<tr>
  <td><a href="https://github.com/liquibase/liquibase">liquibase</a></td>
  <td>Java</td>
  <td>Apache2.0</td>
  <td>両方</td>
  <td>MySQL,
PostgreSQL,<br>	
Oracle,
Sql Server,<br>
Sybase_Enterprise,
Sybase_Anywhere,<br>
DB2	,
Apache_Derby<br>
derby,
HSQL,<br>
H2,
Informix,<br>
Firebird,
SQLite</td>
  <td><a href="http://www.liquibase.org/">あり</a></td>
</tr>
<tr>
  <td><a href="https://github.com/flyway/flyway">Flyway</a></td>
  <td>Java</td>
  <td>Apache2.0</td>
  <td>両方</td>
  <td>Oracle, 
 SQL Server,
  Aurora MySQL, 
  MariaDB, <br>
  Percona XtraDB Cluster, 
  PostgreSQL,<br>
  Aurora PostgreSQL, 
  Redshift, <br>
  CockroachDB, 
  SAP HANA, <br>
  Sybase ASE, 
  Informix, <br>
  H2, 
  HSQLDB, <br>
  Derby and SQLite</td>
  <td><a href="https://flywaydb.org/documentation/">あり</a></td>
</tr>
<tr>
  <td><a href="https://github.com/davedevelopment/phpmig">phpmig</a></td>
  <td>PHP</td>
  <td>None</td>
  <td>RawSQLのみ</td>
  <td>MySQL,
MariaDB,<br>
PostgreSQL</td>
  <td><a href="https://github.com/davedevelopment/phpmig">GitHubのREADMEのみ</a></td>
</tr>
<tr>
  <td><a href="https://github.com/cakephp/phinx">phinx</a></td>
  <td>PHP</td>
  <td>MIT</td>
  <td>両方</td>
  <td>?</td>
  <td><a href="https://www.phenix-online.org/documentation/">あり</a></td>
</tr>
<tr>
  <td><a href="https://github.com/winebarrel/ridgepole">ridgepole</a></td>
  <td>Ruby</td>
  <td>MIT</td>
  <td>両方</td>
  <td>RDBクライアント用<br>Gemが存在するRDBMS全て</td>
  <td><a href="https://github.com/winebarrel/ridgepole">GitHubのREADMEのみ</a></td>
</tr>
<tr>
  <td><a href="https://github.com/golang-migrate/migrate">migrate</a></td>
  <td>Go</td>
  <td>MIT</td>
  <td>DSLのみ</td>
  <td>
SQLite3, PostgreSQL,<br> MySQL, SQL Server,<br> Cassandra,
RedShift,

</td>
  <td><a href="https://godoc.org/github.com/mattes/migrate">あり</a></td>
</tr>
<tr>
  <td><a href="https://github.com/rubenv/sql-migrate">sql-migrate</a></td>
  <td>Go</td>
  <td>MIT</td>
  <td>両方</td>
  <td>
     SQLite, PostgreSQL, <br>
     MySQL, SQL Server, <br>
     Oracle
  </td>
  <td><a href="https://github.com/rubenv/sql-migrate">GitHubのREADMEのみ</a></td>
</tr>
<tr>
  <td><a href="https://bitbucket.org/liamstask/goose/src">goose</a></td>
  <td>Go</td>
  <td>MIT</td>
  <td>両方</td>
  <td>postgres, mysql, <br>sqlite3</td>
  <td><a href="https://bitbucket.org/liamstask/goose/overview">BitBucketのREADMEのみ</a></td>

</tr>
<tr>
  <td><a href="https://github.com/sqlalchemy/alembic">alembic</a></td>
  <td>Python</td>
  <td>MIT</td>
  <td>両方</td>
  <td>
    MySQL,
    SQLServer,<br>
    Postgresql,
    SQLite
</td>
  <td><a href="https://alembic.sqlalchemy.org/en/latest/">あり</a></td>

</tr>
<tr>
  <td><a href="https://github.com/guilhermechapiewski/simple-db-migrate">simple-db-migrate</a></td>
  <td>Python</td>
  <td>Apache2.0</td>
  <td>RawSQLのみ</td>
  <td>MySQL,
    SQLServer,<br>
    Oracle
  </td>
  <td><a href="https://github.com/guilhermechapiewski/simple-db-migrate/blob/master/README.textile">GitHubのREADMEのみ</a></td>
</tr>
<tr>
  <td><a href="https://bitbucket.org/ollyc/yoyo/src/default/yoyo/">yoyo-migrations</a></td>
  <td>Python</td>
  <td>Apache2.0</td>
  <td>両方</td>
  <td>MySQL,
    SQLServer,<br>
    Postgresql, SQLite
  </td>
  <td><a href="https://ollycope.com/software/yoyo/latest/#">あり</a></td>
</tr>
<tr>
  <td><a href="https://github.com/db-migrate/node-db-migrate">db-migrate</a></td>
  <td>node.js</td>
  <td>MIT</td>
  <td>両方</td>
  <td>
    Mysql,
    PostgreSQL,<br>
    sqlite3,
    Mongodb
</td>
  <td><a href="https://db-migrate.readthedocs.io/en/latest/Getting%20Started/usage/">あり</a></td>
</tr>

<tr>
  <td><a href="https://github.com/salsita/node-pg-migrate">node-pg-migrate</a></td>
  <td>node.js</td>
  <td>MIT</td>
  <td>両方</td>
  <td>
    PostgreSQL
</td>
  <td><a href="https://salsita.github.io/node-pg-migrate/#/">あり</a></td>
</tr>

<tr>
  <td><a href="https://github.com/amacneil/dbmate">dbmate</a></td>
  <td>Go, Node.js, Python, Ruby, PHP, Rust, C++, etc.</td>
  <td>MIT</td>
  <td>両方</td>
  <td>
    MySQL, PostgreSQL, SQLite, ClickHouse
</td>
  <td><a href="https://github.com/amacneil/dbmate/blob/main/README.md/">GitHubのREADMEのみ</a></td>
</tr>
</table>


(参考)
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