株式会社エイチームフィナジーの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と仲良くなれるようにがんばってみます!