SlideShare a Scribd company logo
1 of 86
エンタープライズ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

劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜aha_oretama
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方Shohei Koyama
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?土岐 孝平
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けRecruit Technologies
 
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方Takafumi ONAKA
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素NISHIHARA Shota
 
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)Koichiro Matsuoka
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 

What's hot (20)

劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
2021 days opening
2021 days opening2021 days opening
2021 days opening
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
 
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
 
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 

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

XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Yasuhito Yabe
 
ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!
ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!
ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!TAKUYA OHTA
 
ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれから
ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれからベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれから
ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれからYasuhiro Horiuchi
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
アプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考えるアプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考えるpospome
 
Java-minishift-20191123
Java-minishift-20191123Java-minishift-20191123
Java-minishift-20191123Yasushi Osonoi
 
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Tsunenori Oohara
 
Movable Type for AWS を用いた環境構築のポイント
Movable Type for AWS を用いた環境構築のポイントMovable Type for AWS を用いた環境構築のポイント
Movable Type for AWS を用いた環境構築のポイントMakoto Tajima
 
TypeTalks第10回「もっと知りたい!Webフォント」
TypeTalks第10回「もっと知りたい!Webフォント」TypeTalks第10回「もっと知りたい!Webフォント」
TypeTalks第10回「もっと知りたい!Webフォント」Kosuke Yamada
 
WordPressで行う継続的インテグレーションのススメ
WordPressで行う継続的インテグレーションのススメWordPressで行う継続的インテグレーションのススメ
WordPressで行う継続的インテグレーションのススメhorike37
 
Adminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発TipsAdminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発TipsTakashi Hatamoto
 
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方Roy Kim
 
ソーシャルコンテンツマネジメント
ソーシャルコンテンツマネジメントソーシャルコンテンツマネジメント
ソーシャルコンテンツマネジメントAkinori Ishii
 
Aws summits2014 nttデータaws上のシステムはこう作る!
Aws summits2014 nttデータaws上のシステムはこう作る!Aws summits2014 nttデータaws上のシステムはこう作る!
Aws summits2014 nttデータaws上のシステムはこう作る!Boss4434
 
国産baserCMSの基本機能と秘めたポテンシャル
国産baserCMSの基本機能と秘めたポテンシャル国産baserCMSの基本機能と秘めたポテンシャル
国産baserCMSの基本機能と秘めたポテンシャルRyuji Egashira
 
Coding Guide
Coding GuideCoding Guide
Coding Guideohdreamer
 
SEゼミ2014 - コードチェンジ
SEゼミ2014 - コードチェンジSEゼミ2014 - コードチェンジ
SEゼミ2014 - コードチェンジKouhei Sutou
 
あらためて考えるCMS選択 2012
あらためて考えるCMS選択 2012あらためて考えるCMS選択 2012
あらためて考えるCMS選択 2012Yasuhito Yabe
 

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

XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
 
ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!
ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!
ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!
 
ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれから
ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれからベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれから
ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれから
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
アプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考えるアプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考える
 
Java-minishift-20191123
Java-minishift-20191123Java-minishift-20191123
Java-minishift-20191123
 
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
 
Movable Type for AWS を用いた環境構築のポイント
Movable Type for AWS を用いた環境構築のポイントMovable Type for AWS を用いた環境構築のポイント
Movable Type for AWS を用いた環境構築のポイント
 
TypeTalks第10回「もっと知りたい!Webフォント」
TypeTalks第10回「もっと知りたい!Webフォント」TypeTalks第10回「もっと知りたい!Webフォント」
TypeTalks第10回「もっと知りたい!Webフォント」
 
Info talk #36
Info talk #36Info talk #36
Info talk #36
 
WordPressで行う継続的インテグレーションのススメ
WordPressで行う継続的インテグレーションのススメWordPressで行う継続的インテグレーションのススメ
WordPressで行う継続的インテグレーションのススメ
 
Adminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発TipsAdminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発Tips
 
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
 
ソーシャルコンテンツマネジメント
ソーシャルコンテンツマネジメントソーシャルコンテンツマネジメント
ソーシャルコンテンツマネジメント
 
Aws summits2014 nttデータaws上のシステムはこう作る!
Aws summits2014 nttデータaws上のシステムはこう作る!Aws summits2014 nttデータaws上のシステムはこう作る!
Aws summits2014 nttデータaws上のシステムはこう作る!
 
国産baserCMSの基本機能と秘めたポテンシャル
国産baserCMSの基本機能と秘めたポテンシャル国産baserCMSの基本機能と秘めたポテンシャル
国産baserCMSの基本機能と秘めたポテンシャル
 
Coding Guide
Coding GuideCoding Guide
Coding Guide
 
SEゼミ2014 - コードチェンジ
SEゼミ2014 - コードチェンジSEゼミ2014 - コードチェンジ
SEゼミ2014 - コードチェンジ
 
あらためて考えるCMS選択 2012
あらためて考えるCMS選択 2012あらためて考えるCMS選択 2012
あらためて考えるCMS選択 2012
 

Recently uploaded

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス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...論文紹介: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論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。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論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 

Recently uploaded (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介: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論文紹介: 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の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。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論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

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