先週宣言した通り、Rust dojoの始まり。
[きっかけ]
先のブログにも書いた通り、Kotlinの教材を一通りやってみたので、昨年冬にt_wadaさんが弊社での講演でおっしゃっていた「毎年少なくとも一つの言語を学習する」を実践するべく、Rustに取り組んでいくことになった。
前身のKotlin dojoは1年半71回開催して、最後1年くらいは3-6人程度でこぢんまりと演習問題やハンズオンに取り組んでいた。
Rust dojoも、普段仕事でJavaやJavaScriptを触っている人たちだからそんなに興味ないかな、と思っていた。しかし、いざ始まってみると、口コミで広まったのか第1回に参加してくれたメンバーは自分を含めて16人もいた。ありがたや🙏
Kotlin dojo(開始当初の名前はKotlin勉強会)は初回こそ3人と少なかったものの、最初の3ヶ月ほどは5~11人程度で開催していたので、それと比べるとなんと多いことか。そんなにみんなRustに興味あるのかしら?
そしてよくよくKotlin dojoの開催経緯を見直してみると、Rustを布教しようとしていたメンバーがいた。彼はRust dojoにも参加してくれていて、いろいろ教えてくれるのでとてもありがたい🙏
[第1回の様子]
というわけで、2021/07/14に第1回を開催した。
教材はRust By Example 日本語版を利用することに。個人的に、2年前に一度英語版のRust By Exampleを最後まで写経したのだが、全く忘れてしまっているので新鮮な気持ちで取り組んでいく。
初回なので僭越ながら主催者としてドライバーをやらせていただいた。先日までのMacBook不調は、MacBookからは画面共有のみとし、カメラはスマホを利用することで事なきを得た。最近はスマホのGoogle Meetでも背景を変えられるようになったので、汚い部屋を見せなくて済んだ。
16人もいるのでナビゲータうまくいくかな、とやや不安はあったものの、既にRustやその他の言語に詳しい方々は熱い解説を挟んでくださるし、黙っていた他のナビゲータの方々も自分のPCで実際にRustをインストールしたりRustのコードを動かしてみたりと、やりたいようにやれていたようだった。
開催前後のSlackでのRust関連のやりとりも活発だったのでとても良かった。
1週間前の開催予告に反応してくれる人がいたり。
Rust専用チャンネルではツールの紹介をしてくれる人がいたり。
参加後に分報で感想を言ってくれる人がいたり。
参加できずに残念がってくれる人がいたり。
Rust専用チャンネルで分からなかったところを質問したり、それに答えたり。
終わってからブログ書いてくれたり。
この盛り上がりがしばらく続くといいな!
[学んだこと]
- まずはRustをインストール
- 指示されたコマンドを実行するだけ。途中でインストール方法を聞かれたがデフォルトで良いとのこと。
% 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. Rustup metadata and toolchains will be installed into the Rustup home directory, located at: /Users/xxxxx/.rustup This can be modified with the RUSTUP_HOME environment variable. The Cargo home directory located at: /Users/xxxxx/.cargo This can be modified with the CARGO_HOME environment variable. The cargo, rustc, rustup and other commands will be added to Cargo's bin directory, located at: /Users/xxxxx/.cargo/bin This path will then be added to your PATH environment variable by modifying the profile files located at: /Users/xxxxx/.profile /Users/xxxxx/.zshenv You can uninstall at any time with rustup self uninstall and these changes will be reverted. Current installation options: default host triple: x86_64-apple-darwin default toolchain: stable (default) profile: default modify PATH variable: yes 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation >1 info: profile set to 'default' info: default host triple is x86_64-apple-darwin info: syncing channel updates for 'stable-x86_64-apple-darwin' info: latest update on 2021-06-17, rust version 1.53.0 (53cb7b09b 2021-06-17) info: downloading component 'cargo' info: downloading component 'clippy' info: downloading component 'rust-docs' info: downloading component 'rust-std' 24.4 MiB / 24.4 MiB (100 %) 20.5 MiB/s in 1s ETA: 0s info: downloading component 'rustc' 58.6 MiB / 58.6 MiB (100 %) 19.5 MiB/s in 3s ETA: 0s info: downloading component 'rustfmt' info: installing component 'cargo' info: installing component 'clippy' info: installing component 'rust-docs' 16.1 MiB / 16.1 MiB (100 %) 3.3 MiB/s in 3s ETA: 0s info: installing component 'rust-std' 24.4 MiB / 24.4 MiB (100 %) 10.1 MiB/s in 2s ETA: 0s info: installing component 'rustc' 58.6 MiB / 58.6 MiB (100 %) 12.5 MiB/s in 4s ETA: 0s info: installing component 'rustfmt' info: default toolchain set to 'stable-x86_64-apple-darwin' stable-x86_64-apple-darwin installed - rustc 1.53.0 (53cb7b09b 2021-06-17) Rust is installed now. Great! To get started you may need to restart your current shell. This would reload your PATH environment variable to include Cargo's bin directory ($HOME/.cargo/bin). To configure your current shell, run: source $HOME/.cargo/env
- そのままRustを使おうとしたがコマンドが見つからずエラーになったので、インストール時の最後のメッセージにしたがって
source $HOME/.cargo/env
を実行した - ようやく本編、まずは目次を眺める
- Rustはシステムプログラミング用の言語
- システムプログラミングって?となったのでWikipediaを参照。ハードウェアを操作したり、アプリケーションのプラットフォームを提供するものらしい。ふむふむ
- 全体の流れとしては、Hello Worldにはじまり、型、制御フロー、関数などと進んでいく様子。
- さっそくHello World
- 関数を宣言するときには
fn main() { ... }
のようにするらしい。なんとなく思い出してきた。 - Hello Worldはこんな感じになる
fn main() { println!("Hello World!"); // Hello World! }
% rustc hello.rs error: cannot find macro `pritnln` in this scope --> hello.rs:2:5 | 2 | pritnln!("Hello World"); | ^^^^^^^ help: a macro with a similar name exists: `println` error: aborting due to previous error
- 1度目はタイポがあったためコンパイルエラーとなった。
- ちゃんと親切に修正方法も教えてくれているので修正して再実行:今度はうまく動作した!やったー!
% rustc hello.rs % ./hello Hello World
- 演習問題としてもう1行printlnを追加してみようというのがあったので、以下のように修正し、無事に動作した
fn main() { println!("Hello World"); println!("I'm a Rustacean!"); }
fn main() { println!("Hello World"); // セミコロンあり println!("I'm a Rustacean!") // セミコロンなし }
- 続いて、コメント
- 通常のコメントは
// 〜
または/* 〜 */
と書くらしい。このへんはJavaと一緒で安心 - ドキュメンテーションコメントは
/// 〜
または//! 〜
と書く。 - テキストの日本語には訳されていなかったが、英語の部分を読むと、ブロックコメント(
/* 〜 */
)はネストさせることができるらしい。Javaなんかだとそれはできなかった気がするとか、パーサーががんばらないといけないとか、この話題でひとしきり盛り上がった。 - 個人的には、ブロックコメントがデバッグに役立つかどうかはあまり理解できず
- 最後に、フォーマットしてプリント
- プリント関係のマクロは5つくらいある
format!("{} days", 31); // 31 daysのようにフォーマットしてくれる print!("Hello"); // 標準出力 println!("Hello"); // 標準出力改行つき eprint!("Hello"); // 標準エラー出力 eprintln!("Hello"); // 標準エラー出力改行つき
31
のように数値を書くと、i32型(32ビット整数)として扱われるらしい。31i64
とすると64ビット。たしかにJavaでも31L
とか書くのでなんとなくこれは分かる。- 時間の関係でフォーマットの途中でおしまい。
[まとめ]
モブプログラミングスタイルでRust dojoをはじめた!
Hello Worldがローカルで動いて初めての「やったー!」ができた。来週は何回できるかな?
今週のプルリクエストはこちら。