ルビコンペレストロイカ〜rubyonrailsにおけるci改革〜
DESCRIPTION
LLDecade 講演資料です。TRANSCRIPT
![Page 1: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/1.jpg)
〜RubyOnRailsにおけるCI改善〜
RubyOnRails CI Perestroika
高倉利明 / @TrinityT
![Page 2: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/2.jpg)
はじめに_自己紹介
● 高倉利明 / id:TrinityT● 株式会社アピリッツ(旧社名KBMJ)で
RubyOnRailsでWebアプリ、
ブラウザゲーム開発してます。
● 社内CIサーバ管理者
→今日はノウハウを紹介
![Page 3: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/3.jpg)
はじめに_今日の内容
1. 社内CI環境の概要と工夫点
2. RubyOnRailsでのCI設定例紹介
3. ビルド結果通知の工夫点
4. まとめ
![Page 4: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/4.jpg)
社内CI環境の概要と工夫点
![Page 5: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/5.jpg)
構成図
ソース管理サーバCIサーバ
開発者
テスト結果
![Page 6: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/6.jpg)
構成
CIツール Jenkins
ソース管理 Git、Subversion
ビルド、テスト Rspec、RUnit、Maven2..etc
![Page 7: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/7.jpg)
CI環境においての工夫3点
● ライブラリバージョン管理
● 新規プロジェクト追加の高速化
● テスト実行DB I/O高速化
![Page 8: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/8.jpg)
工夫1_ライブラリバージョン管理
Ruby関連ライブラリは進化が激しいので、
社内に異なるバージョンの案件が多数存在
● Jenkinsサーバ上にRVM(RubyVersionManager)
で主要バージョンのRubyを設定してある● ライブラリはBundler or gemset(依存管理ツー
ル)で管理
→どんな構成(Ruby20XX)でもすぐにCI対応可能
![Page 9: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/9.jpg)
工夫2_新規プロジェクト追加の高速化
● 社内Gitリポジトリアクセス用のJenkins専用公開鍵を配置
● テスト環境用のDBユーザ/パスワードは共通● Jenkins設定項目を標準化したひな形を作って
おきコピー
→10分程度で新規プロジェクトのCI追加可能!
![Page 10: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/10.jpg)
工夫3_テスト実行DB I/O高速化
しょぼいサーバのためテスト遅い。。。→MySQLのデータディレクトリをオンメモリ(tmpfs)に配置
→0円でテスト処理時間向上!
※弊社環境ではテスト実行時間20%減ぐらい CPU強化やSSD化などのほうが効率良さげ
![Page 11: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/11.jpg)
RubyOnRailsでの
CI設定例紹介
![Page 12: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/12.jpg)
テストカバレッジ取得
RcovやSimpleCovでカバレッジを取得。
テスト追加の指針としている。
![Page 13: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/13.jpg)
テスト結果詳細取得
詳細テスト結果が表示されるように、CI::Reporter(JUnit互換出力ツール)で詳細表示
![Page 14: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/14.jpg)
テーブル&カラムコメント追加
ActiveRecordコネクタを拡張して、
Migrationでコメントを追加している。
#テーブル作成時
create_table :hoges, :comment => "テーブルコメント" do |t| t.string :code, :comment => "fugafuga"end
#カラム追加時
add_column :hoges, :value, :integer, :comment => "カラムコメント"
![Page 15: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/15.jpg)
テーブル定義書自動生成
常に最新のテーブル定義書をテーブル&カラムコメントをもとに自動生成
![Page 16: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/16.jpg)
ビルド結果通知設定
![Page 17: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/17.jpg)
なぜメール通知だけじゃ駄目?
● メールだと無視される可能性が高い→迷惑メール扱いする人も・・・
● CIを知らない人は堅苦しく感じるらしい→遊び心が重要
![Page 18: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/18.jpg)
IRCでの通知
社内IRCサーバのチャンネルに通知
![Page 19: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/19.jpg)
通知ランプ
※三○兎で1000円ぐらい
![Page 20: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/20.jpg)
JenkinsPersonaPlugin
ドラクエ
![Page 21: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/21.jpg)
JenkinsPersonaPlugin
コマンドー
![Page 22: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/22.jpg)
JenkinsPersonaPlugin
ガンダムUC
![Page 23: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/23.jpg)
まとめ
![Page 24: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/24.jpg)
まとめ
● 予め環境を最適化しておくことで新規案件にすぐにCIを適用可能
● 自動的に様々な情報を取ることでクオリティを上げる指針に
● ビルド失敗の早期対処は最重要。通知の工夫して遊び心を!!
![Page 25: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/25.jpg)
CIツール導入して一番良かったこと
テストコード書かないメンバーが激減!
![Page 26: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜](https://reader035.vdocuments.pub/reader035/viewer/2022081404/558cfc42d8b42a3a2d8b45e6/html5/thumbnails/26.jpg)
ご清聴ありがとう
ございました!
高倉利明 / @TrinityT
サイト:http://d.hatena.ne.jp/TrinityT/