【1日目】Rust入門者に贈るRust入門者がRustと闘う物語 -Rustとその愉快な仲間(Cargo)の登場-
最近、巷で話題のRust。システムプログラミング言語などの低レイヤー言語は触ったことがない筆者が、裸一貫で闘っていく、そんな物語です。
本日は、初日ということで、RustとCargoのインストールを行っていきたいと思います。一応スクリプトも書きます。
はじめに
※物語共通で使用するので不要な方は飛ばしてください。 私は、今業務で使用している言語や趣味でしようしている言語を含め、使用している全ての言語を独学で勉強してきました(せざるを得なったためですが)。 そして、毎回のことのように何度も壁にぶつかり、やっとの思いで扱えるようになるため、プログラミング言語の取得は、修行のようなものだと考えています。 これは私自身の能力不足なのかもしれませんが、大小はあるにしても誰しもが共通して感じるものなのかなと思いまして、後にRustに入門する方々に参考になればと思い、物語として記録しておきます。 ・初心者としてありがちな凡ミスやくだらないエラーを赤裸々に記録し、後続する方々の参考にして頂くため ファイル名:わかりやすく日本語で書いていますが、自らの環境で真似するのはお勧めできません。 表現の置換:私の最も得意として楽に記述できる言語がJavaScript(特にES6の書き方が好きです)のため、多くの部分でJavaScriptで置換して表現します。多くの人がわかるようにPythonで置換しようと思ったのですが、Pythonの書き方は(個人的に)独特なので、これまた知名度の高いJavaScriptで置換しようと考えました。 エラーやつまづきポイント:敢えて全てのエラーの記録をお伝えしますし、遠回りの手法をお伝えすることがあります。これは私を反面教師にして同じ轍を進まなくて済むためと考えています。 ※なお、全体を共通して「厳密性」より「なんとなく」を優先することが多々あるかと思います。その点ご了承ください。 ・今からRustに入門しようとしている方 ・業務でWebAssemblyが必要になりそうだった 再現性は不明ですが、念のため記しておきます。 基本的にWebフロントエンドとソフトウェア開発(金融系など)がメインですが、、 主にWebのお仕事をもらいつつ、頼まれたら業務に必要なアプリ作ったりしています。 ちなみに、よく聞かれるので、JavaとRubyの使用経験についても記載しておきます。 そもそも私自身Rustを学ぶ目的というか必要がありまして、実は金融系ソフトウェアの開発にあたりWebAssemblyを使うかもしれない可能性があり、そのため最終的にWebAssembly系で何かできたらと思っています。 恥ずかしながら、こうしてスケジュールを組んで学習というのが初でして、いまいち書き方がわかりませんが、以下のようにしております。 こちらを参考にして、スケジュールを組んでいます。 基本的に1日5時間くらいで学習できる想定です。 ---2/12追記 未定ですが、WebAssemblyで何かしたい。 ---2/12追記
開発環境や参考サイト、学習フローチャートなどの概要について話します。
本物語について
本物語の目的
・自分用のメモ
本物語での記述について
対象読者
・プログラミング自体はある程度できるけど、組み込み系やOS設計などの低レイヤーの部分は触れたことがないという方
・開発自体は好きだが、言語がある程度使えるまでの道のりがしんどい方
Why Rust
・何か1つの言語を1から丁寧に学んでみたかった
・流行っていて今後本格的に低レイヤー言語としての地位を獲得しそうな雰囲気がした
・調べると、難しこと以外でデメリットが見当たらなかった
・名前が良い響き
開発環境とスキルセット
開発環境
PC: macOS Catalina 10.15.2
開発エディタ: VSCode
Rust: 1.41.0
スキルセット
業務で使用
Javascript(デフォルト)(Node.js, Vue.js, React.js, Jquery, etc)
Python(主にAPIなどのバックエンド)(あまりフレームワークは使わない)
Swift(単純な業務アプリ等)
PHP(Wordpressカスタマイズとか頼まれたら)(比較的苦手)
趣味程度
Golang(速度が必要な処理でAPI作成)
Julia(計量経済学を学習した際に)
R(計量経済学を学習した際に)
Swiftが一応システムプログラミング言語ですが、そこまで複雑じゃない業務管理アプリ程度しか作ったことがないので、システムプログラミングエンジニアとしては初心者です。
Golangは、Node.jsで速度処理に困った際に比較で学んだのがきっかけで業務での使用はないです。いつかお仕事できればいいな。
・Java(Kotlin等も)は無茶振りで超単純なアプリを作ったくらいで、趣味にも入らないくらいです。
・Rubyは、変なセミナーに誘われることが多かったので怖くて触れてません。
学習スケジュール(予定)
基礎学習
n日目
やること
1日目
Rustと周辺ツールのインストールとセットアップ
2日目
変数束縛, 関数, プリミティブ型, コメント, if, ループ
3日目
所有権, 参照と借用, ライフタイム, ミュータビリティ, 構造体, 列挙型
4日目
マッチ, パターン, メソッド構文, ベクタ, 文字列, ジェネリクス
5日目
トレイト, Drop, if let, トレイトオブジェクト, クロージャ, 共通の関数呼出構文
6日目
クレートとモジュール, const
と
static, アトリビュート, type
エイリアス, 型間のキャスト, 関連型
こちらですが、誤って2016年の資料でしたので、正しくはこちらになります。次回からの章で訂正したスケジュールを掲載します。(2018年6月ごろの英語版がベースとのこと)
応用学習
参考サイト等(仮)
こちらですが、誤って2016年の資料でしたので、正しくはこちらになります。(2018年6月ごろの英語版がベースとのこと)
何をやったか(1日目)
Rustと周辺ツールのインストールとセットアップ
Rustインストール
基本的に、ここを参考。
Mac(bashを使用)では、以下でいけるとの記載。
curl -sSf https://static.rust-lang.org/rustup.sh | sh
しかし、以下のように返答が返ってきました。
The location of rustup.sh has moved.
Run the following command to install from the new location:
curl https://sh.rustup.rs -sSf | sh
コマンドが変わったようなので、改めて、
curl https://sh.rustup.rs -sSf | sh
を実行し、
Current installation options:
default host triple: x86_64-apple-darwin
default toolchain: stable
profile: default
modify PATH variable: yes
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
では、初心者のためもちろん1を選択。
まあまあ時間かかって(1時間45分くらい)、インストールが完了。
Rust is installed now. Great!
次にパスを通す必要があるらしいので、パスを通す。
source $HOME/.cargo/env
パスが通ったか確認
rustc --version
-result: rustc 1.41.0 (5e1a79984 2020-01-27)
Rustのコードを書いてみる
fn main() {
println!("Hello, world!");
}
を適当なディレクトリに作成。
rustc main.rs
でコンパイルして、
./main
-result: Hello, world!
とりあえず動いたのでOK.
所感
JavaScriptの関数表現に似つつ、中身はPython2
コンパイルが必要なのは低レイヤーぽくて良いけど、めんどくさそう
Cargoのインストール
CargoはRustのビルドシステムであり、パッケージマネージャであり、RustaceanはCargoをRustプロジェクトの管理にも使います。
と記載がある。
一応cargoが入ってるか確認
cargo --version
-result: cargo 1.41.0
入っていたので、次へ進む。
cargoはsrcディレクトリにソースファイルを入れる必要があるらしいので、先ほどのスクリプトを書いたディレクトリで以下を実行
mkdir src && mv main.rs src/
##一応コンパイルしたやつも削除しておく。
rm main
Cargo.tomlという設定ファイルを現在のディレクトリに置く。
[package]
name = "hello_world"
version = "0.0.1"
authors = [ "あなたの名前 <[email protected]>" ]
今現在のファイル構成
./
- src/main.rs
- Cargo.toml
この状態で、ビルドと実行を行う。
cargo build
-result: Finished dev [unoptimized + debuginfo] target(s) in 1.73s
./target/debug/hello_world
-result: Hello, world!
##同じことが以下でもできるらしい。
cargo run
-result: Running `target/debug/hello_world`
Hello, world!
cargoはプロジェクトファイルが変更された時だけ再ビルドする代物らしい。便利そう。
バイナリコードを早くしたいときは、cargo build --release
をする。(コンパイルに時間がかかるらしい)
cargoプロジェクトの作成
cargo new hello_world --bin
でcargoプロジェクトが作成できるらしい。よりシンプルなnpm init
みたいな感じ。gitもできるのは少し嬉しい。README.mdができないのは仕様?
所感
ビルドシステムって言葉がよくわからない。名前だけで言ったら、Golangのbazelとかなのかな。ビルドツールっていう意味だとしたら、JavaScriptのgulpとかかな?
パッケージマネージャはJavaScriptでいうnpm, yarnくらいのところだろうか。
RustaceanっていうのはRustのベテランって意味らしい。
よくわからなかったこと、問題点など
・ビルドシステムってなんとなく聞いたことがあるけど、正確な意味はなんなんだろうか。単純にビルドできる環境のような意味合いで良いのだろうか、、、
気をつけた方が良いこと
・シンプルにRustのインストールに結構時間がかかるので、時間に余裕がある時にインストールするのが良いと思います。
まとめ
Rustのインストールと写経しかできなかった(まさかこんなにインストールに時間がかかると思わなかった)ので、当たり前ですが今のところは特に壁はないですね(日本語以外)。
ただビルドとかは、いかにもシステムプログラミング言語な感じがしてワクワクします。明日の学習が楽しみですね。
どうでも良いですが、自分なりにわかりやすくQiita投稿をしたつもりなのですが、案外時間かかりますね、、
次の記事
追加しました。こちら
Author And Source
この問題について(【1日目】Rust入門者に贈るRust入門者がRustと闘う物語 -Rustとその愉快な仲間(Cargo)の登場-), 我々は、より多くの情報をここで見つけました https://qiita.com/emckk/items/dbfa0d8c89de6f7423e8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .