Zenn
Open3

Real World 時雨堂 Erlang/OTP

voluntasvoluntas
  • 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 がお勧め。

https://github.com/sile/efmt

ELP を使え

WhatsApp が作ってる、多機能で便利。

https://github.com/whatsapp/erlang-language-platform

rebar3 使え

一択、これ以外を採用する理由無い。

https://github.com/erlang/rebar3

Dialyzer 使え

かなり助けてくれる。 type/spec ちゃんと書け。

https://www.erlang.org/doc/apps/dialyzer/dialyzer.html

logger を使え

自作するな、標準にあるロガーを使え。マクロもうまく使え。

https://www.erlang.org/doc/apps/kernel/logger

counters を使え

自作するな、標準にあるカウンターを使え。

https://www.erlang.org/doc/apps/erts/counters.html

persistent_term を使え

自作するな、標準にある永続機能を使え。

https://www.erlang.org/doc/apps/erts/persistent_term.html

gen_server を使え

spawn 使うな。

maybe 使え

できるだけ maybe を使って書け。

https://www.erlang.org/doc/system/expressions.html#maybe

attach に慣れろ

動作している Erlang VM に直接アクセスすることに慣れろ。

relx 使いこなせ

Erlang のパッケージングはわかりにくいから relx を使いこなせ。

https://github.com/erlware/relx

GitHub erlang/otp の Pull-Request は全部眺めろ

年 1 回の正式リリースに備えろ。

EUnit がんばるな

関数のテスト程度にしておけ、E2E テストは他の言語でがんばれ。 Python (pytest) お勧め。

PropEr 使え

PBT は突然救ってくれるから、書けそうなところはできるだけ書いておけ。

https://github.com/proper-testing/proper

rebar3 lint 使え

コードの癖が出にくくなるから使っておけ。

https://github.com/project-fifo/rebar3_lint

OpenSSL は最新版を使え

暗号処理を利用しないネットワークサーバーなんてないから、最新版使っておけ。

Hex.pm 課金して使え

Private Hex.pm 使うと CI が楽になる。1 人年 70 ドルだから、払っとけ。

https://hex.pm/docs/private

プロセスメモリーリークマジで恐いから、起動したら監視しろ。

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 を使え

長期的にメンテナンスがされている。出来ればスポンサーになるべき。

https://github.com/sponsors/essen

バイナリメモリーリークに気をつけろ

参照を持ち続けるな。

https://github.com/ferd/recon

binary_to_atom 使うな

binary_to_existing_atom を使え。しかたなく使う場合でも生成する最大数がわかっているときのみ使え。

プリントデバッグしろ

trace も悪くないが、基本は ?debugHere か ?debugVal でデバッグしろ。

作成者以外のコメントは許可されていません