はじまり
会社の業務を通してwebアプリ開発の知識が少しついたので、個人でも何か作ってみたい。作るネタなら趣味のTRPGのサポートツールでいいんじゃないか。Rustが好きなのでせっかくだからバックエンドにRustを採用したい。というざっくりした興味と開発意欲で、先月から色々作り始めました。
コード書き始めて1年ちょっとのぺーぺーのボヤキにお付き合いください。
先月何してたのか
先月は、vue+rust+postgreSQLでTRPGサポート用のwebアプリを作っていました。このアプリ自体はルールブックの中のデータを入力してたりするので個人利用限定になりますが......
こちらでは、バックエンドのwebフレームワークにactix-webを。SQLライブラリにはsqlxを使用しました。
この時は、単純に選定理由は興味でした。知らんから使ってみようという。
ただ、Dieselは非同期対応してないらしい(今はdiesel_asyncなるものがあるらしい?)ので外しました。sea-ORMはまずsqlxを触ってみてからにしようということで先送りにしました。
actix-webを使った所感
actix-webに関しては、私の知識のある範囲内では何らストレスなく使えました。(昔は依存しているTokioのバージョン等で使いづらかったらしいですが今はそんなことありませんでした。)
一応有志で日本語訳されたドキュメントがあるのですが、途中までで止まっているのは少し残念です。しかし私にはどうすることもできない無力感......
ネットで情報を探してみても、古いバージョンの記事は見つかるのですが、今回使った4.x.x~の日本語記事はあまり見つかりませんでした。
ただ、英語ですが公式ドキュメントはなかなか読みやすく、シンプルな造りになっていて助かりました。あとRustにはRustDocsがあり、これがなかなか見やすい(個人的にはjavadocより好き)ので、困った時の公式ドキュメントというのが他の言語より頼れる気がします。
sqlxを使った所感
使用自体に特に思うことはありませんでした......と思うくらいシンプルで使いやすかったです。
ただ、VSCodeのrust-analyzer都合かもしれないけれど、以前にPC自体の環境変数に引っ張られて、SQLiteを使っているのに「PostgreSQLのドライバーが検出されませんでした」とおこられてしまう。なんてことがありました。
rust自体の所感
書いていてむちゃくちゃ楽しい。これに尽きます。
所有権やスコープを意識してコーディングすることになりますが、これのおかげで後から見返したときに変数の動きがわかりやすいです。最初は&とか*とか(たまに'とか)で何が起きてるかわからないけれども、読み書きできるようになると他言語より読みやすいです。
書いていて思うのは、参照がわかるのでjavaとかでよくやらかした参照先の上書きを起こしにくいのがありがたいです。Rustだとそういうのは必ず可変参照を取らないといけないので一発でわかります。
必要以上に長く生きる変数を作らないとか、エラーハンドリングの考え方等、他言語を書く時にも意識したいことがいっぱい詰まっています。
現に業務ではどこから値を取ってきて、どこで編集されているかわからない、なんなら初期化されないまま再利用もされるクラス変数、グローバル変数に散々苦しめられているので......
おわりに
フロントに関しては特に思うことはないです。むしろSFCは詰め込みすぎると記述量が必然的に増えるので、積極的に切り分けをする習慣がつくので開発体験的にはいいです。(会社業務で3000行以上書かれてるコンポーネント見て発狂したりはしていますが)
バックエンドはjava,python,rustと触ってきましたが、ダントツでRustが好みです。エラーハンドリングが一番しっくりきますね。
今後も個人でRust,vueを中心として知らないものに触っていこうと思います。