# データベーススキーマをバージョン管理したい。

**URL:** <https://discuss.elastic.co/t/topic/208258>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [November 18, 2019, 6:11am UTC](https://discuss.elastic.co/t/topic/208258 "2019-11-18T06:11:44Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Niimi](https://avatars.discourse-cdn.com/v4/letter/n/b9bd4f/32.png) [@Niimi](https://discuss.elastic.co/u/Niimi)\
**Post date:** [November 18, 2019, 6:11am UTC](https://discuss.elastic.co/t/topic/208258/1 "2019-11-18T06:11:45Z")

</div>

これまでMS SQL Serverなどでデーターベーススキーマのバージョン管理をVisual Studioの「データベースプロジェクト」などを使って行っていました。  
Elasticsearchでも同様にデータベーススキーマをバージョン管理したいと考えております。できればバージョン管理システム(Gitなど）と連動して自動でマイグレーション出来ればベストと考えております。  
データベースマイグレーションツールとしては、[liquibase](https://www.liquibase.org/)や[Flyway](https://flywaydb.org/)などが有名ですが、どちらもElasticsearchには対応していないようです。

Elasticsearchはスキーマレスでスキーマ集約型であり、Mappingは動的に変えるのは難しいということは分かっておりますが、それでもある程度indexやmappingのバージョン管理は必要かと思っています。

なにか良いツール、運用方法などありましたらば、御助言いただければ幸いです。

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [November 18, 2019, 7:34am UTC](https://discuss.elastic.co/t/topic/208258/2 "2019-11-18T07:34:55Z")

</div>

こんにちわ。ほんの1例ですが参考までに。

Mappingについては、Index Templateで管理するようにし、Index Templateにはバージョンを持つようにします。  
基本的には、このファイル（json)をGitなりで管理して、使うようにしています。

[https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html#versioning-templates](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html#versioning-templates)

バージョンを埋め込んでおくと、どのバージョンのテンプレートが現在有効なのか？ というのが分かりやすくなります。

あとは、テンプレートでdynamicをどうするかを考えます。  
データ登録時に、Templateに未登録のフィールドがあったらどうするか？ということです。  
ユーザに好き勝手にフィールドを増やされたくない！ 完全にスキーマを固定してしまいたい！  
ということなら、dynamic: strict というようなパターンが考えられるかと思います。

[https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.html)

ご参考になれば幸いです。

---

<div class="post-metadata">

**Author:** ![Niimi](https://avatars.discourse-cdn.com/v4/letter/n/b9bd4f/32.png) [@Niimi](https://discuss.elastic.co/u/Niimi)\
**Post date:** [November 20, 2019, 12:07am UTC](https://discuss.elastic.co/t/topic/208258/3 "2019-11-20T00:07:33Z")

</div>

tsgkdtさん、コメントありがとうございます。  
なるほど、Index Templateをバージョン管理するのですね。検討してみます。

あとは、dynamicについては失念していました。elasticsearchならそこも考えないといけないですね。勉強します。

他にツール等使っている人などはいらっしゃいませんか?  
[Elasticsearch Beyonder](https://github.com/dadoonet/elasticsearch-beyonder) , [Elasticsearch Migration](https://github.com/hubrick/elasticsearch-migration), [generator-jhipster-elasticsearch-reindexer](https://github.com/geraldhumphries/generator-jhipster-elasticsearch-reindexer) などが関連していそうなのを見つけましたが、buildできなかったり使い方が分からなかったりで挫折しています。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [December 18, 2019, 12:07am UTC](https://discuss.elastic.co/t/topic/208258/4 "2019-12-18T00:07:34Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
