はじめに
こんにちは、GxPの森下です!
この記事はグロースエクスパートナーズ Advent Calendar 2024の7日目の記事です。
弊社では日常的に勉強会が開催されており、一部の勉強会はサイドプロジェクトとしても推進されています。私自身もいくつかの勉強会に参加しており、勉強会がきっかけで競技プログラミングを始めることになりました。その際、新しい言語に挑戦しようと思い、Rustを選択しました。今回は、その過程で行った環境構築とその際の注意事項について紹介します。
WSLを使用する理由
Rustはコンパイルが遅い言語として知られており、それを解決するためにmoldを使用することにしました。ただ、Windows上だと動作しないため、WSLを選択しました。
説明に出てくるコマンドについて
powershellと記載しているものは、WSL外で実行しており、bashと記載しているものはWSL内で実行しています。
環境
- Windows 11
- WSL v1.2.5.0
- VSCode
WSLの準備
Ubuntuのインストール / 起動
wsl --install
その他のWSLの操作
# WSLのバージョン確認
wsl -v
# インストール出来るディストリビューションの確認
wsl --list --online
# ディストリビューションを指定してインストール
wsl --install -d Ubuntu-24.04
#インストール済みのディストリビューションの確認
wsl --list --verbose
# 特定のディストリビューションのアンインストール
wsl --unregister Ubuntu-24.04
# Ubuntuの起動
wsl -d Ubuntu
インストールされたUbuntuの情報の確認
lsb_release -a
# または
cat /etc/os-release
Ubuntuのバージョンが22以上でないと、CMakeのバージョンがmoldのコンパイル条件を満たさないため、apt install
ではなく、wget
などでバージョンを指定してインストールする必要があるので、moldを使用する場合はUbuntuのバージョンに注意してください。
バージョンを指定してCMakeをインストールする場合
wget https://github.com/Kitware/CMake/releases/download/v3.30.3/cmake-3.30.3-linux-x86_64.sh
chmod +x cmake-3.30.3-linux-x86_64.sh
sudo ./cmake-3.30.3-linux-x86_64.sh
パッケージの最新化と各種インストール
sudo apt update && sudo apt upgrade -y && sudo apt install -y curl git cmake
curlはRustのインストールに必要なため、またgitとcmakeはmoldのインストールに必要なため、それぞれインストールしています。
sudoコマンドが使えない場合
対象のユーザーをsudoグループに追加する必要があるので、以下を実行してください。# ユーザー名の確認
whoami
# sudoグループの内容を確認
cat /etc/group | grep sudo
# rootユーザーに切り替え
su - root
# sudoグループにユーザーを追加
usermod -aG sudo <ユーザー名>
Rustのインストール
以下を実行し、実行後「1」を入力
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
環境変数の設定
source $HOME/.cargo/env
各種バージョンの確認 (バージョンが確認出来たらインストール完了)
rustc -V && cargo -V && rustup -V
moldのインストール
moldはRustのビルドを早くしてくれるツールです。詳細は以下をご確認ください。
以下を順番に実行
git clone --branch stable https://github.com/rui314/mold.git
cd mold
./install-build-deps.sh
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=c++ -B build
cmake --build build -j$(nproc)
sudo cmake --build build --target install
./install-build-deps.shがエラーになる場合
./install-build-deps.sh
の実行時にE: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
が出た場合、権限が不足しているのでsudoを付けて実行してみてください。
sudo ./install-build-deps.sh
cmake --build build -j$(nproc)
は時間 (20-30分程度) がかかるので注意してください。
バージョンの確認 (バージョンが確認出来たらインストール完了)
mold -v
実行する際は、cargo
の前にmold -run
を付ける
mold -run cargo run
VSCodeの準備
WSLへの接続
ディストリビューションをどれにするか聞かれるので、Ubuntuを選択
rust-analyzer
rust-analyzerはRust用のコード補完・解析ツールです。
以下の拡張機能をインストール
以下にsettings.json
の例を示します。
{
"[rust]": {
"editor.defaultFormatter": "rust-lang.rust-analyzer",
"editor.formatOnSave": true
},
"rust-analyzer.checkOnSave": true,
"rust-analyzer.check.command": "clippy",
"rust-analyzer.check.extraArgs": ["--", "-A", "clippy::needless_return"],
}
"rust-analyzer.check.command": "clippy"
clippyはRustのLinter (静的解析ツール) で、rust-analyzer.check.command
のデフォルトはcheckになっています。checkはコンパイル可能かどうかの最小限のチェックしか行いませんが、clippyはRustのより適切な書き方も教えてくれます。
"rust-analyzer.check.extraArgs": ["--", "-A", "clippy::needless_return"]
Rustでは暗黙的に、セミコロンのない最後の式が返され、returnで明示すると警告が出ます。この警告を出したくない場合に、"rust-analyzer.check.extraArgs": ["--", "-A", "clippy::needless_return"]
を設定することで、制御することが出来ます。設定後、以下のようにしても警告は出ません。
fn double(value: i32) -> i32 {
return value * 2; // 通常、value * 2 のような形でないと警告が出る
}
fn main() {
let result = double(10);
println!("Result: {}", result);
}
参考
動作確認
プロジェクトの新規作成
cargo new <プロジェクト名>
cd <プロジェクト名>
実行 (Hello, world!
が出力されたら完了)
mold -run cargo run
以上で環境構築は完了です。お疲れ様でした。
参考リンク