LT~」のイベントレポートをお届けします。Solutions代表の増田さんの発表です。Tomoakiwww.slideshare.net増田:本日は下記の2点をテーマにお話します。サービス編―Googleの事例GoogleはAndroidとLinuxカーネルの開発にRustを採用しています。メモリ安全性に関連するバグを減らすことが目的です。Microsoftの事例Microsoftはサイバー戦争の深刻化を背景に、より安全なコーディングを目指したRustの活用をしています。Amazonの事例AWSはエンジニアによるRustの使用を推奨しており、特にエネルギー効率の高さを大きな利点としています。Meta(Facebook)の事例Metaは高いパフォーマンスが要求されるバックエンドサービスの開発にRustとC++を使用するようにエンジニアに推奨しています。Hawaei(中国)の事例Hawei(中国)ではRustに基づく次世代の仮想化プラットフォーム「StratoVirt」の開発を行い、化学計算用の多次元配列演算ライブラリの分析と実践を行っています。RuntimeとWASMサンドボックスを用いたAIモデルも実行されています。Siemens(ドイツ)の事例IOT2040はSiemensによって開発された産業用IoTデバイスで、データを取りこぼさないようにするために、Rustが使用されています。libraryTezos(フランス)の事例スマートコントラクトやDapps(分散型アプリケーション)の開発・利用に適した性能を持つブロックチェーンプラットフォームTezos(フランス)。金融系のブロックチェーンも当然スピードが早い方がいいので、Rustが活用されています。Rustの活用範囲ここからはRustの活用範囲の事例を紹介します。WebAssemblyでの活用についてです。WebAssemblyは、画像処理や複雑な計算など、JavaScriptでは効率が落ちるような集中的な計算を必要とするタスクに最適です。WebAssemblyは、ウェブベースのゲーム、特にグラフィックスのレンダリングやゲームの物理処理など、パフォーマンスが重要な部分の記述に活用されています。WebAssemblyは暗号とセキュリティのアプリケーションに採用されています。ブラウザ内で機械学習アルゴリズムをネイティブに近い速度で実行するため、インブラウザのMLアプリケーションにも適しています。WebAssemblyにより、軽量で高性能なアプリケーションをブラウザで直接実行できます。リソースが限られたIoTデバイスにとって非常に重要です。・リアルタイムの処理という4つのメリットからRustを活用しています。一般的な利用シーンとして自動運転技術での活用があります。自動運転技術Rustは、主にその効率性とメモリ・リークやレース・コンディションに対する組み込みの安全性により、自動車ソフトウェアにおいてCやC++のような言語に代わる良い選択肢と考えられています。これらの特徴により、Rustは機能安全性とセキュリティが最優先される自動車アプリケーションに適しています。IoT利用という点で工場内におけるRustの活用が挙げられます。これもC言語を直接使うよりも、Rustに組み替えていく流れがあります。このように幅広い利用範囲でRust言語は活用されています。増田さん、ありがとうございました!続いては、ユニークビジョン株式会社の山本さんの発表です。ユニークビジョンのRust活用事例と導入検討の勘どころspeakerdeck.com山本:「ユニークビジョンでのRust活用の紹介」「Rust採用後のメリット/デメリット」をお伝えしたいと思います。弊社は「技術でお客様の問題を解決すること」をモットーとしており、メインのサービスとしてソーシャルメディアを活用して企業のファンを増やす「Beluga」シリーズを開発して提供しています。「Beluga」シリーズでは、このそれぞれのステップでブランドとして広告を楽しくするようなツールを提供しています。認知から購入までのパネル図こういったツールの価値が評価されて国内に7社のみのXのマーケティングパートナーや国内4社しかないLINE社のパートナーにもなっています。そんな弊社ですが、Rustには力を入れています。2023」のカンファレンスでは、2年連続でスポンサーをさせていただきました(2022年はシルバースポンサー、2023年はゴールドスポンサー)。LINE」などはすべて、バックエンドはRustを採用しています。その中でも「何をしているか」というのを下記の図にまとめています私たちは基本的にAWSでモノを動かしていますが、コンテナベースやサーバーレスの環境でもRustを使っており、Rustで多くのことを実現している会社だと思っています。Rustを使う理由では、なぜRustを使っているのか。それは下記の3点が挙げられます。この3点の中で「面白そうな言語だから」というのが一番の理由でそれは、弊社CTOが示しています。「CTOがやってみたかった」という理由で採用しました。社内でも議論がありましたが、「やるからにはしっかりやろう!」ということで、取り組みをしてきて6年が経ちます。当初Rustはまだまだ未成熟だったため、ライブラリがないことも多々ありました。いうものはとにかく自分たちで作って公開するという姿勢でいました。学ぶだけではなく、アウトプットする場も大切にしています。ユニークビジョンの開発体制ユニークビジョンには主要なプロダクトは3つありますが、その3つがそれぞれプロダクトの開発チームを持っています。チーム感の調整がないためリリースまでの時間が短縮できることがメリットですが、ノウハウの共有という課題がありました。そこで、ユーザーグループを発足しました。各チームのRustが得意な人が集まって、Rustに関する議論を進めることにしました。教育体制の構築も行いました。教育体制についてRustの理想の実装について議論をした人がチームに持ち帰ってペアプロなどをして、チーム全体のRustの技術力を高めていきました。入社時にはRust未経験者という人もいましたが、そういう人がRustのプロジェクトに入っても困らないようにする体制を作り上げました。必要であればクレートを作って公開します。コミュニティにも貢献しながら、「とにかくRustがもっと開発しやすくなるような活動」もしています。「Rustを使っている会社がもっと盛り上がっていかなければ!」という思いのもと、勉強会も開催しています。いった場を作ることでRustのノウハウをインプットし、コミュニティに貢献してアウトプットすることでどんどん循環させる取り組みを6年間しています。Rust採用のメリット・デメリットさて、その運用の中で我々が感じてきたメリット、デメリットをお伝えします。Rustを使うメリット「とにかくメモリ効率が高く安定していて、Rustは長期稼働に向いている」と感じます。長く使っているからこそ「保守性が高い」ということも分かりました。それと、エンジニアの採用にも大きく寄与しています。弊社はまだ知名度の低い会社ですが、Rustを使っているということが認知されていて、Rustを使いたいからと面談を受けに来るエンジニアもいます。Rustを使うデメリット世の中にRustの情報が少ないので、調べても分からないことが多い点はデメリットです。開発の時間を考えると、コンパイルの時間はボトルネックになっていると感じます。他の言語で実装しているときはやらなくてもいいことを、Rustではやらなくてはならない」ということはよく発生します。これはいろいろなことをやろうとすると、ぶち当たる壁だと思います。Rustの導入検討時に確認したいポイントまずは「一度小さく始めてみようかな」くらいの気持ちでRustを採用されてみても良いかと思います。その際に「システムの寿命」「改修の頻度」「要求される性能」の3点を採用までに検討するポイントとしてください。システムの寿命メモリリークやバッファオーバーフローを気にしなくて良いので安定・安全が求められる寿命の長いシステムだとメリットが大きい。最初に動くものが出来るまでの時間は軽量プログラミング言語が勝るが、変更を加える度に型安全のメリットが活きる。高スループットが要求される場合にはインフラ費用が削減できる可能性がある。Rustは意外と愛されており、前途の通りエンジニアへの採用効果は期待以上でした。「やってみたい」だけで採用してみても悪くないと思います。山本さん、ありがとうございました。続いては、株式会社estieの松本さんの発表です。松本:今回は「estieがどのようにRustを使っているか」「Rustを採用するためにはどうすればよいか」をお伝えできればと思います。・Rustがいい言語だから標準パッケージマネージャのCargoがとても使いやすい読みやすいエラーメッセージ・安全に開発できる言語だから書きやすい型定義という2点が挙げられます。この理由をestieの事例を元に詳しく紹介します。estieのRust活用背景estieのRust活用状況をご紹介する前にestieのメンバー構成とサービスについてご紹介します。estieは不動産業界出身者とテック業界出身者が在籍するハイブリットなチームでありプロダクト開発人材が多いのが特徴です。マーケット調査」です。これは、ビルの賃料やどのような広告が出ているかなどを可視化することが可能です。このプロダクトが出てくる前は、口頭や紙媒体でやり取りをしていたため業界には画期的なプロダクトとして現在も評価されています。バリューチェーン全体にプロダクトを提供しようとしています。オフィスなどの不動産の領域からビジネスを始めましたが、それだけでなく様々なアセットにも手を広げていて、「不動産に関わるのすべてのビジネスが、高度に連携されたestieのシステム上で行われる」という未来を作ろうとしています。使用している開発ツールestieでRustをどう使っているかではestieでRustをどう使っているのか。estieではWebアプリのAPIサーバをRustで書いています。各種連携周りのcrate(ライブラリ)も揃っています。内容を詳しく見ていきます。我々は、actix-webというフレームワークを使っています。左側のソースコードのようにパスと処理を書いて、サーバー設定したら動きます。(下図参照)これで、RustでWebアプリケーションを書くことができます。actix-web:Webフレームワーク続いて、sqlxというcrate(ライブラリ)を紹介します。これは、DBとの接続をいい感じにしてくれるもので、コネクションをはってSQLを書いて、クエリを実行すると結果が返ってきます。sentryなど外部のサービスを使うものも、最近はRust用のSDKを公式が出してくれることもあります。提供されていなくてもAPIが公開されていれば、RustでAPIをたたくだけなのでそんなに難しくないと思います。いうことで、私たちはいろいろなライブラリを使用しています。Rustを使っているのかなぜなら、estieは「コンパウンドスタートアップなので都合よく使えるから」というのが第一に挙げられます。私たちは不動産のデータを集めながら、それをプロダクトの中で連携させて全体として価値を出すプロダクト群を開発しているので、プロダクト間のデータをやり取りするAPIさえ決まっていれば、その中で様々な言語を使って開発することが可能です。そのため、気軽にRustを採用できたという背景があります。「Rustは難しい」とよく言われますが、それは「Rustではなくプログラミングの難しさなのでは?」と思う場合があります。他の言語でも、「その言語特有の気をつけなければならない部分」を考えてプログラミング出来る人がestieに集まっている印象です。複数のプロダクトがあるだけでなく、それぞれが密に連携しあってそれぞれ価値を高め合っているような構造になっています。マルチプロダクトスタートアップとコンパウンドスタートアップRustの良いところは型定義を柔軟に書けるので、複雑なデータを扱うのに都合がいい点です。データの形が決まっていないことがあります。そのような場合、「坪単価」と「月額」の場合は値を持っているけど、「要相談と不明」の場合はただ型を持っているだけで具体的な数値のフィールドはいりません。いう型をこのように柔軟に書けるので便利です。それと、嬉しい文法も結構あります。・Option型:Some(_),None・Result方:Ok(_),Err(_)などは、書きやすく便利な文法だと思います。柔軟に書ける嬉しい文法またRustの標準パッケージマネージャである「Cargo」がとても使いやすいです。Cargoの標準のパッケージマネージャみんなが同じパッケージマネージャを使っていて、いろいろなタスクをみんなが同じコマンドで実行できるというのが便利だなと思います。最後に、「コンパイラが親切」という点も紹介したいと思います。下図のように、yの変数が定義してあるけれども使われていない場合、「使われていないけれども、’_y’としたらどうですか」という警告を、位置を示しながら出してくれます。このように、コンパイラに教えられながら勉強ができる言語だと感じます。Rustでの開発をはじめるにはまずはツール類からはじめてみるのも良いですし、Rustを使っている会社に転職することもお勧めです。競技プログラミングで使ってみることも良いかと思います。ゲームAIのコンテストは、実装内容の複雑さと実行速度が大事という点で、Rustにメリットがあります。それに、「ロジックが間違っているのか、そもそも方法が悪いのか」を判断する時に、少なくともロジックは間違っていないということをRustだと担保しやすいと思います。松本さん、ありがとうございました!続いては、Q&Aコーナーです。続いてQ&Aコーナーであがった質問を紹介します。いうディレクトリにまとめています。松本:弊社は横並びです。本体のsrcの横にapiとかauthとか。(Q)松本様は現在もRust書かれてる感じですよね、新しい情報収集とかどうされてますか?松本:同僚がリリースノートを読むイベントを開いてくれているのでそれを見たり、RustプログラマーのXをフォローするようにしています。(Q)クレートの選定とか、どういう役割・体制で推進されているのでしょうか?専門の部署あり?各プロダクトチーム毎?松本:スタッフエンジニアのkenkooooが標準を定める動きをしてくれていますが、各チームで機動的に選定しています。(Q)estieさんからも社内でのRust学習話があればお聞きしてみたいです松本:Rustの質問をするチャンネルがあります。趣味で書いたり、OJT的に覚えたりするメンバーも多いです。(Q)Rustは言語の癖が結構あるなと思っています。Pythonをメインで使いながらRustも勉強してみようとなったときに苦戦しました。結局慣れや覚えてしまえばよいのですがユニークビジョンさんでは社員の学習時間を月にどのくらい設けていますか?山本:明確に学習時間として設けられているのは月に1度、最終金曜日に3時間設定されている「自己研鑽フライデー」という制度だけです。自己研鑽フライデーあとは業務を通して学んでもらったり、週に1度の社内技術勉強会で他の人の発表を聞いて学ぶ、という感じですね。(Q)社内でRustを書ける人間に育つまでにどれくらい時間かかりましたか?書籍やドキュメントなどはどちらを参考にしましたか?山本:業務で既存のシステムに改修を加えるレベルであれば、弊社の場合は割とすぐに育つかなと感じています。上の情報、コードレビューやペアプロなどの仕組みを通して学んでいく人が多いと思います。どんなものを利用しているか気になります。ベースにしたクレートを使って生のSQLを書いています。技術選定ではメンテナンス状況や安定性など気にしていますが、すべてのチーム・プロジェクトをコントロールするのは難しいので細かいところでは割と自由に選ばれていると思います。(Q)〇〇が強いエンジニア、の集まりというのはすごい。ポイントを聞いてみたい。山本:横断チームには当時新卒1年目のメンバーも参加していました。趣味でRustを学んでいたらしく、とても詳しくて熱意もあったので参加してもらいました。新卒に限らず、業務で初めてRustを触る人はコードレビューやペアプロを通してサポートしています。(Q)Rust得意な人の会で出てきて横展開できた例なにか教えていただけませんか山本:社内で書き方が定まっていなかった部分について、ユーザーグループでクレートを開発して展開することでルールが定まっていったケースなどあります。細かくは色々、整備が進んでいます。(Q)「面白そう」最高ですね、山本さんご自身も「面白そう」と感じる点があればぜひお聞きしたいです。山本:個人的には継承という機能を持たなかったのは素晴らしいと感じています。触ったことがあると思います。(Q)ブランド体験を作る、本題からそれますがむっちゃ気になります。山本:ぜひ、事例など見て頂けると嬉しいです!(Q)最近では、C++でもムーブセマンティックスが導入されているみたいですね。C++がRustに近づいてくるんでしょうか?増田:C++から離れて久しいのですが。このあたり、C++の場合はポインタを使ってリスト構造やノードを使いたいときに、Rustは同時の非同期処理をするときにリソースの有効期限を制御したいときに、という使い分けになるのかなと思っています。議論自体はもっと前から存在します。導入する、というケースの方が多いのかなと自分は考えております。RustだとDOMの描画も高速でできたりするのか気になります。(例えば、地図のような地理空間情報の上で、膨大なDOMの描画が必要なケースなど)増田:ブラウザへの描画、特にDOM関係を利用した描画はRust限らず、あまり言語に関係ないのかなと思っています。最終的には、SVGのキャンバスを使って、OpenCVなどを使って画像生成をする形になるのかなと。高速化しているという話があったと思います。大きな違いってありますでしょうか?増田:調べた限りでは、Rustの活用で目立つのはOSのカーネルやドライバー周りなので、どうしても大き目の活用例は海外寄り(というかアメリカ)になってしまいそうです。Rustはリソース管理と非同期に強いので、日本でも組み込みシステムやリアルタイムOS(ロボットのRTOSやiTronあたり)に有効かなと思っています。ZEROから学ぶのにおすすめの第一歩を教えていただきたいです。そもそも初プログラミングでRustっていかがでしょうか?増田:Rustを学ぶ前にC言語を知っておくと学習が早かったりします(メモリ関係の前提知識が多いので)。Rust以外だと、PythonやJavaScriptでプログラム言語の「文法」をさらっと流して、あらためてRustを学ぶのもありだと思います。山本:プログラミングを最初に学ぶときに苦戦するのは実はプログラミング言語の選択より、プログラムを書くまでの準備の部分だと思っています。ようなブラウザ上ですぐに動かせる環境で始めるのが良いかなと思っています!頑張ってください!(Q)組み込みでRustを採用されない理由として認証があると思います。Rustで認証対応したツールチェーンは整備されているのでしょうか増田:「ツールチェーン」の部分が解りかねるのですが、証明書などを発行するツール自体をRustで固める必要はないので、多分暗号化やTLSでの通信部分のことだと思います。暗号化ライブラリレベルのように使えるのではないなと思っています。方が高速、という説が有力なのかと思います。(Q)組込みシステム系の開発案件で、RustではなくあえてC++を選ぶメリットがあるとすればどういったところにあるでしょうか。大規模な案件はRust向きでしょうか?増田:あと、研究用の小さめのコードならばC++のほうが素直かもしれませんね。所有権とか気にせずに配列でメモリを取ってしまって、一括解放する方法のほうが手軽なので。Rustの場合、非同期やメモリの受け渡しに強いので、むしろ大規模開発のほうが有利かと思います。ドライバーのようにカーネル側とリソースのやり取りで使うときに、スレッド間のメモリ操作をうまくコーディング時に捕まえられるので。(Q)CやC++からRustに変わっていくといった話をたまに聞きますが、皆さんの周りでも実感するようになった。グラフィックドライバー周りが大きく変わるのではないかなと思っています。型でエラーが扱えると聞いた時には時代が変わったなぁと感じました。(Q)みなさんの「Rustのここが困るんだよなぁ」「こうなってほしいなぁ」ってのがあればお聞きしてみたいです。増田:うっかり、関数呼び出しのときに所有権を持って行かれてしまって、その後でデバッグ出力できなくて困ることが多々あります(苦笑)。真面目にコピーをとっておけばいいんですが。特殊化に相当する機能がないので、実装されるといいなあと思っています!松本:Rustって優しい言語だとみんなが思ってくれればもっと広まるのにと思っています。(Q)C++等と比較してRustの一番のメリットは何でしょうか?(Rust未経験です)増田:私的には基本のセマンティック(所有権)の部分ですね。変数やメモリの有効範囲を非常に狭くできる(あるいは強制される)ので、影響範囲を考える手間を省けます。気にかける範囲が狭くなるので、テストコードなども小さくまとめられます。これはC言語でも同じことができるのですが、Rustは言語仕様として組み込まれているのが利点かなと。方が好きかもしれません。松本:ツール類が標準で揃う点は圧倒的にメリットだと思います。レポートの内容は以上です。StreetではIT・テクノロジーに関する様々なイベントや勉強会を開催しています!参加ご希望の方はフォームよりご登録をお願いいたします。引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。