SlideShare a Scribd company logo
1 of 32
Download to read offline
データベース定義書の更新っ
て再考の仕事ですよね!
やすだあつし
この発表は、rails アプリ
を作っているとある開発者
に起きたフィクションです
「データベース定義書」
とは?
こういうの
俺たちのExcel
作らなくてよくね?
DHH「ドキュメント?書かな
いよ?そんなん頑張るなら、もっ
といいコード書けば?」(意訳)
せやな
100+ tables
(仮)
 同人誌のネット印刷サービスで、ページ
ごとに用紙とカラー・白黒を変えられる。
 で、その印刷申し込み時に記録された発
注書のページごとの用紙・カラー記録テー
ブル
print_order_sheet_pap
er_items
日本語、便利だね。


((ただし日本人に限る))
migration_comments
annotate_models
RDoc ならこんな感じ
YARD ならこんな感じ
rails-erd
これで見やすいかな?
※「これじゃ開発者しか見な
いよね?」
※「エクセルでください」
仕方がないので
rake task を書く。
(Gem にしたかったけど時間が足りな
くてできなかったとか言えない)
https://gist.github.com/ayasuda/
d5c03783e29f3ddb21b9
klasses	
  =	
  	
  
Dir[“app/models/**/*.rb”].	
  
reject{|f|	
  f[‘concens/‘]}.	
  
map{|f|	
  f.gsub(/^/app/models/(.+?).rb$/,	
  ‘1’).	
  
map{|m|	
  ActiveSupport::Inflector.camelize(m)}.	
  
map{|k|	
  ActiveSupport::Inflector.constantize(k)}
こんな感じのコードで
ActiveRecord なクラスは取
れるので・・・
if	
  klass	
  <	
  ActiveRecord::Base	
  &&	
  
	
  	
  !klass.abstract_class?	
  &&	
  
	
  	
  klass.table_exists?
klass.columns.first.name	
  
table_comment	
  =	
  
klass.connection.retrive_table_comment(klass.table
_name)	
  
column_comments	
  =	
  
klass.connection.retrive_column_comments(klass.tab
le_name)
あとはklass.columns とかからいろい
ろ取得すればOK.
MigrationColumns 入れてれば、コメ
ントもこれで取れます。
あとは、
rubyXLで、テンプレー
トにあたい埋め込み
or axlsx で定義書作成
$rake dbdoc
こんな感じ?(できる
かな)
まとめ
• エクセルなんてなくなればいいのに
• はやくマイクロサービス化して、1アプリあたり20
テーブル程度にしようぜ。そうすればこんな面倒なこ
とにならなかったと思うんだよね。やっぱり、文書
化ってなんかSEくさくて良くないとおもうんだ。
• サンプルコードは willnet/awesome_events を使わ
せていただきました。本当に有難うございました!

More Related Content

More from Atsushi Yasuda

Go言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンドGo言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンドAtsushi Yasuda
 
負債返済の下準備「コメント付与まつり・準備編」
負債返済の下準備「コメント付与まつり・準備編」負債返済の下準備「コメント付与まつり・準備編」
負債返済の下準備「コメント付与まつり・準備編」Atsushi Yasuda
 
モデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのかモデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのかAtsushi Yasuda
 
コードを削除し続けるという習慣
コードを削除し続けるという習慣コードを削除し続けるという習慣
コードを削除し続けるという習慣Atsushi Yasuda
 
苦いお酒が好きな人のためのコードの苦味の味わい方
苦いお酒が好きな人のためのコードの苦味の味わい方苦いお酒が好きな人のためのコードの苦味の味わい方
苦いお酒が好きな人のためのコードの苦味の味わい方Atsushi Yasuda
 
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項Atsushi Yasuda
 
たまにはこんなSushiも如何でしょう?
たまにはこんなSushiも如何でしょう?たまにはこんなSushiも如何でしょう?
たまにはこんなSushiも如何でしょう?Atsushi Yasuda
 
click するとどうなるのか
click するとどうなるのかclick するとどうなるのか
click するとどうなるのかAtsushi Yasuda
 

More from Atsushi Yasuda (9)

Go言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンドGo言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンド
 
負債返済の下準備「コメント付与まつり・準備編」
負債返済の下準備「コメント付与まつり・準備編」負債返済の下準備「コメント付与まつり・準備編」
負債返済の下準備「コメント付与まつり・準備編」
 
モデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのかモデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのか
 
コードを削除し続けるという習慣
コードを削除し続けるという習慣コードを削除し続けるという習慣
コードを削除し続けるという習慣
 
苦いお酒が好きな人のためのコードの苦味の味わい方
苦いお酒が好きな人のためのコードの苦味の味わい方苦いお酒が好きな人のためのコードの苦味の味わい方
苦いお酒が好きな人のためのコードの苦味の味わい方
 
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項
 
たまにはこんなSushiも如何でしょう?
たまにはこんなSushiも如何でしょう?たまにはこんなSushiも如何でしょう?
たまにはこんなSushiも如何でしょう?
 
I love bug
I love bugI love bug
I love bug
 
click するとどうなるのか
click するとどうなるのかclick するとどうなるのか
click するとどうなるのか
 

データベース定義書の更新は再考の仕事