1. HOME
  2. ブログ
  3. IT技術
  4. テスト駆動で学ぶ Firestore セキュリティルール【CI 編】

テスト駆動で学ぶ Firestore セキュリティルール【CI 編】

CI 環境におけるセキュリティルールの自動テスト

これまで、「テスト駆動で学ぶ Firestore セキュリティルール」をテーマに、実例を交えてセキュリティルールの仕様や利用可能な関数について解説してきました。

せっかく作成したテストであれば、「GitHub Actions」や「CircleCI」などの CI 環境で自動テストに活用したいところです。

今回は、ここまでの記事とは少し雰囲気をかえて、CI 環境でのセキュリティルールの自動テストについて解説していきます。

これまでの記事については、以下の記事を参照してください。

データ検証編はこちら

「データ検証編」では、リクエストデータ、データベース上のデータの参照などについて解説

データ比較編はこちら

「データ比較編」では、データの比較や型チェックなどについて解説

カスタム関数編はこちら

「カスタム関数編」では、「比較編」で作成したルールをもとに、カスタム関数の使い方を解説

対象読者

本記事では、以下のいずれかの CI ツールを利用している、または利用予定の読者を想定しています。

  1. GitHub Actions
  2. CircleCI
  3. GitLab CI/CD

※ GitHub Actions については、GitHub アカウントをお持ちであれば、本記事で紹介する設定ファイルの追加だけで動作確認が可能です。

注意書き

本記事では、各 CI ツール( GitHub Actions、CircleCI、GitLab CI/CD )でのセキュリティルールのテストについて、解説していきます。

各 CI ツールの基本的な使用方法や構築方法などの解説はいたしませんので、予めご了承ください。

また、CI ツールごとの解説は独立した内容となっています。

利用しない、または利用予定のない CI ツールの解説は飛ばして読み進めても問題ありません。

簡単な流れ

本記事では、以下のような流れで、「CI 環境でのセキュリティルールのテスト」について解説していきます。

  1. CI 環境で使用するテスト環境とテストコード、セキュリティルールを用意
  2. ローカル環境でのテストの流れのおさらいと、テスト成功チェック
  3. CI 環境でのテストの設定について解説
  4. 人気のある3つの CI ツールにおける、セキュリティルールのテストの設定例を紹介
  5. まとめ

前準備

まずは、CI 環境で使用する「テスト環境」と「テストコード」、「テスト対象のセキュリティルール」を用意します。

以下のリポジトリに、本記事のコードをまとめてあります。

【rightcode/firestore-security-rules-test_ci-setting】
https://github.com/rightcode/firestore-security-rules-test_ci-setting

セットアップ

以下のコマンドを実行して、テスト環境をセットアップしてください。

「masterブランチ」に完成ソースコードを設置してあります。

本記事中で解説するソースコードを確認したい場合は、以下のコマンドで 「masterブランチ」をチェックアウトしてください。

※ コードの調整などにより、本記事の内容とは記述が若干異なる場合があります。

使用するテストとセキュリティルールの準備

テストコードとテスト対象となるルールは、先述のリポジトリに含まれているサンプルテストサンプルルールを使用します。

サンプルテスト

サンプルテストの中身は、以下の通りです。

サンプルテストは、全てのアクセスの拒否を確認する内容のテストになっています。

サンプルルール

サンプルルールの中身は、以下の通りです。

サンプルルールは、サンプルテストの要件を満たす、全てのアクセスを拒否するセキュリティルールとなっています。

ローカル環境でテストチェック

おおよそ、ローカル環境でのテスト実行の流れを CI 環境でのテストの設定にも適用します。

ローカル環境でテストが通ることをチェックしつつ、簡単にテスト実行の流れを確認しておきます。

npm パッケージをインストール

以下のコマンドを実行して、必要となる npm パッケージをインストールしてください。

Firebase CLI ツールをインストール

Firebase CLI ツールをインストールしていない場合は、以下のコマンドを実行してインストールしてください。

Firestore エミュレータを起動

以下のコマンドを実行して、Firestore エミュレータを起動してください。

テスト実行

以下のコマンドで、テストを実行してください。

以下のように結果が表示されれば、テストは成功です!

ローカル環境でのテストの成功が確認できたので、続いて、CI 環境でのテストの設定について解説していきます。

CI 環境でのテスト設定方針

簡単な流れ

各CIツールでのテストは、おおよそ、以下の流れでコマンドを実行していきます。

  1. npm パッケージのインストール
  2. firebase-tools のインストール
  3. Firestore エミュレータをインストール
  4. エミュレータをバックグラウンド起動
  5. エミュレータの起動待機
  6. テスト実行

