2回シリーズの2つめの記事になります。3ライブラリと静的リンクさせます。SQLiteはCで書かれた軽量コンパクトなリレーショナルデータベース管理システム(RDBMS)で、主に小規模システムやデスクトップアプリのデータストアとして利用されています。SQLiteはそれ単独でデータベースサーバとして実行することもできますが、今回はライブラリとしてRustアプリ内に埋め込んで使います。適当なディレクトリに移動して、パッケージ(binクレート)を作成します。使ってもかまいませんが、今回はシンプルなrusqliteを使います。Cargo.tomlのdependenciesセクションにrusqliteを追加します。}main関数を作成します。ほとんど意味がありませんが、SQLiteのテーブルに1から10までの整数を格納して、SQLのSUM関数でその合計を得ます。Ok(())}rust-musl-builderで簡単ビルドhello-sqliteをmuslターゲット向けにビルドしましょう。前回説明したようにSQLiteのような外部ライブラリを使うときは、それなりの準備が必要です。外部ライブラリはglibcと動的リンクさせる代わりに、muslと静的リンクさせる必要があるからです。いえ今回は自分で準備する必要はありません。使われるライブラリとRustコンパイラ/gccをセットにしたDockerイメージがいくつかありますので、それらを使うのが簡単です。ekidd/rust-musl-builder(Rustマッスルビルダー)を使います。以下のツールとライブラリが含まれています。PostgreSQLのクライアントライブラリ。png画像などで使われている圧縮アルゴリズムのライブラリ。OpenSSLとPostgreSQLのバージョンがいくつかの組み合わせから選べるのが特徴でしょうか。golddranksさんはSlackの日本語Rustコミュニティ(登録URL)などにもいらっしゃいますので、日本語で質問できそうなところもいいかもしれませんね。ekidd/rust-musl-builderでビルドするには、Cargo.tomlがあるディレクトリに移動して、ターミナルから以下のコマンドを実行します。hello-sqlite.d極小のDockerイメージを作成hello-sqliteバイナリの入ったDockerイメージを作成しましょう。buildコマンドを実行する際に不要なファイルが処理されないようにします。.dockerignoreDockerfileを書きましょう。Dockerのマルチステージビルドを使います。最初のステージではrust-musl-builderでバイナリを生成し、次のステージはscratchという空のDockerイメージにバイナリをコピーします。["/hello-sqlite"]実行用イメージのベースイメージにはscratchを使いました。これは中身が空っぽのイメージです。alpineをベースにしてもいいのですが、今回作成したプログラムはシェルなどのLinuxコマンドなどが不要なのでLinuxカーネルさえあれば動作します。scratchで十分です。用途によってはalpineなど他のイメージの方が便利なこともあります。OpenSSLに依存している場合はルート認証局(ルートCA)のファイルが必要です。いうときはベースイメージをalpineにして、パッケージ管理システムのapkでルートCAパッケージを追加するのが楽でしょう。パッケージマネージャ(apk)が必要なときDockerfileを元にDockerイメージを作成します。イメージ名はhello-sqliteにしました。.イメージが作成できたら、Dockerコンテナを実行しましょう。1から10までの数字の合計が表示されたイメージのサイズは約1.6MBと、とても小さくなりました。64.2MBrust-musl-builderにないライブラリを使うには?rust-musl-builderにはOpenSSLやlibpqなどWebアプリケーションに必要そうなライブラリがすでに入っています。アプリケーションによっては、これ以外の外部ライブラリが必要になることも少なくないでしょう。いうときはrust-musl-builderをベースにして、必要なライブラリを追加したイメージを作るのがお勧めです。具体的なやり方については、rust-musl-builderリポジトリのadding-a-libraryの例(Dockerfile)を見てください。(tatsuya6502)Erlang/OTPやRustで分散DBを開発してます。最近、Rustの本を書きました。(tatsuya6502)。