kuwana-kbの開発/学習ブログ

プログラミング、クラウドインフラのWeb開発/学習ブログ

Rust.Tokyo 2019 参加レポート

こんばんは、kuwana-kbです。

2019/10/26 に開催されたRust.Tokyo 2019に参加してきました。 Rust.Tokyoは今回が初開催とのことでしたが、およそ200名のRustacean(Rustプログラマーの通称)が集まり大盛況を収めました。

各セッションは30分で、RoomAとRoomBで2つのセッションが同時並行で行われました。 今回は、私の参加したセッションについてのレポートをまとめたいと思います。 Rust.Tokyoに来ることができなかった方にもどういったセッション内容だったかわかるように、各セッションの概要と所感を共有します。

※前提として、筆者はRustに入門して2ヶ月と知識が浅いです。内容に誤り等ありましたらご指摘くださいますと嬉しいです。

f:id:kuwana-kb:20191105040637j:plain
ノベルティのトートバッグ!

参加セッション一覧

  • Visualization of mechanical CAD drawings using WebAssembly and WebGL
  • Lifetime: A survival guide
    • Eric Findlayさん / Software and Currency Engineering
  • Rustによる数値計算の現状と課題
    • termoshttさん(@termoshtt) / Software Engeneer@RICOS Co. Ltd.
  • Web-based Data Visualization with Rust and WebAssembly
  • いつの間にか社の中核製品にRustが使われていた件について
    • 斎藤さん(@aznhe21) / OPTiM R&D Engineer
  • Rustを採用したサービス開発事例について
    • 高藤 謙佑さん / CADDi Inc.
  • Contributing to Rust
    • Florian Gilcherさん(@Argorak) / Rust team member and community person

Visualization of mechanical CAD drawings using WebAssembly and WebGL

スライド

speakerdeck.com

概要

  • 発表者: 小橋 昭文さん (@TaigaMerlin) / CADDi Inc.
  • Rust, WebAssembly(WASM), WebGL を駆使してWebブラウザ上で2D描画を実践した話
  • WebAssmebly(WASM)とは
    • ホスト環境で走るバイナリコードフォーマット
    • RustからWASMのコードフォーマットに変換して、jsから呼び出すことでWebブラウザでの実行を実現する
    • 近年はほとんどのWebブラウザでWASMがサポートされていて、Figmaや1Passwordなどでも採用されている
  • WebGLとは
    • ブラウザで3Dを描画するための標準仕様
  • RustとJavaScriptの相性は良い。Rust <=> JSで相互に呼び出しが可能だし、重い処理をRust側で実行できるといったメリットがある
  • 最終的に2D描画をRust, WASM, WebGLで実現することができた。現状はまだ多くのハックを必要とするが、今後の発展に期待ができる

所感

私の所属する会社、キャディのCTOの発表です。(ちなみにキャディはRust.Tokyo2019のゴールドスポンサーもしてました。)

お恥ずかしながらWASMやWebGLについてよく知らなかったのですが、WASMを用いることでRustのコードをブラウザ上で直接実行できるということに驚きました。 近年リッチ化が進むフロントエンドにおいて、JSだけでは実現が難しい仕様もこれらの技術を駆使することで幅が広がりそうですね。 WASMの採用事例として挙げられたFigmaを業務で使っていますが、確かに動作は軽快です。

気になったのはブラウザで実行する関係上バイナリのサイズを少なくする必要があり、そのために標準ライブラリが使えないという制約です。 必要最低限のサイズに収めるためにもライブラリの自作が必要であり、この点はまだハードルが高いと感じました。 (もちろんパフォーマンスを無視すれば標準ライブラリを入れる選択もできるとのこと。)

Lifetime: A survival guide

スライド

github.com

概要

  • 発表者: Eric Findlayさん
  • Rustのライフタイムと借用システムについての話
  • ライフタイムとは何かをカプセル化と依存関係という視点で解説

所感

Rust入門者にとってのハードルとしてよく挙げられるRustのライフタイムについての講義でした。解説では図やサンプルコードを多く用いられていて、わかりやすかったです。 「Rustの借用システムは参照先の存在を保証してくれない」という文脈からライフタイムの意義が解説されていて納得感がありました。

質問コーナーでは、ライフタイムに関する困りごとの話が多く挙がっていました。その中で、「コンパイラ駆動開発でとりあえず動かしてみよう。最初はわからなくてもコンパイラと格闘しているうちにわかってくることがある。」という登壇者の言葉が印象的でした。私がRustに入門したての頃は、コンパイラの言う通りにエラーを修正する作業に不安を覚えた記憶があります。まあ結局コンパイルエラーに何度もぶつかっていくうちに、Rustの仕様理解が深まっていくのですが、他のRustaceanも同じような方法でRustへの理解を深めているのだなぁと。

