Rust開発環境
Rust開発環境 Windows & WSL編
> cargo run
Compiling windows_x86_64_msvc v0.52.6
Compiling autocfg v1.4.0
Compiling parking_lot_core v0.9.11
Compiling winapi v0.3.9
Compiling scopeguard v1.2.0
Compiling smallvec v1.15.1
Compiling cfg-if v1.0.1
Compiling bitflags v2.9.1
Compiling lock_api v0.4.13
Compiling windows-targets v0.52.6
Compiling crossterm_winapi v0.9.1
Compiling parking_lot v0.12.4
Compiling crossterm v0.27.0
Compiling notewriter v0.1.0 (G:\jinwa\Documents\Projects\Win_Rust_dev\rust-pj01)
warning: unused imports: `MoveTo` and `self`
--> src\main.rs:2:26
|
2 | cursor::{self, Hide, MoveTo, Show}, // HideとShowを追加
| ^^^^^^
...
5 | style::{self, Print},
| ^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: `notewriter` (bin "notewriter") generated 1 warning (run `cargo fix --bin "notewriter"` to apply 1 suggestion)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 13.53s
Running `target\debug\notewriter.exe`
> cargo run
warning: unused imports: `MoveTo` and `self`
--> src\main.rs:2:20
|
2 | cursor::{self, MoveTo}, // カーソル関連
| ^^^^^^
...
5 | style::{self, Print}, // スタイル関連 (今回は使ってないけど、termionのclearとGotoに対応するため含める)
| ^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused variable: `i`
--> src\main.rs:72:14
|
72 | for (i, line) in self.content.iter().enumerate() {
| ^ help: if this is intentional, prefix it with an underscore: `_i`
|
= note: `#[warn(unused_variables)]` on by default
warning: `notewriter` (bin "notewriter") generated 2 warnings (run `cargo fix --bin "notewriter"` to apply 1 suggestion)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
Running `target\debug\notewriter.exe`
Rust開発環境
Rust開発環境 :Windows & WSL編
本稿では、Rustのローカル開発環境をWindowsおよびWSL (Ubuntu) 上に構築した際の記録をまとめる。その過程で直面した課題とそれに対する解決策について、考察を交えながら記述します。
Rust開発環境
はじめに
私がRustに興味を持ったのは、そのパフォーマンスと安全性に魅力を感じたからです。この記録では、Rustプログラミングを始めるにあたり、開発環境をどのように構築し、直面した初期の課題をどのように解決していったかを詳細に記述します。

1. Windows版RustのインストールとPATH
の確認
まず手始めに、Windows環境にRustを導入しました。Cargo(Rustのビルドシステム兼パッケージマネージャー)のバージョン確認から始め、cargo --version --verbose
コマンドで現在のCargoのバージョンと、それがどのようにインストールされているかを確認しました。
user@hostname:rust-project $ cargo --version --verbose
cargo 1.87.0 (99624be96 2025-05-06)
release: 1.87.0
commit-hash: 99624be96e9d213b0e9b1e36451271f24e4a41d8
commit-date: 2025-05-06
host: x86_64-pc-windows-msvc
libgit2: 1.9.0 (sys:0.20.0 vendored)
libcurl: 8.12.1-DEV (sys:0.4.80+curl-8.12.1 vendored ssl:Schannel)
os: Windows 10.0.26100 (Windows 11 Core) [64-bit]
user@hostname:rust-project $
この結果から、%USERPROFILE%\.cargo\bin
がPATH環境変数を通して正しく認識されていることが確認できました。
CARGO_HOME
環境変数は設定されていませんでしたが、デフォルトの %USERPROFILE%\.cargo
が使われているため問題ないという認識です。
Rust開発環境
2. WSL (Ubuntu) 版Rustの導入とrustup
の利用
. WSL (Ubuntu) 版Rustの導入とrustup
の利用
Windowsだけでなく、WSL (Ubuntu) 環境でもRustを使いたかったので、WSL側にRustを導入しました。この際、sudo apt install rust
ではなく、Rust公式で推奨されている rustup
ツールを利用しました。
# WSL (Ubuntu) での操作
sudo apt update
sudo apt install curl build-essential
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env" # 環境変数の再読み込み
rustc --version
cargo --version
これにより、WSL (Ubuntu) 上にも最新の安定版Rustが導入され、両環境でRust開発ができる準備が整いました。
Rust開発環境
3. link.exe
エラーとVisual Studio Build Toolsの導入
Windows側のRustプロジェクトで “Hello World” を実行しようとしたところ、最初の大きな壁にぶつかりました。
error: linker `link.exe` not found
note: the msvc targets depend on the msvc linker but `link.exe` was not found
note: please ensure that Visual Studio 2017 or later, or Build Tools for Visual Studio were installed with the Visual C++ option.
このエラーは、Rustが生成した実行ファイルを最終的に結合するためのリンカー link.exe
が見つからないというものでした。これはRustのコンパイラとは別に、Microsoft Visual C++ (MSVC) ビルドツールが必要なことを示していました。
解決策として、winget
を使って Visual Studio Build Tools 2022
をインストールしました。この際、GUIインストーラーで「C++ によるデスクトップ開発」ワークロードにチェックを入れることが重要なようです。
# 管理者権限のPowerShellで
winget search "Visual Studio Build Tools"
# 出力からパッケージID (Microsoft.VisualStudio.2022.BuildTools) を確認
winget install Microsoft.VisualStudio.2022.BuildTools --interactive
インストール後、PCを再起動することで、link.exe
がシステムパスから認識されるようになり、Windows上での “Hello World” 実行に成功しました。
Rust開発環境
VS Codeによる開発環境の整備
次に、VS Codeでの開発体験を向上させるため、マルチルートワークスペース dev-rust.code-workspace
を作成し、WSLとWindowsの両方のRustプロジェクトフォルダを含めました。
dev-rust.code-workspace
{
"folders": [
{ "path": "\\\\wsl.localhost\\Ubuntu\\home\\asurawill\\Projects\\Wsl_Rust_dev" },
{ "path": "G:\\jinwa\\Documents\\Projects\\Win_Rust_dev" }
],
"settings": {
"rust-analyzer.checkOnSave.command": "clippy",
"editor.defaultFormatter": "rust-lang.rust-analyzer",
"editor.formatOnSave": true,
// ... その他、ターミナルやファイルの除外設定など
}
}
```rust-analyzer` 拡張機能の設定や、保存時の自動フォーマット、`target` ディレクトリの除外設定などを加えることで、快適な開発環境が整いました。
## ターミナルエディタ開発の挑戦と壁
最初のRustプロジェクトとして、ターミナル上で動作するシンプルなテキストエディタ(現在の`notewriter`)を実装し始めました。このプロジェクトは、ターミナル制御クレートである `termion` を利用していました。
### 1. `termion` から `crossterm` へ移行
しかし、`termion` を使ってビルドしようとした際に、Redox OS向けの `sys` モジュールが見つからないというエラーに遭遇しました。
```powershell
error[E0433]: failed to resolve: use of unresolved module or unlinked crate `sys`
note: the item is gated behind the `redox` feature
```termion` クレートのWindows環境での互換性に課題があることが判明したため、よりクロスプラットフォーム対応が進んでいる `crossterm` クレートへの移行を決断しました。
### 2. `crossterm` フィーチャー指定の試行錯誤
`crossterm` の導入後も、`Cargo.toml` でのフィーチャー指定で試行錯誤が続きました。`ErrorKind` や `cursor`、`event` などのフィーチャーが見つからないというエラーが繰り返し発生しました。
```powershell
the package `notewriter` depends on `crossterm`, with features: `ErrorKind` but `crossterm` does not have these features.
```crossterm` の `0.27` 系では、必要な機能が `events` や `terminal` といった主要なフィーチャーに含まれていることが分かり、最終的に `crossterm = { version = "0.27", features = ["events"] }` とすることでこの問題は解決しました。
### 3. 謎のエラー:`output path is not a writable directory` とセキュリティソフトの戦い
`crossterm` の問題が解決したと思いきや、ビルド中に `lock_api` のビルドスクリプトが `autocfg` クレートで「output path is not a writable directory」(出力パスが書き込み可能なディレクトリではない)というパニックを起こす新たなエラーが発生しました。
```powershell
thread 'main' panicked at %USERPROFILE%\.cargo\registry\src\index.crates.io-1949cf8c6b5b557f\autocfg-1.4.0\src\lib.rs:159:20:
called `Result::unwrap()` on an `Err` value: Error { kind: Other("output path is not a writable directory") }
Gドライブ上のプロジェクトフォルダやCドライブの一時ディレクトリの権限、Gドライブのファイルシステム(NTFS)、PCの再起動などを確認しましたが、依然としてエラーが続きました。最終的に、アンチウィルスソフトがRustのビルドプロセスに干渉している可能性が最も高いと判断しました。
アンチウィルスソフトの設定で、Rustプロジェクトの親ディレクトリ (G:%PROJECTHOME%\Projects
) とCargoのグローバルキャッシュディレクトリ (
) をリアルタイム保護の「除外されたフォルダー」に追加することで、この問題は解決されました。C:
%USERPROFILE%\.cargo
Rust開発環境
-
Kubernetes×IaCで実現するBox風ファイル共有システム構築入門【実践解説】
Boxのようなファイル共有システムをKubernetes(クバネティス)で実装する可能性を解説。Terrafo…
今後の展望:Windows GUIエディタ開発へ
ターミナル上でのテキストエディタ開発は多くの学びがありましたが、特に文字の二重表示問題など、ターミナル制御の限界や環境依存の問題に直面しました。これらの経験を踏まえ、Windowsのメモ帳と同等の「使い勝手」を持つ独立したウィンドウアプリケーションを開発する方が、当初の学習目標や実用性により合致すると判断しました。
今後は、RustのGUIフレームワークを利用して、Windows用のメモ帳風エディタ開発に注力する方針に切り替えます。egui
や iced
、あるいはWeb技術ベースの tauri
など、Rustには複数のGUIフレームワークが存在します。それぞれの特性を学びながら、最適な選択を行い、本格的なGUIエディタの開発を進めていきたいと思います。
Rust開発環境
コメントを残す コメントをキャンセル