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

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

2019.11.25

Shinjuku.rs Rust エンジニア

プロダクト部の松本です。フォルシアではShinjuku.rsというRustのLT会を隔月開催しています。今回、7度目となるShinjuku.rs #7を11/19(火)に開催し、多くの方々にご参加をいただきました。LT枠もキャンセル待ちで申し込みを頂きRustコミュニティの盛り上がりを感じました。

前回の様子はこちらを御覧ください。
Shinjuku.rs#6を開催しました

LTの様子

LT1 プロダクトにRustを導入した話 | Satoshi Yoshikawaさん

pic_1.jpg

フェアリーデバイセズ株式会社の吉川さんからは、自社プロダクトにRustを導入した事例を紹介いただきました。

2019年5月に行ったShinjuku.rs #4では、Rustを触り始めているということで、Rustで自社のAPIを叩いてみるというLTをしていただいていますので、半年でプロダクトに導入されたことになりますね。

音声認識クラウドサービスの各APIについて柔軟なアクセス制限を行うCATS(Concurrent Access Throttling System)をRustで実装されたとのことでした。

自身が開発部門のマネージャーということで、Rustを導入するためにやって良かったことについてもお話しいただきました。

  • 気持ち
    • Rustで作り切る。
    • Rustの難しさを言い訳にしたロジック・コードを書かない。
  • 導入メリットのアピール
    • Rustで解決できる・したい課題を見つけてフォーカス。
    • Rustで書く利点をアピール
      • 人手が必要ない(コンパイラが解決してくれる)
      • 該当の機能については「高速化」
  • 運用
    • Part Time Rustaceanを作る
      • C++の人が多かった。
      • 「書けないけど読める人」が必要。
      • 静的型付け言語に慣れていれば、ロジックのレビューはできる。協力者に「自分もRustを読める」と感じさせる。
      • 言語仕様はコンパイラが見てくれるので。

2人協力者が現れて、サービスに導入できたとのことでした。

LT2 RustでSpotifyクライアントを作ってた(てる)話| togatogaさん

音楽ストリーミング配信サイトSpotifyをターミナルから操作するSpotermについてご紹介いただきました。

アプリケーションをRustで書いてみたいというモチベーションで、WebAPIの豊富なSpotifyのターミナルクライアントを開発されたそうです。SpotifyのWebAPIは、「公式クライアントでできることは大体APIが存在する」ほどに充実しているとのこと。

pic_2.jpg

API側とUI側を分けるためにマルチスレッドとチャネルを導入した周りでコンパイルエラーが多発、成熟したライブラリが少ないので、他のOSSにコントリビュートしながら開発をすすめる事になったそうです。

開発を開始して一ヶ月後に、spotify-tuiがリリースされたため、「アイディアなどは寝かせずにすぐに実装しよう!!」とおっしゃっていました。

LT3 HOGWILD! on Rust| ctylさん

Bulbit株式会社のctylさんからは、数値最適化問題でよく使われる確率的勾配降下法の高速化手法HOGWILD!をRustで実装した事例を紹介いただきました。

ulbit株式会社では全自動マーケティングプラットフォーム「UNICORN」を開発していて、機械学習の結果に基づいて自動入札・パフォーマンス最適化する際、オンラインデータを即座に学習してパフォーマンスを合わせたいというニーズがあったそうです。

pic_3.jpg

HOGWILD!は学習モデルをメモリロックせずに、学習データに対して非同期にモデルを更新することで、高速に学習を行うアルゴリズムです。モデルがスパースであれば、同じ要素が更新されにくく高速に学習ができるそうです。

競合状態が生まれるのでunsafeを使う必要があり、通常Mutex<>, RwLock<>を使うところをUnsafeCellを使って実装されたそうです。更新負荷の高いものについて5分の1程度の処理時間で学習が可能になったと報告されていました。

いくつかRustを使った感想をあげられていましたが、unsafe以外はコンパイラに任せることができ、unsafeの箇所を重点的にデバッグすることで効率的に進められたという点が印象的でした。

LT4 Rustでパフォーマンス計測| 11Takanoriさん

pic_4.jpg

休憩を挟み、後半は11Takanoriさんのパフォーマンス計測についてのLTでした。

Rustで書かれたREST APIのパフォーマンス計測ツールとしてWelleDrill、Rustアプリケーションの計測ツールとしてcargo benchとFLAMEを紹介していただきました。

FLAMEは計測したいコードの中にアノテーションしていくことで、処理ごとの所要時間を計測しレポートしてくれるライブラリだそうで、使いやすそうだと感じました。

LT5 「Go言語でつくるインタプリタ」をRustで移植してみた | kei_sさん

pic_5.jpg

株式会社レトリバの白土さんのLTです。Go言語でつくるインタプリタという書籍をRustで実装してみたということです。この書籍は、外部ライブラリを使わずに、字句解析器・構文解析器・評価器を創りながらMonkeyというC言語風言語のインタプリタを実装するという内容です。

リポジトリはこちら。kei-s/waiir: Writing An Interpreter In Rust

GoからRustへ移植ということで、下記のような一筋縄ではいかないポイントがあったとのことでした。

  • nilを返せない
  • Interfaceから実体が取れない
  • cloneだと実体が分離してしまうので再帰関数が書けない

RustとGo言語の比較がされる面白い内容でした。

LT6 cargo-makeを使ってみた話 | Ryosuke Kamesawaさん

最後は株式会社DeNAの亀澤さんのLTでした。10月から仕事でRustを触っているそうです!

pic_6.jpg

Rustには標準のBuildツールであるCargoがありますが、もう少し複雑なタスクを実行したいというモチベーションでcargo-makeを試してみたとのことです。

predefined taskをつかうとCIが楽に書ける一方で、defaultが自分の書いた定義ファイルよりも強い優先度で適用されるため予期しない挙動になってしまったりで、便利だけどハマリポイントもあるとおっしゃっていました。

懇親会

今回もピザを片手に懇親会を行いました。Shinjuku.rsの話や業務として使っていくためにしている工夫の話、アプリケーションの規模感によって適切なツールは変わってくるので選択が重要だねという話など、Rustを使う会社が増えてきたことを感じるテーマが話されていたように思います。

pic_7.jpg

次回、Shinjuku.rs #8は2020/01/21(火)に開催予定

今回、Shinjuku.rsは1周年を迎えました。弊社はRustを商用利用しているため、今後も学び・交流の場を提供することでRustコミュニティに貢献してければと考えています。既に次回Shinjuku.rs #8の募集を始めています。ご興味を持っていただけた方は下記connpassページから参加登録をお願いいたします。
RustのLT会 Shinjuku.rs #8 @FORCIA

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

この記事を書いた人

松本 健太郎

フォルシア4年目のエンジニア。
Rustでインメモリデータベースの開発を行っている。