のんラボ

RustでHello Worldやってみた

2021/07/18 2021/07/18 RustでHello Worldやってみた

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として設定しただけの簡素なコンテナです。

copied.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が必要らしいので、公式ページなどを見様見真似で作成。

copied.[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に下記を記載

copied.fn main() {
    println!("Hello, world!");
}

ビルドと実行

cargoが動作するコンテナを用意したので、ビルドや実行はコンテナ経由で行います。

copied.docker compose run --rm app cargo build

でビルドし、

copied.docker compose run --rm app cargo run

で実行。

copied.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記事はいつになるかわかりませんが、また記事にします。

その時はよしなに。

.