Slide 1

Slide 1 text

ER図クエスト 
 過ぎ去りしドキュメントを求めて
 〜複雑性に眠る秘宝〜
 株式会社マネーフォワード
 クラウド経費本部 プロダクト開発部
 手島 尚人 / tosite
 2023-09-15
 7th長崎QDG
 DEJIMAメッセ長崎


Slide 2

Slide 2 text

初めまして
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

株式会社マネーフォワード 
 クラウド経費本部 プロダクト開発部
 バックエンドエンジニア
 手島 尚人 / tosite
 
 趣味:
 キャンプ・登山・料理・ドライブ・温泉
 三線 ← New!


Slide 5

Slide 5 text

福岡から来ました!
 前々職の関係で5年ほど長崎に住んでいました
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 6

Slide 6 text

JaSST'23 Kyushu
 の実行委員長やってます!
 https://www.jasst.jp/symposium/jasst23kyushu.html

Slide 7

Slide 7 text

2023-11-02に
 福岡で開催
 予定なので興味ある方はぜひ!
 https://www.jasst.jp/symposium/jasst23kyushu.html

Slide 8

Slide 8 text

本題: 起
 ここまで0:45


Slide 9

Slide 9 text

今年の8月
 からマネーフォワードでの
 キャリアをスタートしました
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 10

Slide 10 text

皆さんは入社して
 まず何をしますか?
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 11

Slide 11 text

ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 12

Slide 12 text

times芸人業ですね
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜 チームリーダーからの評価


Slide 13

Slide 13 text

…ですが
 今日話したいのはその話ではなく…
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 14

Slide 14 text

まずやることは
 ドメイン知識を身につける
 ところからだと思います
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 15

Slide 15 text

では皆さんはどうやって
 ドメインを理解しますか?
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 16

Slide 16 text

仕様書やドキュメントを読む!


Slide 17

Slide 17 text

ドキュメントが充実している
 プロダクトならいざしらず、必要十分な
 ドキュメントがない場合もあります
 理想と現実
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 18

Slide 18 text

コードから全てを理解する


Slide 19

Slide 19 text

配属当初から全てのコードを網羅的に
 読み込むのはなかなかに厳しいと思います
 木は見えるけど森は見えない
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 20

Slide 20 text

じゃあどうするの?


Slide 21

Slide 21 text

データベースから
 仕様を理解する
 ことが早いと思っています
 私の経験に基づいた一例ですが…
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 22

Slide 22 text

そんな私がマネーフォワードに入社して1ヶ月
 どのような取り組みをしてきたかを
 お話ししようと思います
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 23

Slide 23 text

本題: 承
 ここまで2:00


Slide 24

Slide 24 text

データベースの仕様書と言えば
 真っ先に思い浮かぶものがありますね
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 25

Slide 25 text

そう、ER図ですね
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 26

Slide 26 text

でも作るの大変だし
 何よりメンテが大変…
 大変じゃない?
 https://github.com/k1LoW/tbls

Slide 27

Slide 27 text

私は
 tblsというOSS
 をこの上なく愛しています
 https://github.com/k1LoW/tbls

Slide 28

Slide 28 text

端的に言えば
 データベースドキュメント
 自動生成ツール
 開発者の方は「Document as Code」というキーワードを使われています
 https://speakerdeck.com/k1low/phpconfuk-2023

Slide 29

Slide 29 text

https://github.com/k1LoW/tbls 参考: 出力イメージ


Slide 30

Slide 30 text

仕様理解・開発スピードの向上
 を目的としてこのツールの導入を進めました
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 31

Slide 31 text

実装イメージ
 https://github.com/k1LoW/tbls

Slide 32

Slide 32 text

Phase 1. ローカルに
 ドキュメント生成環境を準備
 https://github.com/k1LoW/tbls

Slide 33

Slide 33 text

