https://logmi.jp/tech/articles/326409

実務でRustを使ううえで苦労したこと

高橋優輔氏(以下、高橋):高橋と申します。前職はC++でずっとデスクトップアプリケーションを開発していました。この会社に来て、Rustを2年ぐらい使っているところです。良くも悪くもこの会にちょうどよいRustの理解度を持っているということで、視聴者目線のディスカッションを進行できればと思っています。よろしくお願いします。

ということで、さっそく最初のテーマにいきたいと思います。

お三方のお話をうかがっている限り、ご自身で手を動かしながらゴリゴリRustを勉強していたというのはあると思っています。ただ、実際にキャディに入って、システムの開発の主要言語としてRustを使うという業務経験は、たぶん初めてなんだろうと思っています。

そこには自分で勉強した時と別の苦労があるのではないかなと思っているので、そのへんの話をちょっとうかがいたいと思っています。まず冨田さん、お願いできますか。何かこういうところで苦労はありましたか。

冨田陽介氏(以下、冨田):そうですね。しばらく苦労しかないな(笑)。Rust特有の難しさもあるかもしれませんが、キャディの「Klein」というプロダクトはかなり尖った作りになっています。

例えば、データベースも攻めた作りになっているし、さらにイベント駆動で非同期の処理がガンガン入っていたり、CQRSでリードも出るとライトがきれいに分かれていたり、かなり処理が複雑になっています。

キャディの業務ドメインという複雑さ、プラスそのアプリケーションがすごく攻めた作りになっている、プラスRustという初めての言語の3つが合わさって、けっこう苦労したというのが正直なところです(笑)。

Rustで苦労したのか、その作りで苦労したのかはちょっとわかりませんが、たぶんお二人は、私よりもRustの準備をしたうえで入られていると思うので、そのあたりの肌感覚は聞いてみたいです。

エラーメッセージに対する免疫をつける必要がある

高橋:先ほど八巻さんに、「非同期」という言葉を資料で出してもらいました。やはりKleinの設計というか、出てくる概念の多さとRustには苦労しましたか?

八巻紘士氏(以下、八巻):そうですね。やはり冨田さんが言っていた、アーキテクチャの難しさも一定はあるかなとは思っています。単純にまずディレクトリ構造がどうなっているんだ、どこからどう手をつけたらいいんだみたいなところがありました。

やはり自分で学習する時は基本イチから作るので、どこに何があるかはさすがにわかると思うのですが、実際に動いているプロダクトに入っていくと、まずどこに何があるのか、どこから読めばいいのかという部分に一番苦労したかなと思います。

高橋:なるほど。刈部さんはどうですか、逆に違う感覚などはあったりしますか?

刈部拓未氏(以下、刈部):似たような話になってしまいますが、大規模なものを作ったことはないので、やはり大規模なプログラムの型パズルはけっこう難しいなとは思います。それこそ、先ほど冨田さんが発表していたように、コンパイルエラーを見て、型パズルを直していくみたいなところは、ちょっと免疫をつけながらやっていかないとけっこう大変かなと思います。

proc-macroが多いことで苦労したこと

八巻:あとアレですね。キャディはけっこうproc-macroが多いですね。

高橋:そうそう。