websocket-client-simpleをruby-jpに移管した
8年前に作って、以後7年間全く使ってなかったwebsocket-client-simpleというrubygemがある
https://rubygems.org/gems/websocket-client-simple
知らぬ間に120万ダウンロードされたり、Railsのaction cableに使われたりしてた
gemのownerをruby-jpに移管しました (2021/12/24)
https://twitter.com/shokai/status/1474279453123833856
理由
6年前からメンテするモチベーションが無かった
ライブラリの依存ライブラリはメンテされていてほしい
相手がまともそうだし、shokai.iconよりもメンテする動機がありそうだった
経緯
ruby-jpでwebsocket-client-simpleというgemの開発を引き取った経緯 | うなすけとあれこれ
以後pull request等はこちらへ
https://github.com/ruby-jp/websocket-client-simple
うなすけさんありがとうございますshokai.icon
忙しくてたまに来るpull requestも全然見れていなかったので、気になっていた
心が穏やかになりました
websocket-client-simpleとは?
コレなんなんだっけshokai.icon
全然覚えてない
橋本商会 » websocket-client-simple 作ったによると
2013年に作った
eventmachineに依存してない素のthreadだけで動く、websocket clientがほしかったようだ
もう8年も前なので全然覚えてない
当時はwebsocketやnode.jsの勉強をしたかった記憶がある
EventEmitterのRuby移植を作ってみたり
Socket.IOっぽい実装をRubyで作ったりしていた
その一番最初のとっかかりとして、websocket clientを作った気がする
で、1年ぐらい趣味と大学での研究を兼ねて色々開発した後、やっぱりこの分野はRubyよりNode.jsでやった方が良いなと思った
複数の並行処理をやるとRubyだとどうしてもパフォーマンスが出なかった
シリアルポートをreadしてwebsocketにwriteするだけでいっぱいいっぱいだったような
パフォーマンスを出す方法
当時はEventMachineを使うしかなかった
EMは独特の書き方をしなければならず、普通のベタ書きのRubyと共存できなかった
この辺が問題で、Node.jsに移住した気がする
今だとネイティブスレッドが何か色々なってるらしいので、良くなっているかも?
以後、2014年ごろからRubyはほとんど触っていない
で、2016年ぐらいまでは一応メンテしていた
他にも日常的に使っていたRubyで書いたツールもあったし
twとか
2017年〜
就職して忙しくなった
質の低いpull requestが来るようになった
自分のライブラリの宣伝文をREADMEに追加するpull request
用途・目的がよくわからないオプションの追加
「どうやって動作確認すればいいのか」が全く書かれていない
他の複数のライブラリでも、shokai.iconが作って1年ぐらい使って、その後2年ぐらい放っておいたら急にpull requestが来始める事がよくあった
もう全く使ってないので全然覚えてない
やる気があった時に無料で作って、無料で公開している
モチベーションが尽きた事は無料でやらない
ソースコードがOSSのライセンスで公開されてるのだから、forkして勝手にやってくれ
Ruby自体も2016年ごろからほぼ触ってないので、最新の作法にキャッチアップできていない
githubで大量にリポジトリを公開していて、websocket-client-simpleはその1つに過ぎない
360ぐらいある
他からのforkはほぼない。forkしてpull requestしてmergeされたら、自分の所にforkしたリポジトリは消してるので
ようするにめんどくさくなった
なぜソースコードを無料で公開しているのか
なぜ移管したのか
別に移管なんてしなくても良い場合もある
OSSなのだから
forkしてもらって
websocket-client-simple2の様な別のパッケージ名にして
勝手に公開すれば十分なケースは多いと思う
しかし、forkされた https://github.com/matthewd/websocket-client-simple がrailsのaction cableに使われているのを発見した
rubygemsではなくgithubからインストールされている
有名なライブラリの依存ライブラリになっている状況で、放置しているのは良くない
多くの人が使ってるライブラリから使われているライブラリはメンテされていてほしいshokai.icon
という想いがある
以前、同じ状況でつらい思いをした事があった
passport-github→passport-oauth2→node-oauthという依存チェーンがあって
一番下のnode-oauthがメンテされてなかった
node-oauthをforkして修正するだけでは解決しない
正攻法でやるなら、passport-oauthが読み込むnode-oauthをforkして修正した方に切り替える必要がある
そのためには、passport-oauthのpackage.jsonを変更しなければならない
そしてpackage.jsonを変更したpassport-oauthに切り替えるには、passport-github-oauthのpackage.jsonを変更しなければならない
passport-githubの場合は抜け穴が用意されていて、なんとかなったが
オレオレSSL証明書で運用されているGHEにPassportでログインする
抜け穴がなかったら無理だった
依存チェーンの底の方のライブラリの修正はとても難しい
まあそういう事はよくある