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.3k
Road to RubyKaigi Speaker (case sue445) #rubykaigi2023_after
sue445
0
1.7k
Fix SQL N+1 queries with RuboCop #rubykaigi
sue445
2
5.3k
sue445とOSSと社内ツール #subcul_dev
sue445
0
800
Sentry GKEに リプレイス 1年間の 知見見せます / Migrated to GKE Sentry #pixivdevmeetup
sue445
0
650
sue445謹製社内ツール十一選 / su445 in-house tools #pixivdevmeetup
sue445
1
450
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
15k
Other Decks in Technology
See All in Technology
なぜCodeceptJSを選んだか
goataka
0
150
20241220_S3 tablesの使い方を検証してみた
handy
3
200
1等無人航空機操縦士一発試験 合格までの道のり ドローンミートアップ@大阪 2024/12/18
excdinc
0
150
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
110
非機能品質を作り込むための実践アーキテクチャ
knih
2
660
祝!Iceberg祭開幕!re:Invent 2024データレイク関連アップデート10分総ざらい
kniino
2
240
UI State設計とテスト方針
rmakiyama
2
300
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
180
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
180
5分でわかるDuckDB
chanyou0311
10
3.2k
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
420
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
180
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Gamification - CAS2011
davidbonilla
80
5.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
4 Signs Your Business is Dying
shpigford
181
21k
Side Projects
sachag
452
42k
Code Review Best Practice
trishagee
65
17k
Writing Fast Ruby
sferik
628
61k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
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人でも雑にメンテすることができる