プログラミング言語の1つである、「Rust」が近年注目を集めています。Rustは、MicrosoftやGoogleなどの大手企業においても導入されており、エンジニアが習得したいプログラミング言語として上位にランクインするなど、今後、より発展が期待できる言語です。
本記事では、Rustの特徴や、Rustを使ってできることを中心に詳しく解説します。
目次
システム開発会社選びはプロにお任せ完全無料で全国5000社以上からご提案
Rustとは
Rustとは、Webブラウザソフトウェア「Firefox」を開発した「Mozilla」が支援し、2006年に開発が始まったオープンソースのプログラミング言語です。オープンソースで開発されているため、誰でも自由に利用できます。
プログラミング技術に関するナレッジコミュニティ「Stack Overflow」が180ヶ国7万3,000人以上の開発者を対象に行った調査「Stack Overflow Developer Survey 2022」においても、Rustは7年連続で「開発者がもっとも愛するプログラミング言語」として選出されています※。このような結果からも、Rustはさらなる発展が見込まれ、開発者としては押さえておきたいプログラミング言語の1つであるといえます。
参照:Stack Overflow Developer Survey 2022
●有名企業からも注目されている言語
Rustは、高い安全性や高パフォーマンスを発揮できることから、MicrosoftやGoogle、Amazonなど様々な大企業のプロジェクトにおいて採用されています。Microsoft社においては、Rustを「CやC++に代わる最有力のプログラミング言語である」と高く評価しています。
このようにIT業界をリードするような存在である大手企業が導入していることから、Rustは世界的に注目を集めています。プログラミング言語の世界においては、利便性が重視される傾向にありますが、トレンドも重要な要素の1つです。業界をリードする大手企業が注目したり採用したりしている技術は、ほかの企業からも注目され、採用されることによってトレンドになる傾向があります。Rustもこのような流れでトレンドとなり、需要が高まっている言語だといえます。
Rustの特徴とは
Rustの主な特徴は、以下の3点が挙げられます。
-
処理速度が速い
-
並行処理が可能
-
安全性が高い
それぞれの特徴について、詳しくご紹介します。
●処理速度が速い
Rustはネイティブコンパイラ言語であり、コンパクトなプログラミング言語の中においてメモリやCPUに近い言語であるため、処理速度に優れています。C言語は、プログラミング言語の中でも高速処理を特徴としていますが、Rustはそれと同じような高速処理が可能な言語だといえます。Rustは、ほかのプログラミング言語よりもメモリ空間を効率よく使えるように設計されているため、高速処理が可能になっています。
●並行処理が可能
Rustは、同時に複数のプログラムを並行処理するマルチスレッドに対応しています。マルチスレッドには、タスクが完了するまでの時間を短縮できる可能性がある一方で、「複数のスレッドから関数を呼び出すことでデータ競合が発生する」「デッドロックに陥る」といったエラーが生じる可能性もあります。C言語やC++言語で並行処理を正しく機能させるには、データ競合を回避するプログラミングが必要となります。
しかしRustには、変数の値を借用する際の厳密なルールがあります。このルールに則ることで、データ競合を未然に防げるため、並行処理を安全に行いやすくなるといえます。
※デッドロック:並行処理している2つ以上のスレッドがお互いの処理完了を待ち、どの処理も先に進めなくなる状態のこと
●安全性が高い
C言語などを利用する場合は、メモリの解放やメモリリーク、バッファオーバーフローなど、開発者はあらゆるリスクを考慮しながら開発を行わなければなりません。なお、メモリの多重解放を起こすとセキュリティに問題が生じます。しかし、Rustには「所有権」というメモリ管理の仕組みがあるため、そもそも多重解放が起こることはありません。「所有者」は常に1つになるように設定されているため、メモリの多重解放は起こらない仕組みになっています。
Rustは「所有権」を備えているといった観点からも、C言語よりも安全にメモリを運用できます。
※「所有権」は変数が値を所有できることを表し、所有権を持つ変数のことを「所有者」といいます。
Rustの将来性
Rustは、IT業界を率いる大手企業が積極的に開発言語として採用しているほか、エンジニアが学びたい言語としても上位にランクインしているため、将来性に期待できる言語だといえます。
プログラミング言語としても、定期的にリリースが続いており、新しい機能が公開されている背景からも、これからさらに伸びていく開発言語だといっても過言ではありません。
現在の日本では、Rustを活用した開発案件はまだまだ多くありません。しかし今後は、案件が増加していく傾向にあると考えられています。Pythonなどと同様に、エンジニアにとって押さえておきたい開発言語の1つになっています。
Rustでできること
近年、人気が高まっているRustですが、具体的に利用されている場面は以下のとおりです。
-
Webアプリの開発
-
ゲームの開発
-
OSの開発
-
クラウドプラットフォームサービス
-
Webブラウザ
Rustでできることについて、具体的な事例もあわせてご紹介します。
●Webアプリの開発
Rustは、Web開発のフレームワークが数多く存在しています。例えば、Actix WebやRocket、axumが挙げられます。どのフレームワークも実用的で高性能であり、Rustはフレームワークの多様さからもWebアプリの開発に適しているといえます。
Discord
Discordとは、2015年にリリースされたアメリカ発のチャットサービスで、ゲーマー向けのチャットサービスとして有名です。Discordのアプリケーションを支える基盤のサービスの1つでもある「Read States」サービスを、2020年に従来採用していたGo言語からRustで再実装しました。
そもそも、Read Statesサービスは、Discordのユーザーがどのチャンネルのどのメッセージを読んだのかを追跡することが目的です。ユーザーがDiscordに接続したり、メッセージを送信したり読んだりするたびにRead Statesサービスにアクセスすることになるため、アクセス頻度は非常に高くなります。そのため、処理の高速性が求められます。
従来採用されていたGo言語と比べるとRustは高速性に優れているため、新たにRustを採用し再実装することになりました。
ゲームの開発
Rustは並行処理が可能で実行速度も速く、ゲーム開発もできます。RustはC++言語の代わりとなる言語として開発されました。C++はゲーム開発に適している言語であり、代替を目指すRustもゲーム開発に適しています。
CやC++と同等の高速処理が可能なため、データや処理をする量が膨大なゲームにおいてもスムーズに動かすことができます。
Rustで作られたゲームエンジンの例
Rustで作られた代表的なゲームエンジンは、以下の4つが挙げられます。
特徴 | |
---|---|
Piston | Rustの安全性や並列性を受けて作られたゲームエンジン。2D、3Dグラフィックや、クロスプラットフォームなゲーム開発が可能。 |
Amethyst | Rustで実装した、データ指向であり、ECSアーキテクチャを採用しているゲームエンジン。 |
Bevy | Rustで実装した、データ指向であり、ECSアーキテクチャを採用しているゲームエンジン。 |
Fyrox | Rustで実装した、ネイティブエディタによって少ない労力での2Dおよび3Dゲームの作成を可能にするゲームエンジン。 |
●OSの開発
Rustは、低いレイヤーの処理を記述することもできる特徴があるため、それらが必須であるOS開発を行うことも可能です。現状では、OSの開発においてはC言語やC++言語を用いることが多い傾向にありますが、先述のとおりRustはそれらの言語の後継言語とされているため、OS開発においてもRustが主流になっていく可能性もあるといえます。
Redox OS
UNIXのOSである「Redox OS」は、Rustを用いて開発されています。Redoxは、System76のエンジニアJeremy Soller氏によって開発され、Rustによって記述された独自のOSです。
●クラウドプラットフォームサービス
クラウドプラットフォームサービスの開発において、安全性は重要な要素の1つです。Rustはメモリの安全性が高い特徴を持つ開発言語であるため、クラウドプラットフォームサービスの開発にも採用されています。
Azureプラットフォーム
Rustは、Microsoftが提供するAzure一部サービスの実装にも用いられています。Azureはビジネスシーンにおいて圧倒的なシェアを誇るプラットフォームサービスです。「Platform as a Service」を表す「PaaS」だけでなく、仮想サーバの構築から行うことができるインフラストラクチャ「IaaS」も展開しています。
Azureプラットフォームのプロジェクトの中でRustが利用されている代表的なものは、「Azure IoT Edge」が挙げられます。「Azure IoT Edge」とは、クラウドからオンプレミスネットワーク内のエッジへと、コンピューティング機能の分散を進めるプロジェクトです。Rustのメモリ安全性という特徴を受け、セキュリティデーモンの実装言語として選択されています。
●Webブラウザ
Webブラウザの開発においては、処理の高速性が求められます。Rustは処理速度が速いという特徴を持っているため、Webブラウザの開発においても採用されています。
Firefoxブラウザ
Rustは、Webブラウザ「Firefox」で有名なMozilla社を中心に開発された言語です。そのため、もちろんFirefoxの開発にも使用されています。Mozillaの開発するソフトウェアのテスト結果などを有するWebサイトである「Tree herder」で公開された、Google ChromeとFirefoxのベンチマークテスト結果をまとめたデータによると、FirefoxはChromeよりも高いスコアを出していることがわかりました。
Rustの特徴の1つである高速性によって、Firefoxは高速なブラウジングが可能なブラウザということがわかっています。
参照:Tree herder
Rustの開発環境を構築する方法
Rustの開発環境は、公式サイトからファイルをダウンロードするだけで構築可能です。WindowsとMacで進め方が異なりますが、それぞれの手順についても公式サイトに記載があり、日本語にも訳されています。
これからRustでの開発に携わる方は、「はじめに – Rustプログラミング言語」のページをご参照ください。
Rustを使った開発で役立つフレームワーク
そもそもフレームワークとは、開発を効率よく進められる機能をあらかじめ備えている枠組のことを指します。フレームワークを使用することで、開発を効率よく進めるだけでなく、開発の幅を広げることもできます。
前項でも少し触れましたが、Rustの代表的なフレームワークとして、以下の4つが挙げられます。それぞれのフレームワークについて、詳しく解説します。
-
Actix Web
-
axum
-
Rocket
-
Tauri
●Actix Web
Actix Webは、「アクティックス」と呼ばれており、株式会社estiによって開発されたフレームワークです。Rustで記述されたフレームワークの中でも、世界的に多くの方に利用されている、人気が高いフレームワークの1つだといえます。
高速性と拡張性に優れており、中規模から大規模のプロジェクトに適しています。シンプルな関数を定義することによって、容易にWebアプリケーションの開発に取り組めるため、効率よく進めることができます。世界的に利用されているため、コミュニティも豊富で情報収集が容易な点もメリットの1つとして挙げられます。
Actix Webは認知度においても非常に高く、Webアプリケーションの開発に必要な機能はひととおり備わっています。フレームワークを導入するメリットは、開発者が最初から開発する手間を省ける点にあります。そのため、豊富な機能性は重要な要素の1つです。また、サンプルが豊富な点もメリットの1つです。シンプルなサンプルはもちろん、実践的で複雑なサンプルも数多く公開されています。
●axum
axumは「アクサム」と呼ばれている、2021年にtokioチームによってリリースされたフレームワークです。
非同期リクエスト処理に特化したWebフレームワークの1つで、前述のActix Web同様高速性に優れています。それだけでなく、保守性が高く、設計がシンプルなため、エラーハンドリングが容易にできる点が大きなメリットです。
コードにマクロを使用しないシンプルな設計を用いているため、Rustの知識を持っているエンジニアであればスムーズに理解できます。モジュールベースでの開発も可能なため、アプリケーションを複数のコンポーネントに分割して開発することもできます。
また、tokioチームによって開発されているため、tokioのhyper、tower、tracingなどに関するバージョン管理が必要ないという点においても、安心感の高いフレームワークでもあります。
●Rocket
Rocketは、Rustのフレームワークの中でもマイクロフレームワークに分類されています。実装されている機能は最小限であるため、自分で開発する必要がある部分も多く持っています。
マイクロフレームワークであるため、ソースコードは少なく動作は軽量です。使いやすさを重要視されたフレームワークであり、テンプレート機能を実装しているため、handlebarsかteraを使うことで容易にテンプレートを作成できます。
シンプルなWebAPIサーバを実装しているため、RustでシンプルなWebサーバを実装したい際にも最適です。一般的に、Webサーバの構築には専門知識が必要となり、手間や時間を要しますが、Rocketを用いることで短時間で容易に構築できます。また、ハイパフォーマンスなWebアプリケーションを構築するために最適化が施されているため、中規模のWebサイトに適しています。その一方で、複雑な開発には適していないため、使用する場合には注意が必要です。
●Tauri
Tauriは、「タウリ」と呼ばれており、2022年に「Election」というフレームワークの進化系として開発されたフレームワークです。RustとWeb技術を用いた、主要なデスクトップアプリケーションを開発することを目的とした軽量のフレームワークです。フレームワークの重さは、アプリケーションの動作速度に大きな影響を及ぼすため、Tauriのように軽量なフレームワークであることによって、アプリケーションも軽量であることに期待できます。
軽量のフレームワークの特徴として、インストールが簡単で、実行速度が速いというメリットが挙げられます。Rustのシンプルに記載できるプログラミング言語であるという特徴を最大限に活かし、ソースコードをシンプルに抑えることによって、軽量なフレームワークを実現しています。
Tauriは、Windows、macOS、Linuxなどのクロスプラットフォームに対応しているため、OS間でユーザーインターフェースの実装などを変更する必要がなく、簡単に多くのユーザーにアプリケーションを提供できる点もメリットの1つです。また、OSに搭載されているWebViewの機能を利用することによって、レンダリングエンジンの追加組み込みが不要です。レンダリングエンジンの組み込みの必要がないことによって、フレームワークの構成がシンプルに設計されています。それとともに、実装においてレンダリングを意識する必要がないため、ソースコードを簡単に記述することもできます。
Rustのウィークポイント
Rustは、高速性や安全性、並行性において優れているプログラミング言語であるため、多くのことを実現できます。しかしその一方でウィークポイントも併せ持っているため、ここでは、Rustでは向いていないことや開発するうえでのデメリットを紹介します。
●UI開発には不向き
Rustは、コンパクトプログラミング言語の中において、CPUやメモリなどの処理に近い言語であり、低いレイヤーの処理に対応が可能ですが、ユーザー側のインターフェースの開発は得意ではないという特徴も併せ持っています。そのため、システムの本体部分のプログラミングは可能でも、ユーザーインターフェースの部分においては別の言語を用いた開発が必要となります。プログラミング言語によっては、システムの本体部分とユーザーインターフェース、どちらの開発においても対応が可能な言語もあります。しかし、Rustを開発に用いる際にはそういった言語とは異なり、Rust以外の言語の習得が必要となる点がデメリットであるといえます。
●学習難易度はやや高め
Rustの学習において、Rust独自の概念を理解する必要があるため、ほかの言語と比較した際に学習難易度がやや高い傾向にあります。Rustの特徴的な概念である「所有権」や「ライフタイム」といった事項については、CやC++の学習経験がなかったり、メモリ管理に詳しくなかったりする方にとっては理解が困難です。また「マルチパラダイム」における構文が幅広いという特徴もあるため、言語知識の幅も求められます。Rust独自の概念を理解するためには、膨大な知識量が必要とされます。しかし、これまでにCやC++の学習経験がある方や、幅広い言語知識をお持ちの方であれば、比較的容易に学習することが可能だともいえます。Rustを習得したい方は、CやC++を学習したり、ある程度幅広く言語学習をしたりといった経験を積んでから取り組むのがおすすめです。
Rustは高い将来性が期待できる開発言語ですが、学習コストがやや高いというデメリットも併せ持っています。そのため、Rustのスキルがあるエンジニアを確保することが難しい場合もあるでしょう。日本最大級のシステム開発会社ポータルサイト「発注ナビ」であれば、専門知識をもったコンシェルジュが最適な発注先をご提案いたします。2023年7月時点、ご紹介実績は16,500件以上、対応社数は全国5000社以上、紹介達成率92%となっています。平均4~5社を厳選し、最短1日でご紹介!ご相談は完全無料です。「自社に合った開発会社がわからない」「選定にできるだけ時間をかけずにスムーズに導入したい」とお考えのご担当者様はぜひ一度ご検討してみてはいかがでしょうか。Rustを用いたシステム開発の外注を検討している企業担当者の方は、開発会社探しにぜひ発注ナビをご利用ください。
システム開発会社選びはプロにお任せ完全無料で全国5000社以上からご提案
■Rustに関連した記事