2 min read

依存ライブラリを少なくする

自社で開発する製品は徹底して依存ライブラリをできるだけ少なくするようにしている。

実際、時雨堂の主力製品である Sora の自社管理外の依存ライブラリは​かなり少ない。

Erlang/OTP と暗号化ライブラリである OpenSSL 。そして Erlang/OTP 特有のプロセス管理ライブラリである gproc 、RabbitMQ が開発している Raft ライブラリの ra 、あとは HTTP クライアントとサーバー。そしてメモリーリーク確認ライブラリだけ。

オープンソースライセンス

Sora の JavaScript SDK は Dependencies はゼロ

Image from Gyazo

Sora の Python SDK も dependenciesはゼロ

なぜ依存を少なくしているのか?

OSS が自分たちの製品より長くメンテナンスされる可能性がとても少ないという判断をしている。

Sora は今年で 9 年目の製品だ。9 年間活発にメンテナンスされるライブラリは想像以上に少ない。また自分たちのコントロール下にないライブラリを長期間利用するのはストレスが貯まる。

例えば Raft ライブラリである ra もかなり積極的なアップデートはされているが、自社で報告したバグは半年以上マージされず、結局一時的にフォークをして運用していた。

実は Erlang/OTP ですら、パッチがマージはされたが、リリースまで半年以上かかることもあり、こちらもフォークして運用していた時期もある。なかなかしんどかった。

悲しいことに JOSN Schema ライブラリはメンテナンスが止まってしまったので完全に fork してコードを大幅に書き換えて、運用している。

近年はセキュリティ関連のリスクもあるので、ウェブアプリやツール類の依存も積極的減らすようにしている。たとえば、最近では Go のログローテーションライブラリ Lumberjack をやめて、logrotate を使う方向で切り替えている。

ライブラリの依存を減らすというのは、製品を長期的に維持する場合、想像以上の効果があるのでお勧めしたい。


ちなみに、将来的には Raft ライブラリも時前にする方向を検討している。