うどん県出身グーナーの呟き

神奈川県在住のグーナーです。プログラムをやっているので勉強していることや作った便利ツールを公開したいと思います。

【Rust】【チュートリアル】世界のトヨタが使っているというRustを使ってみたよ、その1

Rustを使ってみたよ、その1

概要

最近、自動運転界隈で注目されているトヨタが開発中のCarOS(Arene)がRustという言語で開発されているということを聞きつけ、

ミーハーな自分を抑えられなかったので簡単に触ってみました。

かなりしっかりしたチュートリアルがあるので、現在はこれを勧めている段階のメモ書きになります。

今回はRustのインストールと簡単なHello Worldの実行方法です。

なにか間違っている箇所などがあれば、教えていただければ嬉しいです。

そもそもRustってなに?

昔から存在は知っていましたが、正直、僕も最近になって世界中で使われていることを知りました。

公式サイトには、以下のようにあります。

www.rust-lang.org

Hundreds of companies around the world are using Rust in production today, like Firefox, Dropbox, and Cloudflare, uses Rust. From startups to large corporations, from embedded devices to scalable web services, Rust is a great fit.

FireFoxDropboxでも使われているのは知らなくてびっくり。

なぜそんな企業に選ばれているのか、その理由は以下のようです。

for fast, low-resource, cross-platform solutions.

実行速度が早く、大きなリソースを必要とせず、さらにクロスプラットフォームなソフト(Windows, Mac, LinuxなどOSが変わっても実行できるソフト)を作成できることが大きいようです。

また、その他にも下のように、メモリ、スレッドセーフ、メモリや処理の効率化、などこれまでの研究向けな言語とは違い、より現場向きな言語なのかなという印象です。

f:id:ryo_udon:20210124151733p:plain

というわけで使ってみた。

Rustはチュートリアルを始めてとしたドキュメントがかなり充実しているので、簡単に情報を集めることができます。(まだ始めたばかりなので、いずれ印象が変わるかも)

なので、今回からチュートリアルをやってみましたの備忘録から始まり、なにか自分でアプリをRustで書いてみたいと思います。

Rust のインストール

今回は手元のMacではなく、以前購入したRaspberry Pi 4Bにインストールしてみました。

ryo-udon.hatenadiary.jp

インストールはこちらを参考にしています。

curlのインストール

まず、curlがインストールできていなかったので、インストールしていきます。

sudo apt-get Update

sudo apt-get isntall curl

Rustのインストール

次のコマンドを打ちます。

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

これでEnterを推すと、途中で下の画像のようにDefault Installかを確認されますので、

1

と打ってEnterを押すとインストールが開始します。

[f:id:ryo_udon:20210124150205p:plain]

インストールが終わると以下のように完了の文字がでます。

[f:id:ryo_udon:20210124150222p:plain]

しかもその下にpath設定の必要があるけど、次回起動時に勝手にやってくれるよとのメッセージが。なんて親切。

なお、この際に公式の手順を見るとC言語コンパイラのインストールを推奨しているようです。

Additionally, you’ll need a linker of some kind. It’s likely one is already installed, but when you try to compile a Rust program and get errors indicating that a linker could not execute, that means a linker isn’t installed on your system and you’ll need to install one manually. C compilers usually come with the correct linker. Check your platform’s documentation for how to install a C compiler. Also, some common Rust packages depend on C code and will need a C compiler. Therefore, it might be worth installing one now.

自分はgcc, g++をすでにインストールしているので、問題なく動きました。

これでインストールは完了です。

開発環境

まだ触り始めたばかりで今後色々と設定を加えていくとは思いますが、今はこれまで通りVSCodeで書いています。

(リモートアクセスが簡単にできて、ターミナルも自動でsshしてくれるので)

なのでVSCodeRustのExtensionを追加だけして作業をしています。

ちなみに他にもIDEに対応しているようなので、お好みのIDEで開発してください。これのほうが便利などの情報もお待ちしています。

[f:id:ryo_udon:20210124150349p:plain] リンク

個人的にGeanyとかまでちゃんと対応しているのに驚きました。使ってる人いるんだ。。。

Hello Rust World!!

workspaceの作成

ではプログラムではおなじみ、"世界よ、こんにちは"の時間です。

