RustでHello Worldやってみた
こんにちは。のんです。
今回は前々からやってみたかったRust言語の勉強をしようと思って、やったことを記事にしてみました。
Rustに関しては本当に初心者なので、内容は間違っているかもしれません。今後のアップデートにご期待くださいということで...
GitHubのリポジトリ
勉強用のリポジトリはこちら。
Hello Worldまでの道のり
正直Rustの開発環境をどのように作成するのかノウハウがなさすぎて非常に困りました。
というのもまともに触ったことのあるコンパイラ言語C#(.NET Framework)のみで、VisualStudioにすべてを任せていて、それ以外の言語の開発環境を作ったことがなかったのです。
Dockerイメージの選定
とりあえず、DockerHubにある公式のイメージを選択。
軽量OSのalpineで作成されている↓を利用しました。
コンテナ
./app:/app:cache
rust_dev_target:/app/target
とりあえずソースコードが載るapp
を同期し、とバイナリが載る/app/target
をvolumeとして設定しただけの簡素なコンテナです。
app:
container_name: app
build:
context: ./
dockerfile: Dockerfile
volumes:
- ./app:/app:cache
- rust_dev_target:/app/target
working_dir: /app
volumes:
rust_dev_target:
driver: local
ビルドなどに必要なファイルを設定
どうやら、ビルドするためのcargo
コマンドにはCargo.toml
が必要らしいので、公式ページなどを見様見真似で作成。
[package]
name = "sample"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
[[bin]]
name = "sample"
path = "main.rs"
ぶっちゃけ内容は謎。
Cargo.lock
というファイルが自動的に作成されたが、これも謎。Rustのパッケージ管理をcargo
がしてくれるのだろうか。と推測するくらいしかできない。
ともあれ、今回の目的はHello World
を出すことなので、この勉強は次回にまわします。
ソースコードを記載
main.rs
に下記を記載
fn main() {
println!("Hello, world!");
}
ビルドと実行
cargo
が動作するコンテナを用意したので、ビルドや実行はコンテナ経由で行います。
docker compose run --rm app cargo build
でビルドし、
docker compose run --rm app cargo run
で実行。
docker compose run --rm app cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.08s
Running `target/debug/sample`
Hello, world!
なんとかHello Worldまでたどり着くことができました。
最後に
コンパイラ言語の経験が少なすぎて、WEBで利用するときの完成形が想像できないのが非常に辛い。完成したコードのバイナリを実行して、待機させるイメージなのは想像つくけども、それを具体的な手順が想像できない...
この辺が得意な方に色々教えていただく必要があるかもしれないなぁ。
次回からはこのコンテナを利用して簡単なチュートリアルをしてみようと思います。
あとは、リクエストをさばいてみるということもしたいかも。nginxとどのように連携することになるかは想像つかないので、ここもひとつ大きな壁になりそう...
頑張りましょう。
次回のRust記事はいつになるかわかりませんが、また記事にします。
その時はよしなに。
.