Rustプロダクトのキャッチアップ
by
kato manabu
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Rustプロダクトのキャッチアップ フェアリーデバイセズ株式会社 プロダクト開発部 加藤学
Slide 2
Slide 2 text
目次 - 自己紹介 - 当社プロダクトの説明 - Rust開発①既存サーバの改修 - Rust開発②中間サーバの新規開発 2
Slide 3
Slide 3 text
どんな人間? C / C++ / アセンブラ 3 PHP / Go C++ / Python / Rust 8 年 2 年 2 年 今ココ
Slide 4
Slide 4 text
入社前のRustへの印象は? - ポストC言語として興味はあった - 長らくCに関わって、その発展形に興味があったから - Golang, Nim, vlang, Rust など軽く触っていた - 天才以外に使えるの? - 所有権を「完全に理解」しても、「書けるか」という不安があった 4
Slide 5
Slide 5 text
目次 - 自己紹介 - 当社プロダクトの説明 - Rust開発①既存サーバの改修 - Rust開発②中間サーバの新規開発 5
Slide 6
Slide 6 text
6
Slide 7
Slide 7 text
加藤の業務(例) 7 speech recognition engine End Point Proxy machine translation ・ ・ ・ Proxy Proxy ・エンジン提供元の会社 ・社内R&Dチーム mimiチーム
Slide 8
Slide 8 text
加藤の業務(例) 8 speech recognition engine End Point Proxy machine translation ・ ・ ・ Proxy Proxy mimiチーム エンジン提供元の会社 社内R&Dチーム
Slide 9
Slide 9 text
目次 - 自己紹介 - 当社プロダクトの説明 - Rust開発①既存サーバの改修 - Rust開発②中間サーバの新規開発 9
Slide 10
Slide 10 text
何をしたかった? 10 speech recognition engine Audio stream Text End Point Proxy Audio stream Message new JSONに
Slide 11
Slide 11 text
⏬ 辛かった - GitHub で読もうとして、頭がパンクする - 便利な機能を全部ONにして、超重力を味わう - 言語仕様をよく読まないせいで、沼る - 先入観で crate を使おうとして、時間をゴミにする 11
Slide 12
Slide 12 text
⏬ GitHub で読もうとして、頭がパンクする - コードだけ見ても、状況がよくわからない - 明示的な型宣言を(あまり)しないから - 関数をドットでつなげていくから 12 - エディタに rust-analyzer を入れて読むべし - アサインされると、まず GitHub で読みがちだが、非推奨
Slide 13
Slide 13 text
⏬ 便利な機能を全部ONにして、超重力を味わう - rust-analyzer - ないと変数の中身がわからない - cargo watch - コード変更と同時に check できる - ブラウザ - わからない時は検索に頼る - 気づくと数十個のタブ・・・ 13 超重力 ハイスペックPC or 取捨選択
Slide 14
Slide 14 text
⏬ 言語仕様をよく読まないせいで、沼る 14 - ドキュメントを流し読みしていた - 基本は C++ や Java ぽいし、読んでるうちにわかるはず - わからない部分を検索しよう - ?の意味がわからなかった - ?は記号なので、「rust」「?」で検索しても答えが出なかった - 言語仕様はちゃんと読もう - 特に Result, Option 周辺
Slide 15
Slide 15 text
⏬ 先入観で crate を使おうとして、時間をゴミにする - serde で json パースができない - crate は feature で指定することで機能ONするらしい - serde の feature に json って入れたら動くはず! - 失敗! - serde / serde_json は違う crate だった - ちゃんと公式ドキュメントを読もう - 公式ドキュメントを見れば、ちゃんと serde_json と書いてある 15
Slide 16
Slide 16 text
⏫ 良かった - 光速で開発環境が整った - 天才じゃなくても使えた - テスト見ながらコードを読めた 16
Slide 17
Slide 17 text
⏫ 光速で開発環境が整った - Cを使ってた頃 - 現場に伝わるドキュメントを探す - 更新漏れが数か所あったりなかったり - OSのバージョン、gccのバージョン、ライブラリのバージョンを調査 - たまにライブラリのパスが特殊な位置に固定されていたりする - Rustの場合 - rustup.rs でインストール - リポジトリを git clone - cargo build - Cargo.toml がコンパイルを保証してくれる 17
Slide 18
Slide 18 text
⏫ 天才じゃなくても使えた - Clippyがめちゃくちゃ優秀だった - 静的解析ツール - インストールすると最初から入っている - 天才じゃなくても、事細かに教えてくれる 18
Slide 19
Slide 19 text
⏫ テスト見ながらコードを読めた - 関数の単体テストが同じファイル内に書ける - 本体は「こうしたい」、テストは「こうなってて欲しい」 - 両方を合わせてコードを読めるので、わかりやすい - テストを書いてくれていたから - 後から来る人のためにもテストを書こう・・・ 19
Slide 20
Slide 20 text
目次 - 自己紹介 - 当社プロダクトの説明 - Rust開発①既存サーバの改修 - Rust開発②中間サーバの新規開発 20
Slide 21
Slide 21 text
何を作ったの? 21 output filter tool Text Text End Point Proxy Text Text Hello. hello CUIツールを 外部コマンドとして実行
Slide 22
Slide 22 text
沼ポイント - Tokioの履修を後回しにして、理不尽な気持ちになる - おまじない気分だった標準的 derive、やっと視界に入る - 外部コマンドの crate 探し、手間取る 22
Slide 23
Slide 23 text
Tokioの履修を後回しにして、理不尽な気持ちになる - AsyncRead で read 関数を使おうとした - ドキュメントの↑を読み落としていた - スタンダードぽい名前だから read はあるはず・・・ - AsyncRead から AsyncReadExt に行き着く方法が他にない - 「Rust」「AsyncRead」検索しても「AsyncReadExt」出ない - read 指定すると Clippy はエラーをはくが、サジェストはしてくれない - Rust公式の次は、Tokioチュートリアルを読みましょう - (zennの日本語訳した有志に感謝) - 事実上 Ext が標準的 trait なの、なぜ・・・? 23
Slide 24
Slide 24 text
おまじない気分だった標準的 derive、やっと視界に入る - 既存プロダクトでは、標準的 derive を意識していなかった - Clone, Copy だけ字面からわかった気でいた - テストで assert_eq すると、怒られる - Clippy もサジェストしてくれなかった - PartialEq を入れないと自作 struct は比較してくれない - ↓のドキュメントでそこまで察するの、無理では・・・? 24 - println! しても変数の中身を出力してくれない - Debug のつけ忘れ - あらゆるものに Debug を継承させたくなる・・・
Slide 25
Slide 25 text
外部コマンドの crate 探し、手間取る - 非同期の crate が見つからなかった - 標準の std::process::Command は「同期」処理だった - tokio::process::Command になかなか行き着かなかった - 継続的に標準入出力を操作する方法がわからなかった - サンプルはLinuxコマンドを一発実行するだけのものが多い - サンプルではなく、理解して書いた第一歩 - spawn すると child が取得できる - ChildStdin / ChildStdout は BufWritrer / BufReader に入れると管理しやすい 25
Slide 26
Slide 26 text
心がけたこと - パーツ交換を前提にした構成 - まれによくある「いつの間にか crate 更新止まってる」問題 - 「止まらない crate 探し」→「更新止まってもすぐ交換できる設計」 - 密結合しないファイル構成 - 再利用しやすく、ライブラリに - (当社)構成の似たサーバを量産する需要 - 共通部分をライブラリに、無理そうでもテンプレ化しやすく 26
Slide 27
Slide 27 text
We are hiring! ● Frontend / Backend developer ● Device Engineer ● Product Manager ● …and more 27 Please check the job board out!