キーポイント
- Rustコミュニティは拡大し、Rustの利用は増加傾向にある。
- Rustはコードベースで他のプログラミング言語とシームレスに統合できるため、言語が混在するプロジェクトに最適である。
- 比較的若いが、Rust開発者は他のプログラミング言語の専門的な経験を持っている。
- Rustのエコシステムとツールには欠点もあるが、大きな進歩が見られる。
- Rustは、メモリ安全性とパフォーマンスの約束を実現する言語として、コミュニティで広く評価されている。
Rustのエコシステムは、数多くの開発者向けアンケートで定期的に調査されている。これらの報告書を注意深く読むことで、コミュニティや技術の可能性についての洞察を得られる。例えば、ほとんどのRust開発者がこの言語を使い始めたのはごく最近のことであり、これは雇用主が職務経歴書を見直し、10年のRust経験を期待するのをやめるべきというサインかもしれない。
コミュニティは急速に成長している。業界における採用は若干遅れているが、技術大手はすでに道を切り開いている。また、主にプロファイリングとデバッグのサポートにおいて、ツールの弱い部分を確認できる。これは、これらの領域における単純な手法の蔓延に関連している。 この記事では、Rustコミュニティとエコシステムに関する調査結果と洞察を共有し、Rustで新しいプロジェクトを開始する場合、または他の言語から Rust に移行する場合の特殊性と落とし穴について詳しく説明する。
Rustaceans
Rust開発者(またはRustaceansと呼ばれる人たち)はどれくらいいるのだろうか?開発者の数を数えるのは正確な科学ではないが、ある程度の推定値はある。SlashDataは、第23回開発者国家状況レポート(2022年3Q)において、Rust開発者の数を280万人と推定している。これはJavaScriptコミュニティの1/7、C/C++コミュニティの1/4以下の規模である。
同じ調査によると、この数は過去2年間で3倍に増加しており、もっとも急速に成長している開発者コミュニティの1つとなっている。成長の可能性は残されているのだろうか?
Stack Overflow 2022年開発者アンケートによると、Rustを使っていない開発者の17.6%がRustを使いたいと考えており、Rustは開発者コミュニティの中でもっとも欲しい言語となっている。現在のトレンドと技術の歴史が比較的浅いことを考えると、未来は明るい。
Rustコミュニティは若い。JetBrainsによる「開発者エコシステムの現状 2022年」レポートによると、Rustを主要言語として挙げた開発者の60%は30歳未満である。
Rustチームによる「2021年Rustの現状調査」によると、開発者の半数はどのプログラミング言語でもプログラミング経験が10年未満である。
Rust開発者がどのようなバックグラウンドでプログラミング経験を積んでいるのかも見てみよう。State of Rust Surveyでは、使用されている他のプログラミング言語に関して、Rust開発者の以下のような大きな(おそらく交差する)グループが特定されている。
- Rust開発者の41%が、「動的型付け言語(JavaScript、Python、PHPなど)のエキスパートである」と考えている。
- 27%は、「ガベージコレクションを備えた静的型付けのオブジェクト指向言語(Java、C#、Goなど)のエキスパートである」と考えている。
- 20%は、「手動でメモリを管理する言語(C、C++など)のエキスパート」だと考えている。
Stack Overflowの調査では、JavaScript、TypeScript、Python、Java、C++の開発者がRustでの作業に興味を持っていることも報告されている。興味深いことに、C言語開発者はRustにそれほど傾いていないが、カーネル開発に関するLinuxの最近の方針変更や、他の主要なC言語ベースのプロジェクト(例えばcurl)でRustをサポートする傾向があることから、これは変わるかもしれない。
「開発者エコシステムの現状 2022」のRustセクションによると、3年以上この言語を使っているRust開発者はわずか5%しかいない。Rustプロジェクトの約半数は純粋なRustプロジェクトであり、その他のプロジェクトはJavaScript/TypeScript(22%)、Python(15%)、C++(12%)、Go(12%)、C(11%)やその他の言語とコードベースを共有している。Rustを主要言語とする人気のあるリポジトリをGitHubで検索すると、そのうちの20%はPythonのコードも含んでおり、さらに20%はJavaScriptを含んでいることがわかる。
このデータと私のRustコミュニティ観察に基づくと、PythonやJavaScriptのバックグラウンドを持つ膨大な数の若者が、初めてのシステムプログラミング言語に移行しているおかげで、Rustコミュニティが成長しているのではないかと思う。このような言語は学ぶのがはるかに難しいが、ソフトウェア開発におけるまったく新しい経験を彼らにもたらす。CやC++のような古い言語は彼らにとってそれほど魅力的ではないが、Rustは魅力的なのだ。
技術領域と業界への導入
Rustチームの調査によると、サーバーサイド(バックエンド)のプロジェクトがRustの主要な技術領域であることが明らかになった。クラウドコンピューターのインフラとアプリケーションもRustを適用する大きな分野であり、分散アプリケーションもRustコミュニティの間で人気のある選択肢である。
Linuxはもっともターゲットとされているプラットフォームである(77%、Windowsは約41%、macOSは36%)。WebAssemblyは22%で、組み込みシステムは11%しかターゲットにしていない。モバイルアプリケーションでのRustの利用は、ほとんど無視できるほど少ない。
Rustプロジェクトでは、GUIアプリケーションよりもCLIツールの人気が高い。これは、エコシステムにおいてCLIライブラリの供給が圧倒的に多く、GUIライブラリはあまり一般的でないことに起因している。「開発者エコシステムの現状 2022」の調査によると、Rust開発者の46%がCLIツールの開発に使用している。
Rustアプリケーションを紹介する上で非常に重要であるにもかかわらず、数字を見ただけではなかなかわからない技術分野がある。Rustは、JavaScriptとPythonのコミュニティで、これらの言語で現在利用可能なツールに代わる高性能なツールの開発に利用されていることがわかる。deno(JavaScriptとTypeScriptのランタイム)やRuff(Pythonのリンター)のようなプロジェクトは、この傾向の良い例だ。これらのオープンソースプロジェクトは、Rustが高性能と開発ペースの両方を提供すると同時に、多くの貢献者を惹きつけていることを示している。プログラミング言語のツールは、その言語を使用して開発するという長年の伝統がある。Rustはこの伝統からかなり効果的に脱却している。
Microsoft、Google、Amazon、Metaなどのテクノロジー大手企業は、Rustを支持し、サポートしている。それでも、「開発者エコシステムの現状 2022」の調査では、ほとんどのRust開発者は仕事以外でRustを使っていると報告している。回答者のうち、正式な仕事の一環としてRustでソフトウェアを開発しているのは18%に過ぎない。Rust Teamの調査では、回答者の半数以下がRustで生産的な仕事をしていると考えている。同調査の回答者の半数以下は、Rustを日常的に使用している。これらの数字は、他の人々がまだRustを学んでいるか、個人的なプロジェクトのために趣味として時々使用していることを示唆している。
さまざまなウェブサイトに掲載されている求人情報からは、Rust開発者の雇用に関心を持つ中堅・中小企業が何千社もあるとは結論づけられない。Rustチームの調査回答者のうち、自社で多数のプロジェクトにRustを使用していると回答したのはわずか15%で、さらに18.5%が少数のプロジェクトで使用していると回答している。企業でRustを導入する主な方法は、重要でないコンポーネントを他の言語から書き換えるか、必要でない新しいプロジェクトをRustで開始し、その効果を測定することであるようだ。Rustコミュニティでは、Rustへの移行や新規プロジェクトの立ち上げプロセスについて、成功例と失敗例の両方が活発に議論されている。
Rustへの移行を開始するには、移行を監督できる、Rustを長年経験しているシニアエンジニアが企業にいる必要がある。すでに強調したように、コミュニティにはそのような開発者が不足している。幸いなことに、これは時間が経てば自動的に解決されることだ。
2021年の「Rustの現状調査」では、業界におけるRustの利用不足が懸念事項の第1位に挙げられている。しかし、状況は変わると予想される。
言語とツール
Rustの大きな特徴の1つは、期待通りの機能が保証されていることだ。メモリセーフであるため、特定のクラスのバグを排除できる。Googleは、Androidにおいて重大な脆弱性の数が減少したのは、C++に代わるメモリセーフの選択肢としてRustが採用されたためだと一部説明している。Rustの性能により、Amazonはエネルギー効率の面で持続可能である。CPU使用量の削減と効果的なメモリ管理の両方が、Rust言語機能の成果である。
Rustを業務で使用している開発者の70%が、Rustのパフォーマンス特性(速度、メモリフットプリントなど)が採用に影響していることに強く同意している。64%がRustのセキュリティと安全性を評価している。約80%の開発者が、Rustを採用することで目標を達成でき、採用コストを回収できると考えている。65%の開発者が、Rust言語と標準ライブラリのドキュメントは素晴らしいと評価している。これらの数字は、Stack Overflowの調査によると、Rustがもっとも愛されている言語として7年目を迎え、87%の開発者が使い続けたいと答えている理由を説明している。RustaceansはRustに忠実であり、それは開発者自身についてよりも、言語とその品質について多くを物語っている。
Rustチームの調査参加者の38%は、Rustは他のプログラミング言語よりもプログラミングがかなり複雑であることに同意している。62%が、習得にかなりの労力を要すると回答している。彼らはまた、Rustがさらに複雑になっていくことを心配している。これは、調査参加者の間でRustの将来に対する懸念として2番目に多かった。
すべての調査で、Visual Studio Code powered by rust-analyzerがRustで書くためのもっとも人気のあるIDEであることに同意している。Rust開発者の約半数が使用している。次点のJetBrainsのIDE(CLion、IntelliJ IDEA、その他)のシェアは、IntelliJ Rustプラグインを搭載したもので、調査によって25%から40%のシェアとなっている。Vim/Neovimは3番目に人気がある。Rust開発者の3分の2が、自分のIDEエクスペリエンスは素晴らしいか、十分に良いと考えている。
開発エクスペリエンスの詳細に踏み込むと、もっとも問題のある部分はデバッグとプロファイリングであることが調査で明らかになっている。State of Developer Ecosystem 2022の調査参加者の32%が、ネイティブなデバッグエクスペリエンスが恋しいと述べている。Rustチームの調査回答者の29%が、デバッグエクスペリエンスはもっと良くなると考えている。Rust開発者の半数以上が、コードの問題をデバッグする主な方法としてprintln
スタイルのデバッグを使用しており、そのうちの3分の1がこの方法のみを使用している。
コードプロファイリングのエクスペリエンスはさらに悪く、80%以上のRust開発者はプロファイリングツールをまったく使っていない。その理由の1つは、現在利用可能なツールが非常に使いにくく、その結果を解釈するのが難しいからかもしれない。プロファイリングに焦点を当てた教材もほとんどない。開発者は、Rustのパフォーマンスを実際にチェックすることなく、盲目的に信じて満足しているようだ。このような姿勢は、業界でRustの採用が進むにつれて、重大な問題になる可能性がある。プロファイリングツール自体も学習教材も、改善のための真剣な取り組みが必要だ。
残念ながら、利用可能な調査はRustライブラリには及ばない。ライブラリーのエコシステムから欠落している部分に関する良いデータがないのだ。若い技術であるため、技術的な完成度に問題があるが、Rustの優れた相互運用性を考えると、これは致命的な問題とは考えられない。
結論
調査でよくあることだが、これらの結果は、いくつかの興味深い結論を裏付けるものであると同時に、いくつかの著名な理論を根底から覆すものでもある。後者の例としては、RustはC/C++キラーであるという当初の認識は、現在では適切ではないことが示唆された。既存のコードベースにおいて、C/C++のコードが大規模に置き換わっているという証拠はないし、将来そうなるとも予想されていない。なぜか?それは、CとC++の両方が機能し続けているからだ。C++は進化しており、長年の問題が解決されつつある。すべてをRustで書き直す必要はない。さらに、それを行うだけの労働力もない。とはいえ、今どきCやC++で新しいプロジェクトを始めるには、慎重な検討が必要だ。特にターゲットとするプラットフォームがLinuxで、パフォーマンスと安全性を重視するのであれば、Rustはそのプロジェクトにとっても良い選択かもしれない。
コミュニティメンバーの年齢が若いことは、Rustに明るい未来があることを示している。Rustはどこにも行くことはなく、業界における採用は増え続けるだろう。経験豊富なRust開発者の数が増えれば、純粋なRustプロジェクトも増えていくだろう。技術大手はすでにRustに参入しており、中小企業もすぐに追随すると予想される。
Rustのツールは常に進化しており、世界中の多くの愛好家や企業がツールのエコシステムに貢献している。
Rustで生産性を上げるには、Rustの概念、特に所有権、メモリ管理、並行性へのアプローチを深く理解する必要がある。Rustで効率的にプログラミングするには、熱心な学習とトレーニングが必要だ。このため、他のプログラミング言語に熟練した開発者がRustに乗り換えるという一般的なやり方は、他の言語よりも問題が多い可能性がある。どの言語からの乗り換えでも、多くの習慣を変える必要がある。開発者がそれらの概念をマスターし、新しい習慣をすぐに身につけることを期待するのではなく、事前に教育・訓練することが大切だ。