技術的負債を改善!(2) データベースを1つにする

Posted by SpaceAgent Tech Blog スペテク on Tuesday, May 7, 2019

@kaiba です。
カバー写真は適当に選んでまして、ついつい好きな日本酒の写真を選びがちです。
人事が「え!? これ本番の画像なの!?」とぎょっとしてました。本番ですとも。

前回の技術的負債の話の続きです。

面白おかしくプレゼンを作ってメンバに説明したので、それを公開したいのですが、セキュリティの懸念もありまして、部分的に紹介させてください。
プレゼンが全部見たい方はWanted!ということで、気軽に聞きに来てください(笑)

スペースエージェントが抱える技術的負債(復習)

システム構成

スペースエージェントは複数のサービスを運営しており、雑に書くと上記のような構成になっています。
この構成はRails界隈では「分断されたモノリス」と呼ばれており、あまり良い設計とは言えません。

あるべき姿を考えて近づけていく

あるべき姿がメンテしやすい形に近づけていくことを考えます。

本来どうあるべきか

マイクロサービスに分割することも考えましたが、本来あるべき姿はこうだと考えました。
凄くシンプルです。エンジニア5人でも運用できそうな気がしてきます。

DBを1つにすることを考える

どこを直すか?

理想形にできればよいのですが、影響範囲が多すぎて、ゴールが見えそうにありません。
できるところから少しづつやっていきます。
今回はDBを1つにするを目指しました。

単純に dump して import すれば1つにはできそうなのですが、 各々のDBに同一名のテーブルが複数ありました。
別のテーブル名にする必要がありました。

気合と根性と愛情で直していく

気合・根性・愛情

リファクタリングは往々にして、地味で辛い作業です。
その上、エンジニア以外にはメリットが分かりづらく、喜んでもらえません。
地味な作業をやりきる気合と根性、サービスとメンバへの愛情が必要です。
具体的には以下を繰り返します。

  1. 検索する(grep -R xxx .)
  2. 修正する
  3. 自動テストが落ちたところを探す(自動テストに関してはまた今度書きたい)
  4. 全部終わったら次のプロジェクトへ

感謝のリファクタリング、1日1万行!
単純作業で全く楽しくありませんし、テストが充実していない状況で漏れない訳がない、という不安感が生まれてきます。

この作業は、僕が丸2日掛けて一人で仕上げました。
複数人でやりづらい作業だったからということもありますが、褒められるべき偉業でしょう!
(などと言い自分を鼓舞してやりきるのです)

泥臭くテストしていく

スタートアップにはよくあることで、僕たちも十分なドキュメントはありません。
esa(ドキュメント管理システム)を漁ったり、仕様を各所に聞いて回りながらシステムテスト仕様書を起こしました。

テスト

「全部自動テスト化しました!」とか言えるとかっこいいのですが、 ソフトウェアの仕事には、このように泥臭い仕事もどうしてもあります。
しかし、プログラムの仕事は漏れなく着実にやることが大切です。

今回、このドキュメントを起こしたことで、以下の恩恵が得られました。

  • 機能を網羅しておりどんな機能があるか把握できる
  • 大まかな仕様を把握できる

スペースエージェントの大きな武器になると僕は考えています。

項目数は約700でした。
全エンジニアで協力しながら約2週間掛けてテスト及び修正を行いました。

まとめ

1つのDBに
  • DBを1つにできた!
  • RDBの恩恵を享受
    • joinできる
    • 外部キー制約によってデータを保護できる
  • 全機能を網羅したドキュメントが生まれた
  • 大きなトラブルなくリリースできた!

次はCakeを1つにするか、もしくはAPIで繋ぐようにするか、悩ましいところですが、サービスを発展させつつ、少しづつリファクタリングも進めていきたいです。
俺たちのリファクタリングはまだこれからだ! kaiba先生の次回作にご期待下さい!