RubyからGitをデータストアとして使う「Git Store」
コミュニティサイトなどではユーザが自由にテキストを変更できる機能がある。自分のプロフィールを更新したり、Wikiのようにコラボレートするようなものだ。その際、重要になるのが履歴管理機能だ。ユーザの間違った修正などを元に戻したり、悪意ある更新からコンテンツを保護する必要がある。
Gitをデータストアに使うという方法!
更新前に現在のテキストを全て保存してしまうのも手だが、ここではGitを使うという手法をご紹介したい。使い方も簡単だ。
今回紹介するオープンソース・ソフトウェアはGit Store、Gitを使ったデータストアライブラリだ。
Git Storeはデータストアということもあって、キーと値の仕組みをとっている。キーを指定して値を入れ、コミットを行えばそのデータが適用される。memcachedのようなシンプルさで、それでいて履歴管理までされるのが素晴らしい。なお、そのログや前のバージョンを取り出す手法は分からなかった(Git上にあるので取り出すことはできるだろうが)。
オブジェクトのメソッド。ログ関係のメソッドが見当たらない…。
文字列はもちろんハッシュやオブジェクトを保存することもできる。データはシリアライズされて保存される。キーをスラッシュでつないで、階層構造として管理することも可能だ。階層化しておけば、同じ階層にあるファイルを取得と言った使い方もできる。
そしてトランザクションをサポートしているのも特徴だ。トランザクションを開始して更新しても、コミット前にロールバックを実行すればデータが元に戻る仕組みだ。ユーザが間違った更新をすると困る場面などで便利に使えそうなライブラリだ。
せめて最新版はデータベースで、履歴はGitという方法も考えられる。独自で実装するのに比べて便利で、かつ柔軟性もあり、正確なライブラリと言えそうだ。
Matthias Georgi
http://www.matthias-georgi.de/gitstore
georgi’s git_store at master - GitHub