ローカル環境でのテスト環境のセットアップ、テスト実行の流れとおおよそ同じ内容ですが、以下のような違いもあります。

  1. CI 環境でのテストに合わせ、firebase-tools をローカルインストールする
  2. CI 用に調整したテストスクリプトを使用する
  3. Firestore エミュレータの起動をバックグラウンドで行う必要がある

注意事項

特に留意しておきたいのが、エミュレータの起動です。

CI 環境でのテストの場合、Firestore エミュレータをバックグラウンドで起動しないと、処理がそこで停滞してしまうため、肝心のテストが実行されません。

また、エミュレータが起動するまでに少し時間がかかるため、テストの実行前にエミュレータの起動待機時間の設定が必要になります。

次の項目では、以上の点に気を付けて、本題である「CI ツール別のテスト設定例」を紹介していきたいと思います。

CI ツール別のテスト設定例

CI ツールごとの設定の解説は、独立した内容となっています。

利用しない CI ツールの解説は、飛ばして読み進めても問題ありません。

また、テストに失敗する場合は、後述の「テストに失敗する場合は」の項目をチェックしてください。

GitHub Actions の場合

「GitHub Actions」でセキュリティルールをテストする場合は、 .github/workflows ディレクトリを作成して、  test.yml ファイルを追加してください。

.github/workflows/test.yml を作成したら、以下のように記述してください。

上記の設定のあと、GitHub にソースコードをプッシュすると、GitHub Actions で test ワークフローがスタートし、テストが実行されます。

結果

ワークフローの実行結果は、以下のようになります。

テスト結果は、以下の通りです。

以上で、GitHub Actions でのセキュリティルールのテストの設定は完了です。

CircleCI の場合

「CircleCI」でセキュリティルールをテストする場合は、 .circleci ディレクトリを作成して、  config.yml ファイルを追加してください。

.circleci/config.yml を追加したら、以下のように記述してください。

config.yml ファイルを設定したら、CircleCI サイトでテスト対象の GitHub リポジトリをプロジェクトに追加してください。

上記の設定のあと、GitHub にソースコードをプッシュすると、CircleCI の test ワークフローがスタートし、テストが実行されます。

結果

ワークフローの実行結果は、以下のようになります。

テスト結果は、以下の通りです!

以上で、CircleCI でのセキュリティルールのテスト設定は完了です!

GitLab CI/CD の場合

「GitLab CI/CD」でセキュリティルールをテストする場合は、クローンしたリポジトリのルートに .gitlab-ci.yml ファイルを追加してください。

.gitlab-ci.yml を追加したら、以下のように記述してください。

上記の設定のあと、GitLab にソースコードをプッシュすると、GitLab CI/CD でパイプラインがスタートして、テストが実行されます。

結果

パイプラインの実行結果は、以下のようになります。

テスト結果は、以下の通りです。

以上で、GitLab CI/CD でのセキュリティルールのテスト設定は完了です。

テストに失敗する場合は

一部、または全てのテストに失敗する場合は、エミュレータが待機時間内で起動していない可能性があります。

待機時間は長めに設定していますが、場合によっては、テスト開始までにエミュレータが起動しない事があります。

テストが失敗する場合は、エミュレータの起動待機時間を調整してみてください。

逆に、起動待機時間が原因のテスト失敗がないのであれば、3~5秒程度に調整しても問題ありません。

まとめ

今回は、CI 環境でのセキュリティルールのテストについて解説してみました。

今回紹介した CI ツールの中でも、GitHub Actions は、GitHub アカウントさえあれば、記事中で紹介したような設定ファイルを追加するだけで簡単にはじめることができます。

まだ CI 環境を導入していない場合は、まずは GitHub Actions からはじめてみるのがオススメです!

では、最後に、今回の内容を簡単にまとめてみたいと思います。

  1. どの CI 環境でも、やることはローカル環境とほぼ同じ
  2. CI 環境での Firestore エミュレータの起動はバックグラウンドで
  3. Firestore エミュレータの起動後に待機時間が必要
  4. 一度設定してしまえば、プッシュのたびに自動リグレッションテスト!
  5. まだ CI 環境を導入していないなら、まずは GitHub Actions がおすすめ!

(株)ライトコードは、WEB・アプリ・ゲーム開発に強い、「好きを仕事にするエンジニア集団」です。
システム開発依頼・お見積もりはこちらまでお願いします。
また、技術が大好きなエンジニアを積極採用中です!詳しくはこちらをご覧ください。

※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

こちらの記事もオススメ!

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事