会社を作った。夕凪堂というテストに関するいろいろを扱う会社。
詳細は Gist にだらだらと、アイデアレベルでまとめてるので興味があれば。
もともとテストに対しては、いろいろ考えることがあるのだが、ネットワークサーバを開発していると、凄くテストが重要になる。
たとえば秒間 100 リクエストを処理出来る製品としてアピールして売っていく場合は秒間 100 リクエストの負荷がかけられるテストツールが必要になる。
さらに、開発を続けている間に製品はでぶっていく。ただしそのアピールは変更できない。となると「継続的な負荷テスト」が必要になる。
これ、難しい。いろいろ環境も状況も変わっていく中で定常的に負荷テストを行えるってコストがとても高い。夕凪堂はそこのコストを減らすためのツールを売る会社だ。
ターゲットは継続的な負荷テストを行いたい会社という狭い狭い範囲を狙っている。
もともと時雨堂でやりたかったミッションではあるのだが、さすがに専用でやっていかないとやっていけないということに気づいた。
なので、完全に資本も自分が出して1から作った。テスト特化型の会社はみるが、継続的な負荷試験をテーマにやる会社はあまりなさそうだ。
ツールの開発言語は Rust
テストツールを作るに当たっていろいろ考えて、調べた。最初は Erlang/OTP だったが、性能という面では厳しい。
では Golang かというと、個人的な理由で書くのが苦しいので不採用。
テストツールなので、バグは天敵、ということは強力な型推論が欲しい、さらにスケールして欲しい。残ったのが Rust だった。
Rust はまだ若い言語だが、複雑さの代わりにパフォーマンスとメモリーセーフを提供してくれる。小さなチームで使うのであれば特に問題ない。さらにテストツールというテストがしづらいプロダクトに対してはとても相性がよさそうだと判断した。
cargo のパッケージ管理も気に入った。言語の難しさはこれからがんばって覚えていく。
継続的な負荷に対するテスト
負荷テストは意外に一回で終わりのパターンが多いが、できる限り毎回やるべきであり、それは自動化されているべきだ。
ただ、継続的な負荷テストの自動化はとてもとてもコストが高い。
正直、時雨堂でもまだまだできない。むしろ悩みの種だった。
少しでも導入のコストを下げれるツールが欲しい、そして作りたい。という思いが日に日に強くなり、じゃぁやるしかないと思い会社を作った。
負荷だけではなく障害も
継続的な障害テストといえば、Netflix の Chaos Monkey が有名だが、まさにあれをもっと気軽に導入できるツールやサービスを何かないものか、まだこれは明確になっているわけではないが、今後の課題として持っておきたい。
継続的なテストはとても広範囲な技術が求められる。さらにミスも許されない。継続的に行うテストにミスがあったら問題がある。さらに簡単なインターフェースで、複雑なテストが実現できて欲しい。
テストの対象は日々変化しているわけで、それに追従していく必要もある。テストは HTTP だけではなく、WebRTC まで幅を広げようと思っている。そうなると動画配信のテストということも考えられる。
まずは手を動かし、早く製品をリリースしていきたい。