本投稿は goss advent calender 2019参加記事その1です。
gossとは
gossとは、公式サイトにQuick and Easy server validationとあるように
サーバの検証(テスト)をすばやく簡単に行うためのツールです。
https://github.com/aelsabbahy/goss
ツールのセットアップ方法や使い方などの方法論へ入る前に
なぜこのgossというツールを使うのか、その考え方を書いておきたいと思います。
サーバのレイヤでもテストは必要
いわゆるサーバエンジニアやインフラ系、基盤系と呼ばれる区分で筆者も仕事をしていますが
アプリケーション開発担当に比べ、テストに対する考え方が薄いと感じることがあります。
何らか構築をしたり変更を行った場合にもちろんテストを実施するのですが、その方法は手作業であることが多いです。
(あくまで筆者の主観です。もちろん何らか自動化されていらっしゃるチームもあるかと思います)
またインフラテスト仕様として纏めたりもしますが、一度実施したテストを再度行うことはあまりなく、変更された箇所を確認するものに留まり、リグレッションテストを行うケースは稀です。
テスト項目を再構成させるのは手間
運用に入ると何らかの形で正常性確認や監視を行い、インフラテスト仕様として纏めたものから重要度の高い物を抜粋して実施や設定を行うことが多いです。
ここで「間引く」ことを改めて考えるより、インフラテスト仕様をそのままツールで再実行できればどこに異常が発生したのかを特定しやすくなるため、gossを使ってテスト項目を作りテストを何度でも実行(それも短時間で)する意義があります。
またさらに発展した使い方として、作成したテスト項目をある程度の単位で分けておくことで、別のシステムで再度利用することも可能になったり、
スケジュール実行や監視トリガーによるイベント実行を行ったりもできます。
類似ツールとの違い
ここまではgoss以前よりあるserverspecと同様になります。
https://serverspec.org/
テストに対する考え方はここまでserverspecと同様とですが、敢えてgossを選ぶ唯一の大きな理由はgossにはサブコマンドとしてadd/autoaddがあり、gossを動かしているサーバの状態からテスト項目を生成することが可能になっています。
一から全てテスト項目を記載しなければならないserverspecと比較して、テスト項目作成は大幅に楽です。
半面欠点としてserverspecと異なりテストできるOSがLinuxに限定されます。(2019/12月現在)
またgoss自身にはserverspecのようにリモートのサーバをテストすることはできません。
これはsshであったりansibleのような別のツールを組み合わせて対応する必要があります。
さいごに
筆者としてはこのツールはもっと利用されて欲しいと思いますし、そのためにはもっと情報が広がって欲しいと思っています。
そしてよりこのgossというツールが開発され、良いツールになればと考えています。
色々な使い方やもっとこうした方が良くなるという情報が集まりgoss開発者の方々へフィードバックできれば良いなあと考えています。