前回の
CIツールの活用──テストの自動実行による品質維持
CPAN Testersを使うと、
CIツールとは
CPAN Testersは便利ですが、
- テスト結果がすぐにわからない
- CPANにリリースしないとテストが実行されない
CPAN Testersのテストは有志によって行われているため、
この問題はCIツールで解決できます。CIは継続的に行うソフトウェアの品質向上、
JenkinsとSaaS型CI
CIツールと言うとJenkinsを思い浮かべる人が多いでしょう。JenkinsはJavaで書かれたCIツールで、
そんなときにお勧めなのは、
Travis CIによるテストの自動実行
本項では、
Travis CIとは
Travis CIは公式にPerlに対応しており、
Travis CIのテストはコンテナベースの仮想環境で動作します。そのため、
Travis CIでテストの実行
Travis CIを使うと、
Travis CIを使ってテストを実行するには、
- ❶ Travis CIへGitHubアカウントでログインし、
連携する - ❷ Travis CIの管理画面からテスト対象のリポジトリを指定する
- ❸ 対象のリポジトリの最上位のディレクトリに設定ファイル.travis.
ymlをコミットする
❸の.travis.
には、
language: perl
perl:
- "5.26"
script:
- prove -lvr t
この設定では、prove
コマンドによるテストprove -lvr t
を行います。
これで、git push
を行うと自動でprove-lvr t
が実行され、
![図4 Travis CIでのテスト結果 図4 Travis CIでのテスト結果](/assets/images/dev/serial/01/perl-hackers-hub/0049/thumb/TH800_004.png)
複数のPerlバージョンでのテストの実行
Perlのモジュールを開発している場合、
Travis CIを使うと、.travis.
に記述しておくだけで、.travis.
を次のように書き換えてください
language: perl
perl:
- "5.12"
- "5.14"
- "5.16"
- "5.18"
- "5.20"
- "5.22"
- "5.24"
- "5.26"
script:
- prove -lvr t
この.travis.
でテストを実行すると、
![図5 Travis CIでの複数Perlバージョンによるテスト 図5 Travis CIでの複数Perlバージョンによるテスト](/assets/images/dev/serial/01/perl-hackers-hub/0049/thumb/TH800_005.png)
たとえば、s///
を使ったコードをコミットしてみます。そうすると、
![図6 Travis CIで特定バージョンでテストが失敗した挙動 図6 Travis CIで特定バージョンでテストが失敗した挙動](/assets/images/dev/serial/01/perl-hackers-hub/0049/thumb/TH800_006.png)
なお、
これで、
テスト実行結果のSlackへの通知
Travis CIでは、
ここでは、
- ❶ Slackの設定画面からTravis CIを追加する
- ❷ 取得したトークンを
travis
コマンドで暗号化する - ❸
.travis.
に、yml 暗号化したトークンを追加し、 コミットする
❷で暗号化するのは、travis
コマンドはRubyで記述されているため、gem
コマンドを使ってインストールします
$ gem install travis
$ travis --version
1.8.8
travis
コマンドが動作したら、domain
は連携したいSlackチームのドメインに、token
は取得したトークンに置き換えてください。
$ travis encrypt "domain:token"
Detected repository as pine/sample, is this correct? |yes| yes
Please add the following to your .travis.yml file:
secure: "XXX"
Pro Tip: You can add it automatically by running with --add.
❸の.travis.
には、XXX
は先ほどtravis
コマンドで暗号化したトークンです。
language: perl
perl:
- "5.26"
script:
- prove -lvr t
notifications:
travis:
- secure: "XXX"
これで、git push
を行うとテストが実行され、
![図7 Travis CIとSlackの連携 図7 Travis CIとSlackの連携](/assets/images/dev/serial/01/perl-hackers-hub/0049/thumb/TH800_007.png)
バッジの追加
Travis CIのテスト結果を一目でわかる画像で表す、
![図8 README.mdにTravis CIのバッジを貼った状態 図8 README.mdにTravis CIのバッジを貼った状態](/assets/images/dev/serial/01/perl-hackers-hub/0049/thumb/TH800_008.png)
バッジの情報は、
CPANオーサリングツールであるMinillaを使って開発を行っている場合、minil.
に次の設定を追記します。
badges = ["travis"]
こうすることで、minil build
を実行したときに、README.
に自動的にバッジが貼られます。
AppVeyorによるWindowsテストの自動実行
本項では、
AppVeyorとは
Travis CIを使うとLinux上で複数のPerlバージョンに対してテストを行えますが、
AppVeyorはWindows環境でのテストをサポートした、
Windows向けPerlディストリビューション
Windows上でPerlを使うには、
ActivePerlはWindows向けにコンパイルされたPerlに拡張を加えたものです。独自のパッケージマネージャPPM
それに対してStrawberry Perlは、
今回はStrawberry Perlを使ってテストを実行する方法を解説します。
AppVeyorでテストの実行
Travis CIでテストを行ったときと同じ要領で、
AppVeyorを使ってテストを実行するには、
- ❶ AppVeyorへGitHubアカウントでログインし、
連携する - ❷ AppVeyorの管理画面からテスト対象のリポジトリを指定する
- ❸ 対象のリポジトリのルートに設定ファイル
appveyor.
をコミットするyml
❸のappveyor.
には、
init:
- git config --global core.autocrlf input
install:
- choco install strawberryperl -version 5.26.1.1 …①
- SET PATH=C:\strawberry\c\bin;C:\strawberry\perl\site\b
in;C:\strawberry\perl\bin;%PATH% …②
- cpanm --installdeps --notest --quiet --with-configure
--with-develop .
build: off
test_script:
- prove -lvr t
shallow_clone: true
appveyor.
で重要なのはinstall
ステップです。①で、cpanm
やprove
がフルパスを書かずに実行できます。
これで、git push
を行うと自動でprove -lvrt
が実行され、
![図9 AppVeyorでテストが実行される様子 図9 AppVeyorでテストが実行される様子](/assets/images/dev/serial/01/perl-hackers-hub/0049/thumb/TH800_009.png)
<続きの
本誌最新号をチェック!
WEB+DB PRESS Vol.130
2022年8月24日発売
B5判/
定価1,628円
ISBN978-4-297-13000-8
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現! - 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう - 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、 NFT