目次

    Rustとは何か?

    Rustは比較的新しい時期に開発された新しいプログラミング言語です。開発開始が2006年、最初のリリースが2015年なのでまだリリースされてから10年経っていません。

    最初はFirefoxなどを開発しているMozilla所属のエンジニア、Graydon Hoareさんの個人プロジェクトだったようです。しかしMozillaが2009年にサポートをはじめ、公式なプロジェクトに転換されたようですね。それほど有望なプロジェクトだったのでしょう。

    プログラマー向けのQ&Aサイト「Stack Overflow」が発表したデータによれば、2021年の「開発者が好きなスキルランキング」の1位がRustで、なんと86.98%の人が来年もRustを使いたいと答えたようです。

    MicrosoftがWindow OSのコンポーネントの一部にRustを使うと明言していたり、GoogleがAndroid OSの開発にRustを使うと発表していたりするので、これからさらにRustが使われる流れが加速していくでしょう。

    結局、なぜRustが人気で有用と言われているのか?

    全体の機能的な話から言えば、C言語やC++よりも安全(secure)で、Javaなどの言語より高速に動作するからです(なぜ「全体の機能的な話から言えば」と前置きをするのかというと、使う処理や使い方によってはJavaの方が高速に動作することがあるからです。以前個人ブログでRustのトピックを扱った時に議論になったもので...)。

    C言語やC++は確かに現在でも使われていますし有用ですが、開発されたのは1972年と最も古いプログラミング言語の1つです。初期の言語なので、どうしても安全性(security)よりも効率性が重視されています。

    特にポインタの機能にそれが顕著に現れています。
    この機能は非常に有用ですが、使い方を少し間違えるとメモリーリーク*1 などのトラブルを引き起こします。

    RustでもC言語やC++と同様にメモリにアクセスできますが、メモリの所有者とリソースの寿命を静的に分析してくれる機能、borrow checkerによってメモリーリークの問題を未然に防いでいます。

    Rustは、所有者と使用されるリソースを1対1で紐付けることでメモリの寿命の問題に対処しています。
    この機能のおかげで、Rustはメモリ解放のためにガベージコレクション*2 を必要としません。

    ガベージコレクションも非常に有用な機能の1つですが、「いつメモリを解放するかが分からない」という弱点を抱えています。一方でRustはメモリの寿命を管理しており、最適なタイミングで使っていないリソースを解放できるため、ガベージコレクションを持っている言語よりも安全で高速となります。

    加えて、RustはJavaのようなインタプリタ*3 を持っておらず、OSやシステムに直接読み込むことができるため高速となります。

    ここまででRustの良いところを上げてきましたが、C言語やC++のような低水準言語なのでJavaやJavaScriptなどの高水準言語よりも学ばなければならない概念がたくさんあります。

    例えばRustは優れたメモリ管理機能を持っているという話をしましたが、開発者側もRustのルールに則って実際にメモリを管理する必要があります。C言語やC++をすでに使ったことがある開発者の方であれば特に問題ありませんが、初心者の方や低水準言語を扱ったことがない人にとっては最初はハードルが高いかもしれません。

    概要はここまでで十分だと思いますので、ここからは実際のインストール方法や使い方について解説していきます。

    注釈
    *1. 使っていないメモリでPC内のリソースがいっぱいになってしまうこと
    *2. 実行中のプログラムが占有していたメモリ領域のうち不要になったものを自動的に解放し、空き領域として再利用できるようにする機能のこと
    *3. 人間に分かりやすい高水準プログラミング言語で書かれたコンピュータプログラムを、コンピュータが解釈・実行できる形式に変換しながら同時に少しずつ実行していくソフトウェア

    例:Hello worldを出すところまで

    1. 必要なパッケージ(rustup)をインストールします。

    Mac または Linux

    % curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

    Windows

    オフィシャルサイトでファイルをダウンロードし、"rustup-init.exe"コマンドを実行してください。オフィシャルサイトのURLは記事下の参考資料のセクションに載せます。

    2. ローカルマシンにパスを通します。いくつかのやり方がありますが、ここではmacユーザー向けに私のやり方を示します。私はzshを使っているので、もしbashを使いたい方はbashに読み替えてください。
    ※コンソールで実行
    
    % cd // ホームディレクトリへ移動
    
    % vim ~/.zshrc  // .zshrcファイルを開く
    
    ※もし.zshrcファイルがまだない場合は、別途作成する必要があります(touch .zshrc)
    ※.zshrcファイルがあるかどうか調べたい場合は"ls -a"コマンドで調べられます
    ※私はvimを使っていますが、もちろん別のテキストエディタなどで開いても問題ありません
    
    .zshrcファイルの中に以下のコードを入れて保存
    export PATH="$HOME/.cargo/bin:$PATH"
    export PATH="$HOME/.cargo/env:$PATH"
    コンソールで以下のコマンドを実行し、上記入れたコードを反映させる
    % source ~/.zshrc
    
    ※もし上記の反映させるコードが動かない場合、コードを1行ずつ別々に反映されるコードが必要な可能性があるので以下のコマンドをコンソールで実行します
    % source $HOME/.cargo/bin:$PATH
    $ source $HOME/.cargo/bin:$PATH
    3. プロジェクトを作成して、作成したディレクトリに移動してください。イチから自分で作るか、cargoという最初からインストールされているパッケージマネージャーを使用するか選べます。ここから上記2つのやり方について説明していきます(個人的には楽なので、cargoを使うことをおすすめします)。

    やり方1: イチから自分でプロジェクトを作成する

    3-1-1. プロジェクト(ディレクトリ)を作成し、そのディレクトリに移動します。
    % mkdir rust   // プロジェクト名(ディレクトリ名)は自分で決められます
    % cd rust  // そのディレクトリに移動します
    % mkdir hello-world-manually  // プロジェクト名(ディレクトリ名)は自分で決められます
    % cd hello-world-manually // そのディレクトリに移動します
    3-1-2. "main.rs"ファイルを作成して、その中に以下のコードを記載します。fnは"functions"を示しており、printLnはコードをコンソールに表示するコマンドです(JavaScriptだと"console.log", Pythonだと"print"にあたります)。
    % touch main.rs // main.rsファイルを作成
    fn main() {
        println!("Hello, world!");
    }
    3-1-3. コンソールで以下のコマンドを実施すると、コンソール上に"Hello, world!"が表示されます。
    % rustc main.rs
    % ./main
    
    
    
    Hello, world! // 結果

    やり方2: cargo(パッケージマネージャー)を使ってプロジェクトを作成する

    3-2-1. cargoを使ってプロジェクトを作成します。元からインストールされているものなので、新たなインストールは不要です。
    % cargo new hello-world  // プロジェクトの名前は自分で決められます
    cargoを使うと、基本的なファイルが自動的に作成されます。時間の短縮になりますね!
    main.rsの中には、すでに以下のコードが記載されており、Hello worldを出すだけであればコードの追加などは不要です。
    fn main() {
        println!("Hello, world!");
    }
    3-2-2. プロジェクトに移動したのち、以下のようにcargo runコマンドを実施してください。自分でイチから作成する場合だと、一度バイナリファイルにコンパイルしてからそれを読み込む必要がありますが、cardoを使う場合だとその作業もcargoがやってくれます。
    % cd hello-world // プロジェクトに移動する
    & cargo run
    
    
       Compiling hello-world v0.1.0 (/Users/owner/Desktop/webDevelopment/Playground/rust/hello-world)
        Finished dev [unoptimized + debuginfo] target(s) in 6.78s
         Running `target/debug/hello-world`
    Hello, world!  // 結果

    まとめ

    本文ですでにお伝えした通り、Rustは良い機能を色々と備えた低水準のプログラミング言語です。
    それに加えてぜひお伝えしたいのは、Rustには良いコミュニティや文書、参照できる公式の情報が色々とあることです。

    個人的にはこの点がこの言語の最も優れているところだと考えていて、Rustに関する情報の全てが1冊の本にまとめられていたりします。公式サイトに情報がたくさん載っている言語はありますが、本になっていてダウンロードまでできるものはなかなかありません。

    もし少しでも興味を持たれたら、公式の本を読んでみてください。情報量は非常に多いのですが、非常に丁寧に記載されていて、この言語にかける思いが伝わってくるような気がしますよ!

    参考資料

    Learn Rust Programming Course - Interactive Rust language tutorial on replit: https://www.freecodecamp.org/news/rust-in-replit/
    プログラミング言語「Rust」とは? "Hello, World!" で基本をおさえる: https://atmarkit.itmedia.co.jp/ait/articles/2107/28/news010.html
    プログラミング言語Rustのススメ: https://qiita.com/elipmoc101/items/3c8b6d8332a9019e578c

    ここまでお読みいただき、ありがとうございました!
    PREV
    2022.12.12
    コンバージョンを上げるWebデザインTips
    NEXT
    2022.12.12
    【UI/UX設計の原理原則】フィッツの法則とは