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

はじめに

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

↓ 公式サイトの事例

 

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ごとのコンパイルが不要になったとのこと。

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

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

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

pub use crate::hello_world::words;

fn main() {
  println!("{}", words::hello_word());
}
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を学ぶモチベーションになるかなと思いました
バックエンド、フロントエンド(WebAssembly)で利用できるのは嬉しい人が多いかと。
あとは、Cloudflare Workersで重たい処理をエッジサーバで処理できるのも魅力的ですね。

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

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

广告
将在 10 秒后关闭
bannerAds