Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
エンタープライズRubyOnRails
Future Architect, Inc.
Hiroki Tanaka
エンプラでぶち当たった2つの壁と突破法
関西Ruby会議2017
自己紹介
田中 宏基(たなか ひろき)
・ フューチャーアーキテクト株式会社
Technology Innovation Group所属
・ 社内でのRuby on Railsのプレゼンス向上活動に
従事
・ 茶道の師範ライセンス所持
会社紹介
フューチャーアーキテクト株式会社
(英文表記:Future Architect, Inc.)
羽田空港国内線第2ターミナルに広告掲載
TBSでCM放送中(関東のみ)
フューチャーをざっくり言うと
通 常 の I T ベ ン ダ ー と 違 い 、 コ ン サ ル か ら S I ま で 一 気 通 貫 で 行 う 。
中 立 ( ニ ュ ー ト ラ ル ) の ポ ジ シ ョ ン 。
「 な い も の は...
巷ではこう言われている…
エンタープライズに
Ruby on Railsは不向き、と
(巷説)エンタープライズにRuby on Railsは不向き
①高すぎる柔軟性
(巷説)エンタープライズにRuby on Railsは不向き
①高すぎる柔軟性
②Railsによる規約の縛り
本日お伝えしたいこと
巷 で は こ ん な こ と が 言 わ れ て い ま す が 、
実 際 に エ ン タ ー プ ラ イ ズ シ ス テ ム 開 発 が 得 意 な 会 社 で
R u b y o n Ra i l s を 使 っ ...
プロジェクト概要
●中規模開発
・ 開発期間:3.5ヶ月
・ 機能数:777
・ Model数:160
・ 開発人数:最大10人
・ ソース管理: GitLab
・ ドキュメント管理:Subversion
開発チーム
●経験者少数
・ 経験者数...
2つの壁にぶち当たった
コードのメンテナンス性低下
コンフリクトの多発
コードのメンテナンス性低下
経験者が不足するとどうなるか
一 貫 性 の な い コ ー ド が 量 産 さ れ る 。
コンフリクトメンテナンス性
経験者が不足するとどうなるか
一 貫 性 の な い コ ー ド が 量 産 さ れ る 。
each文内
の深いネスト
コンフリクトメンテナンス性
経験者が不足するとどうなるか
一 貫 性 の な い コ ー ド が 量 産 さ れ る 。
each文内
の深いネスト
無駄なself
コンフリクトメンテナンス性
経験者が不足するとどうなるか
一 貫 性 の な い コ ー ド が 量 産 さ れ る 。
each文内
の深いネスト
If文内に
unless
無駄なself
コンフリクトメンテナンス性
経験者が不足するとどうなるか
一 貫 性 の な い コ ー ド が 量 産 さ れ る 。
each文内
の深いネスト
If文内に
unless
If文内に
後置if
無駄なself
コンフリクトメンテナンス性
経験者が不足するとどうなるか
一 貫 性 の な い コ ー ド が 量 産 さ れ る 。
each文内
の深いネスト
If文内に
unless
If文内に
後置if
無駄なself
コンフリクトメンテナンス性
メンテナンス性が低下するとどうなるか
レ ビ ュ ア ー の 負 担 が 増 加 す る 。
イケてないコード
読みづらい…
わかりづらい…
コンフリクトメンテナンス性
レビュアー
メンテナンス性が低下するとどうなるか
レ ビ ュ ア ー の 負 担 が 増 加 す る 。
イケてないコード
読みづらい…
わかりづらい…
コンフリクトメンテナンス性
レビュアー
コンフリクトの多発
中規模開発を行うとどうなるか
Ra i l s の 特 性 上 、 同 一 フ ァ イ ル を 複 数 人 で 編 集 す る こ と が 多 い 。
Model
例 : M o d e l
コンフリクトメンテナンス性
中規模開発を行うとどうなるか
同 じ フ ァ イ ル を 編 集 し た 様 々 な fe a t u r e ブ ラ ン チ が 存 在 す る 。
master
Model
MergeRequest
featureブランチ
コンフリクトメン...
中規模開発を行うとどうなるか
各 ブ ラ ン チ か ら MergeRequestが発行される。
master
Model
コンフリクトメンテナンス性
MergeRequest
featureブランチ
中規模開発を行うとどうなるか
M e r g e Re q u e s t の 1 つ を マ ー ジ す る 。
master
Model
Merge!
コンフリクトメンテナンス性
MergeRequest
featureブランチ
中規模開発を行うとどうなるか
他 の M e r g e Re q u e s t で コ ン フ リ ク ト が 発 生 す る 。
master
Model
Merge!
コンフリクトメンテナンス性
MergeRequest
feature...
コンフリクトが多発するとどうなるか
レ ビ ュ ア ー は マ ー ジ の 順 番 や コ ー ド の 整 合 性 が わ か ら ず 、
マ ー ジ コ ス ト が 増 加 す る 。
コンフリクト多発中のMR
何が正しいのか
わからない…
...
コンフリクトが多発するとどうなるか
レ ビ ュ ア ー は マ ー ジ の 順 番 や コ ー ド の 整 合 性 が わ か ら ず 、
マ ー ジ コ ス ト が 増 加 す る 。
コンフリクト多発中のMR
何が正しいのか
わからない…
...
レビュアーの負担が激増!!
レビュアーのつらみ
日 を 追 う 毎 に 重 く な る レ ビ ュ ア ー の 負 担
メ ン テ ナ ン ス 性 の
低 い コ ー ド
コ ン フ リ ク ト の 多 発
レ ビ ュ ー に
時 間 が 掛 か る
チ ー ム の 遅 ...
レビュアーのつらみ
日 を 追 う 毎 に 重 く な る レ ビ ュ ア ー の 負 担
メ ン テ ナ ン ス 性 の
低 い コ ー ド
コ ン フ リ ク ト の 多 発
レ ビ ュ ー に
時 間 が 掛 か る
チ ー ム の 遅 ...
壁は想像以上に高かった
やはり、エンタープライズに
Ruby on Railsは不向きなのか…
どうするか
突破法を考えてみた
・ コードメンテナンス性の壁
⇒強力なIDEレベルの仕組み
⇒開発統制
・ コンフリクトの壁
⇒人が編集するファイルの極小化
⇒自動生成
突破法を考えてみた
・ コードメンテナンス性の壁
⇒強力なIDEレベルの仕組み
⇒開発統制
・ コンフリクトの壁
⇒人が編集するファイルの極小化
⇒自動生成
実行してみた
開発統制
選んだ方法は
RuboCop Drone
Rubyの
静的解析ツール
継続的
インテグレーション
開発統制 自動生成
独自チェッカー
弊社謹製の
コードチェッカー
軽量
テキストエディタ
SublimeText3
コンフリクトメンテナンス性
各開発者の実装時
RuboCop×SublimeText3×独自チェッカーによって、
強制フォーマットと規約違反をチェック
rbファイル ERBファイル
SublimeText3RuboCop 独自チェッカー
開発統制 自動生成
コンフリクトメ...
各開発者の実装時
RuboCop×SublimeText3×独自チェッカーによって、
強制フォーマットと規約違反をチェック
rbファイル ERBファイル
SublimeText3RuboCop 独自チェッカー
開発統制 自動生成
コンフリクトメ...
コードの強制フォーマット
使 用 す る コ ー ド
イケてないコード
開発統制 自動生成
コンフリクトメンテナンス性
コードの強制フォーマット
フ ォ ー マ ッ ト の 様 子
開発統制 自動生成
コンフリクトメンテナンス性
コードの強制フォーマット
フ ォ ー マ ッ ト 後
開発統制 自動生成
コンフリクトメンテナンス性
コードの強制フォーマット
フ ォ ー マ ッ ト 後
開発統制 自動生成
コンフリクトメンテナンス性
コード複雑度
への警告
コードの強制フォーマット
フ ォ ー マ ッ ト 後
開発統制 自動生成
コンフリクトメンテナンス性
コード複雑度
への警告
無駄なself
を削除
コードの強制フォーマット
フ ォ ー マ ッ ト 後
開発統制 自動生成
コンフリクトメンテナンス性
コード複雑度
への警告
無駄なself
を削除
unless→if
への変換
コードの強制フォーマット
フ ォ ー マ ッ ト 後
開発統制 自動生成
コンフリクトメンテナンス性
コード複雑度
への警告
無駄なself
を削除
unless→if
への変換
後置ifへの
警告
コードの強制フォーマット
フ ォ ー マ ッ ト 後
開発統制 自動生成
コンフリクトメンテナンス性
コード複雑度
への警告
無駄なself
を削除
unless→if
への変換
後置ifへの
警告
ERBの規約チェック
使 用 す る コ ー ド
開発統制 自動生成
コンフリクトメンテナンス性
ERBの規約チェック
使 用 す る コ ー ド
開発統制 自動生成
コンフリクトメンテナンス性
ERBコメントではなく、
HTMLコメントを使用
ERBの規約チェック
規 約 チ ェ ッ ク 実 行
警告
ポップアップ
開発統制 自動生成
コンフリクトメンテナンス性
ERBの規約チェック
規 約 チ ェ ッ ク 実 行
警告
ポップアップ
開発統制 自動生成
コンフリクトメンテナンス性
SublimeText3を
使わない人が現れたら…
俺は絶対にVimが良いんだよ。
Vimの方が生産性上がるから
影でこっそり使ってやろう…
開発統制 自動生成
コンフリクトメンテナンス性
Droneによるチェック
DroneでもRuboCopと規約チェックを行い、GitLabと連携させることで、
コードスタイルを水際で担保。
独自チェッカー
Git
featureブランチ
Git
masterブランチ
Commit&Push
O...
パスしなかったMergeRequest
マージ
不可能!
開発統制 自動生成
コンフリクトメンテナンス性
チ ェ ッ ク を 通 ら な か っ た M e r g e Re q u e s t は 、 マ ス タ ー マ ー ジ で き な ...
パスしなかったMergeRequest
マージ
不可能!
開発統制 自動生成
コンフリクトメンテナンス性
チ ェ ッ ク を 通 ら な か っ た M e r g e Re q u e s t は 、 マ ス タ ー マ ー ジ で き な ...
独自チェッカー
開発フローにすると..
Git
featureブランチ
Git
masterブランチ
独自チェッカー
常にフォーマット、
チェックされながら開発
Commit&Push
リモートへのpushをフック、
リモート側でもRuboCo...
自動生成
設計書情報を全てDB上に抽出、管理
こんな社内ツールが出来始めた 開発統制 自動生成
コンフリクトメンテナンス性
こんな社内ツールが出来始めた
・リポジトリへのコミットでJenkinsジョブ起動
・設計書を解析してDBへロード
・エクセル設計書は勿論、ER図にも対応
設計書 SVN DB
①コミット
Jenkins②ジョブ起動 ③設計書DBロード
開発統制...
ここから自動生成する
Jenkins
テンプレートエンジン
設計書情報
抽出 任意自動生成
ファイル
・Java/テンプレートエンジンとSQLの組み合わせで汎用的にファイルを生成
・DBにある設計書情報からであれば、どんなファイルでも生成可能
...
例えばURL・権限設計書から 開発統制 自動生成
コンフリクトメンテナンス性
例えばURL・権限設計書から
権限定義を生成したり
開発統制 自動生成
コンフリクトメンテナンス性
例えばURL・権限設計書から 開発統制 自動生成
コンフリクトメンテナンス性
Routingを生成したり。
などなど
Routingについてちょっと補足
名前空間ごとにRoutingを分割
config/routes/XXX.rb
アプリケーション定義を変更して
config/application.rb
開発統制 自動生成
コンフリクトメンテナンス性
Routingについてちょっと補足
Routing分割の効果
・可読性向上
・一部は手メンテ可能 (gemで勝手に追加されるRoutingなど)
開発統制 自動生成
コンフリクトメンテナンス性
例えばER図から 開発統制 自動生成
コンフリクトメンテナンス性
例えばER図から
マイグレーションを生成したり、
開発統制 自動生成
コンフリクトメンテナンス性
例えばER図から 開発統制 自動生成
コンフリクトメンテナンス性
RSpecを生成したり
例えばER図から 開発統制 自動生成
コンフリクトメンテナンス性
Modelを生成したり。
などなど
Modelについてちょっと補足
役割ごとにmodelを分割 自動生成
app/models/user.rb
app/models/user/XXX.rb
アプリケーション定義を変更して
config/application.rb
開発統制 自動...
Modelについてちょっと補足
Model分割の効果
・Fat Model対策
・一部を自動生成可能に
開発統制 自動生成
コンフリクトメンテナンス性
様々なファイルを自動生成 (一部の例)
URL・権限設計書 ER図 画面設計書
Routing
permission.yml
(権限定義ファイル)
menu.yml
(メニュー定義ファイル)
Model RSpec
Migration attr...
自動生成の仕組み まとめ
設計書
Jenkins
SVN DB Git
featureブランチ
Git
masterブランチ
自動生成ソース
凡例: データの流れ
①コミット
③設計書情報
をDBにロード
②コミット
を検知
Jenkinsジョ...
開発フローをまとめると..
設計書
Jenkins
SVN DB Git
featureブランチ
①コミット
③設計書情報
をDBにロード
②コミット
を検知
④-①DB情報を基にソースを自動生成
④-②Gitにブランチを作成し、Commit&...
コードのメンテナンス性
レビュアーの負担大幅減少!
0
50
100
150
200
250
コード複雑度
0
500
1000
1500
2000
2500
3000
コード難読性
0
20000
40000
60000
80000
1000...
全コード中の自動生成の割合
64.9%
(自動生成されたコード行数:約31000行)
人が編集するファイルの極小化!
コンフリクト発生率
25%→5%
コンフリクト発生率大幅減少!
壁を突破!
まとめ
自 動 化 を 推 進 す る こ と で Ru b y o n Ra i l s は エ ン タ ー プ ラ イ ズ の
開 発 手 法 に お い て も 取 り 得 る 選 択 肢 と な る 。
経験者が少数
コードの
メンテナ...
Enterprise
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~
Upcoming SlideShare
Loading in …5
×

エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~

730 views

Published on

関西Ruby会議2017での「エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~」の発表で用いた講演資料です。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~

  1. 1. エンタープライズRubyOnRails Future Architect, Inc. Hiroki Tanaka エンプラでぶち当たった2つの壁と突破法 関西Ruby会議2017
  2. 2. 自己紹介 田中 宏基(たなか ひろき) ・ フューチャーアーキテクト株式会社 Technology Innovation Group所属 ・ 社内でのRuby on Railsのプレゼンス向上活動に 従事 ・ 茶道の師範ライセンス所持
  3. 3. 会社紹介
  4. 4. フューチャーアーキテクト株式会社 (英文表記:Future Architect, Inc.)
  5. 5. 羽田空港国内線第2ターミナルに広告掲載 TBSでCM放送中(関東のみ)
  6. 6. フューチャーをざっくり言うと 通 常 の I T ベ ン ダ ー と 違 い 、 コ ン サ ル か ら S I ま で 一 気 通 貫 で 行 う 。 中 立 ( ニ ュ ー ト ラ ル ) の ポ ジ シ ョ ン 。 「 な い も の は つ く る 」 の 精 神 。 ・ 自 社 サ ー ビ ス も 行 う 。
  7. 7. 巷ではこう言われている…
  8. 8. エンタープライズに Ruby on Railsは不向き、と
  9. 9. (巷説)エンタープライズにRuby on Railsは不向き ①高すぎる柔軟性
  10. 10. (巷説)エンタープライズにRuby on Railsは不向き ①高すぎる柔軟性 ②Railsによる規約の縛り
  11. 11. 本日お伝えしたいこと 巷 で は こ ん な こ と が 言 わ れ て い ま す が 、 実 際 に エ ン タ ー プ ラ イ ズ シ ス テ ム 開 発 が 得 意 な 会 社 で R u b y o n Ra i l s を 使 っ た 際 、 よ り 具 体 的 な 壁 に ぶ つ か り ま し た 。 そ れ が ど ん な 壁 な の か 、 ま た 、 そ の 突 破 法 を 本 日 お 伝 え し ま す 。 Enterprise
  12. 12. プロジェクト概要 ●中規模開発 ・ 開発期間:3.5ヶ月 ・ 機能数:777 ・ Model数:160 ・ 開発人数:最大10人 ・ ソース管理: GitLab ・ ドキュメント管理:Subversion 開発チーム ●経験者少数 ・ 経験者数:1人
  13. 13. 2つの壁にぶち当たった
  14. 14. コードのメンテナンス性低下 コンフリクトの多発
  15. 15. コードのメンテナンス性低下
  16. 16. 経験者が不足するとどうなるか 一 貫 性 の な い コ ー ド が 量 産 さ れ る 。 コンフリクトメンテナンス性
  17. 17. 経験者が不足するとどうなるか 一 貫 性 の な い コ ー ド が 量 産 さ れ る 。 each文内 の深いネスト コンフリクトメンテナンス性
  18. 18. 経験者が不足するとどうなるか 一 貫 性 の な い コ ー ド が 量 産 さ れ る 。 each文内 の深いネスト 無駄なself コンフリクトメンテナンス性
  19. 19. 経験者が不足するとどうなるか 一 貫 性 の な い コ ー ド が 量 産 さ れ る 。 each文内 の深いネスト If文内に unless 無駄なself コンフリクトメンテナンス性
  20. 20. 経験者が不足するとどうなるか 一 貫 性 の な い コ ー ド が 量 産 さ れ る 。 each文内 の深いネスト If文内に unless If文内に 後置if 無駄なself コンフリクトメンテナンス性
  21. 21. 経験者が不足するとどうなるか 一 貫 性 の な い コ ー ド が 量 産 さ れ る 。 each文内 の深いネスト If文内に unless If文内に 後置if 無駄なself コンフリクトメンテナンス性
  22. 22. メンテナンス性が低下するとどうなるか レ ビ ュ ア ー の 負 担 が 増 加 す る 。 イケてないコード 読みづらい… わかりづらい… コンフリクトメンテナンス性 レビュアー
  23. 23. メンテナンス性が低下するとどうなるか レ ビ ュ ア ー の 負 担 が 増 加 す る 。 イケてないコード 読みづらい… わかりづらい… コンフリクトメンテナンス性 レビュアー
  24. 24. コンフリクトの多発
  25. 25. 中規模開発を行うとどうなるか Ra i l s の 特 性 上 、 同 一 フ ァ イ ル を 複 数 人 で 編 集 す る こ と が 多 い 。 Model 例 : M o d e l コンフリクトメンテナンス性
  26. 26. 中規模開発を行うとどうなるか 同 じ フ ァ イ ル を 編 集 し た 様 々 な fe a t u r e ブ ラ ン チ が 存 在 す る 。 master Model MergeRequest featureブランチ コンフリクトメンテナンス性
  27. 27. 中規模開発を行うとどうなるか 各 ブ ラ ン チ か ら MergeRequestが発行される。 master Model コンフリクトメンテナンス性 MergeRequest featureブランチ
  28. 28. 中規模開発を行うとどうなるか M e r g e Re q u e s t の 1 つ を マ ー ジ す る 。 master Model Merge! コンフリクトメンテナンス性 MergeRequest featureブランチ
  29. 29. 中規模開発を行うとどうなるか 他 の M e r g e Re q u e s t で コ ン フ リ ク ト が 発 生 す る 。 master Model Merge! コンフリクトメンテナンス性 MergeRequest featureブランチ
  30. 30. コンフリクトが多発するとどうなるか レ ビ ュ ア ー は マ ー ジ の 順 番 や コ ー ド の 整 合 性 が わ か ら ず 、 マ ー ジ コ ス ト が 増 加 す る 。 コンフリクト多発中のMR 何が正しいのか わからない… コンフリクトメンテナンス性 レビュアー
  31. 31. コンフリクトが多発するとどうなるか レ ビ ュ ア ー は マ ー ジ の 順 番 や コ ー ド の 整 合 性 が わ か ら ず 、 マ ー ジ コ ス ト が 増 加 す る 。 コンフリクト多発中のMR 何が正しいのか わからない… コンフリクトメンテナンス性 レビュアー
  32. 32. レビュアーの負担が激増!!
  33. 33. レビュアーのつらみ 日 を 追 う 毎 に 重 く な る レ ビ ュ ア ー の 負 担 メ ン テ ナ ン ス 性 の 低 い コ ー ド コ ン フ リ ク ト の 多 発 レ ビ ュ ー に 時 間 が 掛 か る チ ー ム の 遅 延 の 一 因 に や っ と の 思 い で 機 能 を 実 装 何 と か 1 つ マ ー ジ す る 増 加 し て い る コ ン フ リ ク ト 更 に レ ビ ュ ー に 時 間 が 取 ら れ る 自 担 当 機 能 の 遅 延 溜 ま っ て い る レ ビ ュ ー 依 頼 コンフリクトメンテナンス性
  34. 34. レビュアーのつらみ 日 を 追 う 毎 に 重 く な る レ ビ ュ ア ー の 負 担 メ ン テ ナ ン ス 性 の 低 い コ ー ド コ ン フ リ ク ト の 多 発 レ ビ ュ ー に 時 間 が 掛 か る チ ー ム の 遅 延 の 一 因 に や っ と の 思 い で 機 能 を 実 装 何 と か 1 つ マ ー ジ す る 増 加 し て い る コ ン フ リ ク ト 更 に レ ビ ュ ー に 時 間 が 取 ら れ る 自 担 当 機 能 の 遅 延 溜 ま っ て い る レ ビ ュ ー 依 頼 コンフリクトメンテナンス性
  35. 35. 壁は想像以上に高かった
  36. 36. やはり、エンタープライズに Ruby on Railsは不向きなのか…
  37. 37. どうするか
  38. 38. 突破法を考えてみた ・ コードメンテナンス性の壁 ⇒強力なIDEレベルの仕組み ⇒開発統制 ・ コンフリクトの壁 ⇒人が編集するファイルの極小化 ⇒自動生成
  39. 39. 突破法を考えてみた ・ コードメンテナンス性の壁 ⇒強力なIDEレベルの仕組み ⇒開発統制 ・ コンフリクトの壁 ⇒人が編集するファイルの極小化 ⇒自動生成
  40. 40. 実行してみた
  41. 41. 開発統制
  42. 42. 選んだ方法は RuboCop Drone Rubyの 静的解析ツール 継続的 インテグレーション 開発統制 自動生成 独自チェッカー 弊社謹製の コードチェッカー 軽量 テキストエディタ SublimeText3 コンフリクトメンテナンス性
  43. 43. 各開発者の実装時 RuboCop×SublimeText3×独自チェッカーによって、 強制フォーマットと規約違反をチェック rbファイル ERBファイル SublimeText3RuboCop 独自チェッカー 開発統制 自動生成 コンフリクトメンテナンス性
  44. 44. 各開発者の実装時 RuboCop×SublimeText3×独自チェッカーによって、 強制フォーマットと規約違反をチェック rbファイル ERBファイル SublimeText3RuboCop 独自チェッカー 開発統制 自動生成 コンフリクトメンテナンス性
  45. 45. コードの強制フォーマット 使 用 す る コ ー ド イケてないコード 開発統制 自動生成 コンフリクトメンテナンス性
  46. 46. コードの強制フォーマット フ ォ ー マ ッ ト の 様 子 開発統制 自動生成 コンフリクトメンテナンス性
  47. 47. コードの強制フォーマット フ ォ ー マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性
  48. 48. コードの強制フォーマット フ ォ ー マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性 コード複雑度 への警告
  49. 49. コードの強制フォーマット フ ォ ー マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性 コード複雑度 への警告 無駄なself を削除
  50. 50. コードの強制フォーマット フ ォ ー マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性 コード複雑度 への警告 無駄なself を削除 unless→if への変換
  51. 51. コードの強制フォーマット フ ォ ー マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性 コード複雑度 への警告 無駄なself を削除 unless→if への変換 後置ifへの 警告
  52. 52. コードの強制フォーマット フ ォ ー マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性 コード複雑度 への警告 無駄なself を削除 unless→if への変換 後置ifへの 警告
  53. 53. ERBの規約チェック 使 用 す る コ ー ド 開発統制 自動生成 コンフリクトメンテナンス性
  54. 54. ERBの規約チェック 使 用 す る コ ー ド 開発統制 自動生成 コンフリクトメンテナンス性 ERBコメントではなく、 HTMLコメントを使用
  55. 55. ERBの規約チェック 規 約 チ ェ ッ ク 実 行 警告 ポップアップ 開発統制 自動生成 コンフリクトメンテナンス性
  56. 56. ERBの規約チェック 規 約 チ ェ ッ ク 実 行 警告 ポップアップ 開発統制 自動生成 コンフリクトメンテナンス性
  57. 57. SublimeText3を 使わない人が現れたら… 俺は絶対にVimが良いんだよ。 Vimの方が生産性上がるから 影でこっそり使ってやろう… 開発統制 自動生成 コンフリクトメンテナンス性
  58. 58. Droneによるチェック DroneでもRuboCopと規約チェックを行い、GitLabと連携させることで、 コードスタイルを水際で担保。 独自チェッカー Git featureブランチ Git masterブランチ Commit&Push OK? YES コードスタイルチェックが通った場合のみ MRのacceptが可能となる。 MergeRequest MR accept 開発統制 自動生成 コンフリクトメンテナンス性
  59. 59. パスしなかったMergeRequest マージ 不可能! 開発統制 自動生成 コンフリクトメンテナンス性 チ ェ ッ ク を 通 ら な か っ た M e r g e Re q u e s t は 、 マ ス タ ー マ ー ジ で き な い 。
  60. 60. パスしなかったMergeRequest マージ 不可能! 開発統制 自動生成 コンフリクトメンテナンス性 チ ェ ッ ク を 通 ら な か っ た M e r g e Re q u e s t は 、 マ ス タ ー マ ー ジ で き な い 。
  61. 61. 独自チェッカー 開発フローにすると.. Git featureブランチ Git masterブランチ 独自チェッカー 常にフォーマット、 チェックされながら開発 Commit&Push リモートへのpushをフック、 リモート側でもRuboCopと独自 チェッカーでコードスタイルをチェック OK? YESNo コードスタイルチェックが通らなかった場合は、 メールやslackで通知。 開発者は修正後、再びリモートへpush コードスタイルチェックが通った場合のみ MRのacceptが可能となる。 Master Merge MR accept Start 開発統制 自動生成 コンフリクトメンテナンス性
  62. 62. 自動生成
  63. 63. 設計書情報を全てDB上に抽出、管理 こんな社内ツールが出来始めた 開発統制 自動生成 コンフリクトメンテナンス性
  64. 64. こんな社内ツールが出来始めた ・リポジトリへのコミットでJenkinsジョブ起動 ・設計書を解析してDBへロード ・エクセル設計書は勿論、ER図にも対応 設計書 SVN DB ①コミット Jenkins②ジョブ起動 ③設計書DBロード 開発統制 自動生成 コンフリクトメンテナンス性
  65. 65. ここから自動生成する Jenkins テンプレートエンジン 設計書情報 抽出 任意自動生成 ファイル ・Java/テンプレートエンジンとSQLの組み合わせで汎用的にファイルを生成 ・DBにある設計書情報からであれば、どんなファイルでも生成可能 DB 開発統制 自動生成 コンフリクトメンテナンス性
  66. 66. 例えばURL・権限設計書から 開発統制 自動生成 コンフリクトメンテナンス性
  67. 67. 例えばURL・権限設計書から 権限定義を生成したり 開発統制 自動生成 コンフリクトメンテナンス性
  68. 68. 例えばURL・権限設計書から 開発統制 自動生成 コンフリクトメンテナンス性 Routingを生成したり。 などなど
  69. 69. Routingについてちょっと補足 名前空間ごとにRoutingを分割 config/routes/XXX.rb アプリケーション定義を変更して config/application.rb 開発統制 自動生成 コンフリクトメンテナンス性
  70. 70. Routingについてちょっと補足 Routing分割の効果 ・可読性向上 ・一部は手メンテ可能 (gemで勝手に追加されるRoutingなど) 開発統制 自動生成 コンフリクトメンテナンス性
  71. 71. 例えばER図から 開発統制 自動生成 コンフリクトメンテナンス性
  72. 72. 例えばER図から マイグレーションを生成したり、 開発統制 自動生成 コンフリクトメンテナンス性
  73. 73. 例えばER図から 開発統制 自動生成 コンフリクトメンテナンス性 RSpecを生成したり
  74. 74. 例えばER図から 開発統制 自動生成 コンフリクトメンテナンス性 Modelを生成したり。 などなど
  75. 75. Modelについてちょっと補足 役割ごとにmodelを分割 自動生成 app/models/user.rb app/models/user/XXX.rb アプリケーション定義を変更して config/application.rb 開発統制 自動生成 コンフリクトメンテナンス性
  76. 76. Modelについてちょっと補足 Model分割の効果 ・Fat Model対策 ・一部を自動生成可能に 開発統制 自動生成 コンフリクトメンテナンス性
  77. 77. 様々なファイルを自動生成 (一部の例) URL・権限設計書 ER図 画面設計書 Routing permission.yml (権限定義ファイル) menu.yml (メニュー定義ファイル) Model RSpec Migration attributes.yml View item.ja.yml (画面ラベル定義ファイル) Controller ・ロジックが不要な部分は全て自動生成 凡例: 半自動生成 開発統制 自動生成 コンフリクトメンテナンス性
  78. 78. 自動生成の仕組み まとめ 設計書 Jenkins SVN DB Git featureブランチ Git masterブランチ 自動生成ソース 凡例: データの流れ ①コミット ③設計書情報 をDBにロード ②コミット を検知 Jenkinsジョブ ④-①DB情報を基にソースを自動生成 ④-②Gitにブランチを作成し、Commit&Push ④-③GitLabにMRを投げる ・設計書を一度DBに抽出、そこからコードを生成させる ・設計書をコミットしたら自動でMRが上がってくる仕組みを実現 GitLab管理 開発統制 自動生成 コンフリクトメンテナンス性
  79. 79. 開発フローをまとめると.. 設計書 Jenkins SVN DB Git featureブランチ ①コミット ③設計書情報 をDBにロード ②コミット を検知 ④-①DB情報を基にソースを自動生成 ④-②Gitにブランチを作成し、Commit&Push 独自チェッカー Git featureブランチ ⑥常にフォーマット、 チェックされながら開発 ⑦Commit&Push ⑤自動生成された ブランチをチェックアウト Git masterブランチ OK? YES ⑩Master Merge ⑨MR accept 独自チェッカー No ⑧リモートへのPushをフック、 リモート側でもRuboCopと独自 チェッカーでコードスタイルをチェック Start 開発統制 自動生成 コンフリクトメンテナンス性
  80. 80. コードのメンテナンス性 レビュアーの負担大幅減少! 0 50 100 150 200 250 コード複雑度 0 500 1000 1500 2000 2500 3000 コード難読性 0 20000 40000 60000 80000 100000 120000 140000 コード重複度
  81. 81. 全コード中の自動生成の割合 64.9% (自動生成されたコード行数:約31000行) 人が編集するファイルの極小化!
  82. 82. コンフリクト発生率 25%→5% コンフリクト発生率大幅減少!
  83. 83. 壁を突破!
  84. 84. まとめ 自 動 化 を 推 進 す る こ と で Ru b y o n Ra i l s は エ ン タ ー プ ラ イ ズ の 開 発 手 法 に お い て も 取 り 得 る 選 択 肢 と な る 。 経験者が少数 コードの メンテナンス性低下 開発統制 10人以上の同時開発 コンフリクト多発 自動生成
  85. 85. Enterprise

×