テストを科学する

Windows PowerShellの標準のウィンドウではウィンドウの最大化ができません。これはコンソールを複数使う場合に効率が悪いです。また、これは趣味となりますが、ウィンドウの透過ができると便利だったりします。MacやLinuxのターミナルでは両方できますね。

ウィンドウの最大化や透過をできるようにするためのソフトウェアはChocolateyからインストールできるConsole2を始め多数あるのですが、ここではテキストベースでカスタマイズが容易なchk-modをご紹介します。

下記のページよりダウンロードしてZIPファイルを展開します。

ckw-mod
http://ckw-mod.github.io/

フォルダ内にあるckw.cfgを下記のように編集します。

!
! ckw setting
!

Ckw*foreground: white
Ckw*background: #000000
Ckw*cursorColor: #c0c0c0
Ckw*cursorImeColor: red
Ckw*title: ckw[cmd]
Ckw*exec: powershell.exe
Ckw*chdir: C:\Users\shift
Ckw*scrollHide: no
Ckw*scrollRight: yes
Ckw*internalBorder: 1
Ckw*lineSpace: 0
Ckw*topmost: no
Ckw*transp: 235
Ckw*font: MeiryoKe_Console
Ckw*fontSize: 18
Ckw*geometry: 140x38+0+0
Ckw*saveLines: 10000

「Ckw*chdir: C:\Users\shift」は自分のフォルダにあわせます。

ckw.exeを起動します。

ウィンドウが透過されており、最大化できる状態でWindows PowerShellが起動します。これで、MacやLinuxのターミナルと遜色なくPowerShellで作業できますね。

なお、バージョンによるかも知れませんが、ckw経由でWindows PowerShellを起動した場合、先日ご紹介したAutoHotKeyと相性が悪く、AutoHotKeyのカスタマイズしたキーバインドが正しく動作しないことがありますので、その場合、どちらかをあきらめてください。

Windows PowerShellは強力なオブジェクト指向ベースのシェルで従来のコマンド・プロンプトに対して、タブ補完も非常に優れていますが、bashなど*sh系からの移行にとって困難なのが、キーバインドです。

左右移動はもちろん、行頭、行末まで削除など、キーボードの中心から指を離さずに操作できるようにできている*sh系に比べて、「←」、「Home」などを押さないと移動できず、さらにはPowerShell自身にはキーバインドの変更の仕組みがありません。

開発者やシステム管理者、テスト・エンジニアにとってキーボードの中心から指を移動させることは非常に効率が悪くストレスの溜ることです。

しかし、今回ご紹介するAutoHotkeyを使うと簡単に*sh系のキーバインドに変更することができます。

AutoHotkey

ダウンロードして、インストーラに従っていけば、簡単にインストールできます。

AutoHotKeyの設定ファイルである「AutoHotoKey.ahk」に以下のように記述します。

#IfWinActive, ahk_class ConsoleWindowClass
^a::SendInput {HOME}
^e::SendInput {END}
^u::SendInput {ESC}
^p::SendInput {Up}
^n::SendInput {Down}
^l::SendInput {ESC}cls{ENTER}
^k::SendInput {F4}
^f::SendInput {right}
^b::SendInput {left}
#IfWinActive

これで、快適Ctrl + *生活ができます。

これはWindows PowerShellのコンソールを使っているときのみ有効にするキーバインドですので、他のアプリケーションに影響を与えることはありません。

加えて、PowerShellでもシェルのセッションを終わらせてもヒストリが有効になるように、$profileに以下を記述しておくと、さらに*shにように便利にヒストリが使えるようになります。

$HistoryFile = Join-Path (Split-Path $Profile -Parent) history.xml
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action {
Get-History -count $MaximumHistoryCount | Export-Clixml $HistoryFile
}
if (Test-Path $HistoryFile) {
Import-Clixml $HistoryFile | Add-History
}

Get-Historyコマンドレットで過去のヒストリを表示、Invoke-Histroyコマンドで下記のヒストリの実行ができます。

