fbpx

[和訳] テスト駆動 Cookbook 開発 #getchef

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本稿は Watch: Test Driven Cookbook Development (2016/03/03) の和訳です。

2月24日、私はテスト駆動 Cookbook 開発についてライブオンラインセミナーを行いました。ユニットと統合テストとはどういうものか、それらがどのように Cookbook 開発の領域に適用しているかについての説明を聴くには、次の録画を見てください。私はテストを中心にしたアプローチを使って Cookbook をビルドする方法をデモンストレーションしています。プレゼンテーションの終わりには、ユニットと統合テストをいつ適用したらよいか、どうすれば Chef DK ツールを効果的に使えるか、スキルを一層磨くためには次にどこに行けばよいかが分かります。この投稿の終わりに、プレゼンテーション中の質疑応答をいくつか記載しました。

連絡可能なメールアドレスは?

franklin@chef.io か training@chef.io (訳注:英語)

Chef Development Kit (Chef DK) は Webinar で紹介された内容を実現するために必要なツールとプラグインをすべて含んでいますか?

Chef DKは、みなさんと経験した作業を完成させるのに必要なツールのほとんどすべてを含んでいます。Test Kitchen は、VirtualBox に対しテストインスタンスの操作を要求するツールである vagrant とやりとりします。VirtualBox は、ゲスト拡張に対してサポートを提供するためにインストールされる拡張パックを必要とします。

BDD に関して。Cookbook の開発者は誰に対してコードを書くべきでしょうか? システム管理者はウェブサイトがうまく動作しているかには気にしているかもしれませんが、ソフトウェアがインストールされ、うまく運用されているかについては気にしていないでしょう。アプリケーション開発チームはアプリケーションのマッチングのテストを行いたいかもしれませんが、異なる Cookbook 間に限ってでしょう。

テストの重要な部分は、Cookbook が達成することに関して予測を立てることです。テストの最終目的はさまざまでしょう。このデモンストレーションで作成した Cookbook を、ウェブサーバーのサービスを開始しないよう変更する場合、あるべきる状況にマッチさせるために、我々はそのあるべき状態を変更します。パッケージがインストールされ、ファイル構造があり、サービスが利用可能な状態で、実行はしていないという状態でしょう。

開発者はこの Cookbook を採用してビルドし、そしておそらく、サービスを開始し、顧客に対する期待値を設定するでしょう。それはこのデモンストレーションで定義した予測となるでしょう。

私からのアドバイス: その Cookbook の目的とそれが顧客へどのようにサービスを提供できるかについて考えてみてください。その顧客は組織の中の誰かでしょう。

なぜ開発中の InSpec と一緒に Serverspec を使ったのでしょうか?

現在の Chef DK cookbook generator tools (0.11.2) はデフォルトで Serverspec を使用できるようにしています。私は InSpec のパフォーマンスと拡張された能力を大変評価していますが、InSpec は生成した Cookbook に対して数多くの変更をするよう要求します。InSpec がデフォルトになった時、それらが互いに非常によく似ていることにあなたは驚き、Serverspec に時間をかけただけ良い InSpec 開発者になれるでしょう。

ここで行われるテストのほとんどが Linux ベースの OS をサポートしています。Windows ベースのテストにおいてはどうでしょうか?

私が示した例はすべて CentOS Linux 上のものでした。現在のテスト駆動 Cookbook 開発の内容は Linux プラットフォームにフォーカスしています。しかし、多くのテストツールは Windows プラットフォームに対して機能するようになるでしょう。InSpec には、Serverspec を超える非常に素晴らしい機能が加わる予定です。しかし、Serverspec はいまだ、我々がこのオンラインセミナーで行ったことすべてを行うことができ (例: コマンドを実行する)、さらに ChefSpec はプラットフォーム依存しません。

Serverspec がサポートしているすべての異なる Resource Type は、Serverspec ドキュメントを見てください: http://serverspec.org/resource_types.html

Jenkins のように、Test Kitchen と ChefSpec を CI (継続的インテグレーション) 上で実行させる TDD を使用している顧客はいましたか? それにそれだけの価値があると思いますか?

価値があります! ローカルでテストを書き起こし、実行することは、その価値のほんの一部にすぎません。作成した予測を Chef Delivery や Jenkins のような CI サーバーを利用して確定したいと思いませんか。これにより、お持ちのパーソナルマシンやチームメイトでは発見できないすべての問題を発見するテストを実行するのに必要な公正なソースが手に入ります。これは“自分のマシンでは動く!”問題を減らすのに役立ち、チーム全体に、何かが機能しなくなった際に役立つ洞察力を与えます。

Cookbook をビルドする際、どこから始めたらよいですか? Test Kitchen の統合テストか、それとも ChefSpec のユニットテストですか?

どちらのツールや方法でも構いません。両方とも、それらが互いを補うように利用するべきです。始める場所は、解決しようとしている問題についてよく知っている場所です。

実行環境に関してよく知らない、あるいは配置するアプリケーションの領域に関してあまり知らない場合、テストに関しては outside-in のルートの方が好ましいと考えます。それは、統合テストにほかなりません。私にとっては、テストの成功が何を意味するかをより簡単に定められ、統合テストを定めることでその成功を明確にすることができるので、こちらの方が簡単です。

実装やアプリケーションの領域に関してより詳しい場合、私は inside-out のルートを選択し、より自信をもってユニットテストを実施できます。そうすることで、仕事が進むにつれ自分の仕事を評価しやすくなりますが、それはやりたいことが分かっているからです。

BDD について少し話すところから始めました。Chef をテストするのに、何か Cucumber のようなツールはあるのですか?

私はオンラインセミナー中にこの質問の答えを間違ってしまいました。Cucumber http://cukes.info/ とは、予測を自分の母国語で表現できるフレームワークです。Cucumber では母国語で表示され、それらを正規表現のボディーと比較し、書いた文章を呼び出せるようコードにマップします。Cucumber を使って書く場合、RSpec も使うことができます。ChefSpec や Serverspec を自身の Cucumber のステップ定義に簡単に追加できます。

私がオンラインセミナー中に言わなければいけなかったのは、私が、使用可能なステップ定義をビルドしたことのある実際のプロジェクトを何も知らないということです。そのようなプロジェクトはどこか他にあるかもしれません。それを見つけることをお勧めします。存在しない場合は作成することをお勧めします。

RSpecに関する良い本はありますか?

The Pragmatic Programmer 社が何年も前に RSpec に関する本を出版しました。今や出版されてから 6年になります。いまだに RSpec の価値やその役割を議論するのに有効な学術書ですが、RSpec に最近サポートされた最新の文法や機能に関してはアップデートがありません。

RSpec に関する最も正確なドキュメントは、ドキュメント化プロジェクトサイトで見ることができます: https://relishapp.com/rspec 。ナビゲートが難しいので、すぐに特定の回答を探し出そうとするのではなく、別に時間をとってそのあたりを探してみることをお勧めします。

ChefConf で、私は RSpec に関する詳細を掘り下げるためのトークを提案しました。Helpers のような言語や共通背景、共通する例やその言語の他の多くのニュアンスなど、進んでいるエリアを探求することを提案したのです。

新規CTA