RustをVSCodeでcargo build/cargo runする

VSCodeでCargoを利用して、ビルド(cargo build)する方法と実行(cargo run)する方法です。

RustをVSCodeでcargo build/cargo runする

VSCodeから、Cargoを利用してRustアプリケーションのビルド、実行を行います。

VSCodeでRustアプリケーションのフォルダを開く

VSCodeでRustアプリケーションのルートフォルダを開きます。

上のメニューバーの File -> Open Folder を選択します。

開くフォルダは「Cargo.toml」が配置されているフォルダです。

VSCodeでcargo buildを実行する

「Ctrl」+「Shift」+「B」ボタンを同時におします。

「cargo build」を選択します。

実行結果が画面右下のターミナルに表示されます。

今度は、ビルドタスクを作成し、cargo buildしてみます。

VSCodeでtask.jsonを設定してcargo buildを実行する

「Ctrl」+「Shift」+「P」をおして、「build」と入力します。

「Tasks: Configure Default Build Task」を選択します。デフォルトで利用するビルドタスクを設定します。

「task.json」ファイルが作成され、cargo buildを実行するために必要な設定が既に記載されています!!

保存したら、再度、「Ctrl」+「Shift」+「B」ボタンを同時におします。

「cargo build」が実行されました。

「Ctrl」+「Shift」+「B」ボタンを同時におすと標準ビルドに設定した、「cargo build」が実行されるようになりました。

 

続いては、「cargo run」を実行します。

 

VSCodeでtask.jsonを設定してcargo runを実行する

さきほど、「cargo build」を設定したファイルの「task.json」へ「cargo run」の設定を追加します。

下記のように編集し、「cargo run」のタスクを追加します。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558 
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cargo",
            "subcommand": "build",
            "problemMatcher": [
                "$rustc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "type": "shell",
            "label": "cargo run shell",
            "command": "cargo",
            "args": [
                "run"
            ],
            "problemMatcher": [
                "$rustc"
            ]
        }
    ]
}

「cargo build」とは、定義の仕方が違います。※同じような記載方法で実行する方法が見つけられませんでした

label名は”cargo run shell”とします。

保存したら、「cargo run」を実行します。

上のメニューバーの Terminal -> Run Task… を選択します。

「cargo run shell」を選択します。

「cargo run」が実行されて、ターミナルに結果が表示されました。

その他にもVSCodeは、ターミナルウィンドウを標準で備えており、VSCodeからコマンドプロンプトで実行するみたいに「cargo run」を実行する方法もあります。

 

VSCodeのターミナルを開いてcargo runを実行する