参考
http://programming-aip.blogspot.jp/2013/01/powershellckwunix.html

Windows PowerShellではaliasとしてUNIXコマンドがほぼ使用できるようになっているのに加えて、キーバインドの変更とヒストリの追加によって、UNIXのシェル環境に慣れた方でも違和感&ストレスなく移行することできますので、普段MacやLinuxでシェルを使っている方でWindowsを使うことがあったら、是非今回のカスタマイズをして、快適なPowerShell生活を送って下さい。

シフトでも扱わせて頂いておりますCloudBees社の商用JenkinsであるJenkins Enterprise by CloudBeesの最新版version 13.05がリリースされました。

Jenkins Enterprise by CloudBees May 2013 Release, generally available

Jenkins Enterprise by CloudBeesの魅力は安定版Jenkinsをベースしたエンタープライズ・レベルの運用をサポートするプラグインとCloudBees社によるサポートとなっておりますが、13.05ではそのプラグインとして以下の4つのプラグインが加わりました。

1. CloudBees Support plugin

Jenkinsやプラグインに障害が発生した際にCloudBees社が解析に必要な情報を一括で集めてくれるプラグインです。障害報告の際に、このプラグインを使ってログを集めてCloudBess社に送付すれば、障害の修正がより迅速に対応されることが期待できます。

2. Restart Aborted Builds plugin

これまではマスターがクラッシュしてしまうと、実行途中だったジョブは再実行できませんでしたが、このプラグインを使用すると、実行中だったジョブが復帰後再開できます。長時間ジョブでクラッシュした際に有用です。

3. Nodes Plus plugin

多数のスレーブノードを使用している場合、スレーブノードに異常があった場合、対応するのが困難になります。このプラグインを使用すると、スレーブの状態に応じて、メールを通知したりできます。

4.Consolidated Build View plugin

複雑なビルド・パイプラインやビルド・プロモーションを利用している場合、ジョブ間の依存関係を理解するのが困難になります。このプラグインを使用すると、ビルド結果にビルド・パイプラインの依存関係やトリガーをビューにカラムとして追加できます。

Jenkins Enterprise by CloudBeesは下記のURLから30日試用版が無料でダウンロードできるので是非最新バージョンのプラグインや機能を試してみてください。

Jenkins Enterprise by CloudBees Download

テスト・エンジニア(組織によってはQAといったり、テスターと言ったり、その他の言葉が使われることもありますが、ここでは汎用的なテスト・エンジニアを使います)がテストをしているときに障害が見つかった場合、バグ票(障害票、障害レポートなどとも言われます)を起票します。

プログラマーにとって分かりやすい障害レポートについては下記の森崎先生の記事が詳しいです。

究極のバグレポート

わかりやすさには色々あるのですが、もっともプログラマーや開発者にとって工数が掛かるのが、障害をバグ票で書かれた手順に従って再現することです。

元となるテストケースがある場合でも、テストケースや再現手順が自然言語で書かれている場合、曖昧だったり、情報が欠落していたりで、結局テスト・エンジニアに横に来て再現してもらったり、テスト・エンジニアがリモートにいたりするすると延々と言葉のキャッチボールで数時間、数日を費やしてしまったりと、自然言語による再現手順の記述は大きく開発側に負担を掛けるものなのです。

そこで、恐らくあなたのWindows PCにもインストールされているであろうWindows PowerShellを活用しましょう。

Windows PowerShellは従来のWindowsコマンド・プロンプトとは比較にならないほど豊富な機能を持った、オブジェクト指向ベースの新世代シェルでWindowsのCLIはUNIXのシェル環境に比べて貧弱で使い物にならないと思っていたエンジニアにも魅力的なシェルになっています。

Windows PowerShellの大きな特徴は、従来のUNIXのシェルが文字列ベースであるのに対して、扱う単位がオブジェクト・ベースであると言うことです。そして、このオブジェクトにはPowerShell自身のオブジェクトだけでなく、.NET, COM, WMIなどWindowsで使用されるあらゆるプログラムのオブジェクトを扱うことができるようになっています。

