Slide 1

Slide 1 text

社外秘 Confidential ドキュメントからコードを生成したい on Rails 開発 ラクスル株式会社 宮田 聖也

Slide 2

Slide 2 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential 自己紹介 サーバーサイドエンジニア 印刷のラクスルのエンタープライズ向け開発 ● 16 時退勤が夢です 好き:DevOps、エレキギター、フィルムカメラ、 欧州サッカー、クラフトビール 2 @38tter_miya

Slide 3

Slide 3 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential よくある Rails 新規開発の流れ Ruby on Rails : MVC (Model - View - Controller) フレームワーク 1. モデル設計 ドメイン知識をモデル定義に落とし込む ER 図等でドキュメント管理する 2. マイグレーション マイグレーションファイルを書く 3. ビジネスロジックの記述 3

Slide 4

Slide 4 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential モデル設計:Notion に、 ER 図描きつつ、あーだこーだ(字余り) 4 オンラインでありがちな状況 最近よく使うのは mermaid 記法

Slide 5

Slide 5 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential モデル設計:Notion に、 ER 図描きつつ、あーだこーだ(字余り) 5 https://mermaid.js.org/

Slide 6

Slide 6 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential 悩み:熱いうちに鉄を打ちたい モデル定義が固まったあとはすぐ開発に取り掛かりたい モデル議論の後 = 開発効率が高い状態 ドキュメントからマイグレーションへの変換 地味にまどろっこしい `rails generate migration` でボイラープレートを生成する感覚で、変換したい ... そこで... 6

Slide 7

Slide 7 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential mergration という gem を作りました (mer)maid の ER 図をパースして mi(gration) ファイルを生成 7

Slide 8

Slide 8 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential mergration という gem を作りました (mer)maid の ER 図をパースして mi(gration) ファイルを生成 8

Slide 9

Slide 9 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential デモ 9

Slide 10

Slide 10 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential やっていること 1. mermaid 記法のパース kramdown という markdown パーサーを拡張して mermaid に対応 2. マイグレーションファイルの生成 マイグレーションのテンプレートを用意 パース結果を元にマイグレーションを動的に生成 10

Slide 11

Slide 11 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential 所感&これからやりたいこと 「ドキュメントからボイラープレート生成」の開発者体験は良い プロトタイピング、ハッカソン等、開発時間限られる場合にも good 「ドキュメントとコードを同期できる」体験にも近づけたい 編集後の ER 図から差分のマイグレーションファイルの生成 シーケンス図による記述から、コードの雛形を生成 11

Slide 12

Slide 12 text

© 2021 RAKSUL, inc. All rights reserved. 社外秘 Confidential PR, issue, feature request コメント等々 お待ちしています!! 12 https://github.com/38tter/mergration