SlideShare a Scribd company logo
エンタープライズ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 を 使 っ た 際 、 よ り 具 体 的 な 壁 に ぶ つ か り ま し た 。
そ れ が ど ん な 壁 な の か 、
ま た 、 そ の 突 破 法 を 本 日 お 伝 え し ま す 。
Enterprise
プロジェクト概要
●中規模開発
・ 開発期間:3.5ヶ月
・ 機能数:777
・ Model数:160
・ 開発人数:最大10人
・ ソース管理: GitLab
・ ドキュメント管理:Subversion
開発チーム
●経験者少数
・ 経験者数:1人
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
何が正しいのか
わからない…
コンフリクトメンテナンス性
レビュアー
レビュアーの負担が激増!!
レビュアーのつらみ
日 を 追 う 毎 に 重 く な る レ ビ ュ ア ー の 負 担
メ ン テ ナ ン ス 性 の
低 い コ ー ド
コ ン フ リ ク ト の 多 発
レ ビ ュ ー に
時 間 が 掛 か る
チ ー ム の 遅 延 の
一 因 に
や っ と の 思 い で 機 能 を
実 装
何 と か
1 つ マ ー ジ す る
増 加 し て い る
コ ン フ リ ク ト
更 に レ ビ ュ ー に
時 間 が 取 ら れ る
自 担 当 機 能 の
遅 延
溜 ま っ て い る
レ ビ ュ ー 依 頼
コンフリクトメンテナンス性
レビュアーのつらみ
日 を 追 う 毎 に 重 く な る レ ビ ュ ア ー の 負 担
メ ン テ ナ ン ス 性 の
低 い コ ー ド
コ ン フ リ ク ト の 多 発
レ ビ ュ ー に
時 間 が 掛 か る
チ ー ム の 遅 延 の
一 因 に
や っ と の 思 い で 機 能 を
実 装
何 と か
1 つ マ ー ジ す る
増 加 し て い る
コ ン フ リ ク ト
更 に レ ビ ュ ー に
時 間 が 取 ら れ る
自 担 当 機 能 の
遅 延
溜 ま っ て い る
レ ビ ュ ー 依 頼
コンフリクトメンテナンス性
壁は想像以上に高かった
やはり、エンタープライズに
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
OK?
YES
コードスタイルチェックが通った場合のみ
MRのacceptが可能となる。
MergeRequest
MR accept
開発統制 自動生成
コンフリクトメンテナンス性
パスしなかった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をフック、
リモート側でもRuboCopと独自
チェッカーでコードスタイルをチェック
OK?
YESNo
コードスタイルチェックが通らなかった場合は、
メールやslackで通知。
開発者は修正後、再びリモートへpush
コードスタイルチェックが通った場合のみ
MRのacceptが可能となる。
Master Merge
MR accept
Start
開発統制 自動生成
コンフリクトメンテナンス性
自動生成
設計書情報を全てDB上に抽出、管理
こんな社内ツールが出来始めた 開発統制 自動生成
コンフリクトメンテナンス性
こんな社内ツールが出来始めた
・リポジトリへのコミットでJenkinsジョブ起動
・設計書を解析してDBへロード
・エクセル設計書は勿論、ER図にも対応
設計書 SVN DB
①コミット
Jenkins②ジョブ起動 ③設計書DBロード
開発統制 自動生成
コンフリクトメンテナンス性
ここから自動生成する
Jenkins
テンプレートエンジン
設計書情報
抽出 任意自動生成
ファイル
・Java/テンプレートエンジンとSQLの組み合わせで汎用的にファイルを生成
・DBにある設計書情報からであれば、どんなファイルでも生成可能
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 attributes.yml
View item.ja.yml
(画面ラベル定義ファイル)
Controller
・ロジックが不要な部分は全て自動生成 凡例:
半自動生成
開発統制 自動生成
コンフリクトメンテナンス性
自動生成の仕組み まとめ
設計書
Jenkins
SVN DB Git
featureブランチ
Git
masterブランチ
自動生成ソース
凡例: データの流れ
①コミット
③設計書情報
をDBにロード
②コミット
を検知
Jenkinsジョブ
④-①DB情報を基にソースを自動生成
④-②Gitにブランチを作成し、Commit&Push
④-③GitLabにMRを投げる
・設計書を一度DBに抽出、そこからコードを生成させる
・設計書をコミットしたら自動でMRが上がってくる仕組みを実現
GitLab管理
開発統制 自動生成
コンフリクトメンテナンス性
開発フローをまとめると..
設計書
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
開発統制 自動生成
コンフリクトメンテナンス性
コードのメンテナンス性
レビュアーの負担大幅減少!
0
50
100
150
200
250
コード複雑度
0
500
1000
1500
2000
2500
3000
コード難読性
0
20000
40000
60000
80000
100000
120000
140000
コード重複度
全コード中の自動生成の割合
64.9%
(自動生成されたコード行数:約31000行)
人が編集するファイルの極小化!
コンフリクト発生率
25%→5%
コンフリクト発生率大幅減少!
壁を突破!
まとめ
自 動 化 を 推 進 す る こ と で Ru b y o n Ra i l s は エ ン タ ー プ ラ イ ズ の
開 発 手 法 に お い て も 取 り 得 る 選 択 肢 と な る 。
経験者が少数
コードの
メンテナンス性低下
開発統制
10人以上の同時開発
コンフリクト多発
自動生成
Enterprise
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~

