Serverspecの効果的活用に向けたTips
Guardを使ったコード変更検知とテスト自動実行
ここまで、テストコードの記述をよりスムーズに行うためのTipsを紹介してきました。最後に「テストコードを書いてテストを実行する」という作業を、より手間をかけずに行うために役立つGuardというツールとの連携方法を紹介します。Guardは、ファイルが更新されたかどうかを検知してコマンドを実行することができるツールです。詳しくはこちらを参照して下さい。(Guardでファイル変更を監視して作業を自動化する)Guardを使うことで、「テスト記述」→「テスト実行」の繰り返し作業を、よりスムーズに行えます。
Guardのインストール
Guardはgemパッケージとして公開されているため、以下のコマンドでインストールが可能です。
$ sudo gem install guard guard-shell
今回は変更を検知した後、Serverspecのテスト実行用のshellコマンドを実行するため、guard-shellもインストールします。
Guardfileの作成
Guardは、Guardfileに記述された定義情報をもとに稼働します。ひな型となるファイルは、以下のコマンドで作成できます。
$ guard init
この時に作成されたGuardfileを修正して、spec/以下のディレクトリにあるファイルの変更を検知して、変更のあったファイルのテスト内容を自動的に実行するように定義します。今回の例では、GuardfileはRakefileと同じディレクトリに配置したと想定しています。
guard :shell do watch(/spec\/.*\/.*_spec\.rb/) { |m| `rspec #{m[0]}`} end
Guard実行
Guardを実行するにはGuardfileを配置したディレクトリ配下で以下のコマンドを実行します。この時、実行対象のホスト名を環境変数に設定してGuardを起動します。
$ env TARGET_HOST=server-01 guard 06:44:52 - INFO - Guard is using TerminalTitle to send notifications. 06:44:52 - INFO - Guard is now watching at '/home/ikeda/serverspec_3' [1] guard(main)>
このようにGuardを起動しておくことで、specファイルを更新するたびに自動的にテストコードが実行されます。
テスト実行自動化の一例として、GuardとServerspecの連携を紹介しました。もし「サーバ構築用コード(Chef等)の記述」→「構築処理実行」→「稼働状況テスト実行」という構築からテストまでの一連のフローすべてを自動化したい場合には、Test Kitchenといったツールも有用です。
まとめ
最終回となる今回は、Serverspecでより効果的にテストコードを管理するためのちょっとした工夫をご紹介しました。ServerspecはRubyで書かれており、Rubyのプログラムを工夫することで様々な対応が可能となります。Serverspecには、変数を扱える機能やバックグラウンドでのコマンド実行機能など便利なものが組み込まれています。RubyのコードとServerspecの組み込み機能を組み合わせることで、環境に合わせた効果的なテストコード管理が実現できるでしょう。
全3回に渡って、Serverspecによるサーバ稼働状況のテストについて紹介しました。第1回の冒頭でも述べましたが、ますます自動化が加速する中で、その処理が確実に実施されているかをテストすることは非常に重要なポイントとなっています。まずは、手軽に導入できる環境から始めてみてはいかがでしょうか。