連載
» 2022年05月26日 05時00分 公開

【サンプルコードあり】Rustで作るWebアプリケーション――データベース利用と自動テストの基本事項を押さえるRustで始めるWebアプリケーション(1)(1/2 ページ)

RustでWebアプリケーションを開発する際に基礎となる要素技術からRustの応用まで、Rustに関するあれこれを解説する本連載。第1回ではRustを使ったWebアプリケーション開発におけるデータベースと自動テストの位置付けとコード例を紹介する。

[藤田直己,paiza]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 paizaでWebエンジニアをやっています藤田と申します。今回の連載では、RustでWebアプリケーションを開発する上での基礎となり得る要素技術やRustの応用にフォーカスを当てて簡潔に紹介します。

 Rustを採用するモチベーションやRustの有益な言語機能について知りたい方は、前回の連載(全3回)にて端的に要約しているのでご参照ください。

 今回のプロジェクトもGitHubのサンプルリポジトリを用意していますので、解説コードを実行する際はご利用ください。第1回では、Webアプリケーションを構築する上で基礎となるデータベースの利用と自動テストについて基本的な事項を押さえつつ、Rustでのソースコード例を示します。

Webアプリケーションとデータベース

 Webアプリケーション(webサービス)を構築するに当たり、仕様、要件を達成できるアーキテクチャであればどのように設計してもよいわけですが、データを記録するコンポーネントとして(リレーショナル)データベースを採用することが多いです。

 システムをWebアプリケーションサーバとデータベースサーバに分離して、共有、記録すべき状態(ステート)の管理をデータベースサーバに委譲します。このことにより、Webアプリケーションサーバが状態に依存しない、ステートレスな処理のみを担当することになり、ステートレス処理のスケールアウトやアプリケーションのデプロイプロセスが簡略化されるとともにデータの管理が容易になります。

 この方式のデメリットとしては、データベースサーバが単一障害点になること、スケールアップが必要になること、通信遅延やクエリの処理遅延がボトルネックになり得ることなどが挙げられます。しかしながら、厳しい性能要求がない限りは第一選択になる構成だと考えられます。

アプリケーション開発と自動テスト

 Web開発に限定せず継続的に開発を進める必要があるアプリケーション開発全般において自動テストは有用です。特にアジャイルな開発プロセスを採用する場合、自動テストの整備はほぼ必須に近い位置付けとなりつつあります。

 改めて自動テストの主目的を説明すると「システムに期待する振る舞い(≒仕様)をテストコードとして事前に記述し、ソースコードの変更が行われたときなどにテストコードを実行することで、ソースコードの変更後にも期待する振る舞いが破壊されていないことを自動的に検証すること」だといえます。

 Ruby on Railsでの開発によく採用されているRSpecなどの分類を参考にすると、Web開発では以下のようなテストをよく行います。

  1. ロジックテスト(純粋なロジックの検証)
  2. ミドルウェアテスト(データベースなどのミドルウェアと連携し、レスポンスや副作用を検証する)
  3. エンドポイントテスト(HTTPエンドポイントにリクエストし、レスポンスや副作用を検証する)
  4. ブラウザテスト(ブラウザをプログラムで制御し、レスポンスや副作用を検証する)
  5. etc……(パフォーマンステストなど)

 Rustではテストは言語標準機能として存在しますが、2022年5月現在ではRSpecのようなデファクトスタンダードなテストフレームワークがあるわけではなく、複雑な自動テストの構成には自由度があります。自動テストの記述を簡単にするライブラリも存在するようですが、今回の記事ではテスト目的を達成する単純で拡張可能なテストコードを示します。

Rustの主要なデータベースクライアントライブラリ

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。