More Related Content

What's hot (20)

「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか
Yoshiki Hayama
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
 
KafkaとPulsar
KafkaとPulsarKafkaとPulsar
KafkaとPulsar
Yahoo!デベロッパーネットワーク
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!デベロッパーネットワーク
 
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
Yuta Imai
 
正しいものを正しくつくる
正しいものを正しくつくる正しいものを正しくつくる
正しいものを正しくつくる
toshihiro ichitani
 
chatGPTの驚くべき対話能力.pdf
chatGPTの驚くべき対話能力.pdfchatGPTの驚くべき対話能力.pdf
chatGPTの驚くべき対話能力.pdf
YamashitaKatsushi
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
 
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
Masaya Tahara
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
NTT DATA Technology & Innovation
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
 
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
ヤフーのプライベートクラウドとクラウドエンジニアの業務についてヤフーのプライベートクラウドとクラウドエンジニアの業務について
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
Yahoo!デベロッパーネットワーク
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
Takuto Wada
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
 
「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか
Yoshiki Hayama
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!デベロッパーネットワーク
 
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
Yuta Imai
 
正しいものを正しくつくる
正しいものを正しくつくる正しいものを正しくつくる
正しいものを正しくつくる
toshihiro ichitani
 
chatGPTの驚くべき対話能力.pdf
chatGPTの驚くべき対話能力.pdfchatGPTの驚くべき対話能力.pdf
chatGPTの驚くべき対話能力.pdf
YamashitaKatsushi
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
 
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
Masaya Tahara
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
NTT DATA Technology & Innovation
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
 
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
ヤフーのプライベートクラウドとクラウドエンジニアの業務についてヤフーのプライベートクラウドとクラウドエンジニアの業務について
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
Yahoo!デベロッパーネットワーク
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
Takuto Wada
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
 

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

実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選
Drecom Co., Ltd.
 
はじめてがアジャイル
はじめてがアジャイルはじめてがアジャイル
はじめてがアジャイル
Kenichi Takahashi
 
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化
Masaki Takeuchi
 
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ayumu Aizawa
 
TechRacho: 技術情報発信から広げるエンジニア発のコミュニケーション文化作り
TechRacho: 技術情報発信から広げるエンジニア発のコミュニケーション文化作りTechRacho: 技術情報発信から広げるエンジニア発のコミュニケーション文化作り
TechRacho: 技術情報発信から広げるエンジニア発のコミュニケーション文化作り
Masato Mori
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
Koichi ITO
 
Agile japan2010 rakuten様プレゼン資料
Agile japan2010 rakuten様プレゼン資料Agile japan2010 rakuten様プレゼン資料
Agile japan2010 rakuten様プレゼン資料
Akiko Kosaka
 
