Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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.2k
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
Create Ruby native extension gem with Go
sue445
0
720
Road to RubyKaigi 2025 #rubykaigi2026_saisoku
sue445
0
91
Kaigi Effect 2025 #rubykaigi2025_after
sue445
0
1.3k
Road to Go Gem #rubykaigi
sue445
0
2k
pixiv Cloud Journey #pixivmeetup
sue445
0
1.6k
Road to RubyKaigi Speaker (case sue445) #rubykaigi2023_after
sue445
0
2.5k
Fix SQL N+1 queries with RuboCop #rubykaigi
sue445
2
6.8k
sue445とOSSと社内ツール #subcul_dev
sue445
0
880
Sentry GKEに リプレイス 1年間の 知見見せます / Migrated to GKE Sentry #pixivdevmeetup
sue445
0
780
Other Decks in Technology
See All in Technology
Design System Documentation Tooling 2025
takanorip
2
980
ブロックテーマとこれからの WordPress サイト制作 / Toyama WordPress Meetup Vol.81
torounit
0
370
Playwright x GitHub Actionsで実現する「レビューしやすい」E2Eテストレポート
kinosuke01
0
180
形式手法特論:CEGAR を用いたモデル検査の状態空間削減 #kernelvm / Kernel VM Study Hokuriku Part 8
ytaka23
2
400
AIと二人三脚で育てた、個人開発アプリグロース術
zozotech
PRO
0
550
日本Rubyの会の構造と実行とあと何か / hokurikurk01
takahashim
4
800
AI時代におけるアジャイル開発について
polyscape_inc
0
120
意外とあった SQL Server 関連アップデート + Database Savings Plans
stknohg
PRO
0
240
プロダクトマネジメントの分業が生む「デリバリーの渋滞」を解消するTPMの越境
recruitengineers
PRO
3
620
AI活用によるPRレビュー改善の歩み ― 社内全体に広がる学びと実践
lycorptech_jp
PRO
1
150
知っていると得する!Movable Type 9 の新機能を徹底解説
masakah
0
240
乗りこなせAI駆動開発の波
eltociear
1
590
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
69k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
We Have a Design System, Now What?
morganepeng
54
7.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
120
20k
A designer walks into a library…
pauljervisheath
210
24k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
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人でも雑にメンテすることができる