Rust と Web Framework
最近色々思うところがあって、また趣味でRustを触って思うようになりました。 普段Webプログラミングをしていることもあって、まずはとあるWebAPI的なものを作りたいかなと思い調べ始めました。
ですがよくわからない。 私が以前始めたときはactix-webで決まりかなと思っていました。 しかしRust 1.39で導入されたasync/await対応でややこしくなっているように感じます。
もやっとしつつ調べたことを備忘録的に書いていきたいと思います。
async/await とは
Rustのasync/awaitをスムーズに使うためのテクニック - Qiitaによりますと
RustのFutureとasync/awaitは、「時間のかかる処理」をするときに、「処理が終わるまでOSスレッドをブロックする(同期Rust)」のではなく、「当該処理を中断して、そのOSスレッドを別のタスクの処理に使う(非同期Rust)」ことで、スレッド数よりも多くの処理を同時に行う仕組みです。
とあります。 私はC#やっておりましたので比較的イメージしやすかったです。JavaScript(ES6?)にasync/awaitがありますしありますし他言語扱っている方はイメージしやすいかもしれません。 C#では多用していましたので、変にコールバック待つような関数がこれで扱いやすくなるなら万々歳かなと思っていました。
async/await で困ること?
Rustのasync/awaitの実装は3種類あるようです。
こちらの記事によると、Web Frameworkによって使うasync/awaitランタイムが違うようです。
ということのようです。 上記の記事ではオススメはtokioということでwarp&rwebを調べました。
warp & rweb について
この二つのフレームワークのうちrwebはwarpを利用されて作られたフレームワークで、個人的にはこちらの方が作りやすく感じられました。
ただwarp自体、バージョンが0.2.3と若くまだまだ機能不足を感じました。 現在のバージョンで作るのはなぁという気が(;´∀`)
actix-web
多分、今Rustでは一番使われているWeb Frameworkのような気がします。 Web Frameworkでの必要な機能を網羅し、連携する各種ライブラリもそろっています。
気になっているのは上の方で書いた「2019 年の非同期 Rust の動向調査 - Qiita」のページでは今はいいけど今後はオススメではない的な雰囲気を感じました。 ですが、結局のところ機能面など考えると結局のところこれしかないような気がします。
本当にこれでいいの? とはちょっと思いもやっとしています。
結局のところ
若干もやっとしつつもactix-webを使っていこうかと思います。 正直、識者にこの辺の話、教えてほしいなぁとか思ったりも🤣