クライアントの要望にこたえるWebサービス開発 ~「らせん型ワークフロー」のススメ~
クライアントの要望にこたえるWebサービス開発 ~「らせん型ワークフロー」のススメ~クライアントの要望にこたえるWebサービス開発 ~「らせん型ワークフロー」のススメ~
クライアントの要望にこたえるWebサービス開発 ~「らせん型ワークフロー」のススメ~
Mayuko Sekiya
 
第2回関西ソーシャルゲーム勉強会
第2回関西ソーシャルゲーム勉強会第2回関西ソーシャルゲーム勉強会
第2回関西ソーシャルゲーム勉強会
ha1t
 
Issues of Rubyists
Issues of RubyistsIssues of Rubyists
Issues of Rubyists
Ayumu Aizawa
 
レガシーコード改善ガイド読書会
レガシーコード改善ガイド読書会レガシーコード改善ガイド読書会
レガシーコード改善ガイド読書会
Hiro Yoshioka
 
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab_okayamaruby_subslide
nomlab_okayamaruby_subslide
nomlab
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
Dai FUJIHARA
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
Rakuten Group, Inc.
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
Yasushi Ishikawa
 
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと
Suzuki Masayuki
 
モデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのかモデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのか
Atsushi Yasuda
 
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
心 谷本
 
スキニーなシステム開発にぴったりの契約形態
スキニーなシステム開発にぴったりの契約形態スキニーなシステム開発にぴったりの契約形態
スキニーなシステム開発にぴったりの契約形態
Eiwa System Management, Inc.
 
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景ソフトウェア開発の現場風景
ソフトウェア開発の現場風景
Koichi ITO
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選
Drecom Co., Ltd.
 
はじめてがアジャイル
はじめてがアジャイルはじめてがアジャイル
はじめてがアジャイル
Kenichi Takahashi
 
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化
Masaki Takeuchi
 
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ayumu Aizawa
 
TechRacho: 技術情報発信から広げるエンジニア発のコミュニケーション文化作り
TechRacho: 技術情報発信から広げるエンジニア発のコミュニケーション文化作りTechRacho: 技術情報発信から広げるエンジニア発のコミュニケーション文化作り
TechRacho: 技術情報発信から広げるエンジニア発のコミュニケーション文化作り
Masato Mori
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
Koichi ITO
 
Agile japan2010 rakuten様プレゼン資料
Agile japan2010 rakuten様プレゼン資料Agile japan2010 rakuten様プレゼン資料
Agile japan2010 rakuten様プレゼン資料
Akiko Kosaka
 
クライアントの要望にこたえるWebサービス開発 ~「らせん型ワークフロー」のススメ~
クライアントの要望にこたえるWebサービス開発 ~「らせん型ワークフロー」のススメ~クライアントの要望にこたえるWebサービス開発 ~「らせん型ワークフロー」のススメ~
クライアントの要望にこたえるWebサービス開発 ~「らせん型ワークフロー」のススメ~
Mayuko Sekiya
 
第2回関西ソーシャルゲーム勉強会
第2回関西ソーシャルゲーム勉強会第2回関西ソーシャルゲーム勉強会
第2回関西ソーシャルゲーム勉強会
ha1t
 
Issues of Rubyists
Issues of RubyistsIssues of Rubyists
Issues of Rubyists
Ayumu Aizawa
 
レガシーコード改善ガイド読書会
レガシーコード改善ガイド読書会レガシーコード改善ガイド読書会
レガシーコード改善ガイド読書会
Hiro Yoshioka
 
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab_okayamaruby_subslide
nomlab_okayamaruby_subslide
nomlab
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
Dai FUJIHARA
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
Rakuten Group, Inc.
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
Yasushi Ishikawa
 
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと
Suzuki Masayuki
 
モデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのかモデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのか
Atsushi Yasuda
 
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
心 谷本
 
スキニーなシステム開発にぴったりの契約形態
スキニーなシステム開発にぴったりの契約形態スキニーなシステム開発にぴったりの契約形態
スキニーなシステム開発にぴったりの契約形態
Eiwa System Management, Inc.
 
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景ソフトウェア開発の現場風景
ソフトウェア開発の現場風景
Koichi ITO
 

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