Posted at

データベース初期構築用のSQLをリポジトリ上のどこのディレクトリに置くか

More than 3 years have passed since last update.

この記事は animateLAB Advent Calendar 2015 3日目の記事です。

今日はポエムを書こうと思ってたんですが、考えてた内容が明らかに今日中に書き終わらないので、別のポエムに変えます。あとポエムはさすがに開発者ブログに書くのがはばかられたので、Qiitaのポエムタグにそっと置いておきます。

というわけで、タイトルの通りデータベース初期構築用のSQLをリポジトリ上のどこのディレクトリに置くかという話。MySQLでたとえるとこういうのです。


  • CREATE DATABASE

  • CREATE USER

  • GRANT

RDBMSに依存したサーバーサイドのアプリケーションを初期構築する場合に絶対1度は必要になるはずなのに、GitHub上に.sqlなファイルとして置いてあることが少ない気がします。仮に置いてあったとしても置いてある場所がバラバラで気持ち悪い。代表的な.sql置き場のディレクトリ名として以下のような名称があるのではないかと思います。


  • sql

  • db

  • docs

  • misc

dbsqlはDB接続関係のソースコードが置いてあることもあるし、docsはちょっと違うんじゃない?(.sqlはドキュメントじゃないよね?)と思うし、miscってディレクトリを切ると何でもかんでもそこに置かれそうだし、なんだかモヤっとするんです。

もしかしたら私が知らないだけでフレームワークによってはきちっと決まっているのかもしれません。 1 もしくは、ちゃんとREADMEとかWikiとかに構築方法が書いてあればそれで構わないけど(ドキュメントの中にSQL文がまんま貼られてる例もあった気がする)、なんかちょっと気持ち悪いなと思うのでありました。

まあ、実態としてはDBM(≒データベースおじさん)がいい感じに初期構築してくれちゃうのでリポジトリで管理されず秘伝のタレ化している、というのが真相なのではないかなと推察してます。そもそもCREATE USERなんぞを実行できるのは強力な権限(≒rootやsys)を持っているアカウントに限られるし、結局人間がやるからあんまりリポジトリで管理するメリットがないのかもしれません。でも「結局人間がやるから」って思った瞬間負けだと思うんだよね。うーむ。





  1. 例えば、Railsでは マイグレーション という仕組みがあって、「空のスキーマが存在する」ことを前提にCREATE TABLEとかしてくれる。ただ「空のスキーマ」を誰かが作成する必要がある。