Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OSS雑メンテ / OSS zatsu maintenance #railsdm
Search
sue445
December 02, 2017
Technology
3
4.1k
OSS雑メンテ / OSS zatsu maintenance #railsdm
Rails Developers Meetup 2017 (
https://techplay.jp/event/631431
)の発表資料です
sue445
December 02, 2017
Tweet
Share
More Decks by sue445
See All by sue445
pixiv Cloud Journey #pixivmeetup
sue445
0
1.4k
Road to RubyKaigi Speaker (case sue445) #rubykaigi2023_after
sue445
0
2k
Fix SQL N+1 queries with RuboCop #rubykaigi
sue445
2
5.6k
sue445とOSSと社内ツール #subcul_dev
sue445
0
830
Sentry GKEに リプレイス 1年間の 知見見せます / Migrated to GKE Sentry #pixivdevmeetup
sue445
0
710
sue445謹製社内ツール十一選 / su445 in-house tools #pixivdevmeetup
sue445
1
480
Ruby on CI #ginzarails
sue445
3
2.5k
Best practices in web API client development #RubyKaigi
sue445
13
15k
スペックを上げてクラウドで殴るCI / pixiv TECH SALON #pixivTECHSALON
sue445
10
16k
Other Decks in Technology
See All in Technology
バックエンド留学した話/Backend study abroad story
kaonavi
0
120
Multitenant 23ai の全貌 - 機能・設計・実装・運用からマイクロサービスまで
oracle4engineer
PRO
2
150
SREが実現する開発者体験の革新
sansantech
PRO
0
110
コドモンのQAの今までとこれから -XPによる成長と見えてきた課題-
masasuna
0
140
Cloud Native PG 使ってみて気づいたことと最新機能の紹介 - 第52回PostgreSQLアンカンファレンス
seinoyu
2
250
AIエージェントキャッチアップと論文リサーチ
os1ma
6
1.3k
滑らかなユーザー体験も目指す注文管理のマイクロサービス化〜注文情報CSVダウンロード機能の事例〜
demaecan
0
120
ペアーズにおけるData Catalog導入の取り組み
hisamouna
0
250
Restarting_SRE_Road_to_SRENext_.pdf
_awache
1
210
7,000名規模の 人材サービス企業における プロダクト戦略・戦術と課題 / Product strategy, tactics and challenges for a 7,000-employee staffing company
techtekt
0
110
「家族アルバム みてね」を支えるS3ライフサイクル戦略
fanglang
4
540
30 代子育て SRE が考える SRE ナレッジマネジメントの現在と将来
kworkdev
PRO
0
170
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
48
7.6k
How STYLIGHT went responsive
nonsquared
99
5.4k
A Tale of Four Properties
chriscoyier
158
23k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.6k
Making Projects Easy
brettharned
116
6.1k
The World Runs on Bad Software
bkeepers
PRO
67
11k
The Pragmatic Product Professional
lauravandoore
33
6.5k
Embracing the Ebb and Flow
colly
85
4.6k
Adopting Sorbet at Scale
ufuk
75
9.3k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
12
630
It's Worth the Effort
3n
184
28k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
Transcript
OSS雑メンテ 2017/12/09 Rails Developers Meetup 2017 sue445
自己紹介 • Go Sueyoshi a.k.a sue445 • 株式会社ドリコム所属 • 最近作ったgemは
omniauth-chatwork ◦ https://github.com/sue445/omniauth-chatwork • 最近chatwork gemのメンテナになった ◦ https://github.com/asonas/chatwork-ruby • 「ドリコムのプリキュアの人」として社内外で有名
今期の嫁:キュアカスタード •
本妻:キュアピース
今日話すこと • 雑にOSSをメンテするための意識の低い話
アジェンダ • なぜOSSを作るのか? • 僕が気をつけてること 注:時間足りないので飛ばし気味でいきます
最初にまとめ • 全自動化 • 情報の集約
なぜOSSを作るのか? • 自分が困ってるから作る • 作ったついでに公開 ◦ ソースを隠す必要があるなら非公開にするけど、その理由 がなければ全公開
気づいたら • rubygems.orgにあるgem: 41個 ◦ https://rubygems.org/profiles/sue445 • その他OSSにしてるアプリやツール類: 10個弱 •
sue445製主要OSS ◦ sue445 Advent Calendar 2016 ◦ https://qiita.com/advent-calendar/2016/sue445
僕が気をつけてること • CIの使い分け • CIでビルドする • CIで定期ビルドする • ビルドログをSlackに流す •
ビルド結果を後からまとめて見れるようにする
CIの使い分け • gem(ライブラリ)ならTravis CI ◦ Rubyの各バージョン x Railsの各バージョン x DBの種類
のようなマトリクステストが作りやすい • アプリならCircle CIやWercker ◦ 細かい差異はあるけどだいたい同じことができるので好み の問題
CIでビルドする • CIでビルドする理由 ◦ 自分が書いたコードや送られてきたPRを手元で動作確認 したくない ◦ 人間がやるべきことを機械にやらせることで自分が楽がで きる •
どんな雑なコードであっても最低限CIは設定すべき ◦ CIが全く無い場合、ひょんなことからPRがたくさん来るよう になるとPR見るのがつらくなる
参考:CIを設定しなくて失敗した例 https://github.com/sue445/jenkins-backup-script • 最初はシェルスクリプト1つだけ ◦ https://github.com/sue445/jenkins-backup-script/tree/0. 0.1 • だんだん使われだしてテスト無いとPR見るのがつらくなってき たので最終的にitamae,
serverspec, Wercker, Vagrant, DIgitalOceanでガッツリCI構築した ◦ https://github.com/sue445/jenkins-backup-script/tree/0. 1.9
CIで定期ビルドする • CIで定期ビルドする理由(gemの場合) ◦ gem本体のコードに変更がなくても、依存してるgemのアッ プデートによって自分のgemのビルドが壊れることがある ため ◦ よくある例)依存gemがアップデートされた時に古いRuby のバージョンをサポートしなくなったが、普通にbundle
installすると最新が入るので自分のgemの古いRubyでの ビルドが失敗する
CIで定期ビルドする • CIで定期ビルドしないと急にPRが飛んできた時に前述の理由 でビルドが失敗することがある • 自分がPR送る時にmasterブランチのビルドが壊れてるのが あるとすっごい嫌なので、自分がメンテしてるgemやアプリは 全部CIで週1回の定期ビルドしてる
Travis CIで定期ビルドする • cron jobs ◦ https://docs.travis-ci.com/user/cron-jobs/ ◦ Daily, Weekly,
Monthlyで定期ビルド
CircleCI(2.0)で定期ビルドする • Scheduling a Workflow ◦ https://circleci.com/docs/2.0/workflows/#scheduling-a- workflow
Werckerで定期ビルドする • 定期実行するための機能が公式で用意されてなくてAPIで頑 張るしかなさそうなので自分でツールを作った • https://github.com/sue445/wercker_build_trigger • http://sue445.hatenablog.com/entry/2017/10/08/134155 • 下記のようなymlを用意して個人鯖のcrontabから雑に実行
アプリで定期的にbundle updateする • 定期的にbundle updateする理由 ◦ 常に最新のgemを使い続けることでGemfile.lockの鮮度 を保つため ◦ 一度に大量にアップデートするよりは細かい粒度でアップ
デートする方がトラブった時の原因調査がしやすい
アプリで定期的にbundle updateする • 手動でやるのはしんどいので自動でやるのがいい • 依存gemがアップデートされたらPR送ってくれるサービス ◦ http://tachikoma.io/ ◦ https://dependabot.com/
• 自動bundle update後にエラーになった時だけ手動対応 ◦ 主にrubocopで新しいcopが追加された時とか ◦ たまに依存関係がぶっ壊れて古いバージョンのgemがイン ストールされてビルドがエラーになることもあるw
例:tachikoma.ioの場合 •
例:tachikoma.ioの場合 • 1. 毎週tachikoma.ioからbundle updateするPRがく る 2. CIのビルドが通っていたらPRをマージ 3. CIがデプロイまで実行
という雑な運用
ビルド結果を集約する • ビルド結果をチャットに流す • ビルド結果を後からまとめてみれるようにする
ビルド結果をチャットに流す • 使い慣れたチャットツール使う • 開発者向けのサービスはだいたいSlack連携してるのでSlack 使うのが無難 • 自分の場合、個人Slackにログを全部集約してる
自分の例:アプリごとにチャンネル作成 CIのビルド結果以外にもデプロイログや エラー通知なども同じチャンネルで見たい ため
自分の例:gemのビルド結果は雑に集約 GitHubのissueやPR通知を流したければ リポジトリごとにチャンネル分けた方がい いかも
ビルド結果を後からまとめて見れるようにする • Slackにビルドログを流すだけだと後からどのビルド が失敗してるのか追いづらい ◦ ビルド失敗時のみ通知でもいいんだけど、ビルド に時間がかかるgemもあるので成功失敗に関わ らず終了時の通知はほしい • 自分の場合メンテしてるリポジトリが40個以上ある
し、CIツールもTravis CI, Circle CI, Wercker, GitLab CIを使ってて結果を見に行くのが大変
ビルド結果を後からまとめて見れるようにする CIのバッジを並べて表示するだけのサイトを作った https://sue445.github.io/my-ci-badges/ ビルドが失敗していれば ひと目で分かる
my-ci-badges • 使ってる技術 ◦ Vue.js ◦ Bootstrap v4.0.0-beta ◦ GitHub
Pages • ご自由におforkください • https://github.com/sue445/my-ci-badges • http://sue445.hatenablog.com/entry/2017/09/17/190306
まとめ • たくさんのOSSを管理していても「全自動化」と「情報の集約」 を駆使することで1人でも雑にメンテすることができる