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

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

2020.07.14

エンジニア Rust Shinjuku.rs

旅行プラットフォーム部の高橋です。フォルシアではShinjuku.rsというRustのLT会を隔月開催しています。
コロナの影響もあり前回の開催から少し間が空いてしまいましたが、今回10度目となるShinjuku.rs #10を6/30(火)にオンラインで開催しました。

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

LTの様子

RustでProperty-Based Testing | matsu7874さん(フォルシア)

pic_200714_1.jpg

フォルシア5年目の社員である松本から、RustのProperty-Based Testingに関するLTでした。

Rustでテストを書くのはどうしたらよいか、例として宅急便の荷物(baggage)を定義した構造体と荷物を検索する関数(query)についてのテストを書くというサンプルケースで考えてみます。baggageとqueryの両方にテストケースを用意する必要がありますが、今後属性が増える可能性があることを考慮すると、テストケースを用意するのが少し面倒です。

そこで便利なのが「Property-Based Testing」という手法です。これは仕様からテストケースを自動生成する手法で、たくさんの入力から仕様が満たされていることを確認することでテストします。

RustでProperty-Based Testingを実装する際に便利なcrateを2つ紹介してくれました。

quickcheck

テストする関数の引数の型によってテストケースを自動生成してくれます。自分で実装した型についてはarbitraryを実装することで、それをもとにテストケースの生成が行われます。標準的な型を用いた関数のテストを行うのに適したcrateです。

proptest

quickcheckよりは新しいcrateで、Rustのコンパイラチームの方も参加されているプロジェクトになります。proptestではテストする値の範囲を明示的に指定することができます。proptestとquickcheckのどちらを使えばいいのかについてはそれぞれの開発者が直接話をしていて、基本的にはproptestの方が高機能ですが、基本的な型を使う場合やテストを高速に実行したい場合quickcheckの方が適しているとのことです。

LTに対するコメント

  • 便利そう!
  • サンプル数の設定はできますか
    • proptestについては可能です。quickcheckについてはわからないです
  • quickcheckは型レベルでテストケースを生成、proptestはアノテーションを用いて生成する、という感じでしょうか
    • その通りです!

Crate Trendsを作ってみた | TheWorldさん

pic_200714_2.jpg

crates.ioをより見やすくするために、Next.jsとRustを用いてアプリを作成されたというLTでした。以下のURLから実際に利用することができます。

https://crate-trends.herokuapp.com/

crateのダウンロード数や過去のバージョン、他のcrateとのダウンロード数の比較などもできるようです。デザインが洗練されていて、且つ高機能でとても便利そうです!

LTに対するコメント

  • かっこいい
  • すごい!
  • マウスオーバーで蟹が回って可愛い
  • Next.jsの実装とRustの実装はどちらが大変でしたか?
    • Rustはactix-webを初めて使ったので少し慣れてなかったですが、APIの利用は比較的簡単にできました。Next.jsは割と大変でしたが、デザインはmaterial-uiを利用することでコストを下げています
  • crates.io のデータはどうやって取得していますか?スクレイピング?APIがあったりするのでしょうか
    • crates_io_apiという名前のライブラリを使っています
  • この手のUIはWASMは向いてないんでしょうか?
    • 一度WASMを使ってみようとしましたが、WASMだとnet2が利用できなかったので断念しました

懇親会

LT終了後に参加者の方と雑談する時間を設けました。普段のように飲食物を提供することはできませんが、コメントにて色々なご意見・ご質問をいただきました。

懇親会の様子

  • みなさんどちらから参加されてますか?

    • 名古屋
    • 福岡在住なのでオンライン開催嬉しいです!
    • 東京在住なので新宿には行けるのですがオンラインの方が参加し易いです!
    • 米国なのでありがたかったです
    • エストニアから参加しました!Rustも触れ始めたばかりだったのでありがたく、楽しかったです!
    • 分布がすごすぎるw
  • ぜんぜん今日のLTと関係ないのですが、業務でRust使っていて苦労するところってありますか?

    • Rustかける人少ない問題
    • Rustを布教、教育するのが大変
    • まだ定番のライブラリが定まってないので、何使うかの調査が少し大変
  • Rustのイケてるところってどんなところですか?個人的な感触で良いので教えて下さい。

    • コンパイラがすごく賢い
    • 最近の言語の書き方ができるので、ストレスなく書ける
    • 使いやすいツールチェーンがあること
  • Rustにフレームワークって何使ってますか?

    • rocketを使ってます

はじめてのオンラインイベントを振り返って

初めて社外イベントをオンラインで開催しましたが、こちらの記事で紹介したように社内イベントをオンラインで開催した経験もあり、大きく詰まることなく運営ができたのではないかと思っています。

「ニクの日」初のオンライン開催 技術系の社員が大いに語らう

利用するツールの選定や開催手順の調査・検討など大変だった部分もありますが、終わってみると「オンラインイベント、悪くないじゃん!」というのが素直な感想です。

イベントを開催して感じたオンライン開催の利点としては、以下のような点があります。

  • 場所を選ばないので全国(全世界)から参加していただける
  • 会場や飲食の準備の手間がかからない
  • コメント機能を使うことで、LTへの感想、質問を気軽に投稿することができる

現地開催だとどうしても新宿近辺で働かれている方に参加が限定されてしまいますが、オンラインだとその制約もありません。さらに懇親会のコメントでは、新宿の近くに住まれている方でもオンラインの方が参加しやすいという意見もあり、参加の手軽さはオンラインの魅力だなと感じました。

またオンラインだと参加者の顔が見えないし、発表者と参加者のコミュニケーションは難しいかと思っていましたが、実際にはコメント機能を使うことで予想以上に双方向のコミュニケーションをとることができました。マイクを使って口頭で質問してもらうことも可能ですが、コメントの方がハードルが下がって良さそうです。また主催者も積極的にコメントして、コメントする流れを作ることも重要だと感じました。

一方で現地開催することのメリットとして、以下のようなものが挙げられると思います。

  • 懇親会で参加者同士の深いコミュニケーションがとれる
  • 発表に関する深い議論も対面のほうがしやすそう
  • フォルシアの社員・オフィスの雰囲気を知ってもらえる

オンラインでも予想以上には参加者同士のコミュニケーションをとることができましたが、やはり深い話は対面の方が行いやすいと感じています。

また、弊社でイベントを開催している目的の一つには「フォルシアについて知ってもらう」という点があります。実際にオフィスに足を運んでいただいて社員と直接話をすることで、少しでも雰囲気を感じ取ってもらえればなという思いもあるので、この点は現地開催の方が実現しやすいです。

オンラインでイベントを開催したことで、これまでにない観点でイベント開催について見つめ直すことができました。今後の開催方法については今回の気付きをもとに、検討していきたいと思います!

次回のshinjuku.rs #11は8/25(火)に開催予定です

次回Shinjuku.rs #11の募集を開始しました。ご興味をお持ちいただいた方は下記connpassページから参加登録をお願いいたします。

RustのLT会 Shinjuku.rs #11 @FORCIA

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

この記事を書いた人

高橋 優樹

新卒2年目エンジニア。
アプリの趣味開発もやってみたいです。