Rust Monthly Topics

データでわかるRustの開発者達 Rust Survey 2021の深堀

Rustの開発チームは毎年末にRustユーザのサーベイを行っています。このサーベイは開発者のバックグラウンドから普段使っているツールまで幅広く問うもので、コミュニティの中心がどこにあるのか理解するのに大変役立ちます。特に、周りにRustaceanがいない方にとっては「こういうのってみんなどうしてるの?」という疑問はよく発生するでしょう。そういうときにサーベイの結果はコミュニティのトレンドを追う一助になります。

2021年は2021/12/08から2021/12/22の期間にサーベイが行われました。そこで実施されるアンケートは、英語の他、中国語(簡体字、繁体字⁠⁠、フランス語、ドイツ語、日本語、韓国語、ポルトガル語、ロシア語、スペイン語に翻訳されました。

例年なら詳細なレポートが提出されるのですが、今年は比較的簡素なもののみであったため、大きな注目は浴びませんでした。その代わりにサーベイの元データが公表されています。サーベイ自体の紹介も兼ねていくつかの項目を見てみましょう。

すべての項目は取り上げられないので、ぜひ元データを参照してください。

Rustのユーザ数はアメリカが首位で英語が強い

ユーザの住む地域と言語を問う2つの設問です。

図1 「どこに住んでいますか?」に対する回答を示すグラフ
図1
図2 「技術的なコミュニケーションで使いたい言語は何ですか?」に対する回答を示すグラフ
図2

図1を見ると、約1/4をアメリカが占めており、英国やカナダを足すと1/3が英語圏に住んでいることがわかります。日本は2.5%と日本の人口を考えるとかなり低い値です。サーベイ自体は翻訳されているものの、アンケートのアナウンスが英語で行なわれているので、回答した人に偏りもあるでしょう。しかし、単純に人口比で補正すると、アメリカでは日本の約4.9倍のRustaceanが存在していることになります。

使いたい言語を示したグラフ図2では、ほとんどの開発者は英語を(も)使った技術的なコミュニケーションを好むと答えています。一方で、厳密には現住国と母語は一致しないので概算ではありますが、中国語、ロシア語、日本語を好むと答えた人がほぼ中国、ロシア、日本に住んでいる人数と並ぶので、これらの言語の話者はそのまま母語を使いたがる傾向があるようです。

これに関連するトピックとして、最近、Rustのコンパイラのエラーメッセージを多言語に対応しようという動きがあります。母語でのコミュニケーションを好む人に母語のエラーメッセージが届くようになるかもしれません。特にRustはエラーに番号を振って管理しやすくなっているので、現実味がありそうです。

RustユーザはCや動的言語の経験も持つ

Rust以外のプログラミング言語の経験についての設問群を紹介します。プログラミング言語がいろいろなカテゴリに分けられています。

図3 アセンブリ言語に対する設問の回答を示すグラフ
図3
図4 C、C++、Objective-C(ARCなし)といった手動メモリ管理言語に対する設問の回答を示すグラフ
図4
図5 Java、C#、Goといった静的型付きでGCのあるオブジェクト指向言語に対する設問の回答を示すグラフ
図5
図6 静的型付きでGCのある関数型言語(例: Haskell, ML)に対する設問の回答を示すグラフ
図6
図7 Lisp、Clojure、Elixirといった動的型付き関数型言語に対する設問の回答を示すグラフ
図7
図8 Swift、Kotlin、Scalaといった静的型付きで新しい表現力の高い型システムのある言語に対する設問の回答を示すグラフ
図8
図9 JavaScript、Ruby、Python、PHP、Perlといった動的型付き言語に対する設問の回答を示すグラフ
図9

Rustは他の言語と比較して玄人好みのする言語と言われるとおり、すでに他の言語を経験してから学ぶ人が多いようです。Rustはシステムプログラミング言語ですので、メモリ管理を手動で行う言語をすでに経験された方は半数を優に上回ります。そして意外にも、Rustとは対極にあるようなJavaScriptやRubyといった動的型付きの言語の経験者は8割を越えています。動的型付き言語の経験者の人口比を考えると納得できる比率でしょう。プログラミング言語の特色ごとに好む好まないの派閥のようなものがあるわけではなく、幅広い層のプログラマがRustを勉強しているようです。

経験者の割合に関しては、プログラミング初心者向けの教材が充実していないという側面も原因にあると推測しているので、今後のサーベイで変化があるといいですね。

Rustを使い込む人は増えている

続いて、Rustの経験年数や使用頻度、習熟度についての設問です。

図10 「Rustを勉強したのはいつですか?」に対する回答を示すグラフ
図10
図11 「平均してRustをどのくらい使いますか?」に対する回答を示すグラフ
図11
図12 「あなたのRustの実力はどのくらいと思っていますか?」に対する回答を示すグラフ
図12

まず、いつ頃Rustをはじめたのかに注目すると、2019年以降にはじめた人が7割ほどいることがわかります図10⁠。近年流行りはじめた言語ということもあり、経験の浅いユーザが多いようです。特に、2021年と回答した人の割合が最も多く(アンケートは1年分しかないのに⁠⁠、その勢いを感じます。ちなみにRustの1.0.0のリリースは2015年ですが、その前に使いはじめて今なお使っている人も観測可能な程度におり、長年にわたって愛されていることが伺われます。

使用頻度については、⁠ほぼ毎週」⁠ほぼ毎日」使っている人を合計すると8割以上います図11⁠。また、新しいユーザのほとんどが初心者と捉える見方もありそうですが、実力について問われた回答を見てみると、エキスパートは流石に少ないものの、生産的にプログラムを書ける人は半数弱います。後ほど紹介しますが、仕事で使っている人は大多数とまでは言えないことから、趣味で精力的に使っている人が多そうです。

ツールは標準化が進む

開発ツールについての回答を見てみましょう。開発ツールは多岐にわたるのでそれぞれ見ていきます。

Rustコンパイラ

使っているRustコンパイラについての質問です。

図13 「手元での開発で使っているRustのバージョンは何ですか?」に対する回答を示すグラフ
図13

結果は大多数がstableを使用しており、次いで最新のnightlyという状況です。現行の安定版を使用するのが多数派なのは納得できる結果でしょう。nightlyの使用に関しては、依存しているライブラリがnightlyの機能に依存していたり、単に新しいものを使いたかったりといった理由が考えられます。サーベイの元データでは、その点についても分析されているので興味のある方は確認してみてください。その他のバージョンは、⁠特定のnightly」「特定の安定版」という結果です。他にも公式配布されたベータ版やコミュニティのカスタム版(公式コンパイラにないバックエンドが追加されていたりする)も確認できますが、かなり少数派でした。

特に理由がなければ、現行の安定版を使うとよいでしょう。

次にRustのインストール方法です。

図14 「Rustをどの方法でインストールしていますか?」に対する回答を示すグラフ
図14

大多数の人はRustの公式インストーラ/ツールチェーンマネージャのrustupを使っています。rustupは簡単にバージョンを切り替えられたり、クロスコンパイルのためのツールチェーンをインストールしてくれたりと、利便性が高いので納得できる結果でしょう。一方で、パッケージマネージャでサポートしていないので仕方なくrustupを使っているケースもありそうです。Ubuntu 22.04ではaptrustcがインストールできるようになるなど、状況が変化しているので、今後はインストール方法のトレンドが変わるかもしれません。

エディタ/IDE

続いて、エディタ/IDEについてです。

図15 「Rustを開発するのに普段使っているエディタ/IDEは何ですか?」に対する回答を示すグラフ
図15

最も人気があるのはVS Codeで、半数以上が使っています。議論があるかもしれませんが、VS CodeをIDEに分類すると、エディタの1位はvi/vim/neovimになります。IDEとエディタそれぞれ2番目に人気があるのは、IntelliJ(やその他JetBrainsのIDE)とEmacsということがわかります。Emacsユーザの筆者としては、Emacsのユーザ数が大きく水をあけられて2位なのは悲しい限りですが、各エディタのユーザ比率から考えると高い方でしょう。このような結果となった要因は、Rust公式のLSP(Language Server Protocol)サーバであるRLS(Rust Language Server)にrust-analyzerがよく利用されており、その拡張機能を用いてエディタでも不自由なく開発できるからではないでしょうか。逆に、rust-analyzerをエンジンに採用してないIntelliJのシェアは世間から比べるとやや少なめです。

デバッガ

Rustコミュニティでは「デバッグどうしてますか?」という質問をよく見かけます。この設問はまさにそれを問うものです。

図16 「Rustをデバッグするのに普段使っているデバッガは何ですか?」に対する回答を示すグラフ
図16

結果はprintln!を使ったデバッグが6割強となっています。Rustは型を使って強力に不変条件を表明できる言語なので、デバッガを使わないとどうしようもないバグはあまり発生しませんし、Debugトレイトなどprintlnデバッグをするのに便利な機能が揃っているのでうなずける結果です。

その他の回答については、解釈が難しいところですが、LLDBやGDBといったデバッガを直接使うか、IDEの機能を使っているかの違いでしょう。そうしてみるとIDEのシェアで1位だったVSCodeがprintln!に次いでいるのは納得できます。その次にLLDBとGDBです(おそらく、Emacsなどのエディタをフロントエンドとして使うケースはここに入っていると推測します⁠⁠。

println!のみ、デバッガのみ、それとも両方併用するのかの割合については大差がありません。迷ったら自分の望む方法を選択するとよいでしょう。

図17 「printlnデバッグvsデバッガvs両方」に対する回答を示すグラフ
図17

Rustの勉強方法は活字と実践

「以下のうち、それぞれの教材はRustを勉強する、あるいはスキルアップするのにどのくらい役立ちましたか?」というRustを勉強する上で役に立った教材を問う設問です。いくつかの種類に分類した教材に対して、それぞれ回答を集めています。

図18 「書籍あるいは他の文字媒体のRustの教材を読む」に対する回答を示すグラフ
図18
図19 「映像、ストリーム、その他のRustの教材を視聴する」に対する回答を示すグラフ
図19
図20 「研修会、あるいは連続講義に出席する(オンライン、オフラインどちらでも)に対する回答を示すグラフ
図20
図21 「Rustの勉強用の練習問題や題材に取り組む」に対する回答を示すグラフ
図21
図22 「Rustで簡単すぎないプロジェクトをやるかオープンソースプロジェクトに貢献する」に対する回答を示すグラフ
図22

ほとんどの人が本や記事などの活字媒体が役に立ったと回答しています。動画やストリーミングなどの映像媒体もそれなりに使われてはいるものの、役に立ったという回答は活字に比べると今一歩といったところです。そもそも利用していない人も15%と、活字媒体と比べて多めですね。

そしてやはり実際にコードを書いてみるのが役に立ったという回答が多数を占めます。特に、簡単すぎないプロジェクトを作ってみるのは84.5%の人が「とても役に立った」と回答しています。所有権やライフタイムなど、Rust特有の概念を踏まえたアプリケーションの設計は体験してみないとわからないことが多いので、その経験がある人は同意できる結果でしょう。

Rustは意外と業務で使われている

業務でRustを使っているか問う設問です。

図23 「あなたの会社はどの程度Rustを使っていますか?」に対する回答を示すグラフ
図23

勤務先でRustをプロダクションで使っているという回答は、ほぼ1/3になりました。ソフトウェア開発と関係のない仕事をしている人が1/4いることを考えると、かなり大きな割合です。もちろん、Rustユーザを対象としたサーベイですし、同じ企業の従業員が複数回答していたら、その分の回答数は増えるので、回答数のとおり1/3の企業がRustをプロダクションで使っているというわけではないと推測しますが、それにしても想像よりは多いと感じたのではないでしょうか。

次にRustの用途についての設問です。

図24 「あなたの会社はどの技術領域でRustを使っていますか?」に対する回答を示すグラフ
図24

バックエンドで使う用途が多数です。Rustでなければ実現できないというわけではないのすが、それでもRustが選ばれています。これに続くクラウドコンピューティングアプリケーションや分散システムはパフォーマンスや信頼性が求められるので、Rustの長所が活きる分野でしょう。その他、多種多様な領域にRustが使われています。

最後に、⁠チームでRustを使う理由が、それぞれの記述においてどれくらいあてはまるか答えてください」というRustを使う理由を問う設問群です。

図25 「パフォーマンス(スピード、メモリフットプリントなど)の特性」に対する回答を示すグラフ
図25
図26 「プログラムの実行に精細な制御が必要だった」に対する回答を示すグラフ
図26
図27 「セキュリティ、安全性の特性が重要だった」に対する回答を示すグラフ
図27
図28 「すでにRustを覚えているのでデフォルトの選択肢になっていた」に対する回答を示すグラフ
図28
図29 「プロトタイプを作るのが簡単だから」に対する回答を示すグラフ
図29
図30 「既存のRustのコードと連携する必要があった」に対する回答を示すグラフ
図30

仕事でRustを採用した理由として、速度と安全性の面を支持する意見が大半となりました。Rustの用途についての設問ではバックエンド領域が主だったので、システムプログラミング的な精細なプログラムの制御よりも、意外と安全な言語の中で速い方がよいという意見が多いのかもしれません。

まとめ

本稿では、Rust Survey 2021の結果を眺めて、世界でRustがどのように使われているか、使っている人はどうやってコードを書いているのかなどを紹介しました。Rustと付き合ううえでの参考になれば幸いです。

おすすめ記事

記事・ニュース一覧