Rust環境のセットアップからHello World実行まで

# Rust環境のセットアップ
Rustの環境をセットアップする手順です。
Rustについては[こちら](https://www.rust-lang.org)を参照してください。

# 実行環境
PC自体は、Macですが再インストールが面倒だったのでDocker上で実行しています。

```:実行環境
Docker version 19.03.5, build 633a0ea
image: ubuntu 19.04
```

## rustupのインストール
[公式のインストール方法](https://www.rust-lang.org/learn/get-started)に従ってインストールしていきます。\
公式サイトに行って、説明を読みながらインストールしてもらってもいいですが、面倒な方は
`curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`
をターミナル上で実行してもらえばインストールができます。インストール時は下記のようになります。

```shell_session:インストール
0a0cc89c09eb# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

It will add the cargo, rustc, rustup and other commands to
Cargo's bin directory, located at:

  /root/.cargo/bin

This can be modified with the CARGO_HOME environment variable.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

  /root/.rustup

This can be modified with the RUSTUP_HOME environment variable.

This path will then be added to your PATH environment variable by
modifying the profile file located at:

  /root/.profile

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1  #<- ここは1ではなくてもいいですが、１にしておいたほうが無難です。

info: profile set to 'default'
info: default host triple is x86_64-unknown-linux-gnu
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2020-03-12, rust version 1.42.0 (b8cedc004 2020-03-09)
info: downloading component 'cargo'
  4.8 MiB /   4.8 MiB (100 %)   1.3 MiB/s in  3s ETA:  0s
info: downloading component 'clippy'
info: downloading component 'rust-docs'
 12.0 MiB /  12.0 MiB (100 %)   3.0 MiB/s in  4s ETA:  0s
info: downloading component 'rust-std'
 17.1 MiB /  17.1 MiB (100 %)   3.0 MiB/s in  5s ETA:  0s
info: downloading component 'rustc'
 58.6 MiB /  58.6 MiB (100 %)   5.0 MiB/s in 13s ETA:  0s^[[B
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 12.0 MiB /  12.0 MiB (100 %)   4.3 MiB/s in  2s ETA:  0s
info: installing component 'rust-std'
 17.1 MiB /  17.1 MiB (100 %)  10.6 MiB/s in  1s ETA:  0s
info: installing component 'rustc'
 58.6 MiB /  58.6 MiB (100 %)   8.4 MiB/s in  7s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable'

  stable installed - rustc 1.42.0 (b8cedc004 2020-03-09)


Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
environment variable. Next time you log in this will be done
automatically.

To configure your current shell run source $HOME/.cargo/env
```
ログインシェルでパスを通したい方は最後にあるとおり、
`source $HOME/.cargo/env`
を実行してください。ログインしなおせばパスは通りますので必須ではないです。

### Windows環境の方
上のインストール方法はLinux/Unix上でのインストール方法になります。[こちら](https://static.rust-lang.org/rustup/dist/i686-pc-windows-gnu/rustup-init.exe)をクリックして、インストーラーを起動していただければ問題なくインストール出来るかと思います。最近はWSLでwindows上でもlinuxコマンドが使えるようになってきているようなので、WSL上でもしかすると実行できるかもしれません。不明点があればコメントでもメールでも構いませんので連絡ください。

# Rustでhello world!
実行環境が整ったので、実際にプログラムを書いていきましょう。

```rust:hello_world.rs
fn main(){
	println!("hello, world");
}
```

エディタはなんでもいいので、上のコードを保存し名前をつけて保存しましょう。\
この時保存先が必要になるので、メモかコピーするかしておいてください。
保存したら、ターミナルを開いて事項してみましょう。

```shell-session:実行結果１
0a0cc89c09eb# ls
hello_world.rs
0a0cc89c09eb# rustc hello_world.rs
0a0cc89c09eb# ls
hello_world  hello_world.rs
0a0cc89c09eb# ./hello_world
hello, world
```


この例では、`rustc`を使ってコンパイルをしていきましたが、本来なら下記の方法がメジャーです。

```shell-session:実行結果２
0a0cc89c09eb# cargo new --bin hello_world
     Created binary (application) `hello_world` package
0a0cc89c09eb# cd hello_world && tree .
.
|-- Cargo.toml
`-- src
    `-- main.rs

1 directory, 2 files
0a0cc89c09eb# cargo run
   Compiling hello_world v0.1.0 (/root/test/hello_world)
    Finished dev [unoptimized + debuginfo] target(s) in 0.34s
     Running `target/debug/hello_world`
Hello, world!
```
この場合はmain.rsが元から存在していて中身が

```rust:./src/main.rs
fn main() {
    println!("Hello, world!");
}
```
こんな感じで元から、hello worldが書いてあります。
最初に勉強しているうちはCargoを使うまでもないコードが大半なのですが、最終的にはCargoを使うことになるので、最初のうちからこれに慣れていた方がいいかもしれません。

# 参考
https://forge.rust-lang.org/infra/other-installation-methods.html
https://rust-lang.org/learn/get-started