Monacaさんで提供されている写経用のぷよぷよjsコードを参考にしつつ、Yewというフレームワークを使ってRust+WASMでぷよぷよライクなアプリを作ってみたのですが、その結果得たRust初学者としての感想をまとめてみました。

rusrus_sample.gif

ソースコードは以下で公開しています。

主に勉強を目的として作成したためアプリとしての完成度は低いですが、似たような環境を学習したい方はご参考にどうぞ。

その1、所有権は怖くない(でも絶対に理解しておくこと)

Rustについて調べると「他の言語にはない”所有権”という概念がある」ということが必ず書かれています。

大半の言語はライブラリの参照方法と変数定義・関数定義・制御文の書き方さえ理解していれば(というか調べられれば)とりあえず動くものは作れます。今回もエラーが出たら調べよう、という軽い気持ちで作り始めたのですが、結局作り上げるまでの時間の半分以上は所有権について理解していなかったことに起因して浪費しました。いっぽう所有権について理解してからはあっという間に開発が進みました。

所有権およびそれに伴う借用・参照という概念は、本当にRust特有のもので、それを理解していないとどんなにわかりやすいエラーメッセージが出ていてもその意味を理解できません。他言語にどんなに慣れていても、どんなに面倒くさがりの人でも、そこについてだけはRustの公式サイトのページ内容をきちんと理解してから進めることをお勧めします。

なお、所有権について理解して以降は、他の言語に所有権という概念がないことをむしろ面倒に感じるようになり、Rustが開発者の間で人気がある理由について非常に納得いくようになりました。所有権という単純なルールで管理されてさえいれば、メモリ管理で問題が発生した際にも言語ごとのガベージコレクションの仕様を調べなおす必要がなく、自分のコードを見直すだけでことがすみます。むしろ見直す必要がないくらい、はじめに書くときに意識させてもらえます。素晴らしすぎませんか?

その2、検索で見つかる情報が自分の環境にはあてはまるとは限らない

今回はそもそもRustをやりたかったわけではなくWebAssemblyでなにか作ってみるにあたりRust+WebAssemblyという環境を選択したのですが、Rust自体はOSカーネルの開発などでも使われている言語です。そのため、Rustというキーワードでひっかけた場合、必ずしも自分の環境に当てはまる情報とは限りません。

また、開発者に人気のHotな言語ということもあり、関連のライブラリにも日々更新がかかっています。今回使用したYewというフレームワークも、着手当時リリースされたばかりのバージョン0.18を採用したにもかかわらず、そこから一ヶ月も経たずバージョン0.19がリリースされ、さらに後継バージョンも開発が進んでいます。そして、その時に最良と思われた内容を大胆に採用しているというか、つまり後方互換はあまり意識されていませんし、リリースが早いだけにバージョンごとの情報もあまり出回っていません。

他のライブラリなどについても類似のケースがままあり、少し前のバージョンと現行バージョンではかなり仕様が違う、という場合も少なくありませんでした。個人の善意であげられている記事などでは内容の対応バージョンについて明記されていないことも多く、ある問題を解決するにあたり参考にした記事のライブラリのインストールまではできたものの結局自分の環境ではうまく動かなかった、という場合も多かったです。

結局は、個人の記事は参考程度にしつつ、基本は公式が提供している自分の環境にあった情報を読み解きながら自分で少しずつ試しながら進めるほうが早かったです。

もちろんそうではない場合もありましたし、同じような状況は他言語においても発生します。ただ、いつも慣れ親しんでいる言語に比べて現状はそういう状況に行き当たりやすい、ということは意識しておいたほうが、時間を無駄にしないかもしれません。

その3、それらを押さえていれば意外と簡単

ここまででRustが難しそうに思われる話を書きましたが、逆に言えば、それさえわかっていれば学習前の印象よりもむしろとっつきやすく感じました。

サンプルコードを見ていただければわかるようにRustの機能のすべてを活用しきれているとは言えませんが、他言語と同様にゆるふわく、最適な書き方ではないにせよとりあえず動く、というものはいくらでも作れます。

また、少なくとも今回使ったYewの環境ではコンパイラがエラー発生時についでに直し方を提案してくれる場合もあり、Rustという言語それ自体は言われているほどとっつきづらいものではないように感じました。

とはいえ、変数ってなんですか? というところから始めるのであればさすがにあまりお勧めしません。

変数の値渡しと参照渡しについては理解しているという程度であれば問題なく、それについて自分が選択したやりかたが正しかったのかいつも悩んでいる、という人にはむしろ福音をもたらす言語ではないかと思います。

以上3点、なにかの参考になりましたら幸いです。

广告
将在 10 秒后关闭
bannerAds