目的
説明しないこと
ツールの説明とかはあまりしない予定です。
参照リンクはこまめに貼るので、必要であればそちらを参照ください。
エディタ
※ 全て VS Code の拡張機能で完結するようになってます。
install しておく拡張機能
※ 使い方に関してはドキュメントを参照してください。(初めての方でもすぐ使えるはず)
ディレクトリ構成
.
├── .devcontainer
│ └── devcontainer.json
├── app
│ ├── .cargo
│ │ └── config.toml
│ ├── .gitignore
│ ├── .vscode
│ │ ├── launch.json
│ │ └── settings.json
│ └── Makefile.toml
├── docker
│ └── rust
│ └── Dockerfile
└── docker-compose.yml
各ディレクトリとファイルの内容
docker-compose.yml
version: '3.7'
services:
app:
container_name: rust_app
build: ./docker/rust
tty: true
volumes:
- ./app:/app
environment:
- CARGO_TARGET_DIR=/app/target
- DEBIAN_FRONTEND=noninteractive
- LC_CTYPE=ja_JP.utf8
- LANG=ja_JP.utf8
.devcontainer/
{
"name": "app",
"dockerComposeFile": [
"../docker-compose.yml"
],
"service": "app",
"workspaceFolder": "/app",
"settings": {},
"extensions": [
"editorconfig.editorconfig",
"rust-lang.rust-analyzer",
"vadimcn.vscode-lldb",
"bungcip.better-toml",
"serayuzgur.crates",
"dustypomerleau.rust-syntax",
"jscearcy.rust-doc-viewer",
"mooman219.rust-assist",
"swellaby.vscode-rust-test-adapter"
]
}
app/
cargo-make の設定ファイル(お好みで)
[tasks.watch]
run_task = [
{ name = ["clippy", "test"] }
]
watch = true
[tasks.clippy]
command = "cargo"
args = ["clippy"]
[tasks.test]
command = "cargo"
args = ["test"]
[tasks.run]
command = "cargo"
args = ["watch", "-x", "run"]
[tasks.run-release]
command = "cargo"
args = ["run", "--release"]
.cargo/
mold を使えるようにするための設定を記述
Actix をお試しで使った時にコンパイル遅かったので今回入れてみました〜
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=/usr/bin/mold"]
.vscode/
ブレークポイントとか貼ってデバッグできるようにする設定です
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/**/*.rs",
"args": [],
"cwd": "${workspaceFolder}",
}
]
}
ファイル保存時に、自動フォーマット(お好みで)
{
"editor.formatOnSave": true,
}
docker/rust/
sqlx は今回使う予定はないですが、今後使いたいので先に入れました
FROM rust:latest
RUN apt-get update \
&& apt-get install -y clang git \
&& echo "install rust tools" \
&& rustup component add rust-src \
&& rustup component add rustfmt \
&& rustup component add clippy \
&& cargo install cargo-watch cargo-make sqlx-cli
# see https://github.com/rui314/mold#compile-mold
RUN git clone https://github.com/rui314/mold.git \
&& mkdir /mold/build \
&& cd /mold/build \
&& git checkout v1.7.1 \
&& ../install-build-deps.sh \
&& cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=/usr/bin/c++ .. \
&& cmake --build . -j $(nproc) \
&& cmake --install .
WORKDIR /app
setup
-
ファイルとディレクトリの準備ができたら、以下コマンドを実行してコンテナを立ち上げましょう
15 分くらいかかるので、tea time.$ docker compose up -d
-
立ち上がったら、Dev Containers を使ってコンテナの中に入ります
VS Code の拡張機能読み込むのに時間かかるかも -
コンテナに入ったら、以下コマンドを実行して、プロジェクトを作成します
$ cargo init
-
プロジェクトができたらさらに以下コマンドを実行しましょう
$ cargo run
or
$ mold -run cargo run
まとめ
とりあえず目的は達成できたので ok
テストも GUI から実行できるようにしてあるので、開発もスムーズに進むんじゃないだろうか
image size 大きいのと、image build に時間かかるのがちょっと課題ですが、後々チューニングできたらなと思います(そもそもrust
のベースイメージが結構でかい...)
それでは良い Rust Lifi を!