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.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
Road to RubyKaigi 2025 #rubykaigi2026_saisoku
sue445
0
61
Kaigi Effect 2025 #rubykaigi2025_after
sue445
0
1.2k
Road to Go Gem #rubykaigi
sue445
0
1.4k
pixiv Cloud Journey #pixivmeetup
sue445
0
1.4k
Road to RubyKaigi Speaker (case sue445) #rubykaigi2023_after
sue445
0
2.1k
Fix SQL N+1 queries with RuboCop #rubykaigi
sue445
2
5.9k
sue445とOSSと社内ツール #subcul_dev
sue445
0
860
Sentry GKEに リプレイス 1年間の 知見見せます / Migrated to GKE Sentry #pixivdevmeetup
sue445
0
740
sue445謹製社内ツール十一選 / su445 in-house tools #pixivdevmeetup
sue445
1
510
Other Decks in Technology
See All in Technology
united airlines ™®️ USA Contact Numbers: Complete 2025 Support Guide
flyunitedhelp
1
300
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
0
110
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
2
7.7k
CRE Camp #1 エンジニアリングを民主化するCREチームでありたい話
mntsq
1
120
Delta airlines®️ USA Contact Numbers: Complete 2025 Support Guide
airtravelguide
0
340
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
960
使いたいMCPサーバーはWeb APIをラップして自分で作る #QiitaBash
bengo4com
0
1.9k
AWS Organizations 新機能!マルチパーティ承認の紹介
yhana
1
280
Backlog ユーザー棚卸しRTA、多分これが一番早いと思います
__allllllllez__
1
150
Lazy application authentication with Tailscale
bluehatbrit
0
210
整頓のジレンマとの戦い〜Tidy First?で振り返る事業とキャリアの歩み〜/Fighting the tidiness dilemma〜Business and Career Milestones Reflected on in Tidy First?〜
bitkey
2
16k
Connect 100+を支える技術
kanyamaguc
0
200
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
A better future with KSS
kneath
238
17k
Making Projects Easy
brettharned
116
6.3k
Faster Mobile Websites
deanohume
307
31k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
BBQ
matthewcrist
89
9.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
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人でも雑にメンテすることができる