ためしに、ShiftのトップページのCookieがどのようにセットされるかPowerShellで見てみましょう。

> Invoke-WebRequest http://www.shiftinc.jp/ | Select-Object -Expand BaseResponse | Select-Object -Expand Cookies
Comment :
CommentUri :
HttpOnly : False
Discard : False
Domain : www.shiftinc.jp
Expired : False
Expires : 0001/01/01 0:00:00
Name : PHPSESSID
Path : /
Port :
Secure : False
TimeStamp : 2013/06/10 16:41:21
Value : a5ur663qikfq0l82h3t3tak6o5
Version : 0

Comment :
CommentUri :
HttpOnly : False
Discard : False
Domain : .shiftinc.jp
Expired : False
Expires : 2013/06/10 17:31:22
Name : wassup
Path : /
Port :
Secure : False
TimeStamp : 2013/06/10 16:41:21
Value : NWM1ZDJkZjkyNmYwZGFlZDc3MmU4ODZhOTY4NmJmMjI6OjEzNzA4NTI3ODI6Ojo6MTE4LjIxLjExNS4yMzI6OmkxMTgtMjEtMTE1LTIzMi
5zMzAuYTA0OC5hcC5wbGFsYS5vci5qcDo6
Version : 0

Inoke-WebRequest コマンドレット (PowerShellのコマンドは「コマンド・レット」と呼ばれます)にURLを指定すると、

Microsoft.PowerShell.Commands.HtmlWebResponseObject

というWebページの情報を含むオブジェクトが戻り値として返ってくるので、Cookieを辿るために、Select-Object コマンドレットを使って、順にオブジェクトの階層を展開していきます。

Cookieヲタドルぐらいならもちろん別のツールを使って、手順と結果を貼り付けることはできます。

でも、他のプロパティも同時に知りたい、報告したいとなった途端に手動のステップではコミュニケーション・ミスが大きなものになってしまいます。同じような手順で、キャラクタセットを取得してみましょう。

> Invoke-WebRequest http://www.shiftinc.jp/ | Select-Object -Expand BaseResponse | Select-Object -Expand CharacterSet
UTF-8

1行で間違いなく再現可能なコマンドになっていますね。

このようにテストツールや解析ツールが使えないような環境でもWindows PowerShellならOS標準の機能で様々などの環境でも再現可能なコマンドを記述することができます。複雑な再現手順を自然言語で書いていて言葉のキャッチボールになってしまっているな、効率悪いな、なんとかしたいなーと思ったテスト・エンジニアはこれを機にWindows PowerShellのスキルを身についてぜひ、分かりやすく、効率のよいバグ票の記述や障害解析に役立てましょう。忙しいプログラマーや開発者に感謝されるテスト・エンジニアにスキルアップできると思います。

最期に、テスト・エンジニアや開発者も向けのWindows PowerShellの書籍を紹介します。洋書なのですが、非常にコンパクトにまとまっており、また今回のようなバグ票や障害解析での応用などテスト・エンジニアや開発者が活用できるノウハウが満載です。

Windows Powershell for Developers
http://www.amazon.co.jp/Windows-Powershell-Developers-Douglas-Finke/dp/1449322700/ref=tmm_pap_title_0 (ペイパーバッグ)
http://www.amazon.co.jp/Windows-PowerShell-for-Developers-ebook/dp/B008JFVXUO/ref=kinw_dp_ke (Kindle版)

日本語の書籍もあるのですが、Windows PowerShellのコマンドレットは運用管理向けのものが多いため、運用管理向けの書籍となってしまっている場合が多く、今回のようなバグ票での活用などで利用するには情報が不足しているところがあります。ですので、英語でも怖がらず是非上記の書籍でWindows PowerShellを学んでみましょう。

1. 「Chocolatey」とは

今回はWindows環境でJenkinsを始めとする開発支援ツールを簡単にパッケージ管理できるツール「Chocolatey」をご紹介します。

