Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
rubocop-daemon 裏話: OSS の苦悩
Search
Hayato Kawai
March 07, 2024
790
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
rubocop-daemon 裏話: OSS の苦悩
「Omotesando.rb #95」で発表した LT スライドです。
https://omotesandorb.connpass.com/event/311351/
Hayato Kawai
March 07, 2024
More Decks by Hayato Kawai
See All by Hayato Kawai
ALB ログから Trace を気合で繋げる技術
fohte
7
900
トークン対パフォーマンスを最大化しよう
fohte
5
1.5k
Amazon Bedrock のコスト内訳を気合でトラッキングする
fohte
0
110
Bedrock のコスト監視設計
fohte
2
890
Data Access Control で実現するより細かい権限制御
fohte
0
570
Datadog が支える Wantedly のシステム運用
fohte
0
200
Devin や Cursor などの生成 AI ツール導入に向けて何を取り組んだのか
fohte
2
430
Datadog Network Monitoring を活用して NAT Gateway 課金を 80 % 削減した話
fohte
2
900
Trace Metrics と Istio Metrics でサービス健全性を監視する
fohte
0
630
Featured
See All Featured
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
710
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
420
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
520
Large-scale JavaScript Application Architecture
addyosmani
515
110k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
エンジニアに許された特別な時間の終わり
watany
109
250k
Technical Leadership for Architectural Decision Making
baasie
3
570
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
460
Tell your own story through comics
letsgokoyo
1
1.1k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
rubocop-daemon 裏話 OSS の苦悩 Omotesando.rb #95 2024-03-07 - Hayato Kawai
(@fohte)
あなた誰 名前: @fohte (ふぉーて) 川井 颯人 (Hayato Kawai) 所属: ウォンテッドリー株式会社
趣味: 🎮 🎹
持ち帰ってほしいこと • 世の中の OSS owner はすごい ◦ OSS は面白いが大変なこともある
話すこと • rubocop-daemon gem を作りました • そこで感じた OSS 特有の苦悩を話します
中身の話は昨日の LT でしました https://speakerdeck.com/fohte/rubocop-server-mode-noshi-zu-mi
rubocop-daemon gem を作りました (2018 年) (再掲)
RuboCop 本体に 取り込まれました 🎉 (2022 年) https://github.com/ruboco p/rubocop/pull/10706 Big Thanks
to @koic (再掲)
(再掲) rubocop-daemon の高速化アプローチは単純 • require 'rubocop' したプロセスを サーバーとして用意 (デーモン化) ◦
このサーバーにリクエストする ◦ アプリケーションサーバーを起動し続け、リクエストを待ち受けて処理するのと同じ rubocop-daemon (server) $ rubocop-daemon exec … ターミナル $ rubocop-daemon exec …
None
rubocop-daemon は自然流入で伸びた • 特に宣伝をせず、自然に認知されていった ◦ gem 作ったよ〜とツイートしたくらい ◦ 勝手に伸びたのは、ユーザーが本当に求めていたものだったから ?
(推測) • @bbatsov (RuboCop 作者) のブログで取り上げられて 認知が一気に増えた ◦ "The Missing Ruby Code Formatter | Meta Redux" https://metaredux.com/posts/2019/03/30/the-missing-ruby-code-for matter.html
ブログで紹介され バズっている様子
OSS 面白い期
OSS 面白い期 (〜2019 年) • バズって嬉しい! ◦ RuboCop の third-party
gem として RuboCop に認知されるのは嬉しい
OSS 面白い期 (〜2019 年) • issue や PR も盛んに来て楽しい! ◦
ちゃんと使われていて嬉しい! ◦ issue/PR に対応して感謝されると嬉しい!
OSS つらくなってきた期
OSS つらいポイントまとめ • 英語がつらい • スパゲッティと化した rubocop-daemon-wrapper • セットアップガイドが大変 •
issue/PR 対応が大変
😇 英語がつらい 😇
OSS つらくなってきた期 (2019 年〜): 英語がつらい • 英語がつらい ◦ 議論できるほどの英語力がない ▪
当時は ChatGPT もなかった… ▪ 今なら ChatGPT でやり取りはできるので楽になっていそう ◦ 語彙や文法に誤りがないか調べながら書くのは時間がかかる ▪ 普段の業務では、英語を読むことはあっても書くことはない ▪ 1 コメント書くのに 1 時間くらいかかる… ◦ 認知されるにつれて issue/PR も多くなる ▪ 時間がめちゃくちゃかかる
スパゲッティと化した rubocop-daemon-wrapper
OSS つらくなってきた期 (2019 年〜): rubocop-daemon-wrapper • rubocop-daemon サーバーに通信するための クライアントは rubocop-daemon
実装が遅い ◦ サーバーは TCP/IP で実装されているので、nc コマンド (netcat) で実装できる • nc コマンドを手で叩きたくない => wrapper を用意 ◦ rubocop-daemon-wrapper というシェルスクリプトを用意 ◦ ついでに rubocop コマンドとして振る舞えるようなインターフェースに ▪ エディタ等からも利用しやすくする
OSS つらくなってきた期 (2019 年〜): rubocop-daemon-wrapper • rubocop-daemon サーバーに通信するための クライアントは rubocop-daemon
実装が遅い ◦ サーバーは TCP/IP で実装されているので、nc コマンド (netcat) で実装できる • nc コマンドを手で叩きたくない => wrapper を用意 ◦ rubocop-daemon-wrapper というシェルスクリプトを用意 ◦ ついでに rubocop コマンドとして振る舞えるようなインターフェースに ▪ エディタ等からも利用しやすくする
🔥 シェルスクリプト 🔥
シェルスクリプトはつらい • nc コマンドが OS によって 若干違う ◦ 条件分岐の嵐
シェルスクリプトの特に nc コマンドがつらい • 分岐はつらい ◦ 差異を吸収するための分岐が大量に発生 • テストも難しい ◦
手元に OS があるわけではない ▪ Docker でやるという手もあるが、再現できているのか分からない • すべての OS を網羅するのは現実的ではない ◦ 自分が使う OS ではないのでモチベーションが高くない ▪ ニッチなものだと特に …
😇 セットアップガイドが大変 😇
OSS つらくなってきた期 (2019 年〜): セットアップガイドが大変 • rubocop-daemon はエディタから使われがち ◦ 高速化の目的がコーディング中のフィードバックを速くしたいため
• ユーザーとしてはセットアップガイドがあってほしい ◦ 最初に「導入したいけどどうやって導入すればいいんだろう ?」となる
OSS つらくなってきた期 (2019 年〜): セットアップガイドが大変 • エディタから rubocop-daemon を実行したい ◦
エディタ本体には rubocop-daemon クライアントは実装されていない ◦ つまりエディタのプラグインを作る or 設定する必要がある ▪ 作るのは大変なので rubocop-daemon-wrapper の出番
OSS つらくなってきた期 (2019 年〜): セットアップガイドが大変 • エディタはたくさんある ◦ Vim (Neovim),
VSCode, JetBrains IDE, … • エディタのプラグインもたくさんある ◦ VSCode だと RuboCop を実行するプラグインは複数ある ▪ vscode-ruby-rubocop, vscode-ruby, …
OSS つらくなってきた期 (2019 年〜): セットアップガイドが大変 • エディタの数 × プラグインの数だけ セットアップガイドが生まれる
◦ ただし、自分が使っているエディタとプラグインはそれぞれ 1 つずつ ◦ 自分が使っていないエディタ・プラグインのガイドを メンテナンスする必要がある
😇 Issue/PR 対応が大変 😇
OSS つらくなってきた期 (2019 年〜): issue/PR に対応するのは大変 • せっかく立ててくれた issue/PR は対応したい
◦ ただし英語が… ◦ PR の場合はより考えることが多い
PR は全部 merge したいが難しい • せっかく PR 作ってくれたのだし merge したい
◦ レビューどうする? ▪ 英語つらい問題 ▪ merge して気になったところは自分で修正してしまうという手もある • ただし merge のたびに修正するのも自分が大変 …
PR は全部 merge したいが難しい • merge すると自分がメンテナンスの責務を負うことに なる ◦ merge
したものに対してさらに別の PR が来ることもある ◦ これは誰がレビューする? 自分しかない ▪ つまり分かってないといけない • 使ってない OS、エディタ、プラグインは … • merge しないのが一番簡単ではある ◦ でも善意を無下にしたくない
仕事以外の時間でこれをやるのは大変 • 前提として、コード書くのは楽しいし、 他の人に使ってもらえることもとても嬉しい ◦ ただし前述のことには時間も MP も使う ◦ しかもそれを仕事以外の時間でやる
▪ 🤯
結果としてメンテナンスせずに放置してしまうことに • これらの苦悩があり、issue/PR を放置してしまった ◦ ごめんなさい 🙇 ◦ OSS owner
を移譲する or commiter を増やすという手もあった ▪ が見知らぬ人に権限を渡して大丈夫なのか ? という心配が勝った
rubocop-daemon は archive します • RuboCop 本体に取り込まれたことで、 多くのケースで RuboCop 単体で十分になった
◦ rubocop-daemon は役目を果たした • リポジトリは archive します (近いうちに)
OSS は素晴らしい • OSS は素晴らしい文化 ◦ 利用するソフトウェアの中身が自由に見れ、変更し、あわよくば利用者の変更が 本体に取り込まれる。これは OSS のとても大きな魅力
• 一方で OSS owner として苦悩を感じることもある ◦ ユーザーとしてはリスペクトの心を忘れずにいたい (自戒)
(再掲) 持ち帰ってほしいこと • 世の中の OSS owner はすごい ◦ OSS は面白いが大変なこともある