【Rust】【チュートリアル】世界のトヨタが使っているというRustを使ってみたよ、その1
Rustを使ってみたよ、その1
概要
最近、自動運転界隈で注目されているトヨタが開発中のCarOS(Arene)がRustという言語で開発されているということを聞きつけ、
ミーハーな自分を抑えられなかったので簡単に触ってみました。
かなりしっかりしたチュートリアルがあるので、現在はこれを勧めている段階のメモ書きになります。
今回はRustのインストールと簡単なHello Worldの実行方法です。
なにか間違っている箇所などがあれば、教えていただければ嬉しいです。
そもそもRustってなに?
昔から存在は知っていましたが、正直、僕も最近になって世界中で使われていることを知りました。
公式サイトには、以下のようにあります。
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.
FireFoxやDropboxでも使われているのは知らなくてびっくり。
なぜそんな企業に選ばれているのか、その理由は以下のようです。
for fast, low-resource, cross-platform solutions.
実行速度が早く、大きなリソースを必要とせず、さらにクロスプラットフォームなソフト(Windows, Mac, LinuxなどOSが変わっても実行できるソフト)を作成できることが大きいようです。
また、その他にも下のように、メモリ、スレッドセーフ、メモリや処理の効率化、などこれまでの研究向けな言語とは違い、より現場向きな言語なのかなという印象です。
というわけで使ってみた。
Rustはチュートリアルを始めてとしたドキュメントがかなり充実しているので、簡単に情報を集めることができます。(まだ始めたばかりなので、いずれ印象が変わるかも)
なので、今回からチュートリアルをやってみましたの備忘録から始まり、なにか自分でアプリをRustで書いてみたいと思います。
Rust のインストール
今回は手元のMacではなく、以前購入したRaspberry Pi 4Bにインストールしてみました。
インストールはこちらを参考にしています。
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してくれるので)
なのでVSCodeにRustの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
すると以下のような実行結果が得られます。
ようこそ、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
すると実行すべき実行ファイルを勝手に探して、実行してくれます。
そのほかのコマンド
このcargoには他にもコマンドがあるようで、個人的にお、いいなと思ったのが真っ先に紹介されていた"cargo check"コマンドです。
プログラムを書いた人なら夢でうなされたことがあるであろう、Segmentation Fault, コアダンプ。 これらが起きないかを確認してくれるコマンドになります。
まだこちらは試せていないので、色々と作っていく中で紹介できればなと思います。
まとめ
とりあえずRustを始めてみました。
特に何を作りたいというわけではありませんが、どういうことができるのか知りたいのでこれで色々とつくっていければなと思います。
おそらく定期的に更新していくと思うのでお楽しみに。
ではでは。