App
の代わりにCommand
を使う。
はじめに
Rustの練習帳というオライリー本のサンプルコードを新しいclapバージョンで動かそうとしたとき、clap::App
がimportできませんでした。
対処法と背景をまとめます。
# 作業バージョン clap = "4.5.16"
clap::App が見当たらない
問題
問題のコードはこちら:
use clap::App; fn main() { let matchs = App::new("echors") .version("0.1.0") .author("BioErrorLog") .about("Rust echo") .get_matches(); println!("{:#?}", matchs) }
こちらを実行する下記のようなimportエラーが発生します。
error[E0432]: unresolved import `clap::App` --> src/main.rs:1:5 | 1 | use clap::App; | ^^^^^^^^^ no `App` in the root For more information about this error, try `rustc --explain E0432`. error: could not compile `echors` (bin "echors") due to 1 previous error
単純に、clap::App
がimportできてないというエラーですね。
解決策
App
の代わりにCommand
を使います。
use clap::Command; fn main() { let matchs = Command::new("echors") .version("0.1.0") .author("BioErrorLog") .about("Rust echo") .get_matches(); println!("{:#?}", matchs) }
単純ですがこれでエラーは解消します。
CHANGELOGによると、clapバージョン3.1.0からclap::App
は非推奨となり、代わりにclap::Command
に改名されています。
下記の該当issueやpull requestを見るに、元々Appという名称は分かりにくいとコミュニティーで議論があったところで、SubCommand
の非推奨化に伴いApp
からCommand
に改名された模様です。
- `App` feels like an awkward name in the API · Issue #3089 · clap-rs/clap · GitHub
- fix: Rename App to Command by epage · Pull Request #3472 · clap-rs/clap · GitHub
おわりに
以上、RustコマンドラインパーサーclapのApp
がimportできなくなっていた問題の対処法をメモしました。
どなたかの参考になれば幸いです。
[関連記事]
参考
clap/CHANGELOG.md at master · clap-rs/clap · GitHub
fix: Rename App to Command by epage · Pull Request #3472 · clap-rs/clap · GitHub
`App` feels like an awkward name in the API · Issue #3089 · clap-rs/clap · GitHub