スキップしてメイン コンテンツに移動

RustとWebAPI

仕事でOpenShiftを触ることになった。
コンテナを扱うので、自分の勝手のきくイメージを使った方が理解が進みやすいと思い、以前にRustで作ったHello, Worldを返すだけのイメージを使うことにした。

挙動としては問題なし。
ただ、使用しているライブラリ(Rocket - Simple, Fast, Type-Safe Web Framework for Rust https://rocket.rs/ )の影響で、StableなRustではなくNightly Buildを有効にしなければならない。
内部的に開発を進める人が使うもの、というイメージもあり、直感的に突っかかるものがあり、別のフレームワークを探した。

少し簡単に探したところ、tideというライブラリを紹介している記事( Web Development with Rust — 03/x: Create a REST API - DEV Community 👩‍💻👨‍💻 https://dev.to/gruberb/web-development-with-rust-03-x-create-a-rest-api-3i82 )に出会った。
最近よく読むdev.toだし、内容も理解しやすいし、少しRocketよりは直感的ではないけど試してみよう。そう決意した。
が……このライブラリもNightly Buildを必要としていた。 tide 0.2.0 - Docs.rs https://docs.rs/crate/tide/0.2.0

調査中に出会した別のライブラリ(Gotham web framework https://gotham.rs/ )は、tideとほぼ同じだけのStarを獲得している一方、tideほどWatchの数が大きくなく、また、tideのときの記事のような分かりやすい記事がなかったので、一度離れたのだけれど、改めて確認し、そこに素晴らしい文言が書いてあるのに気がついた。

Stability focused. All releases target stable Rust.

そう、そう、それを求めていた。Rustにどっぷり浸かれるような環境にないから、Edgeすぎるとついていけないのは目に見えていた。だから、Stableをターゲットにしていて欲しかったのだけど、このライブラリはその点を満たしてくれた。

というわけで、どうにかビルドを済ませて、コンテナ化することができた。
コンテナ化にあたっては、軽量化が大事になるのでこのブログの内容も適用した。
(muslはMac環境ではビルドができなかったのでgnuのlinuxをターゲットにしたとか、gnuターゲットで作ったbinはscratchだと稼働しなかったからdebian:stretch-slimを使ったとか、そういった細かい話はある)

How to Package Rust Applications Into Minimal Docker Containers · alexbrand's blog https://alexbrand.dev/post/how-to-package-rust-applications-into-minimal-docker-containers/

そもそもRustでWebAPIをやらなければこういった苦労はないのでは?という話はもっともで、同じような指摘をしている人がやっぱりいるのだけれど、Rustで書くこと自体が目的の一つだから今回はOK、ということで。

Why are you using Rust for web development? - DEV Community 👩‍💻👨‍💻 https://dev.to/writingcode/why-are-you-using-rust-for-web-development-2i91