支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


はじめに

近年Web技術の発展により、様々なWebに関する技術やプログラミング言語が開発されてきました。

プログラミング言語でいうとそれぞれ動的に型が変化するものであったり、事前に型を厳格に宣言するものであったり、または余分な言語機能を排除してシンプルな言語設計なものがあったり・・・プログラミング言語とそれに付随する技術は開発者の選択によって様々な表現ができるようになっていきました。

今回はそんなプログラミング言語、技術の中でまた新たな可能性を秘めている「Rust」というプログラミング言語を紹介します。

Rustとは?

Rustは、FireFoxの開発で有名なMozilla社の従業員Graydon Hoareの個人開発から始まったプログラミング言語で、2009年ににはMozilla社が開発に関わり始めたことでMozilla社の公式プロジェクトとなった言語です。

RustはStack Overflow Developer Survey「最も愛されているプログラミング言語」で何と2016〜2020の4年間で1位を獲得し続けています。

Microsoft社も「Windows10のプログラムの一部をRustへと書き換えている」と表明したり、AWSもRustの言語サポートを行うと表明しました。

それだけ世界中の開発者の間で使用されているRustというプログラミング言語はどういう特徴があるのでしょうか。

特徴

1・強い静的型付け機能

Rustには強力な静的型付け機能が備わっています。

静的型付け言語でも、Javaのように実行時に変数の型を型変換することを許している静的型付け言語が存在しますが、Rustは変数の定義時に定義した型の変更を許さないことで、強い静的型付け機能を実現しています。

これにより、Javaのような従来の静的型付け言語よりもさらに堅牢なコードを記述できると言えます。

2・型推論

Rustには型を宣言しなくても変数の内容やその後の使われ方から変数の型を推論してくれる型推論機能が備わっています。

これにより、Rustの型推論機能が前後の文脈や変数の内容から型を推論してくれるため、開発者の負担軽減につながり、開発効率の向上が見込めます。

3・厳格なリソース管理

Rustは非常に厳格なリソース管理を行うことにより、高速でセキュアなプログラムの構築が実現できます。

代表的なものに「所有権」と「借用」があります。

所有権とは変数の値を他の変数に渡した際には、値のコピーではなく「完全に渡した」とみなす概念です。そのため値を渡した変数にはもう値はなにも無いという扱いになります。

コードで実際に確認してみましょう。

fn main() {
let stringA: String = "sample";
let stringB = stringA;
println!("{}", stringA);
println!("{}", stringB);
}

これは、変数stringAで「sample」 という内容の文字列型の変数を定義し、変数stringBにstringAの変数の内容を渡し、次のprintlnでコンソールに表示しようとしています。

恐らく「sampleが2回表示される」と考えた方がいるかもしれませんが、結果は変数stringAに何も値が無いとして、コンパイルエラーになります。

なぜかというと、stringAの変数の値はstringBに渡した時点で「値の所有権がstringBに移った」とみなされ、何も無くなります。何も無い値を参照することはできないのでコンパイルエラーとなったわけです。

これを回避するにはRustの「借用」という概念を使います。

借用は、値を完全に渡すのではなく従来のようにコピーする(借用)ことによって値を渡したことによる値の喪失を防ぎます。借用には以下のルールがあります。

  • ・借用する時は、借用する変数の前に「&」をつける
  • fn main () {
    let a = 10;
    let b = &a;
    }
  • ・mutable(変更可能)な変数の場合、貸出元、貸出先の変数ともに「mut」をつけなければならない
  • fn main() {
    let mut a = 10;
    let b = &mut a;
    b = 20; //値の変更はOK
    }
  • ・immutable(変更不可)な変数の場合、複数に貸し出せる

「所有権」や「借用」によって従来の言語よりも厳格にリソースが管理できるため、メモリを効率よく使用できる高速なプログラムの構築が可能になっています。

4・標準機能の豊富さ

Rustは標準でテスト機能、パッケージマネージャーなどがついており、Rustをインストールするだけで色々な機能も付随してついてくるため、開発者はそのぶん開発に集中でき、開発効率の向上が見込めます。

メリット

高速なプログラムの構築ができる

Rustは上記の様々な特徴から、従来の言語よりも非常にメモリセーフな高速なプログラムの構築が可能になります。

既存のアプリケーションの一部をRustで実装し直してみたりできるほか、使用できるメモリなどのリソースが限られてくる組み込み/IOTデバイスの構築にも向いています。

デメリット

学習コストが高い

Rustはセキュアで高速なプログラムが構築できますが、学習コストが非常に高いです。

今まで動的型付け言語などを触っていて何となくで済まされていた部分がRustでは許されないことがしばしばあり、「コンパイルがまともに通らない」なんていうことも起こりうると思います。

恐らく今まで以上に本質的なプログラミングの知識が必要になり、言語の学習とともにそういった部分の見直しも必要になるでしょう。

まとめ

いかがでしょうか。Rustはその特性から、世界中の開発者に愛されている言語ということがわかりました。

機会があれば、一度Rustを触ってみることをオススメします。