Rust言語とは?主な特徴3つやできること・始め方をわかりやすく解説
処理速度の速さ、そして安全性の高さから注目を集めるRUST言語は、MicrosoftやGoogleもその特徴に言及している、高い将来性がうかがわれるプログラミング言語です。
この記事を通じてRust言語について認識を深め、これからRust言語を始めようと考えている方の導入・入門の足掛かりとなることを期待しています。
Contents
Rust言語とは
Rust言語は2006年から開発された比較的新しいプログラミング言語で、Microsoft(※1)も「CやC++に代わる最有力のプログラミング言語である」と発言するほど、一目置かれた新世代言語です。C++のような速度、そしてメモリの安全性に配慮され、かつ並行処理にも適しているため、OSカーネル等のシステム作成に最適といわれています。
※1 Microsoft Security Response Center (MSRC)
Rust言語は2006年、グレイドン・ホアレがプロジェクトを個人でスタートさせ、2009年にMoFoが加わり、Mozilla Resarch公式プロジェクトとして発展を遂げています。2015年に正式版がリリースされ、CやC++に取って代わる次世代のスタンダードを目指して日々開発が続けられています。
Mozilla Firefoxでも採用されているRust言語ですが、使いこなすことができるエンジニアが少ないため、現時点ではマイナー言語として位置づけられることもあります。しかし今後の動向には注目が集まっており、2021年4月に実施されたプログラミング言語意識調査では、「学んでみたいプログラミング言語」の第2位にRust言語がランクイン。高い将来性が見て取れます。
また、2021年8月に発表された調査では、FlutterやGoと同様に、Rust言語も今後習得・強化したい言語として人気を集めています。
新しくプログラミング言語の習得を考えている人にとって、Rust言語は有力な選択肢として挙がってくるでしょう。
Rust言語の特徴
Rust言語が注目される背景には、次の3つの大きな特徴があります。
- 安全性(※2)が高い
- 並行処理ができる
- 処理速度が速い
各項目について掘り下げていきましょう。
安全性が高い
C言語、C++言語に勝る大きな特徴に、Rust言語のメモリ管理に優位性が認められる点があります。
特にC言語はメモリアンセーフであることが問題視されることが多く、メモリの解放、メモリリーク、バッファオーバーフロー、ヌルポインター、データレースなどの不具合を意識的に回避しながら開発する必要があります。一方、Rust言語はメモリの「所有権」という概念を採用し、開発者が極度にメモリに神経をとがらせる必要を無くす仕様を実現しています。
この「所有権」というメモリ管理方法は、C言語、C++言語のみならず、ガベージコレクション(GC)を採用するJavaやC#とも一線を画す独特な仕様です。
C言語、C++ではメモリ管理は手動で行い、例えばC++では「new」「delete」などの命令を用いて、メモリリークを防ぐ必要があります。一方、JavaやC#ではプログラマーがメモリリークを意識する必要のないガベージコレクションによってメモリの管理が自動的になされています。
Rust言語ではヒープ領域に置かれたデータを管理する際にのみ「所有権」の取り扱いを意識すればよく、C言語のように常にメモリを考慮する必要がありません。これによってメモリによる不具合はC言語よりも格段に減ることとなります。
では、上記のことがなぜ「安全」なのかということを考えてみましょう。
Googleは2020年5月にChromeの重要度の高い脆弱性のうち、約7割がメモリに関連する問題であることを公表しました。脆弱性の約70%をメモリに関する問題と定義し、さらにその半分がメモリ解放後の再使用によるバグのためであるとしています。
そしてメモリに関連する脆弱性に対し、考えうる解決策として「Using safer languages anywhere applicable(該当する場所でより安全な言語を使用する)」と示し、Rust言語を挙げていることは非常に興味深い示唆です。
メモリによる脆弱性を未然に防ぎ安全性を担保する点は、Rust言語の大きな特徴といえるでしょう。
並行処理ができる
Rust言語はマルチスレッドを利用し、複数のタスクを並行処理することができます。
もっとも単純なのは「thread::spawn」というRust言語標準のライブラリを用いることです。前述の「所有権」というメモリ管理の概念によって、データの競合が起こらないことが保証されています。
また、「Rayon(レーヨン)」というRust言語用の並列処理ライブラリもGitHub上で公開されており、こちらを使うこともできます。非常に軽量で、順次計算を並列計算に簡単に変換できると評価されています。
処理速度が速い
Rust言語はC++に取って代わることを目指して開発されており、その処理速度もCやC++に匹敵します。下記はRust言語とC言語との処理速度の比較表です。
この図はパケットごとのイベント数を比較した表です。
- Cycles(サイクル数)
- Instructions(命令数)
注目すべきはこの上部2行で、ともにC言語を上回っています。CPUが実行できる命令数の比較ではRust言語の方がC言語よりも速いことがわかります。
Rust言語でできること
OSカーネルなどコアな部分の開発だけでなく、Rust言語は以下のような用途にも利用されています。
- Webアプリケーションの開発
- コマンドラインツールの開発
- APIサーバーの開発
メモリリークやデータ競合といったエンジニアを悩ませる不具合をクリアしているため、大規模なシステムやアプリケーションを開発するうえでも、ほかの言語と比べて安全性の面で適していると評価されています。
Webアプリケーションの開発
Rust言語には2021年時点でWeb用のフレームワークが複数存在しています。
「Rust向けの強力で実用的で、非常に高速なWebフレームワーク」と謳っている『Actix Web』 や、柔軟性、使いやすさ、または型の安全性を犠牲にすることなく、高速で安全なWebアプリケーションを簡単に作成できる『Rocket』 、そして速度を追及した非常に簡単に構成可能なフレームワークである『warp』 などが代表例です。
Rust言語のWebフレームワークは度々発表されており、最新のものでは2021年08月24日にリリースされた『axum』 が挙げられます。今後もWebアプリケーションの開発を加速させるWeb用のフレームワークが続々と登場する可能性があります。
プロジェクトの要件に応じてこれらのフレームワークを使うことで、開発の効率が格段に向上することが期待できます。
コマンドラインツールの開発
コマンドラインツールとは、コマンドプロンプトにおける命令の入力フローであるコマンドラインを効率的にひとつにまとめたプログラムを実行することで、コンピューターとのやり取りを一度に実行できるソフトウェアの総称です。
Rust言語は、このコマンドラインアプリケーションも開発可能で、C言語やC++言語と同等のスピード、かつ保守性の高さから人気が出始めています。公式サイトではマニュアルも閲覧できるので簡単に始めることができるでしょう。
配布する場合もcrates.ioなどのコミュニティがあるため、作成したコマンドラインツールをアップロードして多くの人に利用してもらうことも期待できます。
APIサーバーの開発
APIサーバーとは、APIを経由して返されるデータを提供するサーバーのことですが、まずはAPIが何かということに言及します。
APIとはApplication Programming Interfaceの頭文字を取った略語です。生活に馴染みの深いところでは、TwitterのAPIや、以前旧APIが廃止されてしまったInstagram APIなどが挙げられます。
このAPIを使うことで、メインとなるサービスやプロジェクトで外部の機能を通したデータを扱うことができるようになります。わかりやすい例としては、自身の開発したアプリでTwitterのタイムラインを取得したいときにこのAPIが利用されます。
Rust言語は、このAPIを提供するためにも利用されることがあります。なおAPIサーバーを構築する際も、『actix-web』や『Rocket』などのWeb用のフレームワークが使われることが一般的です。
Rust言語を扱う仕事
2020年5月27日、Stack Overflowは「Stack Overflow Developer Survey 2021」でRust言語が「最も愛されているプログラミング言語」であることを発表しました。ちなみに人気を博しているPythonは6位、Rubyは21位、Javaは27位、iOSアプリケーションで利用されるObjective-Cは35位といった面白い結果となっています。
また、Rust言語を使用しているエンジニアチームは大企業にも存在しており、Mozilla公式サイトによると、Mozilla、Dropbox、npm、Postmates、Braintreeなど名だたるプロジェクトで実際にRust言語が使用されています。
日本ではRust言語の入門書を出版しているKeen氏(Idein Inc所属)や河野達也氏(クラウディアン株式会社所属)などが積極的にRust言語を採用しているようです。
気になるRust言語エンジニアの年収の相場ですが、stack overflowの「Developer Survey Results 2021」によると Rustを扱うエンジニアの平均年収は約7.8万ドル、日本円で約848万円という調査結果が報告されています。一方、C言語のエンジニアの年収平均値は約370万円、年収上限の平均値は約680万円とされており、何かと引き合いに出されるC言語よりも大幅に年収が高いということが推察できます。
Rust言語の始め方
WindowsとMacにRust言語をインストールする流れを説明します。
なお、Rust言語のチュートリアルサイトも展開されているので、習得の際に適宜活用するとよいでしょう。
Windowsにインストールする方法
インストーラーはRust公式サイトから32bit版か64bit版をご自身の環境に合わせてダウンロードします。
「Visual Studio C++ Build tools」はこちらからダウンロードしてインストールを行ってください。
Rustupというツールチェーンが必要になりますので、先ほどのRust公式サイトでダウンロードしたrustup-init.exeを実行し、インストールオプションを選択してインストールします。
コマンドプロンプトで「rustc --version」を実行してRustのバージョンが表示されればインストール完了です。
Macにインストールする方法
ターミナルで実行するコマンドはRust公式サイトで最新版を確認してください。Rust公式サイトにアクセスし、「Windows Subsystem for Linux」に記載されているコマンドをターミナルで打つだけです。
※2021年9月時点では「curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh」となっています。
コマンドプロンプトで「rustc --version」を実行してRustのバージョンが表示されればインストール完了です。表示されないのであれば、いったんターミナルやマシンの再起動を行ってみてください。
- Rust言語はC言語やC++言語の代替言語として提案されている
- Rust言語はメモリの安全性から特に注目されている
- 並行処理ができ、処理速度もC言語やC++言語に匹敵する
- WebアプリケーションからコマンドラインツールやAPIサーバーの開発など、幅広く利用できる
- 収入面ではプログラミング言語の中で8位にランクインするほどの高水準
- 多くのエンジニアからRust言語は愛されている
- FirefoxやDropboxなどのメジャーなアプリケーションでも採用されている
- インストールが簡単で手軽に始めることができる