FORCIA CUBEフォルシアの情報を多面的に発信するブログ

Shinjuku.rs#14を開催しました

2021.03.09

Shinjuku.rs Rust

旅行プラットフォーム部(兼 技術広報)エンジニアの谷井です。陽気とともに不用意に窓を開けられない季節がやってきました。

さて、フォルシアではShinjuku.rsというRustのLT会を隔月開催しています。
本記事では2/16(火)に開催したShinjuku.rs #14の内容について、同期エンジニアの平岡とともにレポートします。

前回、前々回のイベントの様子はこちらをご覧ください。

LTの様子

LT1 | RustでプロコンSATソルバ | togatogaさん

pic_01_210309.png

LT1番目は、Shinjuku.rs #7でも登壇してくださったtogatogaさん。
SAT問題(充足可能性問題)のソルバをRustで自作したという内容でした。

競技プログラミングでの使用言語をC++からRustに変えられた際に、RustのSATソルバが欲しくなり、自分の満足するものが見当たらなかったので作ってしまったそうです。
競プロ未経験者でも内容がイメージできるような、とてもわかりやすい説明でした!
自分がまさに欲しいものを作るというのは、とてもやりがいがあって楽しそうです。(谷井)

LT2 | truck - Truck is a Rust CAD Kernel. | yotabaitoさん

pic_02_210309.png

2番目はyotabaitoさんによる"Truck"についてのLTで、建築や機械の業界で幅広く使われている設計ツールCADのカーネルをRustで作成している、という発表でした。

設計にあたっては、全体を代替可能な小さいクレートの集合体として捉えて定義されているそうです。
crate.ioという中央集権的なシステムがあるからこそ成り立つ、C++ではできないRustならではの設計思想ですね。
ゆくゆくは描画もwebで行うことを目指されているとのことで、とてもワクワクします!(谷井)

LT3 | ユーザランドで仮想ブロックデバイスを作りたい | akiradeveloper さん

pic_03_210309.png

3番目はakiradeveloperさんによる、仮想ブロックデバイスを作る仕組みであるDevice mapperをRustで実現したい、という発表でした。

Linuxカーネルで複雑な仕組みを作るのは大変なので、Rustの安全性と強力なエコシステムを使い倒したいというモチベーションだったそうです。
従来はNBDを使った実装が知られていましたが、不必要にネットワークスタックを経由する必要があったため、ABUSEというカーネルモジュールをゼロコピー化するアプローチによって高速化を実現されたとのことでした。Rustの可能性の広さに唸らされる内容でした。(谷井)

LT4 | Rustで統計学 | ShuntaroOHNO さん

pic_04_210309.png

4番目は、博士課程で研究をされているShuntaroOHNO さんが、Rustで統計学をするのに便利なクレートの紹介をしてくださいました。

処理にRustを使うことのメリットとしては、計算をベタ打ちしてもそれなりに高速に動作するので新規手法が手軽に試せること、crate.ioの管理機能がしっかりしていて未来に遺せることを挙げられていました。
確かにPythonやC++だと別の人にシェアしてもエラーが出て動かない事も多々あるので嬉しいことですよね。

統計学で用いられる言語としてはRやPythonが主流ですが、現在Rustを使う人はPythonやC++などほかの言語も書けるが、上述のメリットを踏まえて敢えてRustを選択している、という方がほとんどではないかと思います。
PythonとRustの相互変換が可能なクレートや、Pythonの主要な計算ライブラリであるNumpyとの連携を可能にするクレートもあるため、普段Pythonを使っている方は計算の一部でRustを使ってみるのもよさそうですね。
(平岡)

LT5 | Rustでロギングってどうすればいいんですか? | matsu7874(フォルシア)

pic_05_210309.png

最後は弊社の松本が登壇し、Rustでのロギングの方法についてLTで紹介を行いました。
log, envlogger, simplelog, fern, tracingなど様々なcrateについて、どのようなケースでどれを採用すべきか、ライブコーディングも交えながら話してくれました。

私はRustを触り始めたばかりで、ロギングのベストプラクティスを探していたところだったため、個人的にはタイムリーでとても参考になりました。
クレートの選択肢が複数あり、ログレベルを選ぶことができるものもあって、自分好みのログにカスタマイズ出来るのはいいですね。(平岡)

懇親会

今回のShinjuku.rsでもLT終了後に登壇者の方と参加者有志の方とフォルシア運営での懇親会タイムを取りました。今回は具体的な困りごとについての議論があったので、その中身を簡単にご紹介します。

競プロ経験者の方から「配列のindexにusizeってつけるの面倒じゃないですか?」という話題提起がありました。

let index = 1;

などと書くとデフォルトではi32型になるので、ベクタや配列の要素にアクセスするindexとして使うためには

let index:usize = 1;

としなければいけない(配列へのindexアクセス時にusize型を要求されるのが面倒だねという主旨)。
1秒を競い合う競プロでは、これを煩わしく思う場面が多いかもしれません。
usizeって明示するべき場面で明示させられているだけなので、「そういうもの」と割り切っている方もいらっしゃって、それはそれで納得感もあります。懇親会の場では、

  • エディターに :usize を補完させるように頑張る
  • usizeやint32などをusizeに統一するマクロを定義する

などの解決策が挙がっていました。
「自分はこうしてるよ!」というアイディアをお持ちの方、ぜひ次回Shinjuku.rsのLTや懇親会でお知らせください!

おわりに

オンライン開催もいつの間にか5回目となり、今となってはフォルシア社屋でピザを囲んでの懇親会をしていた頃もはるか昔のようで、懐かしいです。

今回もまた様々な分野でのLT発表をしていただき、多くの方にご参加いただくことができました。
参加者アンケートでも、「話題の幅が広く、とても勉強になった」「RustやRustを使ったプロダクトに興味を持つことができた」「とても高い水準のLT会だった」など、ありがたい声をいただきました。

オフラインでの活動が減って「知らなかったことに偶然出会う」ような機会が減っているので、イベントを運営する中でこうして多様なジャンルの内容の発表を聞くことができるのは、知的好奇心が刺激されて役得だなと感じています。(谷井)

Rustは普段自分触っているwebとは別の界隈でも幅広く活用されているのを感じさせられるLT会でした。
それと同時に自分の知識不足を痛感し、良い刺激になりました。(平岡)

LT登壇いただいたみなさま、ご参加いただいたみなさま、ありがとうございました!

次回のShinjuku.rs #15は 4/27 に開催予定です

以下のページから参加申し込みできます。

Shinjuku.rs #15 connpassイベントページ

Rustを商用利用した話、Rustでこんなものを開発したぜ、Rustの面白い仕様を紹介したい、Rustにcontributeしたなど、Rustに関連する内容ならなんでもWelcomeです。皆様からのLTをお待ちしています。

この記事を書いた人
谷井 嶺太
2019年新卒入社。第二旅行プラットフォーム部エンジニア。
日本野鳥の会会員。


平岡 翔舞
2019年新卒入社。第一旅行プラットフォーム部エンジニア。
コンパイルを通せるよう精進します。