Rustã®å§ãæ¹ â Cargoã§å®è¡ããæææš©ã»åçšãå°ããªäŸã§åŠã¶
- OSã«åã£ãæ¹æ³ã§rustupãšCargoãçšæãã
- cargo runã»checkã»testã®åœ¹å²ãåºå¥ãã
- Stringã®ç§»åãšåçšãã³ãŒãã§ç¢ºããã
- ResultãšOptionã®éããç¥ã
æåã®ç®æšã¯ãåããã»åããã»æž¡ãã
ãã®å ¥éã§ã¯ãCargoã§å®è¡ããåŸã«ãæååãåããå Žåãšæææš©ãæž¡ãå Žåã®éãã確ãããŸããæåããéåæåŠçãè€éãªã©ã€ãã¿ã€ã ãæžããå¿ èŠã¯ãããŸããã
1. OSã«åã£ãæ¹æ³ã§æºåãã
Windows: rustupå ¬åŒãµã€ãããã€ã³ã¹ããŒã©ãŒãååŸããŸããMSVCããŒã«ãã§ãŒã³ã§ã¯Visual Studioã®C++ãã«ãããŒã«çãå¿ èŠã§ããã€ã³ã¹ããŒã©ãŒã®æ¡å ãšå ¬åŒã®WindowsåãèŠä»¶ã確èªããŠãã ããã
macOSã»Linux: å ¬åŒã®rustupæé ã確èªããŠãã¿ãŒããã«ã§å®è¡ããŸããmacOSã§ã¯Cã³ã³ãã€ã©çšã®Command Line ToolsãLinuxã§ã¯é åžå ã«å¿ããCã³ã³ãã€ã©ã»ãªã³ã«ãŒãå¿ èŠã§ãã
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
ã€ã³ã¹ããŒã«åŸã¯ã¿ãŒããã«ãéãçŽããŸããUnixç³»ã§PATHããŸã åæ ãããªãå Žåã¯ã察å¿ããã·ã§ã«ã§ source "$HOME/.cargo/env" ãå®è¡ããŸããWindowsã®PowerShellãžãã®Unixçšã³ãã³ãã貌ãä»ããå¿
èŠã¯ãããŸããã
rustc --version
cargo --version
cargo new hello-rust
cd hello-rust
cargo run
Hello, world! ã衚瀺ãããã°ãæåã®ãããžã§ã¯ããã³ã³ãã€ã«ããŠå®è¡ã§ããŠããŸãã以éã®ã³ãã³ã㯠Cargo.toml ããããã£ã¬ã¯ããªã§å®è¡ããŸãã
2. StringãåããŠãããæææš©ãæž¡ããŠã¿ã
src/main.rs ã眮ãæããããäžåºŠ cargo run ããŸãã
fn main() {
let first = String::from("ã²ãã");
show(&first); // åçšãæææš©ã¯æž¡ããªã
println!("åããåŸ: {}", first);
let second = first; // Stringã®æææš©ãç§»ã
println!("æž¡ããå
: {}", second);
// println!("{}", first); // ã³ã¡ã³ããå€ããšç§»ååŸã®äœ¿çšã§ãšã©ãŒ
let count = 3;
let copied_count = count; // i32ã¯Copyã«å¯Ÿå¿ãã
println!("ã³ããŒ: {} / {}", count, copied_count);
}
fn show(value: &str) {
println!("åããŠèªã: {}", value);
}
éåžžã®è¡šç€ºçµæã¯æ¬¡ã®ãšããã§ãã
åããŠèªã: ã²ãã
åããåŸ: ã²ãã
æž¡ããå
: ã²ãã
ã³ããŒ: 3 / 3
次ã«ãã³ã¡ã³ãã«ãã println!("{}", first); ã®è¡ãæå¹ã«ã㊠cargo check ã詊ããŸããç§»ååŸã®å€ã䜿ã£ãããšããšã©ãŒã«ãªããŸãã確èªãããåã³ã³ã¡ã³ãã«æ»ããŠãã ããã
Stringã®ç§»åãšæŽæ°ã®ã³ããŒãåºå¥ããããšãæåã®ãã€ã³ãã§ããåç
§ &str ã¯æååãææããã®ã§ã¯ãªãåããŠèŠãããã®åã§ãç¡å¹ã«ãªã£ãæååãåç
§ãç¶ããäœ¿ãæ¹ã¯æ€æ»ãããŸãã
3. 倱æããåŠçã¯Resultã§åãã
次㯠main ãæ¬¡ã®ã³ãŒãã«çœ®ãæããŸãã
fn main() {
for input in ["42", "ã²ãã"] {
match input.parse::<i32>() {
Ok(number) => println!("æ°å€: {}", number),
Err(_) => println!("æ°å€ã«å€æã§ããŸãã: {}", input),
}
}
}
42 ã¯æ°å€ã«ãªããã²ãã ã¯å€±æåŽãžé²ã¿ãŸãã倱æãéåžžã®åå²ãšããŠæ±ããäŸã§ããOptionã¯ã該åœããå€ãèŠã€ãããªãããªã©ããšã©ãŒã®å
容ã䌎ããªãäžåšã衚ãå Žåã«äœ¿ããŸããåãããã ãã§ã¢ããªã«é©ãã察åŠãŸã§æ±ºãŸãããã§ã¯ãããŸããã
Cargoã®äœ¿ãåã
| ã³ãã³ã | åœ¹å² |
|---|---|
| cargo run | å¿ èŠãªããã«ãããŠå®è¡ |
| cargo check | å®è¡ãã¡ã€ã«ãäœããåã»åçšãªã©ãæ€æ» |
| cargo test | ãã¹ããå®è¡ |
| cargo build ârelease | æé©åãæå¹ã«ããŠãã«ã |
| cargo add ããã±ãŒãžå | äŸåã©ã€ãã©ãªã远å |
| cargo fmt / cargo clippy | æžåŒã®èª¿æŽïŒããããåé¡ã®ææïŒå¯Ÿå¿ã³ã³ããŒãã³ããå¿ èŠïŒ |
ã€ãŸãããã
- cargoãèŠã€ãããªã: ã¿ãŒããã«ãéãçŽããrustupã®ã€ã³ã¹ããŒã«å ãPATHã«å ¥ã£ãŠããã確èªããŸãã
- linker not found: OSå¥ã®Cã³ã³ãã€ã©ã»ãã«ãããŒã«ã®èŠä»¶ã確èªããŸããRustã®ææ³ãšã©ãŒãšã¯å¥ã§ãã
- ç§»ååŸã®å€ã䜿ããªã: çžæã«æææš©ãå¿
èŠããåç
§ã§èªãã ãã§ããããå
ã«èããŸããç¬ç«ããã³ããŒãå¿
èŠãªã
clone()ã䜿ããŸãããStringã§ã¯ããŒã¿ã®è€è£œã³ã¹ãããããŸãã - ã©ã€ãã¿ã€ã ãé£ãã: æåã¯é¢æ°ã®äžã§äœã£ãå€ã䜿ãåãçãäŸããå§ããŸããçåœãªããŒã«ã«å€æ°ãžã®åç §ãè¿ãåé¡ã¯ã泚éãä»ããã ãã§ã¯çŽããŸããã
Rustã®å®å šæ§ã¯ãããã°ã©ã ã®å šæåãä¿èšŒãããã®ã§ã¯ãããŸãããå®å šãªRustã®ã¡ã¢ãªæ€æ»ãunsafeã«æ±ãããã責任ãå®è¡æã®åŠçãã¹ãåããŠèããŸãããã
次ã«èªãèšäº
çšéããèšèªãéžã³ãã人ã¯RustãšGoã®æ¯èŒãå¥ã®èšèªã§åãå°ããªåŠçã詊ããã人ã¯Goå ¥éãžé²ããŸããæææš©ã»åçšã詳ããåŠã¶å Žåã¯ãäžèšã®å ¬åŒBookã®ç¬¬4ç« ãæ¬¡ã®äžæ©ã§ãã