LoginSignup
10
3

More than 1 year has passed since last update.

気になるRustのユースケースを調査してみた

Last updated at Posted at 2021-12-12

株式会社エイチームフィナジーのAdvent Calendar 202113日目の記事です。
@murajun1978 が担当します。

はじめに

最近、普段使っているライブラリがRustで書き直す!みたいな事例が多くなってきた気がします。
なので、どんなところでRustが使われているのか調べてみることにしました。
ほんの一部ですが、Rustを本腰入れて学ぶモチベーションになればいいな:sunglasses:

↓ 公式サイトの事例

Cloudflare Workers

100%RustでCloudflare Workersを作成することができるようになっています。
wranglerを使って簡単に開発、デプロイできます。

initialize時にtypeにrustを指定することで、Rustのworkerを作成できます。
こんな感じ

wrangler init <worker-name> --type=rust

Yew

JSXライクなRust製Webフレームワークです。
WebAssemblyでマルチスレッドで実行可能で、既存のアプリケーションに組み込むことが可能です。
Examplesのコードを見たけど、普段Reactを使っている自分には違和感はそんなに感じなかったですね。

コマンドラインツール

exa

lsコマンドに相当するツールです

gitのステータスを表示できたり、オプションがが豊富です

Command line apps in Rust

Rustでコマンドラインツールを作成するドキュメントもありました。

Prisma

Prismaもv2からRustで書き直されています。

Prismaに関しては、ちょっと面白い記事が公開されていたので紹介します。
こちらです。

PrismaのCoreエンジンはRustで作られています。
そのCoreエンジンをOSごとにコンパイル、ダウンロードして利用してたらしいです。
でも、バイナリをダウンロードするって、セキュリティ的に問題があります。

そこで、このCoreエンジンをWebAssemblyにコンパイルして利用するように設計を変更したみたいです。
なるほど、VSCodeはnode.jsで動いてるので、WebAssemblyを拡張機能に差し込むことが可能です。

CoreエンジンをWebAssemblyにコンパイルすることで、OSごとのコンパイルが不要になったとのこと。

普段、フロントエンドとバックエンド開発に携わっているので、この記事を読んだときになるほど!:zap:ってなりました。

おもしろそうだったので、実際に試してみました:point_down:

hello_world.rs
pub mod words {
  pub fn hello_word() -> &'static str {
    return "Hello World!";
  }
}
main.rs
mod hello_world;

pub use crate::hello_world::words;

fn main() {
  println!("{}", words::hello_word());
}
lib.rs
extern crate wasm_bindgen;

use wasm_bindgen::prelude::*;
pub use crate::hello_world::words;

#[wasm_bindgen]
extern {
  pub fn alert(s: &str);
}

#[wasm_bindgen]
pub fn say_hello() {
    alert(&format!("{}", words::hello_word()));
}

Hello World!という文字列を返す単純な関数ですが、mainとlibで同じ関数を使うことができます。
あとは、このlib.rsをwebassemblyにビルドして、JavaScriptから呼び出すだけです。

まとめ

ひとまず、自分が興味のある分野だけPickUpしてみました。
Rustは組み込み系ってイメージがありましたが、今回の調査ですごく身近に感じることができました。

個人的にはPrismaのユースケースがRustを学ぶモチベーションになるかなと思いました :thinking:
バックエンド、フロントエンド(WebAssembly)で利用できるのは嬉しい人が多いかと。
あとは、Cloudflare Workersで重たい処理をエッジサーバで処理できるのも魅力的ですね。

Cloudflare + Rustの可能性は無限大かもしれない。。。

Rustの公式サイトは日本語翻訳もされていますし、Rustと仲良くなれるようにがんばってみます!

10
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3