Pythonﾁｮｯﾄﾜｶﾙから始めるRust入門

![0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207577/ae6153ea-7f70-d7a3-733e-bfa03a52ac9e.png)



## 概要

- Pythonﾁｮｯﾄﾜｶﾙマンが
- 「Rustってロゴもサイトもかっこよいから面白そう」と思い
- OS Sierraのせいでインストールに頓挫しつつも
- Rustをゼロから触って
- VScodeでデバッグをキメて
- Hello Worldするまでの話

Rust入門とかいうn番煎じな記事です。

本当、門に入るレベルなのでご容赦を。

# Rustのインストール

**で、躓きました。**

```bash
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

を最初に試しましたが、OSのバージョンが古すぎる！と怒られました。

![スクリーンショット_2021-02-16_21_15_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207577/05804426-5c40-dd63-f9c3-07400b9f6962.png)


Logic9とかいう化石を使うためにわざとバージョン落としているので、
古いからだめかー…と諦めていたところ、
同じような状況で戦っていていた人の記録があったので、
それを参考にインストールしてみたら、通りました。

```zsh
$ curl https://sh.rustup.rs -sSf | sh -s -- --help

$ cargo --version
cargo 1.50.0 (f04e7fab7 2021-02-04)

$ rustc --version
rustc 1.50.0 (cb75ad5db 2021-02-10)

$ rustup --version
rustup 1.23.1 (3df2264a9 2020-11-30)
```

- 参考:[Rustインストール奮闘記\(言うほど奮闘はしていない\) \- Qiita](https://qiita.com/tommy_aka_jps/items/9dfea6eca46e70ec7b2c)

# プロジェクトの作成

なにはともあれ、プロジェクトを作成しましょう。
Pythonはファイル一つで完結できる方法を知っているのですが、
Rustは知らないので、おとなしく手順を踏んでプロジェクトを作成します。

```bash
$ cargo new hello --bin
$ cd hello
$ tree
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── rls
        ├── CACHEDIR.TAG
        └── debug
            ├── build
            ├── deps
            │   ├── hello-76feb4ce3499974c.d
            │   ├── hello-86d258b864f270e1.d
            │   ├── libhello-76feb4ce3499974c.rmeta
            │   ├── libhello-86d258b864f270e1.rmeta
            │   └── save-analysis
            │       ├── hello-76feb4ce3499974c.json
            │       └── hello-86d258b864f270e1.json
            ├── examples
            └── incremental
                ├── hello-27d20vfgw3w3a
                │   ├── s-fvxh8t242p-kdjyar-b2rmmlvckmyu
                │   │   ├── dep-graph.bin
                │   │   ├── query-cache.bin
                │   │   └── work-products.bin
                │   └── s-fvxh8t242p-kdjyar.lock
                └── hello-2v337gk94ucz4
                    ├── s-fvxh8t2nyf-1xpfnvz-2atsjlik91zz
                    │   ├── dep-graph.bin
                    │   ├── query-cache.bin
                    │   └── work-products.bin
                    └── s-fvxh8t2nyf-1xpfnvz.lock
```

# Hello worldをターミナルからキメにいく

[Rust入門 \- とほほのWWW入門](http://www.tohoho-web.com/ex/rust.html) を見ていくと、

どうやら `cargo run` とするとHello Worldできるみたいですので、
早速やっていきます。

```zsh
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.09s
     Running `target/debug/hello`
Hello, world!
```

できた。

# VSCodeのデバッグからキメにいく

デバッグのたびにいちいち`cargo run` するのは少々面倒なので、
愛用エディターのVSCodeでデバッグできるようにしましょう。

## 拡張機能のインストール

調べると、以下の拡張機能が必要とのことなのでインストールします。

- [Rust](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust)

コードの補完や色付けをするやつ。

- [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)

~~よくわからないけどとにかく~~Rustをちゃんとデバッグできるやつ。

## さあF5を押してデバッグ

![スクリーンショット 2021-02-16 21.38.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207577/9521416f-5ce2-a4a6-7426-0a0212d9898f.png)


- 訳:*起動構成が提供されていないため、デバッグを開始できません。*

まあ`launch.json` 設定してないし、OKしか押せないのでOK

![スクリーンショット 2021-02-16 21.39.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207577/9fb99423-bde1-8c3e-8b33-8f7907289537.png)


- 訳:*このワークスペースでCargo.tomlが検出されました。
ターゲットの起動構成を生成しますか？*

**Noを押した世界線の僕**はデバッグできなかったらしいので、
Yesを選択します。
すると、自動的に`launch.json` が設定されます。

```json
{
  // IntelliSense を使用して利用可能な属性を学べます。
  // 既存の属性の説明をホバーして表示します。
  // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "lldb",
      "request": "launch",
      "name": "Debug executable 'hello'",
      "cargo": {
        "args": [
          "build",
          "--bin=hello",
          "--package=hello"
        ],
        "filter": {
          "name": "hello",
          "kind": "bin"
        }
      },
      "args": [],
      "cwd": "${workspaceFolder}"
    },
    {
      "type": "lldb",
      "request": "launch",
      "name": "Debug unit tests in executable 'hello'",
      "cargo": {
        "args": [
          "test",
          "--no-run",
          "--bin=hello",
          "--package=hello"
        ],
        "filter": {
          "name": "hello",
          "kind": "bin"
        }
      },
      "args": [],
      "cwd": "${workspaceFolder}"
    }
  ]
}
```

ということで改めてF5でデバッグをキメると
`Hello, world!` と表示され、本日は勝利です。

対戦ありがとうございました。
明日から楽しませていただきます。


## 参考

- [Visual Studio CodeでRust開発環境を整える \- Qiita](https://qiita.com/84zume/items/377033ab6b6aee2a68d7)