Findy Engineer Lab

エンジニアのちょい先を考えるメディア

もしもいま、Rustをイチから学び直すとしたら? Rust入門書著者・matsu7874さんに聞く学習ロードマップ

めまぐるしく変化するテックの世界。技術を身に着けるうえで学ぶべきポイントや学習環境なども年々変わっています。

そこで「もしもいまの環境で、テックのことをイチから学び直すことになったら、自分はどんな風に勉強したいか」というIFストーリーを通じて、技術との向き合い方を考え直してみる企画「テック転生」。

今回は『Rust実践プログラミング入門』共著者の松本健太郎(@matsu7874)さんに“自分だったらこう進めたい、Rustの学習ロードマップ”をご寄稿いただきました。

無理なく2ヶ月でWeb開発をRustで始めるロードマップ

株式会社estieでソフトウェアエンジニアをしているmatsu7874です。2024年8月の今、イチからRustを学び直すロードマップ(あるいはリソースガイド)を考えてみました。仕事の合間にやっていくとして数週間、長くとも2ヶ月くらいでRustで開発している会社に入っても一般的な知識で困らないくらいを目指します。

方針としてはRustのメンタルモデルを獲得し、手を動かしながら細かい部分に慣れるという流れです。同シリーズの五十嵐さんの記事や2021年に初学者向けのロードマップとして作成したブログと似た内容ですが、より仕事としてWebアプリをRustで開発できるようになるためにスキルを身につけるという狙いで作っています。

私はどう勉強してきたか

Rustを触る前の私はPythonやJavaScriptを書くWebエンジニアでした。

初めてRustに触れたのは2018年、日本語でのRustの情報発信がされ始めたころのことです。速くて安全なプログラミング言語があると聞き、Rustでgrepを実装してみるハンズオンイベントに参加しました。ファイルを触る(失敗する可能性がある)のに一画面に収まる程度のコード量で書けてしまい、特に難しい言語ではないのだなと感じました。これが私の初めてのRustプログラムでした。

その後は、公式ドキュメントである「The Rust Programming Language」や、「Rust by Example」を使って学習を進めました。仕事でRustを使い始めてからは、Rustコミュニティのイベントに参加したり、『実践Rustプログラミング入門』という本を共著したりしてきました。

2024年のRust事情

2024年のRust事情を簡単にまとめると下記の3点が挙げられます。

  • 日本語の入門資料が充実してきた
  • デファクト・スタンダードなライブラリが定まってきた
  • 勉強会が増えてきた

これらを活かして学び直していきましょう。

Rust開発者のメンタルモデルを作る

補完ツールの性能が上がっている現在、WebエンジニアがRustでWebアプリを開発できるようになるには、Rust開発者のメンタルモデルを理解することが最重要です。もし今、現代の環境でRustをイチから学び直すとしたら、まず2022年に出版された2冊の書籍に取り組むでしょう。

コンセプトから理解するRust』は豊富な図解でソースコード上の型とメモリ上のデータ配置の対応が丁寧に説明されています。メモリの仕組みを理解することで所有権やライフタイムの概念が身近になり理解が深まります。Rustの最大の特徴は所有権システムによるメモリ管理ですので、最初に勉強すると不思議なことが減って嬉しいです。

もう一冊は『ゼロから学ぶRust』で、2024年8月現在で最も分かりやすいRustのハンズオン型の書籍です。Rustの概念や機能が他の知識への足がかりとなるように解説されており、Rustの入門書として非常におすすめです。後半のハンズオンパートは、いつか自分で作ってみたいと思うような少し難しい題材を扱っており、ある程度複雑な練習課題としてRustでの書き方を見ながら進めていける点が非常に素晴らしいです。

この2冊を読んだあとは、自分でWebアプリを作ってみるステップをおすすめしようとしていたのですが、今月末に講談社サイエンティフィクから『RustによるWebアプリケーション開発 設計からリリース・運用まで』という書籍が発売されます。共著者として執筆に参加しました。この本は、Webアプリケーション開発をRustで実装する場合にどう作っていくかを解説したもので、ハンズオン形式で一つのWebアプリを書いてみるという内容になっています。作りたいWebアプリのネタがない方や、解説を日本語で読みたい方はぜひ手に取ってみてください。

