プログラミングRust買いました。何やら難しそうですがやってみよう。

環境構築

本にはrustupを使えと書いてあります。rustupはRustのバージョン管理をしてくれるもののようです。直接インストールしてもかまいませんがここはDockerでやってみます。

Dockerfileを用意

スクリーンショット 2018-08-29 16.18.05.png
FROM buildpack-deps:stretch

ENV RUSTUP_HOME=/usr/local/rustup \
    CARGO_HOME=/usr/local/cargo \
    PATH=/usr/local/cargo/bin:$PATH \
    RUST_VERSION=1.28.0

RUN set -eux; \
    dpkgArch="$(dpkg --print-architecture)"; \
    case "${dpkgArch##*-}" in \
        amd64) rustArch='x86_64-unknown-linux-gnu'; rustupSha256='f69dafcca62fe70d7882113e21bb96a2cbdf4fc4636d25337d6de9191bdec8da' ;; \
        armhf) rustArch='armv7-unknown-linux-gnueabihf'; rustupSha256='eee969b9fd128e8dc9b4ec44acde46735cf8e612d06495e9d022517849aba2d6' ;; \
        arm64) rustArch='aarch64-unknown-linux-gnu'; rustupSha256='cdc48b7882582fd8475107a406dd86df85c7d72e5deea99ff8940c8e11531285' ;; \
        i386) rustArch='i686-unknown-linux-gnu'; rustupSha256='3bad3945452509ac28ba4113e198323daab57488d6885bb31ac30c9eecd88825' ;; \
        *) echo >&2 "unsupported architecture: ${dpkgArch}"; exit 1 ;; \
    esac; \
    url="https://static.rust-lang.org/rustup/archive/1.13.0/${rustArch}/rustup-init"; \
    wget "$url"; \
    echo "${rustupSha256} *rustup-init" | sha256sum -c -; \
    chmod +x rustup-init; \
    ./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION; \
    rm rustup-init; \
    chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
    rustup --version; \
    cargo --version; \
rustc --version;

イメージをビルド

$ docker build -t rust-env .
...
...

Rust is installed now. Great!

To get started you need Cargo's bin directory (/usr/local/cargo/bin) in your
PATH environment variable.

To configure your current shell run source /usr/local/cargo/env
+ rm rustup-init
+ chmod -R a+w /usr/local/rustup /usr/local/cargo
+ rustup --version
rustup 1.13.0 (ea9259c1b 2018-07-16)
+ cargo --version
cargo 1.28.0 (96a2c7d16 2018-07-13)
+ rustc --version
rustc 1.28.0 (9634041f0 2018-07-30)
Removing intermediate container 048d99bf28a4
 ---> 9dd7ef4664f9
Successfully built 9dd7ef4664f9
Successfully tagged rust-env:latest

上手くいったようです。

コンテナの中に入ってみる

$ docker run -it rust-env
root@e808e67f8d25:/#

rootで入れました。rust関係の諸々が入っていることを確認します。

root@e808e67f8d25:/# rustup --version
rustup 1.13.0 (ea9259c1b 2018-07-16)
root@e808e67f8d25:/# cargo --version
cargo 1.28.0 (96a2c7d16 2018-07-13)
root@e808e67f8d25:/# rustc --version
rustc 1.28.0 (9634041f0 2018-07-30)

Hello World

Dockerfileの並びにsrcディレクトリを作り、その中でmain.rsファイルを作ります。RustはC、C++と同じシステムプログラミング言語に入るようです。main関数を書くところがそんな感じしますね。

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

今この状態です。

$ tree
.
├── Dockerfile
└── src
    └── main.rs

srcをマウントするようにコンテナを起動します。

$ docker run -itv /path/to/rust-projects/src:/project rust-env
root@eaac2d973657:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  project  root  run  sbin  srv  sys  tmp  usr  var
root@eaac2d973657:/# cd project/
root@eaac2d973657:/project# ls
main.rs

ちゃんとファイルありますね。では実行。

root@eaac2d973657:/project# rustc main.rs
root@eaac2d973657:/project# ls
main  main.rs
root@eaac2d973657:/project# ./main
Hello, world!

できました。mac側のvimでrustコード書いてDocker側でコンパイルして実行することができるようになりました。新しい言語やるときはローカルにインストールするのではなく、こういう風にDockerコンテナを介して始めるのが楽ですね。

广告
将在 10 秒后关闭
bannerAds