「Ctrl」+「Shift」+「`」(逆クオート)を同時におします。

ターミナルが表示されます。

※私は、ターミナルを「git bash」にしているため、色がついています

ターミナルが表示されたら、「cargo run」を実行します。

実行結果が表示されました。

 

以上、VSCodeでCargoを利用してビルド、実行をする方法でした。

 

Rustの開発環境をVSCodeで構築してデバッグ(debug)実行する(Windows10)

Rustを開発する環境を構築し、デバッグ(debug)実行を行いました。

サポートしているツールは、色々あるようです。

Rustをサポートしているツール

  • VS Code
  • Sublime Text3
  • ATOM
  • Intellij IDA
  • Eclipse
  • Vim
  • Emacs

モダンなエディタからメジャーなものは、色々サポートしてあるようですね!

詳細は公式ページのGet startedのOther toolsをごらんください。

私は、PythonでもVSCodeを利用していることもあり、RustでもVSCodeを利用しようと思います。

 

Rustの開発環境をVSCodeで構築してデバッグ(debug)実行する(Windows10)

VSCode(Visual Studio Code)とは

microsoft社が無料で提供しているエディタです。

エディタとは簡単に言うと、「メモ帳」みたいなテキストなど文字列を編集するツールです。VSCodeは、機能が沢山増えているメモ帳みたいなものと考えてください。

こちらのページでダウンロードできます。

https://azure.microsoft.com/ja-jp/products/visual-studio-code/

VSCodeをインストールしたら、次はRust拡張機能を追加します。

 

VSCodeの拡張へRust開発機能を追加する

VSCodeを起動したら、左のサイドバーにある四角いマーク(拡張機能)をおします。

開かれた拡張機能のマーケットプレイス(EXTENSIONS:MARKETPLACE)の検索バーへ「rust」を入力すると、一番上に「Rust (rls)」が表示されます。

選択して、「install」ボタンをおします。

インストール完了後、「EXTENSIONS:MARKETPLACE」の右側にある「・・・」ボタンをおして、開いたメニューから「Show installed Extensions」をおします。

インストールが完了した拡張機能(Extensions)一覧に「Rust(rls)」が表示されています。

これで「Rust(rls)」がVSCodeの拡張機能へ追加(インストール)されました。

 

Rust(rls)とは

Rust(rls)とは、Rustアプリケーションを開発するために必要な機能を追加する拡張機能です。下記ような開発のサポート機能をVScodeへ追加します。

  • コード補完
  • 定義へジャンプ、定義のピーク、すべての参考文献の検索、シンボル検索
  • コードフォーマット

など

詳細は公式ページをごらんください。

https://marketplace.visualstudio.com/items?itemName=rust-lang.rust

 

続いて、コードをVSCode上でデバッグ(Debug)実行できるようします。

デバッグとは?

プログラムのバグ(不具合)を見つけたり、取り除いたりする作業のこと。
デバッグ作業を手伝ってくれるプログラムのことをデバッガーといいます。

 

デバッガーの機能とは?

~ デバッガーの機能について wikipedia から引用 ~

・ブレークポイント
ソースコード中に置く、実行の流れを止める機能。ブレークポイントを置いてから該当のソフトウェアを実行した際、デバッガはそこで処理を止める。これにより、任意の位置での実行状況(変数の値やメモリの内容)を調べることができるようになる。
・ステップ実行
処理を止めた際に、一ステップずつソースコードを実行する。これにより、ソースコードをステップごとに追いかけながら実行することが出来、ロジックの問題点を探ることが出来る。
・ステップアウト
構造型言語、オブジェクト指向言語などで、関数、またはメソッドをひとつ飛ばして実行する。これにより、ステップ実行した際に処理を簡略化できる。
・変数確認
指定した変数の中身を出力する。これにより、変数にどんな値が入っており、それが正しいか、誤っているかを確認できる。

ざっくり説明するとデバッガーを利用すると以下のようなことができます

  • プログラム(ソースコード)の任意の場所で処理を止めることができる
  • 止まってる状態で各変数の値を確認することができる
  • 処理を1行ずつ実行できる
  • 1行ずつ処理を実行する際に、関数をとばして実行できる

デバッガーを利用したことない方はピンとこないかもしれませんが、実際に触ってみることで、理解が深まりますので、自分環境で色々試してみてください。

 

では、VScodeへデバッグ機能を追加します。

VSCodeへデバッグ(debug)機能を追加する

VSCodeへデバッグ(debug)機能を追加するための方法はいくつかあるようですが、今回はC++言語の拡張機能を追加します。

再度左のサイドバーにある四角いマーク(拡張機能)をおします。

開かれた拡張機能のマーケットプレイス(EXTENSIONS:MARKETPLACE)の検索バーへ「c」を入力すると、一番上に「c/c++」が表示されます。

「C/C++」のInstallボタンをおします。

 

インストールが完了しました。

 

VSCodeのデバッグ(debug)機能を設定し、実行する

左のサイドバーにあるデバッグ(debug)モードボタンをおします。

その後、歯車のボタンを押します。

どのデバッガー環境を使うか選択します。Windows10を利用しているので、「C++(Windows)」を選択します。

「launcher.json」が表示されました。

「launcher.json」には、デバッグ実行するRustアプリケーションの設定を記載します。

今回は下記のように設定しました。

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(Windows) Launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/target/debug/hello-rust.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true
        }
    ]
}

「program」に、今回デバッグ実行するexeファイルを指定します。

※前回、Rustで依存関係を追加するで作成したプロジェクトをデバック実行します

exeファイルは、cargo buildすると、targetフォルダの下のdebugフォルダに作成されます。

 

では、続いて、VSCodeの設定を変更して、「ブレークポイント」を有効にします。

 

VSCodeでデバッグ(debug)のブレークポイントを有効にする

「Ctrl」+「,」ボタンを押して、Settingsを開き、検索バーに「break」を入力します。

「Debug:Allow Breakpoints Everywhere」へ、チェックを入れます。

では、デバッグ実行するプログラムである、「main.rs」を開きます。

 

Rustをデバッグ実行する

「main.rs」を開いて、エディターの左側の部分をクリックしてブレークポイントを設定します。設定したら、デバッグウインドウの三角ボタンをおします。

設定したブレークポイントで処理が停止されました。

停止したら、StepOverボタンを2回押してみます。
※StepOverは処理を1行ずつ進めます

処理が2Step進み、その時点の変数の値が左の枠で確認できます。

例)「width」に数字の24が設定されています

デバッグ実行が行えました!!

ただし、デバッグ実行する前にはbuildが必要です。(xxx.exeファイルを指定しているため。exeファイルはbuild時に作成される)

 

Rustで依存関係を追加する

Hello,World!の次のチュートリアルであるRustアプリケーションへ依存関係の追加を行います。

 

Rustで依存関係を追加する

Rustアプリケーションへ依存関係を追加します。 Rustのパッケージレジストリであるcrates.ioには、さまざまな種類のライブラリがあるようです。また Rustでは、パッケージのことを「crates」と呼ばれているようです。

Crate(クレート)とは

crates(クレートkrāt)は木箱(Google翻訳)。crateだと木枠という意味らしいです(Google翻訳)。Rustにおけるパッケージのことで、パッケージとは、なにかの機能をもったプログラムの集まりのことです。

では、Hello,World!で作成したプロジェクトを変更していきましょう。

チュートリアルに習い、「ferris-says」というcreateを呼び出してみます。

ferris-says」のとは、フェリスというカニのキャラクターが話してくれるAAを表示するcrateです。ちなみにフェリスはRUSTの非公式マスコットらしいです。

非公式マスコットってふなっしーを思い出しました笑

Ferris

rustaceanというページで画像やGIFがのっています。

https://rustacean.net/

また、sourceがGitHubで公開されています。

https://github.com/mgattozzi/ferris-says

Cargo.tomlへ依存関係を追加する

「Cargo.toml」とは、Rustアプリケーションのマニフェストファイルで、メタデータや依存関係を保存(定義)します。

「Cargo.toml」を開いて、「dependencies」(依存関係)へ下記を追加します。

[dependencies]
ferris-says = "0.1.1"

上記は依存関係にcrateの「ferris-says」バージョン”0.1.1″を追加したという意味です。

 

実際の編集した画像(VSCODE)

続いて、プログラム本体である、「main.rs」を編集します。

 

main.rsを編集して依存関係を追加したcrate(クレート)を利用する

「src」フォルダ直下にある「main.rs」の内容をすべて消して下記を入力します。

main.rs

保存したら実行してみます。

 

Cargo RUNで依存性を追加したRustアプリケーションを実行する

では、実行してみましょう。

コマンドプロンプトを開いて、プロジェクトルート(今回の例だとhello-rust直下)から「cargo run」を実行します。

下記の結果が表示されます。

非公式マスコットのフェリスのAAが表示されました。

実際に実行した画像

crateの「ferris-says」の機能を利用して、フェリスのAAが表示されました。

依存性を追加してRustアプリケーションへ機能を追加、利用することができました!!!

 

コードの解説

 

use ferris_says::say;
use std::io::{stdout, BufWriter};

use で利用する下記2つのcrateを指定します。

・「ferris_says」の「say」・・・フェリスのAAを表示する機能
・「std」の「io」の「{stdout, BufWriter}」・・・コンソールに表示する機能

 

次にmain関数内の処理です。

    let stdout = stdout();
    let out = b"Hello fellow Rustaceans!";
    let width = 24;

「stdout」には、コンソールにメッセージを表示する機能を設定します。

「out」には、メッセージを文字列で設定します。

「width」には、メッセージ表示幅を数値で設定します。

全ての行の先頭にある「let」とは、変数を定義しています。
※正確には「let」は束縛を導入するらしいです、このあたりは別途別の投稿にまとめようと思います

    let mut writer = BufWriter::new(stdout.lock());
    say(out, width, &mut writer).unwrap();

「let mut」で変更可能な変数を定義します。

1行目で「writer」にコンソールに文字を書き出す機能を設定します。

2行目でフェリスcrateのsay関数を呼び出します。

out:メッセージ、width:メッセージの幅のサイズ、writer:書き込み機能を渡しています。

「&mut」は、元の変数(ここではwriter)の参照および編集権限を渡しています。(値渡しのようなイメージですが、こちらも別の投稿にまとめようと思います)

最後の「unwrap()」は、say関数からの返された型(Result<>)から中身をとりだしています。

試しに「unwrap()」を削ってビルドすると下記のワーニングが表示されます。

C:\workspace\hello-rust>cargo build
   Compiling hello-rust v0.1.0 (C:\workspace\hello-rust)
warning: unused `std::result::Result` that must be used
  --> src\main.rs:10:5
   |
10 |     say(out, width, &mut writer);
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: #[warn(unused_must_use)] on by default
   = note: this `Result` may be an `Err` variant, which should be handled

    Finished dev [unoptimized + debuginfo] target(s) in 1.00s

 

RustでHello,World!

プログラム入門といえば、Hello,World!ということで、RustでHello,World!を表示します。

RustでHello,World!

Rustで開発する場合、パッケージ管理Cargoを利用することが一般的なようです。

Cargoとは

CargoとはRustのビルドツールであり、パッケージマネージャーツールです。

Cargoについて詳細な説明については、公式ページをごらんください。

 

Cargoを利用してプロジェクトを作成する

Cargoを利用して小さな開発環境を作成します。

Cargoはコマンドプロンプトから実行します。

Windows10でコマンドプロンプトを開く方法はこちらをごらんください。

コマンドプロンプトが表示されたら、プロジェクトを作成するフォルダへ移動して下記のコマンドを実行します。

cargo new hello-rust

 

実行したら作成されたファイルを確認します。

・hello-rustフォルダ ・・・ プロジェクトフォルダです

・Cargo.toml ・・・ Rustのマニフェストファイルで、メタデータや依存関係を保存します

・src\main.rs ・・・ アプリケーションコードを書く場所です。

プロジェクトのフォルダを開いて、「src」フォルダの「main.rs」を開いてみます。

fn main(){
    println!("Hello, world!");
}

 

プロジェクトを新規作成した際に作られる「main.rs」をみると、メイン関数「fn main()」の中に、文字列を表示するプリント関数「println()」が記載され、「”Hello, world!”」の文字列が渡されています。

つまり、プロジェクトを作成した時点で、Hello,World!を表示する関数も同時に作られるようです。

実際に表示してみた画像

※Typeコマンドはファイルの中身を表示します(Linuxのcatコマンド)

 

Cargoでプロジェクトを実行してHello,World!を表示する

では、実際に作成したRustプロジェクトを実行します。

実行するには下記のコマンドを実行します。

cargo run

実行すると、コンパイル、ビルドが実行され、下記の結果が表示されました。

C:\workspace\hello-rust>cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
        Running `target\debug\hello-rust.exe`
Hello, world!
実際に表示してみた画像

プロジェクトが実行されて、「Hello,World!」が表示されました!

 

Rust言語をWindows10にインストールする

プログラミング言語のRustをWindows10にインストールする方法です。

Rustとは速度、並行性、安全性を言語仕様として保証するC言語、C++に代わるシステムプログラミングに適したプログラミング言語を目指しているプログラミング言語です。

公式URLはこちら

Rustのインストール手順(Windows10)

Rustのインストール手順は下記です。

公式URLからRustインストーラーをダウンロードする

Rustの公式URLからRUSTUPをダウンロードします。

RUSTUPとは、Rustのインストーラーとバージョン管理ツールといった、Rust言語の開発、実行するために必要なツール群を管理するツールです。

ダウンロードURLはこちら

Windows10の場合、インストールページの「RUSTUP-INIT.EXT」ボタンをクリックします。

Windowsでは、Visual Studio 2013以降用のC++ビルドツールを必要とします。ビルドツールを入手する最も簡単な方法は、Visual C++ビルドツールのみを提供するMicrosoft Visual C ++ビルドツール2019をインストールすることです。ダウンロード先はこちら

mac、Linuxの場合は、下記のコマンドでインストールします。

# mac, linux
curl https://sh.rustup.rs -sSf | sh

RUSTをインストールする(rustup-init.exeを実行)

ダウンロードしたRUSTのインストーラーのrustup-init.exeを実行してRUSTをインストールします。

実行すると、どのモードでインストールするかの入力を求められます。

Current installation options:

default host triple: x86_64-pc-windows-msvc
default toolchain: stable
modify PATH variable: yes

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

「default host triple: x86_64-pc-windows-msvc」は、プラットフォームが表示されています。私は、Windows10の64bitなので、上記の表示となっています。サポートするプラットフォームについて詳しく知りたいかたは、Rustの日本語ドキュメントをごらんください。

「default toolchain: stable」は、ツールチェインを選択します。ツールチェインとは、コンパイラ、アセンブラなどRustを実行するのに必要なツール群です。Rustのツールには3つのリリースチャンネルがあり、stable:安定版、beta:テスト実施版、nightly:最新開発版が選択できるようです。デフォルトでは安定版の「stable」が設定されています。

「modify PATH variable:yes」は、環境変数のPATHへ追加するかどうかです。デフォルトでは、追加するが設定されています。

※画面の文字が緑なのはコマンドプロンプトの設定を個人的に変更しているためです

今回は1) Proceed with installation (default)でデフォルトのインストールを選択します。「1」を入力してエンターボタンを押します。

「rustc」、「rsut-std」、「cargo」…とRUSTに関連するツールがダウンロードされています。「cargo」、「rust-docs」が数分かかっています。

インストールが完了しました。

エンターボタンをおしたら、画面が閉じます。


RUSTがインストールされたか確認する

コマンドプロンプトを起動します。

コマンドプロンプトを開くには、「Windows」ボタン+「R」ボタン同時押しで、「ファイル名を指定して実行」で「cmd」を入力します。

または、「Windows」ボタンを押してから、「コマンドプロンプト」を入力します。

コマンドプロンプトが表示されたら、下記のコマンドを実行します。

# Rustインストールチェック
rustup --version

インストールがうまくいっていれば、RUSTUPのバージョンが下記のように表示されます。

rustup 1.17.0 (069c88ed6 2019-03-05)

また、Rustコンパイラのインストールを確認するには、下記のコマンドを実行します。

# Rustイントール確認にバージョンを表示する
rustc --version

インストールがうまくいっていれば、下記の結果が表示されます。

rustc 1.34.0 (91856ed52 2019-04-10)

また、Cargoのインストールを確認するには、下記のコマンドを実行します。

# Cargoのインストール確認
cargo --version

こちらも、インストールがうまくいっていれば、下記の結果が表示されます。

cargo 1.34.0 (6789d8a0a 2019-04-01)

コマンドプロンプトの実行イメージ

以上で、インストールは終了です!