Rustによる数値計算の現状と課題

スライド

概要

  • 発表者: termoshttさん(@termoshtt) / Software Engeneer@RICOS Co. Ltd.
  • Rustで数値計算を実践した話
  • 数値計算とは何か
    • 理学光学の問題の多くは紙とペンでは解けず、数値的に解く必要あり
    • 問題ごとにソフトウェアを作る必要がある
  • 数値計算に必要なもの
  • なぜRustか
    • LLVMを通して最適化するのでCと同程度に高速
    • 強い型付け
    • Traitを用いた抽象化
    • メモリに対する完全な管理権限
    • GCがない
    • マシンに乗るギリギリの計算を行える
  • なぜRustか(開発環境)
    • パッケージ管理機構がある、ライブラリが容易に使える
    • 普及しているプログラミング言語としての恩恵はそのまま得られる

所感

数値計算アルゴリズム周りに疎いのですが、数値計算にはどういう要求があってRustがそれをどう満たしているかという文脈で語られていたため理解がしやすかったです。 お話の中でもあったように、C/C++/FORTRAN等の既存のライブラリを使い回せるのは不要な再発明を減らせるという点で大きなメリットですね。 なぜC++ユーザーがRustに移行しているかの理解に繋がりました。

また、周辺ツールとして紹介されていた「Benchmarking」と「Perfomance Profiling: FlameGraph」が興味深かったです。branch別に速度を比較したり、関数ごとの処理速度の計測ができたりと便利そうなので使ってみたいでです。

Web-based Data Visualization with Rust and WebAssembly

スライド

speakerdeck.com

概要

  • 発表者:Yosuke Onoueさん(@ _likr) / 日本大学 文理学部 情報科学科 准教授
  • 情報可視化のアプリケーションをRustとWASMで実装した話
  • Visual Analyticsは人間がデータと対話する場といえる。視覚敵かつ対話的なインターフェースを作ることで、ユーザー層をエキスパートから専門家でない人にまで広げていく
  • web based VAの要求
    • レンダリングパフォーマンス
      • 60FPS(16ms per frame)
    • 計算パフォーマンス
      • 分析では、複雑なアルゴリズムを使う。計算処理能力が必要
      • ユーザーの操作に対してリアルタイムでレスポンスする(<100ms)
  • Rustを選んだ理由
    • 実行時のオーバーヘッド少ない
    • Native support マルチスレッド、SIMD
    • first class support wasm
  • パフォーマンスの観点
    • パフォーマンスの観点では、言語の境界を行き来するのはオーバーヘッドが高い。(例:Rust <=> JS)
    • jsはCPU性能の単体分しか使えないという点で、wasmはwebアプリケーションの限界を越えるキーテクノロジーといえる
  • web技術の拡大を目指す
    • ハイパフォーマンスなアプリケーションは特定のユーザーの要求を満たすことができる。つまるところはwebの領域を押し上げるためにも必要となる

所感

スライド内にVisualAnalyticsのアプリケーションのサンプルが載っているのですが、大量のエッジとノードを用いた計算は確かに処理が重そうです。 こういった類のアプリケーションは基本的にデスクトップアプリの印象が強いのですが、Web上で扱えるようになっているなんてすごいですね。Webの可能性が広がっているのを感じました。

いつの間にか社の中核製品にRustが使われていた件について

スライド

リンク見つけられず…

概要

  • 発表者: 斎藤さん(@aznhe21) / OPTiM R&D Engineer
  • OPTiM社の製品にRustを採用した話
  • 既に5つの製品にRustを採用している
  • Rustを採用した理由
    • 安全性
      • セグフォやリソース競合が原則として発生しない
      • enumの分岐漏れや未処理のエラーを忘れることがない
    • 高速性
      • 簡単なプログラムではC/C++と同程度の速度
      • ゼロコスト抽象化や高度なライブラリによってC/C++を上回る
      • パフォーマンスが必要な場合はunsafeブロックにより檻を抜け出せる
    • エコシステム
      • rustupですべてが入るので環境構築が楽
      • cargo buildでprotobufからのコード生成が一発でおわる
    • FFI
      • C/C++製の資産を利用可能

所感

OPTiMさんは既に複数の製品にRustを採用されているようです。C++との比較でRustが語られていた点が印象的でした。

