Perl Hackers Hub

第49回 CPANモジュールの品質を支えるCI技術(2)

この記事を読むのに必要な時間:およそ 3.5 分

前回の(1)こちらから。

CIツールの活用─⁠─テストの自動実行による品質維持

CPAN Testersを使うと,コミュニティによってさまざまな環境でテストが行われます。しかし,これだけでは高品質なPerlモジュールをリリースするには不十分です。高品質なPerlモジュールをリリースするには,CIContinuous Integration継続的インテグレーション)ツールを使うのがお勧めです。

CIツールとは

CPAN Testersは便利ですが,次の欠点があります。

  • テスト結果がすぐにわからない
  • CPANにリリースしないとテストが実行されない

CPAN Testersのテストは有志によって行われているため,いつテストが実行されるかは保証されません。また,テストが実行されるのは,リリースが行われたあとです。これでは,コードの修正からテストまで時間がかかり,効率的な開発が行えません。

この問題はCIツールで解決できます。CIは継続的に行うソフトウェアの品質向上,工数削減を目的とした習慣のことです。狭義ではテストやビルドを自動実行し,品質向上,工数削減を達成することを指します。本稿では狭義の意味でCIという言葉を用います。

JenkinsとSaaS型CI

CIツールと言うとJenkinsを思い浮かべる人が多いでしょう。JenkinsはJavaで書かれたCIツールで,OSSで開発されています。Jenkinsをクラウドでホスティングしてもらえるサービスもありますが,社内やプロジェクトごとにサーバを立てて動作させるのが一般的です。自前でサーバを立てる必要があるため,小規模なOSS開発での利用には向いていません。

そんなときにお勧めなのは,SaaSSoftware as a Serviceとして提供されているCIサービスです。本稿では,代表的なCIサービスであるTravis CIAppVeyorをPerlで使う方法を紹介します。どちらもOSS開発では無料で利用できます。

Travis CIによるテストの自動実行

本項では,Travis CIを使ったテストの方法を説明します。以降は,テスト対象のリポジトリはGitHubで管理されているものとして説明します。

Travis CIとは

Travis CIは公式にPerlに対応しており,複数バージョンのPerlでのテストが容易です。List::MoreUtilsDBIなどの著名なPerlモジュールを始めとして,幅広く利用されています。

Travis CIのテストはコンテナベースの仮想環境で動作します。そのため,毎回クリーンな状態からテストできます。現在,Perlのテストの実行にはUbuntu 14.04(Trusty)ベースのイメージが利用されています。

Travis CIでテストの実行

Travis CIを使うと,リポジトリの更新のタイミングでTravis CI上で任意のコマンドを実行し,テストできます。また,GitHubのPull RequestやSlackなどのチャットツールへ,結果を自動でフィードバックさせることができます。

Travis CIを使ってテストを実行するには,次のステップが必要です。

  • ❶ Travis CIへGitHubアカウントでログインし,連携する
  • ❷ Travis CIの管理画面からテスト対象のリポジトリを指定する
  • ❸ 対象のリポジトリの最上位のディレクトリに設定ファイル.travis.ymlをコミットする

❸の.travis.ymlには,次のような記述を行います。

language: perl
perl:
  - "5.26"

script:
  - prove -lvr t

この設定では,Perl 5.26を用いて,proveコマンドによるテストprove -lvr tを行います。

これで,リポジトリにgit pushを行うと自動でprove-lvr tが実行され,Travis CI上に結果が表示されます図4)⁠テスト対象のブランチにGitHubのPull Requestが紐付いている場合,Pull Request側にテスト結果が表示されます。

図4 Travis CIでのテスト結果

図4 Travis CIでのテスト結果

複数のPerlバージョンでのテストの実行

Perlのモジュールを開発している場合,ある特定のバージョンのPerlのみでテストするだけでは不十分です。そのモジュールがサポートしているPerlのバージョンすべてで,テストを行う必要があります。

Travis CIを使うと,.travis.ymlに記述しておくだけで,任意のバージョンのPerlで自動テストを行えます。たとえばPerl 5.12~5.26でテストを実行したい場合,先ほどの.travis.ymlを次のように書き換えてください注1)⁠

language: perl
perl:
  - "5.12"
  - "5.14"
  - "5.16"
  - "5.18"
  - "5.20"
  - "5.22"
  - "5.24"
  - "5.26"

script:
  - prove -lvr t

この.travis.ymlでテストを実行すると,Travis CI上では図5のように表示されます。

図5 Travis CIでの複数Perlバージョンによるテスト

図5 Travis CIでの複数Perlバージョンによるテスト

たとえば,ここでPerl 5.14で入った正規表現の非破壊修飾子s///rを使ったコードをコミットしてみます。そうすると,図6のように特定のバージョン以下でテストが失敗しました。

図6 Travis CIで特定バージョンでテストが失敗した挙動

図6 Travis CIで特定バージョンでテストが失敗した挙動

なお,現在公式にサポートされているPerlのバージョンは5.24および5.26ですので,それに従う場合はこの2つのバージョンでテストするだけで十分です。

これで,手間をかけずにサポートしているPerlバージョンすべてで動作確認を行えます。

注1)
Perl 5の安定版は,マイナーバージョンが偶数です。

著者プロフィール

水音ぴね(みずねぴね)

新卒で入社した会社では,Perlでソーシャルゲームの開発に従事。

現在は転職し,アプリとサーバーサイドをScalaで書いている。JavaScriptが好き。

GitHub:pine

コメント

コメントの記入