Submit Search
Upload
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~
•
Download as PPTX, PDF
•
0 likes
•
1,975 views
hiroki tanaka
Follow
関西Ruby会議2017での「エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~」の発表で用いた講演資料です。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 86
Download now
Recommended
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
Recommended
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
土岐 孝平
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
2021 days opening
2021 days opening
Kameda Harunobu
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
Recruit Technologies
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方
Takafumi ONAKA
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
NISHIHARA Shota
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
Koichiro Matsuoka
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
Yasuhito Yabe
More Related Content
What's hot
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
土岐 孝平
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
2021 days opening
2021 days opening
Kameda Harunobu
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
Recruit Technologies
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方
Takafumi ONAKA
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
NISHIHARA Shota
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
Koichiro Matsuoka
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
What's hot
(20)
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
2021 days opening
2021 days opening
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
イベント・ソーシングを知る
イベント・ソーシングを知る
Similar to エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
Yasuhito Yabe
ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!
ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!
TAKUYA OHTA
ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれから
ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれから
Yasuhiro Horiuchi
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
DIVE INTO CODE Corp.
アプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考える
pospome
Java-minishift-20191123
Java-minishift-20191123
Yasushi Osonoi
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
Tsunenori Oohara
Movable Type for AWS を用いた環境構築のポイント
Movable Type for AWS を用いた環境構築のポイント
Makoto Tajima
TypeTalks第10回「もっと知りたい!Webフォント」
TypeTalks第10回「もっと知りたい!Webフォント」
Kosuke Yamada
Info talk #36
Info talk #36
Hiroshi Bunya
WordPressで行う継続的インテグレーションのススメ
WordPressで行う継続的インテグレーションのススメ
horike37
Adminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発Tips
Takashi Hatamoto
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Roy Kim
ソーシャルコンテンツマネジメント
ソーシャルコンテンツマネジメント
Akinori Ishii
Aws summits2014 nttデータaws上のシステムはこう作る!
Aws summits2014 nttデータaws上のシステムはこう作る!
Boss4434
国産baserCMSの基本機能と秘めたポテンシャル
国産baserCMSの基本機能と秘めたポテンシャル
Ryuji Egashira
Coding Guide
Coding Guide
ohdreamer
SEゼミ2014 - コードチェンジ
SEゼミ2014 - コードチェンジ
Kouhei Sutou
あらためて考えるCMS選択 2012
あらためて考えるCMS選択 2012
Yasuhito Yabe
Similar to エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~
(20)
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!
ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!
ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれから
ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれから
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
アプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考える
Java-minishift-20191123
Java-minishift-20191123
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
Movable Type for AWS を用いた環境構築のポイント
Movable Type for AWS を用いた環境構築のポイント
TypeTalks第10回「もっと知りたい!Webフォント」
TypeTalks第10回「もっと知りたい!Webフォント」
Info talk #36
Info talk #36
WordPressで行う継続的インテグレーションのススメ
WordPressで行う継続的インテグレーションのススメ
Adminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発Tips
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
ソーシャルコンテンツマネジメント
ソーシャルコンテンツマネジメント
Aws summits2014 nttデータaws上のシステムはこう作る!
Aws summits2014 nttデータaws上のシステムはこう作る!
国産baserCMSの基本機能と秘めたポテンシャル
国産baserCMSの基本機能と秘めたポテンシャル
Coding Guide
Coding Guide
SEゼミ2014 - コードチェンジ
SEゼミ2014 - コードチェンジ
あらためて考えるCMS選択 2012
あらためて考えるCMS選択 2012
Recently uploaded
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Recently uploaded
(11)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~
1.
エンタープライズRubyOnRails Future Architect, Inc. Hiroki
Tanaka エンプラでぶち当たった2つの壁と突破法 関西Ruby会議2017
2.
自己紹介 田中 宏基(たなか ひろき) ・
フューチャーアーキテクト株式会社 Technology Innovation Group所属 ・ 社内でのRuby on Railsのプレゼンス向上活動に 従事 ・ 茶道の師範ライセンス所持
3.
会社紹介
4.
フューチャーアーキテクト株式会社 (英文表記:Future Architect, Inc.)
5.
羽田空港国内線第2ターミナルに広告掲載 TBSでCM放送中(関東のみ)
6.
フューチャーをざっくり言うと 通 常 の
I T ベ ン ダ ー と 違 い 、 コ ン サ ル か ら S I ま で 一 気 通 貫 で 行 う 。 中 立 ( ニ ュ ー ト ラ ル ) の ポ ジ シ ョ ン 。 「 な い も の は つ く る 」 の 精 神 。 ・ 自 社 サ ー ビ ス も 行 う 。
7.
巷ではこう言われている…
8.
エンタープライズに Ruby on Railsは不向き、と
9.
(巷説)エンタープライズにRuby on Railsは不向き ①高すぎる柔軟性
10.
(巷説)エンタープライズにRuby on Railsは不向き ①高すぎる柔軟性 ②Railsによる規約の縛り
11.
本日お伝えしたいこと 巷 で は
こ ん な こ と が 言 わ れ て い ま す が 、 実 際 に エ ン タ ー プ ラ イ ズ シ ス テ ム 開 発 が 得 意 な 会 社 で R u b y o n Ra i l s を 使 っ た 際 、 よ り 具 体 的 な 壁 に ぶ つ か り ま し た 。 そ れ が ど ん な 壁 な の か 、 ま た 、 そ の 突 破 法 を 本 日 お 伝 え し ま す 。 Enterprise
12.
プロジェクト概要 ●中規模開発 ・ 開発期間:3.5ヶ月 ・ 機能数:777 ・
Model数:160 ・ 開発人数:最大10人 ・ ソース管理: GitLab ・ ドキュメント管理:Subversion 開発チーム ●経験者少数 ・ 経験者数:1人
13.
2つの壁にぶち当たった
14.
コードのメンテナンス性低下 コンフリクトの多発
15.
コードのメンテナンス性低下
16.
経験者が不足するとどうなるか 一 貫 性
の な い コ ー ド が 量 産 さ れ る 。 コンフリクトメンテナンス性
17.
経験者が不足するとどうなるか 一 貫 性
の な い コ ー ド が 量 産 さ れ る 。 each文内 の深いネスト コンフリクトメンテナンス性
18.
経験者が不足するとどうなるか 一 貫 性
の な い コ ー ド が 量 産 さ れ る 。 each文内 の深いネスト 無駄なself コンフリクトメンテナンス性
19.
経験者が不足するとどうなるか 一 貫 性
の な い コ ー ド が 量 産 さ れ る 。 each文内 の深いネスト If文内に unless 無駄なself コンフリクトメンテナンス性
20.
経験者が不足するとどうなるか 一 貫 性
の な い コ ー ド が 量 産 さ れ る 。 each文内 の深いネスト If文内に unless If文内に 後置if 無駄なself コンフリクトメンテナンス性
21.
経験者が不足するとどうなるか 一 貫 性
の な い コ ー ド が 量 産 さ れ る 。 each文内 の深いネスト If文内に unless If文内に 後置if 無駄なself コンフリクトメンテナンス性
22.
メンテナンス性が低下するとどうなるか レ ビ ュ
ア ー の 負 担 が 増 加 す る 。 イケてないコード 読みづらい… わかりづらい… コンフリクトメンテナンス性 レビュアー
23.
メンテナンス性が低下するとどうなるか レ ビ ュ
ア ー の 負 担 が 増 加 す る 。 イケてないコード 読みづらい… わかりづらい… コンフリクトメンテナンス性 レビュアー
24.
コンフリクトの多発
25.
中規模開発を行うとどうなるか Ra i l
s の 特 性 上 、 同 一 フ ァ イ ル を 複 数 人 で 編 集 す る こ と が 多 い 。 Model 例 : M o d e l コンフリクトメンテナンス性
26.
中規模開発を行うとどうなるか 同 じ フ
ァ イ ル を 編 集 し た 様 々 な fe a t u r e ブ ラ ン チ が 存 在 す る 。 master Model MergeRequest featureブランチ コンフリクトメンテナンス性
27.
中規模開発を行うとどうなるか 各 ブ ラ
ン チ か ら MergeRequestが発行される。 master Model コンフリクトメンテナンス性 MergeRequest featureブランチ
28.
中規模開発を行うとどうなるか M e r
g e Re q u e s t の 1 つ を マ ー ジ す る 。 master Model Merge! コンフリクトメンテナンス性 MergeRequest featureブランチ
29.
中規模開発を行うとどうなるか 他 の M
e r g e Re q u e s t で コ ン フ リ ク ト が 発 生 す る 。 master Model Merge! コンフリクトメンテナンス性 MergeRequest featureブランチ
30.
コンフリクトが多発するとどうなるか レ ビ ュ
ア ー は マ ー ジ の 順 番 や コ ー ド の 整 合 性 が わ か ら ず 、 マ ー ジ コ ス ト が 増 加 す る 。 コンフリクト多発中のMR 何が正しいのか わからない… コンフリクトメンテナンス性 レビュアー
31.
コンフリクトが多発するとどうなるか レ ビ ュ
ア ー は マ ー ジ の 順 番 や コ ー ド の 整 合 性 が わ か ら ず 、 マ ー ジ コ ス ト が 増 加 す る 。 コンフリクト多発中のMR 何が正しいのか わからない… コンフリクトメンテナンス性 レビュアー
32.
レビュアーの負担が激増!!
33.
レビュアーのつらみ 日 を 追
う 毎 に 重 く な る レ ビ ュ ア ー の 負 担 メ ン テ ナ ン ス 性 の 低 い コ ー ド コ ン フ リ ク ト の 多 発 レ ビ ュ ー に 時 間 が 掛 か る チ ー ム の 遅 延 の 一 因 に や っ と の 思 い で 機 能 を 実 装 何 と か 1 つ マ ー ジ す る 増 加 し て い る コ ン フ リ ク ト 更 に レ ビ ュ ー に 時 間 が 取 ら れ る 自 担 当 機 能 の 遅 延 溜 ま っ て い る レ ビ ュ ー 依 頼 コンフリクトメンテナンス性
34.
レビュアーのつらみ 日 を 追
う 毎 に 重 く な る レ ビ ュ ア ー の 負 担 メ ン テ ナ ン ス 性 の 低 い コ ー ド コ ン フ リ ク ト の 多 発 レ ビ ュ ー に 時 間 が 掛 か る チ ー ム の 遅 延 の 一 因 に や っ と の 思 い で 機 能 を 実 装 何 と か 1 つ マ ー ジ す る 増 加 し て い る コ ン フ リ ク ト 更 に レ ビ ュ ー に 時 間 が 取 ら れ る 自 担 当 機 能 の 遅 延 溜 ま っ て い る レ ビ ュ ー 依 頼 コンフリクトメンテナンス性
35.
壁は想像以上に高かった
36.
やはり、エンタープライズに Ruby on Railsは不向きなのか…
37.
どうするか
38.
突破法を考えてみた ・ コードメンテナンス性の壁 ⇒強力なIDEレベルの仕組み ⇒開発統制 ・ コンフリクトの壁 ⇒人が編集するファイルの極小化 ⇒自動生成
39.
突破法を考えてみた ・ コードメンテナンス性の壁 ⇒強力なIDEレベルの仕組み ⇒開発統制 ・ コンフリクトの壁 ⇒人が編集するファイルの極小化 ⇒自動生成
40.
実行してみた
41.
開発統制
42.
選んだ方法は RuboCop Drone Rubyの 静的解析ツール 継続的 インテグレーション 開発統制 自動生成 独自チェッカー 弊社謹製の コードチェッカー 軽量 テキストエディタ SublimeText3 コンフリクトメンテナンス性
43.
各開発者の実装時 RuboCop×SublimeText3×独自チェッカーによって、 強制フォーマットと規約違反をチェック rbファイル ERBファイル SublimeText3RuboCop 独自チェッカー 開発統制
自動生成 コンフリクトメンテナンス性
44.
各開発者の実装時 RuboCop×SublimeText3×独自チェッカーによって、 強制フォーマットと規約違反をチェック rbファイル ERBファイル SublimeText3RuboCop 独自チェッカー 開発統制
自動生成 コンフリクトメンテナンス性
45.
コードの強制フォーマット 使 用 す
る コ ー ド イケてないコード 開発統制 自動生成 コンフリクトメンテナンス性
46.
コードの強制フォーマット フ ォ ー
マ ッ ト の 様 子 開発統制 自動生成 コンフリクトメンテナンス性
47.
コードの強制フォーマット フ ォ ー
マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性
48.
コードの強制フォーマット フ ォ ー
マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性 コード複雑度 への警告
49.
コードの強制フォーマット フ ォ ー
マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性 コード複雑度 への警告 無駄なself を削除
50.
コードの強制フォーマット フ ォ ー
マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性 コード複雑度 への警告 無駄なself を削除 unless→if への変換
51.
コードの強制フォーマット フ ォ ー
マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性 コード複雑度 への警告 無駄なself を削除 unless→if への変換 後置ifへの 警告
52.
コードの強制フォーマット フ ォ ー
マ ッ ト 後 開発統制 自動生成 コンフリクトメンテナンス性 コード複雑度 への警告 無駄なself を削除 unless→if への変換 後置ifへの 警告
53.
ERBの規約チェック 使 用 す
る コ ー ド 開発統制 自動生成 コンフリクトメンテナンス性
54.
ERBの規約チェック 使 用 す
る コ ー ド 開発統制 自動生成 コンフリクトメンテナンス性 ERBコメントではなく、 HTMLコメントを使用
55.
ERBの規約チェック 規 約 チ
ェ ッ ク 実 行 警告 ポップアップ 開発統制 自動生成 コンフリクトメンテナンス性
56.
ERBの規約チェック 規 約 チ
ェ ッ ク 実 行 警告 ポップアップ 開発統制 自動生成 コンフリクトメンテナンス性
57.
SublimeText3を 使わない人が現れたら… 俺は絶対にVimが良いんだよ。 Vimの方が生産性上がるから 影でこっそり使ってやろう… 開発統制 自動生成 コンフリクトメンテナンス性
58.
Droneによるチェック DroneでもRuboCopと規約チェックを行い、GitLabと連携させることで、 コードスタイルを水際で担保。 独自チェッカー Git featureブランチ Git masterブランチ Commit&Push OK? YES コードスタイルチェックが通った場合のみ MRのacceptが可能となる。 MergeRequest MR accept 開発統制 自動生成 コンフリクトメンテナンス性
59.
パスしなかったMergeRequest マージ 不可能! 開発統制 自動生成 コンフリクトメンテナンス性 チ ェ
ッ ク を 通 ら な か っ た M e r g e Re q u e s t は 、 マ ス タ ー マ ー ジ で き な い 。
60.
パスしなかったMergeRequest マージ 不可能! 開発統制 自動生成 コンフリクトメンテナンス性 チ ェ
ッ ク を 通 ら な か っ た M e r g e Re q u e s t は 、 マ ス タ ー マ ー ジ で き な い 。
61.
独自チェッカー 開発フローにすると.. Git featureブランチ Git masterブランチ 独自チェッカー 常にフォーマット、 チェックされながら開発 Commit&Push リモートへのpushをフック、 リモート側でもRuboCopと独自 チェッカーでコードスタイルをチェック OK? YESNo コードスタイルチェックが通らなかった場合は、 メールやslackで通知。 開発者は修正後、再びリモートへpush コードスタイルチェックが通った場合のみ MRのacceptが可能となる。 Master Merge MR accept Start 開発統制
自動生成 コンフリクトメンテナンス性
62.
自動生成
63.
設計書情報を全てDB上に抽出、管理 こんな社内ツールが出来始めた 開発統制 自動生成 コンフリクトメンテナンス性
64.
こんな社内ツールが出来始めた ・リポジトリへのコミットでJenkinsジョブ起動 ・設計書を解析してDBへロード ・エクセル設計書は勿論、ER図にも対応 設計書 SVN DB ①コミット Jenkins②ジョブ起動
③設計書DBロード 開発統制 自動生成 コンフリクトメンテナンス性
65.
ここから自動生成する Jenkins テンプレートエンジン 設計書情報 抽出 任意自動生成 ファイル ・Java/テンプレートエンジンとSQLの組み合わせで汎用的にファイルを生成 ・DBにある設計書情報からであれば、どんなファイルでも生成可能 DB 開発統制 自動生成 コンフリクトメンテナンス性
66.
例えばURL・権限設計書から 開発統制 自動生成 コンフリクトメンテナンス性
67.
例えばURL・権限設計書から 権限定義を生成したり 開発統制 自動生成 コンフリクトメンテナンス性
68.
例えばURL・権限設計書から 開発統制 自動生成 コンフリクトメンテナンス性 Routingを生成したり。 などなど
69.
Routingについてちょっと補足 名前空間ごとにRoutingを分割 config/routes/XXX.rb アプリケーション定義を変更して config/application.rb 開発統制 自動生成 コンフリクトメンテナンス性
70.
Routingについてちょっと補足 Routing分割の効果 ・可読性向上 ・一部は手メンテ可能 (gemで勝手に追加されるRoutingなど) 開発統制 自動生成 コンフリクトメンテナンス性
71.
例えばER図から 開発統制 自動生成 コンフリクトメンテナンス性
72.
例えばER図から マイグレーションを生成したり、 開発統制 自動生成 コンフリクトメンテナンス性
73.
例えばER図から 開発統制 自動生成 コンフリクトメンテナンス性 RSpecを生成したり
74.
例えばER図から 開発統制 自動生成 コンフリクトメンテナンス性 Modelを生成したり。 などなど
75.
Modelについてちょっと補足 役割ごとにmodelを分割 自動生成 app/models/user.rb app/models/user/XXX.rb アプリケーション定義を変更して config/application.rb 開発統制 自動生成 コンフリクトメンテナンス性
76.
Modelについてちょっと補足 Model分割の効果 ・Fat Model対策 ・一部を自動生成可能に 開発統制 自動生成 コンフリクトメンテナンス性
77.
様々なファイルを自動生成 (一部の例) URL・権限設計書 ER図
画面設計書 Routing permission.yml (権限定義ファイル) menu.yml (メニュー定義ファイル) Model RSpec Migration attributes.yml View item.ja.yml (画面ラベル定義ファイル) Controller ・ロジックが不要な部分は全て自動生成 凡例: 半自動生成 開発統制 自動生成 コンフリクトメンテナンス性
78.
自動生成の仕組み まとめ 設計書 Jenkins SVN DB
Git featureブランチ Git masterブランチ 自動生成ソース 凡例: データの流れ ①コミット ③設計書情報 をDBにロード ②コミット を検知 Jenkinsジョブ ④-①DB情報を基にソースを自動生成 ④-②Gitにブランチを作成し、Commit&Push ④-③GitLabにMRを投げる ・設計書を一度DBに抽出、そこからコードを生成させる ・設計書をコミットしたら自動でMRが上がってくる仕組みを実現 GitLab管理 開発統制 自動生成 コンフリクトメンテナンス性
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.
コードのメンテナンス性 レビュアーの負担大幅減少! 0 50 100 150 200 250 コード複雑度 0 500 1000 1500 2000 2500 3000 コード難読性 0 20000 40000 60000 80000 100000 120000 140000 コード重複度
81.
全コード中の自動生成の割合 64.9% (自動生成されたコード行数:約31000行) 人が編集するファイルの極小化!
82.
コンフリクト発生率 25%→5% コンフリクト発生率大幅減少!
83.
壁を突破!
84.
まとめ 自 動 化
を 推 進 す る こ と で Ru b y o n Ra i l s は エ ン タ ー プ ラ イ ズ の 開 発 手 法 に お い て も 取 り 得 る 選 択 肢 と な る 。 経験者が少数 コードの メンテナンス性低下 開発統制 10人以上の同時開発 コンフリクト多発 自動生成
85.
Enterprise
Download now