Rustを採用したサービス開発事例について

スライド

speakerdeck.com

概要

  • 発表者: 高藤 謙佑さん / CADDi Inc.
  • なぜRust?
    • 型安全性
    • 開発者体験
    • パフォーマンス(今回はあんまりふれない)
  • 型安全性
    • Resultでエラーをつつめる
      • DBの検索結果をOptionでくるめる
      • panicやunwrapはプロダクションなので使わない
  • キャディでAPIサーバをRustを使って実装している話
  • Rustの開発者体験について
    • cargoは優秀で、特にfmtとclippyはよい。チーム内の議論のコストを下げられる
    • Rustの社内教育は、「The Book」と使った。業務へのアサインでは、実装アプリケーションの雛形を用意することで段階的に業務につけた。8月入社のRust未経験者も開発できるようになった。
  • Rustの表現力について
    • 独自の新しい型を作ることができる
    • 幽霊型
      • 文字数制限を幽霊型で簡単に切り替える
    • コードでなにをしているか表現しやすい

所感

私の所属するチームでテックリードしている方の発表です。

実際に業務で関わっているので所感ではなく補足を書きます。 発表内容で出てきた「8月入社のRust未経験者」とは私のことです笑 Rustの学習について、「The Book」はRustだけでなくプログラミングの勉強にもなりました。無料で読めるなんてほんとにすごい。

また、実装アプリケーションの雛形は実装すべきコードのイメージを事前に把握できた点でありがたかったです。 Rust.Tokyoの後半には懇親会もあったのですが、Rustの社内教育という観点は皆さん興味を持たれていたようでした。

Contributing to Rust

スライド

リンク見つけられず…

概要

  • 発表者: Florian Gilcherさん(@Argorak) / Rust team member and community person
  • Rustにcontributeするとはどういうことか
  • contributionの例
    • 実装
    • レビュー
    • infra整備
    • 翻訳
    • ドキュメント整備
    • 法関連も
    • ミートアップ
    • ライブラリ書いたり
  • Rustにどうcontributeできるか
    • contributeには壁がない方が良いという考え。チームへのjoinとleaveは簡単。また、必ずしもチームに属している必要はない。
    • 1週間に30分~2時間のcontributeは普通だ
  • Rust projectの抱える課題
    • 組織の再編成
    • 成長痛
    • projectの情報のフロー
    • ドキュメントが欠けている件
    • Easier in-person meeting(timezoneに依存するモンダイ
  • まとめ
    • 自分のcontributionのリズムをみつけよう
    • 関心のあるtopicをみつけよう
    • 地域のpeerを見つけよう
    • 関係のあるチームに連絡しよう
    • 何かあればrust-lang.orgで質問しよう

所感

Rustを実際に開発しているRust Projectの方のお話です。 言語の開発プロジェクトがどういった形で運用されているのかを知ることができる発表内容でした。 開発以外のタスクもたくさんあるのですね。 言語へのContributeはハードルが高いように感じていましたが、「1週間に30分~2時間のcontributeは普通だ」と聞くと自分も何か貢献できるかも、という気がしてきました。

また、Rustのコミュニティ運営はProjectチームがマネジメントするのではなく、コミュニティが主導してProjectチームはサポートする姿勢というのも印象的でした。 Rustの支援者には他言語のコミュニティを作ってきた人が多いそうなのですが、そこで得られた知見が活かされているのだなと。

終わりに

全体を通してみて、以下のような感想を持ちました。

  • 参加者のRustへの熱量を感じられる良いカンファレンスだった
  • RustはC++ユーザーの代替言語として人気な印象
    • エコシステムがよく設計されていて、安全かつ高速に作っていける
    • 既存の資産を有効活用もできる
  • RustをWASMやJSと組み合わせることでWebでできることの範囲が広がりつつある
  • 色々な分野のRust採用事例を聞くことができた
    • 情報可視化や数値計算、組み込みなど多岐にわたる分野でRustは使われていた
  • (懇親会で自分が聞いた範囲の話だが)個人でRustを使っている人が多い印象
    • 仕事で使っている(使えている)人の割合はまだ少なそうだったが、今後取り入れていきたいという方は何人もいらっしゃった

最後に、運営のみなさま本当にお疲れさまでした。 どのセッションも興味深く、たくさんのRustaceanと交流できる素晴らしい場だったと感じています。 ノベルティのトートバッグはとても素敵でしたし、懇親会のご飯もおいしかったです。 次回のRust.Tokyoもとても楽しみです!

関連リンク