全2207文字

 Rustは米Mozilla(モジラ)が支援するオープンソースのプログラミング言語だ。システムのプログラムを記述するために開発された言語で、C/C++を代替しようとしている。強い静的型付けを採用するコンパイル言語であり、型やメモリーの安全性、並行性などを重視する。文法はC/C++に似ている。中カッコによるブロックの指定、ifやforによる制御、関数の定義方法などはC/C++に近い。

 Rustが登場したのは2006年。改良が続けられて、現在では世界中のエンジニアが最も注目する言語の1つとなった。ここではRustでシステムを開発する2社の事例を基に、メリットや使いどころを見ていこう。

メモリー管理の厳格さを考慮

 検索ソリューションやダイナミックプライシングソリューションなどを手掛けるフォルシアはデータを高速検索するインメモリーデータベースの開発にRustを活用している。Rustを使い始めたのは2018年春からだ。同社では当時、インメモリーデータベースを開発するプログラミング言語を選定していた。インメモリーデータベースはデータをディスクではなくメモリーから呼び出して高速な処理を実現する技術である。

Rustの活用イメージ
Rustの活用イメージ
[画像のクリックで拡大表示]

 それまでの検索用データベースはPostgreSQLをC言語で拡張していた。だがさらなる高速化を求めて改良することにした。インメモリーデータベースの開発に携わるフォルシアの松本健太郎技術研究所エンジニアは「当初、検討したのはJavaだった」と話す。フォルシアにはJavaを使ったシステムもあり、Javaの知識が豊富なエンジニアも多い。

 しかし検討を進めるにつれて「Javaのガベージコレクション(GC)が課題に挙がった」(松本エンジニア)という。GCは不要になったメモリーを自動的に解放する機能だ。メモリー管理が不要になる半面、メモリーの確保や解放を制御できないというデメリットもある。余計なメモリーを確保してしまうこともある。

 インメモリーデータベースはデータ量の大きい検索データを扱うため、プログラムの使用メモリーを最小限に抑える必要があった。こうした理由からGCの機能を備えるJavaやGoが見送りになった。そしてC++とRustを検討した結果、環境に依存しにくく、パッケージ管理の仕組みが整っているRustを採用することになった。

 フォルシアの原旅人技術研究所部長はRustの使うメリットの1つにメモリー管理の厳格さを挙げる。C言語で課題となる「バッファーオーバーランが起きづらい」(原部長)という。C言語では確保したメモリーをいつ解放するかを決めるのが難しい。一度解放したメモリーを再度解放してしまったり、いつまでもメモリーを確保し続けてしまったりするとプログラムは停止してしまう。

 RustではGCの代わりに所有権に基づいてメモリーを管理する。所有権とは変数に格納したデータを読み書きする権限のことである。Rustは変数が定義されたときから所有権が付与され、変数が定義されたブロックが終了するまで保持する。所有権がない変数からはデータにアクセスできず、コンパイルエラーになる。これにより、メモリー確保と解放のタイミングがプログラムを実行する前のコンパイル時に決まる。実行時にメモリー解放を判定するGCに比べて高速に動作する。

 また原部長は「コンパイル時のエラーメッセージが親切」とRustのメリットを説明する。プログラミングにおいてコンパイルエラーは避けては通れない。しかしエラーメッセージが分かりづらいとプログラムの修正に時間を要してしまう。Rustのエラーメッセージは「所有権が移ったことや修正例などを示してくれる」(同)という。

フォルシアの松本健太郎技術研究所エンジニア(左)と同じ技術研究所に所属する原旅人部長
フォルシアの松本健太郎技術研究所エンジニア(左)と同じ技術研究所に所属する原旅人部長
(出所:フォルシア)
[画像のクリックで拡大表示]