フォーカスする部分以外は雑にWebアプリを作りまくる

次に、デファクト・スタンダードなライブラリ(Rustではcrateという)を使って、AIを活用しながら、実際にプロジェクトを進めることをオススメします。とにかく、なんでもいいので作りまくるのが上達への近道だと感じています。

Rustは「比較的新しいプログラミング言語」とはいえ、デファクト・スタンダードなライブラリが決まってきています。Webフレームワークとしてはactix-webが覇権を取り続けるのかと思っていたのですが、最近はtowerというライブラリに依存しているaxumの方が使われています。今後デファクトスタンダードになる可能性が高いため、axumに注力して学習を進めるのが良いでしょう。エラー処理は実行プログラムではanyhowを、ライブラリではthiserrorが定番です。ロギングはtracingを活用して非同期処理のデバッグも練習するといいでしょう。シリアライズ・デシリアライズではSerde、時間の処理もchrono、データベースはSQLを書くならsqlxがデファクト・スタンダードです。

最近の生成AIはRustのコードもかなり精度良く生成できるようになっています。まだハルシネーションや情報が古いことがあるものの、検索して出てくるような内容は出力してくれるようになりました。デファクト・スタンダードなライブラリを使うのはこの点でも有利です。

Rustを書くぞ!となると、トレイトや借用をうまく使った速くて見通しのいいコードを書きたくなりますが、まずは動くコードを書けるようになりましょう。その上で練習したい部分にフォーカスしてリファクタリングしていけばいいのです。 clone を使って所有権の問題をスキップしたり、traitを使わなくてもenummatchで書けば実務上も十分な場合も多いです。エラー処理は ?.expect("message")を使って真面目に処理をせず進めてしまいましょう。 todo!マクロを使って未実装であることをコンパイラに示しながら実装するのもいいですね。

そうやって概形が実装できて、コンパイルが通っている状態から勉強したい部分に注目して洗練させていきましょう。基礎を学んだからこそ気持ち悪いと思っている部分もあるでしょう。Rustらしいコードの書き方はclippyが教えてくれるので、積極的にコードを書き、修正を重ねていくことで自然と身に付きます。たくさん書いてたくさん改善しましょう。

コミュニティで最先端キャッチアップ

さて、コミュニティとの関わりも重要です。アンテナを伸ばしておくことで実際に問題に直面した時に、類似の事例があったことを思い出せます。

学習者としては、特に企業の利用状況や最新情報のキャッチアップができるのがコミュニティに参加する大きなメリットでしょう。例えば、Rustを業務に使っている企業の方が登壇する「Rust、何もわからない…」や、「Rust勝手にリリースパーティ」のシリーズでこれらの情報が得られます。日本最大のRustのカンファレンス「Rust.Tokyo」は毎年秋に開催されます。

慣れてきたら登壇者として参加してみましょう。定期的にユニークビジョン社が「UV Study」というLT会のシリーズを開催されています。

実際に手を動かす場としてRust JPのコミュニティで、毎週土曜日にオンラインもくもく会が定期開催されています。

最近では、女性向けのRustコミュニティ「RustLadies」も誕生し、より多くの人に対して、その人にとって参加しやすい場が提供されるようになってきました。

これらのコミュニティに参加することで、モチベーションを高め、学習の幅を広げることができます。聴衆として参加しながら、部分的に集中して勉強して、手を動かしてみて、まとめて、発表し、懇親会でフィードバックをもらうという関わり方がオススメです。

まとめ

ここまで紹介したロードマップを実践すれば、数週間から2ヶ月ほどでRustを使ったWebアプリ開発に必要な基礎を身につけることができるでしょう。大切なのは、最初から完璧を目指すのではなく、まずは動くコードを書き、その後に改善を重ねていくことです。

Rustの学習は難しいと言われていましたが、状況が明るくなってきました。このロードマップを参考に、ぜひ一歩踏み出してみてください。以上、株式会社estieのmatsu7874でした。皆さんがRustaceanになることを願っています。