最近はWeb系の開発を中心にMacを開発マシンとして用意する企業も増えてきましたが、未だ多くの企業はSIerを中心に開発マシンはWindowsだと思います。システムの開発ではVisual StudioやEclipseのような統合開発環境の他にも、Git, Maven, Ant, GradleといったCLIのツールやRubyやPerlのプログラミング言語環境を導入する必要があります。

MacやUbuntuではHomebrewやaptといったパッケージ管理システムがあり、またRubyやPerlにもRVMやPerlbrewといったパッケージ管理システムがあり、依存関係も含めて自動でパッケージ管理ができるようになっています。プライベートでの開発でそのような便利なパッケージ管理システムを使っていると、Windowsで個別ツールをちまちまインストール&管理していくのが非常にしんどくなってきます。プロジェクトによっては専用のインストール手順書とかあるかも知れません。でも、インストールだけで一日潰すとかやってられませんね。

Windowsでこのようなパッケージ管理を実現するのが今回ご紹介する「Chocolatey」です。

Chocolatey
http://chocolatey.org/

2. インストール

インストールは非常に簡単で、以下のどちらかが便利です。

1. コマンド・プロンプトを起動して以下を入力します。

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('http://bit.ly/psChocInstall'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin

2. Windows 7以降でWindows PowerShellがインストールされている環境であれば、PowerShellを起動して以下を入力します。

iex ((new-object net.webclient).DownloadString("http://bit.ly/psChocInstall"))

ただし、事前にPowerShellを「管理者として実行する」で起動して、下記を実施済みである必要があります(これは一度だけやっておけば大丈夫です)。

Set-ExecutionPolicy Unrestricted

PowerShellはオブジェクト指向ベースの強力なシェル環境で、Windows XPやWindows Vistaでもインストールできますので、この際にインストールできる環境の人はインストールしておきましょう。

3. 使い方

インストールは「cinst」です。Jenkinsをインストールしたい場合、PowerShellを起動して以下のように入力します。

cinst jenkins

依存関係がある場合、依存するパッケージもまとめてインストールされます。

アンインストールは以下のように入力します。

cuninst jenkins

Jenkinsのようにインストール時にサービスとして登録されるパッケージはPowerShellを「管理者として実行する」で起動しておく必要があることに注意してください。

PowerShellのパイプライン機能を使えば、複数のパッケージをインストールするのも簡単です。

Jenkins, Apache Ant, Apache Maven, Gradle, Gitをまとめてインストールするには以下のようにPowerShell上で入力します。

'jenkins', 'apache.ant', 'mvn', 'gradle', 'msysgit', 'poshgit' | % { cinst $_ }

ちまちまインストールするのに対して、1行で終わってしまいますね。インストール手順書とかも1行で終わりです。

インストールできるパッケージは下記のURLから調べることができます。

http://chocolatey.org/packages

今回は開発支援ツールばかり紹介していますが、Google ChromeやFireFox, Skype, Evernoteなども普通にパッケージとして用意されていますので、開発以外でのソフトウェア一括導入にも利用できます。

また、自分が使っているソフトウェアをChocolateyのパッケージとして公開したい場合、下記のURLからアップロードできます。パッケージとしてあったらなーという思ったら是非アップロードして他の人達のインストールも楽にしてあげましょう。

https://chocolatey.org/packages/upload

#開発者登録が必要です。

その他様々な使い方は、Chocolateyのドキュメントが充実しています。

https://github.com/chocolatey/chocolatey/wiki

4. まとめ

依存関係のある多数の開発支援ツールを誤りなくインストールする、最新版にアップデートして不具合を解消するというのは結構大変で時間や労力がかかるものです。WindowsでもいまやChocolateyという強力なパッケージ管理システムがあるので、このような作業はChocolateyに任せてしまいましょう。

ソフトウェアテストに関するお悩みなど、まずはお気軽にお問い合わせください。

  • お問い合わせフォーム【お問い合わせはコチラ】
  • 電話でのお問い合わせ【0120-142-117】