BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Chefクックブックのテスト用定型コードを生成する新gem

Chefクックブックのテスト用定型コードを生成する新gem

原文(投稿日:2014/02/25)へのリンク

RackspaceのPaul Czarkowski氏が開発したmeezは,インフラストラクチャ上でTDDを始めるために必要な定型コードをすべて含んだクックブックを生成するコマンドラインツールだ。スケルトンクックブックから出発したmeezは,事前入力されたメタデータからのスタートを可能とする,よりフレキシブルなツールへと進化を続けてきた。

meezという名前について作者はmise en place,これから調理する料理に使うすべての材料を,小分けして並べておく行為を指してキッチンで使われるという,フランス語表現のスラングだと説明している。目的を説明するために料理のアナロジを用いている点は,Chefに関連する他のツールと同じだ。meezの作成するクックブックには,コードを品質評価する共通ツールが多数使われていて,インフラストラクチャコードのテスト実施における問題解決を支援してくれる。meezを使わなければ,これらのツールはユーザが個々に組み込まなければならない。多くのケースでは実際にテストコードを書くより前に,ディレクトリ構造など決まり切った手作業を行なう必要に迫られることになるし,ドキュメントやサンプルコードを求めてWebを探し回るという,退屈な行為にもなりかねない。このようなツーリングに簡単にアクセスできるようになっていれば,よりよいコードを書くためのベストプラクティスは大いに捗るはずだ。さらに問題が発生した場合には,確認すべき障害要因がひとつ減ることにもなる。しかも最終的に生成される構造は,既知の成功パターンに従ったものになるのだ。

meezが生成するクックブックでは,次のようなツールが使用される。

  • Berkshelf クックブックの依存性を管理する
  • RuboCop コードスタイルをチェックする
  • Foodcritic クックブックのコードの構文チェック(lint)を行う
  • ChefSpec ユニットテストを実行する
  • Serverspec 受入テストに使用する
  • Test Kitchen 複数プラットフォームにわたるテストを実行する
  • Strainer 分離されたすべてのテストを単一コマンドで実行可能にする

唯一の必須パラメータはクックブックの名前だが,オプションとしてクックブックライセンスと作成者の名前,Eメールアドレスが指定できる。さらにメタデータファイルなどのテキスト置換など,クックブック生成プロセスに関する便利な追加機能も実行してくれる。

既存のクックブック上でmeezを実行して,テストを追加するような使い方も可能だ。この方法で競合が発生した場合には,それをどのように処理するか,ツールが逐一確認する。例えばapache2用の公式クックブックに対して実行すると,既存のBerksfileを置換する前段階で,次のように実行が停止される。

* Initializing Cookbook
** Creating cookbook apache2
** Creating README for cookbook: apache2
** Creating CHANGELOG for cookbook: apache2
** Creating metadata for cookbook: apache2
  Rewriting metadata.rb
  Rewriting recipes/default.rb
* Initializing Berkshelf
  conflict apache2/Berksfile
Overwrite /home/user/chef-repo/cookbooks/apache2/Berksfile? (enter "h" for help) [Ynaqdh]

同じようなことが,クックブック内で競合したファイルすべてに対して発生する。

先月のfreenodeの#openstack-chefチャネルでmeezの開発者は,テンプレートのカスタマイズは当面できない,と発言していた。他のツールと統合する,クックブックの高レベルな記述を提供する特別なファイルをテンプレートとしてmetadata.rbファイルに使用する,などといった個別の要求については,今後の機能追加を待つことになる。この状況はBerkshelfやknifeなど,より一般的なツールを使用してクックブックを作成する場合と違わない。開発者はRakeタスクの追加や,Travis CIとの統合などのプランについても言及していた。

James Wickett氏は,InfoSecとDevOpsという,いずれもアジャイルかつセキュアなソフトウェア提供を支持する2つのコミュニティの統合を推奨するRugged DevOpsの提唱者である。氏はgemで,次のような自身の経験について述べている

クックブック生成を指示さえすれば,meezがさまざまなフレームワークをすべてセットアップしてくれます。後はレシピを記述して,クックブックを実行するだけです。テストツールやフレームワークのセットアップ方法をすべて覚える必要はもうありません。最高ですね!

meezの使用方法に関するおもな情報源は,GitHubにあるgemのREADMEファイルだ。

この記事に星をつける

おすすめ度
スタイル

BT