Rust の学習環境を Docker と VSCode で構築

はじめに

最近「Webアプリ開発で学ぶ Rust 言語入門」を手に取り Rust の学習を始めました。

本書では開発環境として Mac での構築方法が紹介さ入れているのですが、今回は Windows で進めたかったので Docker を使ってみました。

今日は Docker を使った Rust 環境構築と、VSCode に入れる拡張機能、そして最も初歩的な Hello, world プログラムの作り方をご紹介します。

OS
Windows 11 Home
Docker
Docker Desktop 4.21.1
目次
  1. VSCode に rust-analyzer を入れる
  2. Docker 環境構築
  3. Hello, world プログラムを作成
  4. cargo new コマンド
  5. おわりに

1. VSCode に rust-analyzer を入れる

VSCode に Rust 公式の拡張機能である rust-analyzer をインストールします。

VSCode の拡張機能メニューで rust-analyzer と検索すれば一番上に表示されると思います。

Docker 拡張を入れていない場合はこちらの導入もおススメです。

2. Docker 環境構築

今回のファイル構成は下記のような感じで、
apps フォルダの中にサンプルプログラムを置き、Docker コンテナと同期させます。

/path/to/your-project/
  ├ apps/
  │
  └ docker/
      └ docker-compose.yml

docker-compose.yml は次の通りです。

docker/docker-compose.yml
version: "3"

services:
  rust-app:
    container_name: rust-app
    image: rust:latest
    volumes:
      - ../apps:/var/rust
    working_dir: /var/rust
    tty: true

下記のように VSCode のターミナルなどで docker フォルダを開いて docker-compose でコンテナを立ち上げます。

ps> cd \path\to\your\project\docker
ps> docker-compose -p rust up -d

そしてコンテナをアタッチして下記コマンドを実行してみてください。
バージョン番号が表示されるはずです。

root@0123456789ab:/var/rust# rustc -V

少しだけ docker-compose.yml の内容について説明します。

まず image: rust:latest で Rust 公式イメージの最新版を指定しています。
(僕は 1.71.1 が入りました)

バージョン指定をしたいとき等は下記ページを参考に、
image: rust:1.71.1 のようにしてください。

次に tty: true の設定についてです。
今回はコンテナ起動に VSCode の Docker 拡張を使っています。
その際、コンテナでサービスが立ち上がっていないと即終了してしまうので、この設定を付与しています。

もし下記で紹介されているように docker run で実行する場合は tty: true の設定は不要です。

コンテナ名の rust-app や /var/rust はお好みで。

3. Hello, world プログラムを作成

apps の中に sample フォルダを作って、その中にプログラムを作ります。

Rust のプログラムで最低限必要なのは src/main.rsCargo.toml です。
ディレクトリ構成とファイルの内容は以下の通りです。

/path/to/your-project/
  ├ apps/
  │  └ sample/
  │      ├ src/
  │      │  └ main.rs
  │      └ Cargo.toml
  ~
apps/sample/src/main.rs
fn main() {
  println!("Hello, world!");
}
apps/sample/Cargo.toml
[package]
name="sample"
version = "0.1.0"

Rust コンテナの中で cargo run コマンドでビルドできます。

root@0123456789ab:/var/rust# cd sample
root@0123456789ab:/var/rust/sample# cargo run

4. cargo new コマンド

Rust には便利な cargo new というコマンドが用意されていて、
src/main.rs と Cargo.toml を自動生成してくれます。

root@0123456789ab:/var/rust# cargo new sample

5. おわりに

ゼロからの言語学習は久しぶりで、本はなかなか先に進まず、コードを書くのにも時間がかかり、初学時の気持ちを思い出しました。

最初は成果が出にくいですが、Rust も勉強するほど、コードを書くほどスピードが上がると信じで、コツコツと進めています。