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

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

2019.05.23

技術本部 Rust 勉強会

 プロダクト部の松本です。フォルシアはRustという比較的新しいプログラミング言語を一部のアプリケーションで商用利用していることもあり、隔月で勉強会を主催しています。1枠15分のライトニングトーク(LT)形式で、ちょっと興味があるくらいの初心者からRustに関する本を出版されるような猛者まで様々な方に参加いただいています。

 さて、5/21(火)に4回目となるRustのLT会 "Shinjuku.rs #4" を開催しました。生憎の雨でしたが、合計で30名参加での開催となりました。ご参加いただきました皆さん、ありがとうございました。

IMG_5013.JPG

 前回の『Shinjuku.rs #3を開催しました』に引き続き、今回もレポート記事をお届けします。

発表スライド

RustでWebSocketな自社APIを使う | emergentさん


IMG_5017.JPG

 トップバッターは emergentさんのLTで、自社の音声認識APIをRustから叩いてみたという内容でした。
 コードはemergent/rust-mimiioで公開されています。

 モチベーションとして仰っていた「エラー処理、並列処理、ライフタイムを使うには、ものを作ろうと思った。」という言葉が印象的でした。
 会場から「Futureはどんな資料を見たか」という質問がありました。

  • Docs.rs
    • サンプルを動かしながら、手を加えて挙動を見て覚える
  • tokioのドキュメント

Rust でもモナドは実装できるのか? | yukiさん


IMG_5026.JPG

 会社の勉強会でFunctional Programming in Scalaを読んで際にRustで実装したくなったとのこと。

 モナドについては「複数の計算をいい感じにつなぐもの」という説明に留められていました。

 Rustにはない「高カインド型(Higher-Kinded Type)」を「関連型」を利用することで実現するところがポイントでした。実装の概要は下記でしょうか。

  • HKT trait: Monadが持つ型の情報を実装する。
  • Functor trait: 「特定の型を受け取って、特定の型を返す関数」を適用する関数map を実装する。
  • Monad trait: 特定の型をモナド化する関数pureと、関数の合成を行うflatMapを実装する。

RustでService Mesh - HackMD | Takanoriさん


IMG_20190521_194047.jpg

 Service Mesh(マイクロサービス構成において、データの制御を行う仕組み)を実現するための、プロキシであるlinkerd/linkerd2-proxyの概説と、面白い実装テクニックを紹介いただきました。
 LinkerdはRustやTokioのコミッターが開発しているんですね。

 全ての通信にかかってくるproxyのレイテンシを小さくしたい且つ、数が多くなるので省メモリで動かしたいということで、Rustで開発するモチベーションがあるとのこと。

 また、面白い実装として下記の2点をご紹介いただきました。

Rustとwasmでライフゲームで文字書くやつ作った話 | YuichiroSatoさん


IMG_20190521_195356.jpg

 YuichiroSato/banner-of-lifeで公開されていますが、Conwayのライフゲームの固定物体と振動子を文字型に敷き詰めるモジュールの紹介をしていただきました。
 背景に表示されているフォントはご自身で用意されたとのことでした。

Shinjuku.rs #4 でライブコーディングしてきた | κeenさん


IMG_20190521_200907.jpg

 なんと飛び入りでライブコーディングしていただきました!

 「ここで構成したインタプリタは簡素なものではありますが、骨子は同じまま複雑な処理をするインタプリタへの応用もできるでしょう。変数、関数、制御構造、ユーザ定義型、と徐々に拡張していけば1つ1つのステップは難しくないでしょう技術評論社『実践Rust入門』P.395(強調は引用時に装飾しました。)
と書いた手前「難しくないことを示す」必要があると急遽ライブコーディングを行ってくださいました。

高速で実装を進めながらTipを紹介する
  • Into<String> を渡してあげると、Stringでも&strでも渡せて便利
fn var(s: impl Into<String>, loc: Loc) -> Self {
    Self::new(TokenKind::Var(s.into()), loc)
}

 練習なしのぶっつけ本番。しかも先週からDvorak配列に切り替えたのであまり慣れていない!!しかし高速にコーディングしながら、解説やTipsの紹介までスムーズに行っていただきました。
 テストがオールグリーンになるたびに会場からは拍手が。

 わずか20分でしたが、詳しい方のライブコーディングは非常に勉強になりました。

懇親会

 LTが終わった後は、ピザと飲み物を囲んで懇親会を行いました。
 「自社で数人しかRustを書ける人がいないので、どうやって布教しているか」、「モナドは何が嬉しいのか」という話もあれば、弊社の新卒のメンバーもいたことから「新卒研修は何をやっているか」など、いろいろな話題で盛り上がっていました。

 弊社の新卒研修についてはこちらの記事『現場での経験が成長を加速させる 若手が活躍するフォルシア技術部の教育現場』をご覧ください。

次回、Shinjuku.rs #5は7/16(火)に開催予定

さて、既に次回の募集を始めています。ご興味を持っていただけた方は下記connpassページから参加登録をお願いいたします。
RustのLT会 Shinjuku.rs #5 @FORCIA

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

この記事を書いた人

松本健太郎

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