Rustのx86_64-unknown-linux-muslターゲットを使って、libc(標準Cライブラリ)やSQLiteなどの外部ライブラリに静的リンクしたバイナリを作成する方法を紹介します。Linux環境で実行できます1。UbuntuやCentOSなどの一般的なLinuxディストリビューションを使っている場合でも、実行環境にSQLiteやOpenSSLなどを別途インストールしなくてすみますので、バイナリの配布が楽になります。これらを極小のDockerイメージに入れることで、Webアプリケーションなどではデプロイが容易になるかもしれません。以下の内容を2回に分けて説明します。3と静的リンクしたバイナリを作成し、Dockerイメージに収めるなお、これは今年5月に出版された『実践Rust入門』の補足記事になります。2-5-4項でクロスコンパイルを応用した極小のDockerイメージを紹介しましたが、具体的な作成方法については分量の問題から書籍内で説明できませんでした。85.8MBhello-sqliteはSQLiteサーバを組み込んだRustサンプルプログラムを実行するためのコンテナです。x86_64-unknown-linux-muslターゲット向けにビルドしたバイナリを、scratchという空のDockerイメージに入れました。このバイナリにはSQLiteはもちろん、全てのRustバイナリが依存しているlibcなども埋め込まれています。Linuxのイメージ(4.41MB)よりも小さくなっています。誌面の都合から具体的な作成手順は省略します。筆者らが管理するWebサイトにて他のターゲットと共に紹介していますので、興味があればそちらをご覧になってください。実は原稿の基本的な部分は1年前に書いてあったのですが...。公開が遅れてすみません。muslターゲットとはRustには*-linux-muslというターゲットがあります。2だけでも以下のものが用意されています。3にはPowerPC/PowerPC64、MIPS64、Hexagon向けのものがあります。muslとはなんでしょうか。muslはLinux向けの標準Cライブラリ実装のひとつで、静的リンクに最適化されています。