Phase 1. ローカルにドキュメント生成環境を準備 
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜 tblsのインストールと 
 ymlファイルを準備しただけ! 
 
 あとはMakefileに便利コマンドを 
 追加した程度の開発 
 1.ローカルのDBをマイグレーション 
  ファイルから構築
 2.tbls.ymlを作成
 3.コマンドを実行してデータベース 
  ドキュメントを生成 


Slide 34

Slide 34 text

Phase 2. CIでドキュメントの
 ビハインドを検知する
 https://github.com/k1LoW/tbls

Slide 35

Slide 35 text

Phase 2. CIでドキュメントのビハインドを検知する 
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜 CIで利用されるテーブルは常に 
 最新になることを利用 
 コミットされているドキュメントと 
 最新のドキュメントに差分がある 
 場合はCIを落とすようにした 
 1.CIのDBをマイグレーション 
  ファイルから構築
 2.CIのデータベースドキュメントを生成 
 3.CIとコミットしたデータベース 
  ドキュメントの差分を検知 


Slide 36

Slide 36 text

ER図が作られただけではなく
 データベースドキュメントが
 最新の状態に保たれる
 仕組みが構築できました
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 37

Slide 37 text

ドキュメントを最新の状態に
 維持し続けていくのが一番難しい…
 ここを仕組みで解決しました
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 38

Slide 38 text

更にビハインド発生時の
 マニュアルを整備する
 ことで他の開発者向けに情報を残しました
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 39

Slide 39 text

これでデータベース
 ドキュメントについては完璧!
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 40

Slide 40 text

本題: 転
 ここまで4:00


Slide 41

Slide 41 text

…というわけではなく、
 まだまだ課題は残っています
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 42

Slide 42 text

テーブルごとの意味を持つまとまりを
 どう表現するかが課題です
 例えばユーザーの基本情報が格納されているテーブル群だったり
 契約情報がまとまっているテーブル群だったり…
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 43

Slide 43 text

tblsには「ラベル」
 という概念があります
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 44

Slide 44 text

テーブルにラベルを付与して
 ラベル単位でもドキュメントを出力する
 仕組みを検討しています
 更に開発者フレンドリーなドキュメントが生成できますね
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 45

Slide 45 text

他にも「Viewpoints」という
 概念を用いてドキュメントを追加する
 こともできるでしょう
 https://speakerdeck.com/k1low/phpconfuk-2023?slide=34

Slide 46

Slide 46 text

また、他のアプローチとして
 モデルに定義されている
 定義を機械的に収集した上で
 反映させることもできそうです
 https://speakerdeck.com/k1low/phpconfuk-2023?slide=34

Slide 47

Slide 47 text

ツールを入れて終わり
 ではなく
 ドキュメントを整備し続ける
 ことが大事ですね
 https://speakerdeck.com/k1low/phpconfuk-2023?slide=34

Slide 48

Slide 48 text

本題: 結
 ここまで4:30


Slide 49

Slide 49 text

以上の取り組みによって
 アプリケーションの仕様を
 データベースから理解する
 ことができるようになりました
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 50

Slide 50 text

ドキュメントは宝の山
 だと思っています
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 51

Slide 51 text

今回取り入れた仕組みを通して
 オンボーディングの高速化などに
 役立てばいいなと思っています
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 52

Slide 52 text

みなさんもドキュメント化
 やっていきましょう💪
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 53

Slide 53 text

終わりに
 ここまで4:50


Slide 54

Slide 54 text

マネーフォワード福岡拠点では
 一緒に働ける仲間を募集しています!
 https://hrmos.co/pages/moneyforward/jobs?category=1666323298559537153 
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 55

Slide 55 text

福岡開発拠点のサイトもあるので
 ぜひご覧ください!
 https://fukuoka.moneyforward.com 
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 56

Slide 56 text

一緒にドキュメント化を
 進めていきたいという方は
 ぜひお声がけください
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜

Slide 57

Slide 57 text

ご清聴ありがとう
 ございました!
 ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