自分は Erlang/OTP は長く使っていて、その使いみちの大半がクローズドソースなパッケージ製品の開発です。自分の会社を持ってからは、 Erlang/OTP で開発したパッケージ製品だけで会社が回る所まで来ています。
零細企業のクローズドソースのパッケージ製品の話ってあまり聞いたことがないので、では自社製品をどうやって開発してるのか、どんな感じで実装されているのかなどをお話しようと決めました。
自社製品である WebRTC SFU Sora という製品は P2P での利用を想定している WebRTC を無理やりサーバ経由にするという仕組みです。
この製品はフルスクラッチで実装しています。 WebRTC 関連のライブラリはすべて時前実装ですし、利用してるライブラリもロガーは HTTP 関連のもの程度でほとんど外部ライブラリに依存していません。結構珍しいと思います。
また自社製品のメイン開発者は自分ともうひとりなのですが、2 人とも Erlang/OTP 歴は長く、Erlang/OTP や rebar3 のコントリビューターでもあります。そのためほぼ書き方についてのレビューなどはせず、設計方針について議論することが多いため、コードレビューもざっくりです。
では品質をどうやって担保するのかというと E2E テストです。とにかくテストです。音声や映像をリアルタイムに扱うという技術のため、実際にテストをする必要があります。
今は自社製品専用のテストプラットフォームを 1 年くらい時間をかけて作ってみたりします。その間にバグが見つかったりもしました。
コードは生き物という考えから、積極的にリファクタリングをしています。実際 2 ヶ月近く 1 つの機能のリファクタリングをしたりもしました。
テストやリファクタリングを優先、レビューは信頼ベースで臭い匂いがしないかどうかのチェック。機能開発においては開発者同士の連携もできるだけしないし、マネージメントもしません。さらに打ち合わせなんて一切ありません。すべて雑談ベースでの情報共有です。
Erlang VM は 1 つのアプリケーションの中でマイクロサービスのような仕組みを取ることができます。そのため一つ一つの機能はとても独立性が高く作ることが可能です。そのことが、この開発モデルを実現できていると考えています。
Erlang VM の安定性はパッケージ製品との相性はとても良いです。実際自社製品が落ちたという報告は 4 年以上製品を販売していますが、一度も来ていません。
実際、お問い合わせも月 1–2 通程度です。この安定性のおかげで開発に注力できています。またこれは社員の労働時間を減らすことにも直結していると思っています。
お問い合わせが少なければ開発に集中できます、開発に集中できればより品質改善にコストが掛けられます。この良い循環を実現できています。
また、安定することで顧客の評価も高くなり、売上も上がります。売上が上がることで社員へ賞与という形で還元もできています。
10:00–17:00 の 6 時間労働、土日祝日休み、残業ほぼ無し、有給休暇取得率ほぼ 100% 、 賞与 1 人 1000 万超えの実績、これらを実現できているのは Erlang VM の恩恵の割合も大きいと感じています。
コーディング規約はありますが、厳密的なものはありません。むしろ積極的にコードを変えていくという方針で実現しています。
課題は Erlang VM への貢献です。Erlang VM に何かしら性能改善を行いたいと考えていますが、残念ながらリソースがなく厳しいのが現状です。Erlnag VM への貢献に興味ある方を捕まえたいなと思っています。
Erlang VM は小さなチームでクローズドソースのパッケージを作るのにとても向いています。