Real World 時雨堂 Erlang/OTP

RealWorld 業務 Rust #Rust - Qiita インスパイア記事。

- Erlang R12B からお金を稼ぐ道具として Erlang/OTP を使ってきた
- 感謝はすれど愚痴は特にない
好きな環境で開発しろ
Erlang VM は偉大だから安心しろ。
依存ライブラリは可能な限り最小にしろ
Erlang/OTP のようなマイナー言語のライブラリはよほどのことがない限り、メンテナンスされない。
継続してメンテナンスされるライブラリほぼない。利用するのは企業が開発している OSS のみに絞れ。
ライブラリは自作できないなら Erlang/OTP は使うな
自分たちで作れなければ Erlang/OTP を使うのは止めろ
spawn 使うな
gen_server 使え。
何でもかんでも Erlang/OTP でやるな
色々遅いから頑張るな、ネットワークサーバーを作るのにだけ使え。
遅いのは覚悟しろ
C++/Rust と比べて 2 倍以上は遅い。
NIF は使うな
C/C++ によほどの自信が無い限り使うな。Erlang VM ごとセグフォして落ちたら Erlang の強みがなくなる。
フォーマッターは使え
色々出てるから使え。efmt がお勧め。
ELP を使え
WhatsApp が作ってる、多機能で便利。
rebar3 使え
一択、これ以外を採用する理由無い。
Dialyzer 使え
かなり助けてくれる。 type/spec ちゃんと書け。
logger を使え
自作するな、標準にあるロガーを使え。マクロもうまく使え。
counters を使え
自作するな、標準にあるカウンターを使え。
persistent_term を使え
自作するな、標準にある永続機能を使え。
gen_server を使え
spawn 使うな。
maybe 使え
できるだけ maybe を使って書け。
attach に慣れろ
動作している Erlang VM に直接アクセスすることに慣れろ。
relx 使いこなせ
Erlang のパッケージングはわかりにくいから relx を使いこなせ。
GitHub erlang/otp の Pull-Request は全部眺めろ
年 1 回の正式リリースに備えろ。
EUnit がんばるな
関数のテスト程度にしておけ、E2E テストは他の言語でがんばれ。 Python (pytest) お勧め。
PropEr 使え
PBT は突然救ってくれるから、書けそうなところはできるだけ書いておけ。
rebar3 lint 使え
コードの癖が出にくくなるから使っておけ。
OpenSSL は最新版を使え
暗号処理を利用しないネットワークサーバーなんてないから、最新版使っておけ。
Hex.pm 課金して使え
Private Hex.pm 使うと CI が楽になる。1 人年 70 ドルだから、払っとけ。
プロセスを起動したら monitor か link しろ
プロセスメモリーリークマジで恐いから、起動したら監視しろ。
simple_one_for_one 使え
独立してプロセスを立てるな、かならず simple_one_for_one でいいから sup にぶら下げろ。
プロセス辞書はうまく使え
うまく使えば便利。ただし使う時はコメントしっかり書け。
最新版の Erlang/OTP を使え
早くなってるし便利になってるから古いのを使い続けるな。
スケールアウトに疑いを持つな
WhatsApp が 4 万ノードで 20 億人さばいてる、大丈夫だから心配するな。
ログとメトリクスは取れ
logger と counters で積極的にとれ。何かあったときはこの二つしか救ってくれない。
メッセージキューが詰まったときの対策はしろ
キューは 20 万とか普通に入れられるから、気をつけろ。
receive はできるだけ使うな
gen_server 使え。
ets は慎重に使え
メモリーリークの原因になる。
mensia は使うな
よほどの理由がない限り避けろ。
HTTP ライブラリは Cowboy/Gun を使え
長期的にメンテナンスがされている。出来ればスポンサーになるべき。
バイナリメモリーリークに気をつけろ
参照を持ち続けるな。
binary_to_atom 使うな
binary_to_existing_atom を使え。しかたなく使う場合でも生成する最大数がわかっているときのみ使え。
プリントデバッグしろ
trace も悪くないが、基本は ?debugHere か ?debugVal でデバッグしろ。

こんなのも書いてる。