まずはworkspaceを作っていきます。

ターミナルを開き、以下を入力していきます。

mkdir rust_workspace
cd rust_workspace
mkdir hello_world
cd hello_world

vscodeを使っている人は右側のFolderからworkspace、.rsファイルを作っていただいて大丈夫です。

ちなみにご存知の方が多数だと思いますが、"mkdir"がディレクトリ(Windowsでいうフォルダ)を作成するコマンド、"cd"が指定したディレクトリに移動するコマンドになります。

プログラムを書いていく

hello_worldのディレクトリの中でプログラムを書いていきます。

まずはhello_worldの中に"main.rs"というファイルを作っていきます。

ここで、"main.rs"の"main"の部分は何でも構いません。

"main"でもいいですし"a"でも構いません。

次に作った.rsファイルを編集していきます。

自分の好きなIDEで開いて以下のように編集してください。

fn main()
{
    println!("Hello Rust World!");
}

編集が終わったら保存をして、hello_worldのディレクトリをターミナルで開きます。

そして以下のコマンドを叩いていきます。

rustc main.rs

これがRustのコンパイルコマンドになります。

これを実行すると同じディレクトリ内に名称が同じの実行ファイルが生成されます。

ここまで来たら、後は実行するだけです。

./main

すると以下のような実行結果が得られます。

f:id:ryo_udon:20210124150429p:plain

ようこそ、Rustの世界へ!!

Cargoを使っていく

cargo new (Package作成)

さてこれでRustのプログラムは書けたわけですが、実はこの方法は公式推奨の方法ではありません。

公式では"Cargo"と呼ばれる、C, C++でいうCMakeのような外部のライブラリやパッケージのDependency(依存関係)を記載することができます。

なので、実は上で実際に書いたことがコマンド3つで実行できます。

まずrust_workspaceにもどって以下のコマンドを実行します。

cargo new hello_cargo

これでhello_cargo というcargoを使うためのディレクトリが作成されました。

また、その中を覗いてみると、 hello_cargo/ ├── Cargo.toml └── src └── main.rs

が自動で生成されています。

ここでさらにsrcディレクトリの中を覗いてみると、main.rsという先ほど作ったのと中身まで同じファイルが生成されています。

ここでCargo.tomlファイルというのがmakefileのようなものでpackage名やversion, dependencyなどを設定することができます。

cargo build (ビルド、コンパイル)

ここまで見たらまたまたターミナルに戻り、以下のコマンドを実行します。

cargo build

これでCargo.tomlの指示通りにビルド、コンパイルをしていきます。

これが終わり、またまたディレクトリ内を確認すると、今度はtargetというディレクトリができています。

その下も覗いてみると大体このような形になっています。

hello_cargo/
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
    ├── .rustc_info.json
    ├── CACHEDIR.TAG
    └── debug
        ├── build
        ├── deps
        ├── examples
        ├── hello_cargo
        ├── hello_cargo.d
        └── incremental

cargo run (実行)

最後に実行です。

実行ファイルは"target/debug/hello_cargo"なので、

./target_debug/hello_cargo

でも実行できますが、もちろん実行コマンドが準備されています。

hello_cargoディレクトリで以下のコマンドを実行してください。

cargo run

すると実行すべき実行ファイルを勝手に探して、実行してくれます。

f:id:ryo_udon:20210124150529p:plain

そのほかのコマンド

このcargoには他にもコマンドがあるようで、個人的にお、いいなと思ったのが真っ先に紹介されていた"cargo check"コマンドです。

プログラムを書いた人なら夢でうなされたことがあるであろう、Segmentation Fault, コアダンプ。 これらが起きないかを確認してくれるコマンドになります。

まだこちらは試せていないので、色々と作っていく中で紹介できればなと思います。

まとめ

とりあえずRustを始めてみました。

特に何を作りたいというわけではありませんが、どういうことができるのか知りたいのでこれで色々とつくっていければなと思います。

おそらく定期的に更新していくと思うのでお楽しみに。

ではでは。

/*コードブロックに言語名を表示*/ pre.code:before { content: attr(data-lang); display: inline-block; background: white; color: #666; padding: 3px; position: absolute; margin-left: -10px; margin-top: -30px; } pre.code { padding-top: 30px !important; }