本連載は、「 エキスパートへの道しるべ(Load to Expert) 」をテーマとして、初級者がエキスパートになるためのヒントを、日本を代表するエキスパートの方々に伺う企画です。
近年、システム開発や組み込み領域で注目度が高まっているプログラミング言語「Rust」。本記事では、6年間にわたりRustを実務で使い、現在はC++開発にも携わっているκeenさんのインタビューをお届けします。Rustの魅力や学習のコツ、C++との比較、注目の最新トピックまでをギュッとまとめました。初心者にもわかりやすいポイントを中心に解説していますので、ぜひご覧ください。
κeenさんをTechFeed上でフォローしよう!
κeenさん
RustとC++の比較――セグメンテーションフォールトの有無や自由度
――まずは自己紹介をお願いします。
κeen: 私は2017年から2023年までの約6年間、仕事でRustを書いていました。今は仕事ではC++を使っているので、最近は「Rustエキスパートです」と言いづらい部分もあるんですが……(笑)。
――RustとC++を両方仕事で使ってみて、比較するとどのように感じますか?
κeen: C++は自由度が高く、やろうと思えば何でもできるところが素晴らしい ですね。例えばファイルから読み取ったデータをパースせずにそのまま別の型として解釈できるといった荒業も可能です。そういう意味では、かなり低レイヤーに近い操作ができるのがC++の良さだと思います。
一方Rustは、ガベージコレクションなしでメモリを安全に扱えるのが魅力です。 メモリ安全性を脅かすようなコードが言語機能レベルで除外されていて、コンパイル時にチェックされるので、ガベージコレクタなしで安全性が担保されます。C++は一見動いていても、実は危険なコードになっている場合がよくあるんです。Rustだとそういうケースが基本的に排除されるのは大きな魅力です。
※ガベージコレクション(GC)とは、コンピュータプログラミングにおいて使われなくなったメモリを自動で探し出して、そのスペースを再利用可能にする仕組みのこと。これにより、メモリを明示的に確保・開放するコードが不要となり、プログラムが書きやすくなる一方、ガベージコレクションの間はプログラムが停止するので、リアルタイム性が重要なアプリケーションの開発においては問題となることもある。
Rustの魅力と学習法_――公式ドキュメント&試行錯誤のすすめ_
――κeenさんがエキスパートになるまでには、どのように学ばれたのでしょう。
κeen: 私が学び始めた頃はRustが正式リリースされる前で、日本語の情報がほとんどなく、公式ドキュメントを読んでサンプルコードを試すという手探りのスタイルでした。
実は、私はガベージコレクタを作るのに興味があったんです。 それをRustで作れないかと色々挑戦しました。結局、RustでGCを実装するのは相当難しいという結論ではあったんですが、そこまでの過程が大変勉強になりましたね。
――学習以外にも、心がけていたことはありますか?
κeen: 勉強会に頻繁に参加して、毎回登壇していた ことが大きいですね。あとはブログをよく書いていました。当時はRustを書いている人が少なかったので、情報発信すればすぐに注目してもらえたというのはあります。X上でも発信し続けているのも大きいと思います。
発信を習慣化しつつ、それをモチベーションにして学ぶというのは心がけていたかと思います。
κeenさんをTechFeed上でフォローしよう!
κeenさん
初心者におすすめのRust学習法
――これからRustを学ぶ方に向けて、おすすめの学習法があれば教えてください。
κeen: まずは公式ドキュメントを読み込む ことですね。どうしても仕様が複雑な言語なので、それを読まないとわからないと思います。
その後にひたすらコードを書く段階になります。その際、自分のやりたいことをやってもいいですし、最近だと市販のRust本も出版されるようになりましたので、適当なものを一冊買って、サンプルコードをどんどん書いていくのが近道じゃないかなと思います。
――所有権や借用(※)など、Rust特有の概念は初心者がつまずきやすいポイントですが、どうやって克服すればいいでしょう?
κeen: もう書くしかない ですね(笑)。最初はエラーが出まくりますが、その都度「これはダメなのか」と学んでいくうちに、少しずつパターンがわかってきます。慣れるとそこまで辛くなくなるので、焦らず経験を積むのが一番かなと思っています。
他の言語にはない機能なので、単に「馴染みがない」のが一番のネックになっているんだと思います。 最初の1週間とか1ヶ月とかは苦労しますが、それを過ぎれば、ほとんど所有権に悩まされることなくコードが書けるようになりますよ。
※所有権や借用: Rustにおける、メモリ管理と安全性をコンパイラが保証するための仕組み。
Rustエキスパートの情報収集方法
——Rustの情報収集はどのようにしていますか?
κeen: 私はRustの日本語コミュニティであるrust-lang-jpにRSSを流すようにしていて、基本それだけを追っています。収集している情報としては、Rust公式ブログやHacker News、「This Week in Rust」などになりますね。「This Week in Rust」は英語のまとめサイトで、質の高い記事がよくまとまっています。フィード上で、タイトルに惹かれるようなものがあれば、それを深堀りしていくというやり方をしています。
日本語での情報は少ないので、勉強したいと思ったら、勉強会で直接話を聞いたりするのがメインになっていますね。
――SNSで参考になるアカウントなどはありますか?
κeen: Rust関係の人はフォローしていますが、皆さんが日常的にRustの話をするわけではないので、ノイズも多いとは思います。効率から言うと、勉強会や公式情報を見にいくのがいいんじゃないでしょうか。
Rustエキスパートが今注目するトピックは?
――現在κeenさんが注目しているRust関連の最新トピックを教えて下さい。
κeen: まず「 Rust 2024 Edition 」が挙げられます。新しく言語仕様がアップデートされたのですが、その中にジェネレーター構文が含まれていて、Rubyのyieldのような動きが可能になります。まだ構文だけですが、今後の実装に期待しています。
次に「 async/await(非同期プログラミング用の構文) 」ですね。所有権と非同期処理の相性が良くない部分もあって、いろいろな案が出ては議論されています。既に実務で使っている人は多いですが、まだまだ改善の余地がある状況です。
非同期コードは現在、書きたいコードを書けるけれど不便、というような状態で、最近になって便利にするような機能がどんどん追加されています。これが最終的に、どういうふうに着地するのかは気になるところです。
最後に「 Rust for Linux 」です。LinuxのカーネルにRustのコードを入れようという動きがあって、これも盛り上がっていますね。最近ちょっとした揉め事がありました(※)が、Rustを入れたい人の気持ちも入れたくない人の気持ちも、どっちもわかるところはあるので、この先どうなっていくのかなとは思ってます。
LinuxにRustを入れたいという動きはなかなか活発で、そのために必要なRustの言語仕様やライブラリもどんどん進化しています。機能としては、例えば組み込みで使いたいとか、そういった他の人にも恩恵があるようなものです。
組み込み開発者はこれまで機能開発自体にあまり影響力を持てなかったのですが、Rust for Linuxの人たちが主導権を持って進めてくれているおかげで、組み込み側にも恩恵がありそうなのは素晴らしい流れだと思っています。
※編注: LinuxカーネルにRustを導入する動きは、反対するエンジニアとの間で論争になっており、大きな話題となった。
参考記事:様々な軋轢を抱えつつもLinuxカーネルへのRust導入は進む — Rust製のドライバが今後メインラインカーネルに統合される見込み
Rustエキスパートからのメッセージ
――では最後に、これからRustを学ぼうと思っている人に向けて、一言いただけますか?
κeen: Rustには他の言語にないユニークな機能が結構あります。例えばトレイトなど、マイナーな言語にはあるがメジャーな言語にはあまりなかったような機能が多く、最初はとっつきにくいかもしれません。
でも、とっつきにくいということは、裏を返せば学びがいがあるということ。 是非新鮮な気持ちで取り組んでみていただければ嬉しいです。
――貴重なお話をいただき、ありがとうございました。
Rustの最先端情報を知りたい方は以下のTechFeedチャンネルをフォローしよう!