Rustは多くの開発者に支持されているプログラミング言語で、幅広い用途に対応でき、高性能でセキュリティが強い言語です。 ニュースでRust言語を大手テック企業が採用した話題を目にする機会も増えてきました。 以下でRust言語の特徴や将来性を詳しく見ていきます。
Contents
Rustとは
2015年5月にバージョン1.0がリリースされて以来、FirefoxやDiscordなど著名なプロダクトの開発に採用されたり、マイクロソフトやGoogleなど大手企業でも採用されたりと身近なアプリからオペレーティングシステムに至るまで幅広い用途で採用されている言語です。 名だたるプロジェクトで採用されていることからも言語の機能性や安定性の一端が見えてきます。 欧米の著名なプログラマーからも熱い支持を集めていて、IT系の質問サイトを運営するStack Overflowが実施した調査Stack Overflow Developer Survey 2022の1位にもRustの名が挙げられています。
Rustの特徴
コンパイルされたコードが高速かつ安全に動作するのがRustの特長です。 前記のとおり、基本ソフトに使用できる抽象度の低い操作から、アプリに使用される並列性の実装など高度でモダンな機能まで幅広い分野で活用できる汎用性もRustの特長です。
従来の言語は大きく2つの特徴がある
1つ目は、C言語のようにメモリ管理やセキュリティに配慮がいるものの性能を引き出すため基本ソフトや組込み分野での使用が多い、実行するときの効率に特化した言語。
2つめは、Pythonなどのように開発効率は高いものの、実行速度やメモリ消費量の点で性能を犠牲にしている言語など開発効率・実行効率いずれかに偏っている言語。
しかし、Rust言語は高度な言語機能による開発効率の高さとC言語に比肩するような意実行効率の高さを両方備えています。
また、実行効率だけでなくプログラマーの生産性にも配慮されたモダンなパッケージ管理システムを備えることやコードの振る舞いが細部まで明確になっていることで汎用性が高いものとなっています。
速い処理速度
Go言語などの記述しやすく高速な言語は他にもありますが、そうした言語でも処理内容によっては性能が低下するケースがあります。
メモリの割り当てや解放などプログラマーがなかなか意識しづらいもののプログラムを実行するときに避けられないメモリの整頓がおこなわれると、特にメモリを頻繁に使うプログラムで速度低下が起こりやすいです。
Rustではメモリ管理に関して言語デザインに工夫がされ独自のルールを導入し、実行するときの効率が落ちない仕組みになっています。
並行処理が可能
近年のCPUはコア数が増え、一つのプログラムのなかで多数の処理の流れを複数並行に処理して速度や反応性を高めてきました。 こうした並列処理はプログラマにとって扱いが厄介なものの一つで、正しく設計しないとデータを破損したり意図せぬ順序で処理がおこなわれたりなど問題が起こりえます。
Rustでは、当初から並列処理に重きが置かれており、各種の並列処理に使用できる機能を標準ライブラリ・言語機能として備えています。
- スレッド間でメッセージをやりとりする std::sync::mpsc ではGo言語やErlangのようにメッセージのやりとりで並列処理をおこなえます。
- スレッド間で所有権を転送できる std::marker は並列処理でメモリの安全な参照に利用できます。
高い安全性
安全に動作し、セキュリティホールを誤って作ることのないような工夫がRustには複数実装されています。 高速さを掲げる言語は多々ありますが、資金を投じて高性能なCPUを買っても解決できます。しかしセキュリティを担保するのは難しく、大手ITが長年セキュリティ対策に悩まされ多大な資金を投じていることから、安全性を言語の段階から担保してくれるRustはIT企業にとってもありがたい技術です。
C言語などメモリ管理をプログラマにすべて委ねている言語では熟練のプログラマーでも注意を怠るとメモリ内容を誤って破壊してしまうことがあり、バッファオーバーフローなどの脆弱性を生む温床になっていました。対策として実行するときの効率を犠牲にしてでも追加でチェック処理を実装するケースもあります。
Rustでは言語自身がメモリ破壊を防止するようになっており、誤ったコードを書くと開発段階でコンパイルエラーとして検出され対処ができます。人気の高いTypeScriptに見られるような型の互換性を保証するのは勿論、他の手続き型言語では発見しにくいメモリ破壊を防止しつつ容量・速度の点でも高効率になっています。
メモリ効率
C言語やJavaなどと同じくRustは静的型付け言語であり、CPUにとって効率的なデータ型でコードが実行できます。
対してJavaScriptやPythonなどの高級言語では変数にさまざまな値を割り当てることができて柔軟でとても便利な反面、プログラミングの基本となる代入、比較、判断など頻繁におこなわれる処理の効率が低くなっています。なぜならコードを実行してみるまで変数の型が何か、文字列なのか、数値なのかわからないので毎回変数の中身に応じて処理を切り替えたり、メモリの割り当てを柔軟にするため余分にメモリを確保しておくなど無駄が生じるためです。
Rustでは、コンパイルするときに最適な変数の扱いを決定でき、最適なコードとメモリ割り当てのみおこなうことでC言語並に軽量なコードが生成できることから組込み分野など制限された環境でもRustが使用できる背景となっています。
Rustで開発できるもの
冒頭でも触れたとおり、Rustプログラミング言語は広範囲なプロジェクトに利用できます。 メモリやCPU性能に制約のある組込みシステム、速度と安全性が求められるOS(基本ソフト)、Webブラウザや並列処理が多用されるメッセージングアプリ、サーバー用途などです。
もちろん日々の業務で従来go言語やC#、Java、JavaScriptなどで書いていたような処理、デスクトップアプリケーションなどもRustで対応できます。
Rustで実際に作られているサービスとは
・Firefox Webブラウザ
・Discord メッセージングアプリ
・Dropbox クラウドストレージ
・npm パッケージ管理システム
Webサービスではありませんが、GoogleやマイクロソフトがOSの開発にRustを採用したことも大きなニュースとなりました。
- Android 基本ソフト
- Linux 基本ソフト
Rustの開発環境構築
Rustの開発をおこなうには、 Windowsの場合、公式サイトから32bitまたは64bitのインストーラーをダウンロードして、実行します。
WindowsでWSLの場合は、
$ curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh
MacOS・Linuxの場合は
$ curl –proto ‘=https’ –tlsv1.2 https://sh.rustup.rs -sSf | sh
いずれの場合も、インストールが完了したら、端末(コマンドライン)で次のようにrustcコマンドを実行できます。
$ rustc –version
インストールができていれば、導入したrustのバージョンが端末に表示されます。
あとはお好みのテキストエディタでコードを記述していきます。
シンプルな手順では、①コードを置くディレクトリを作成し、②コードを記述したら、③コンパイルして実行ファイルを作成します。
① コードを置くディレクトリを作成します。
端末(コマンドライン)から作成する場合は以下のようにします。
mkdir hello_world
cd hello_world
② テキストエディタで①のディレクトリにソースファイルを拡張子.rsで作成します。
例としてファイル名 main.rs を以下の内容で作成します。
fn main() {
println!(“Hello, world!”);
}
③ ソースコードのあるディレクトリでコンパイルをおこないます。
端末(コマンドライン)からコンパイルして実行ファイルを作成し、実行してみます。
Windowsの場合は
> rustc main.rs
> .\main.exe
Hello, world!
WSL,Linux,MacOSでは
$ rustc main.rs
$ ./main
Hello, world!
Rustの学習方法
Rustを習得する方法としては、公式サイトで各種のマニュアルやチュートリアルを参照する方法と、各種のオンライン学習コースを受講する方法があります。
公式サイト
・THE BOOK (日本語版)は言語の基本原理から主な機能の紹介まで丁寧に解説されています。
・RUST BY EXAMPLE(英語のみ) は説明よりも例となるコードを中心に基礎から解説されています。
オンライン学習
実際に環境を整える所からコードの書き方まで一連の流れを動画で学びたい方には オンライン学習サイトのUdemyにある日本語のコースを二つご紹介します。
Rustの将来性
マイクロソフトやGoogleを含む大手企業が、OS製品の開発でRust採用を表明したことから、今後長年にわたりRust言語が使われ続ける環境になったと考えられます。
冒頭でも触れたとおり、基本ソフトからアプリケーションソフト、デスクトップ・サーバー・組込み分野までとRustの応用範囲は広く、多数のユーザーがアクセスするようなセキュリティの求められるサイト・アプリケーションから速度の求められる基幹システムまで幅広い用途での採用が見込まれるでしょう。
他の言語とは異なるメモリの管理法など最初の習得は他言語に比べハードルがあると考えられますが、Rust言語でしか実現できない高度案件は一定数あり、サーバーやデータ分析など高度なタスクで欠かせないものとなっていくでしょう。
Rustの市場動向
弊社テックリーチの求人データでは、Rustを使用する案件が10件弱(2023年1月時点)あります。
実際のプロダクトで使用されている例はPython、PHP、Go、C#、Javaなどと比べるとまだ少ないです。
Rustは多くのプログラマーに認知され、支持を表明されてきていて、大手企業が採用を進めたことでRustは年々ポピュラーになってきています。
各種言語の開発者数・オンライン学習コース数・サードパーティー企業の数や検索エンジンなどでの動向に基づきプログラミング言語のポピュラーさをランキングしている TIOBE Index が2022末にまとめたランキングによると2021年比で+0.23%ほど人気を増やしていて、Objective-Cの次に普及していることがうかがえます。
まとめ
Rust言語の特徴を見てきました。
現状では性能やセキュリティが求められる分野から徐々に採用されている段階ですが、今後は言語の安定性を活かしてより幅広い分野でもアプリケーションソフト開発に採用されていく可能性があります。
言語仕様や開発環境も比較的安定しているため今から習得し将来にわたって現役で使える言語としてRustをあなたのツールボックスに加えてみてはいかがでしょうか。 他言語を習得済みの開発者にとってもメモリに関する考えられた仕様や並列処理への適用性などプログラミングに対する気付きをもたらしてくれるRustは今後も注目していきたいプログラミング言語です。
フリーランスの案件をお探しの方はTechReachにご相談ください。
TechReachを運営する株式会社アールストーンはIT・Web業界特化で15年以上の実績がございます。
そのため、高単価・高品質な数多くの案件紹介が可能です。
また一人のコンサルタントが企業と求職者様の担当を行う「両面型エージェント」を採用しているため、あなたの希望に合う案件がきっと見つかるはずです。
TechReachを活用して、理想の案件を見つけましょう!