Rustインストール奮闘記(言うほど奮闘はしていない)

## Rust とは
https://ja.wikipedia.org/wiki/Rust_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)
> Rust（ラスト）はMozillaが支援するオープンソースのシステムプログラミング言語である。

## 特徴

- 静的型付言語
- 高速(C++並だとか)
- メモリ自動管理(GCのことかと思ったがまた別物らしい)
- 他いろいろ

下記の記事がわかりやすくておすすめです。
[プログラミング言語Rustのススメ - Qiita](https://qiita.com/elipmoc101/items/3c8b6d8332a9019e578c)

けっこう周りに Rust 推しが増えてきたし一度は触ってみようと思ったので、会社からいただいた勉強会の時間をつかって、ひとまず新言語入門時恒例の Hellow World 出力くらいまでやってみようと軽い気持ちではじめたものです。ただ、インストールするだけでいろいろ試行錯誤したのでひとまずここまでで一旦記事にしてみました。


## ちなみに環境
- Macbook Pro
  - macOS Sierra

余談：
「コンパイル言語なら C# でもいいけど、.NETFramework 必須だから Mac だとちょっとつらいかなー」と思って避けてたら、今は [.NETCore](https://docs.microsoft.com/ja-jp/dotnet/core/) がありましたね。こっちはまた今度やろうw

## というわけでインストール
https://www.rust-lang.org/tools/install
上記公式サイトに従って行えばいいので楽ちんそうですね。
ところが Mac のOSが古いのが原因なのか接続にコケました。

```sh
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
curl: (35) SSL peer handshake failed, the server most likely requires a client certificate to connect
```

OpenSSL のバージョンが古いですね。これが原因の可能性は高そうです。

```sh
$ openssl version
OpenSSL 0.9.8zh 14 Jan 2016
```

## OpenSSL のバージョンを上げます
**そもそも入っていないとか言われる。**

```sh
$ brew upgrade openssl
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).

(中略)

Error: openssl not installed
```

`which` コマンドで確認したところ入っているようです。わけがわからないよ。

```sh
$ which openssl
/usr/bin/openssl
```

インストールされてないと言われたのでインストールから実施してみました。**するとさっき確認した実行パスと違うところに入りました。**

```bash
$ brew install openssl

(中略)

==> Summary
🍺  /usr/local/Cellar/openssl/1.0.2t: 1,795 files, 12.4MB
```

Homebrew でインストールすると別のところに入るんですね。であれば実行パスを Homebrew でインストールしたほうに変えれば万事おkそうです。

```sh
$ echo 'export PATH=/usr/local/Cellar/openssl/1.0.2t/bin:$PATH' >> ~/.bash_profile
```

OpenSSLのバージョンアップが確認できました。

```sh
$ which openssl
/usr/local/Cellar/openssl/1.0.2t/bin/openssl

$ openssl version
OpenSSL 1.0.2t  10 Sep 2019
```

## インストールを再開します
進捗、ダメです(　ﾟдﾟ)

```sh
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
curl: (35) SSL peer handshake failed, the server most likely requires a client certificate to connect
```

curlで OpenSSL が使われていないっぽい。。。そもそもそういう話か。

```
$ curl --version
curl 7.54.0 (x86_64-apple-darwin16.0) libcurl/7.54.0 SecureTransport zlib/1.2.8
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets
```

## 諦めて別の方法にします
[Other Installation Methods - Rust Forge](https://forge.rust-lang.org/infra/other-installation-methods.html#other-ways-to-install-rustup)

> On Unix, run `curl https://sh.rustup.rs -sSf | sh` in your shell.

curlに OpenSSL が使われていなくて、さてどうしたものかと考えていましたが、Macならこれでも良さそうです。ちなみにWindowsはインストーラーがあるみたいです。

## 早速実行してみます
おお…うまくいくやん。
セキュリティの警告はひとまずスルーします。途中でインストールオプションを聞かれるので、特に理由がなければデフォルトである `1` を入力してエンターを押すとインストールが継続します。

```sh
$ curl https://sh.rustup.rs -sSf | sh
info: downloading installer
Warning: Detected OS X platform older than 10.13
Warning: Not forcing TLS v1.2, this is potentially less secure

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

(略)

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1
```

下記メッセージが表示されればインストール完了です。

```
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
```

## 一応コマンドで動作確認

前項で `cargo`, `rustc`, `rustup` のコマンドが追加されることがメッセージ内に書かれていました。なのでこれを実行して確認してみます。

```sh
$ cargo --version
cargo 1.39.0 (1c6ec66d5 2019-09-30)

$ rustc --version
rustc 1.39.0 (4560ea788 2019-11-04)

$ rustup --version
rustup 1.20.2 (13979c968 2019-10-16)
```

OKそうですね！

## 最後に
なんだかインストールひとつにえらい手間どってしまいました。たぶん Mac の OS が少し古いせいかとは思いますが、もし私と似たような境遇で Rust のインストールに困っている方は同じようにするとうまくいくかもしれません。よかったら試してみてください。


## 参考
- [Install Rust - Rust Programming Language](https://www.rust-lang.org/tools/install)
- [Other Installation Methods - Rust Forge](https://forge.rust-lang.org/infra/other-installation-methods.html#other-ways-to-install-rustup)
- [プログラミング言語Rustのススメ - Qiita](https://qiita.com/elipmoc101/items/3c8b6d8332a9019e578c)
- [OS X Yosemite の cURL で TLS 1.2 を使って接続してみる | SG Labs](https://www.sglabs.jp/os-x-yosemite-curl-tls-1-2/)
  - だいたいのケースはこれで解決できそうに見えます。

次はRustを使って何かやってみようかと思います。