はじめに
Quality Central へのレポートを閲覧するブラウザを作りました。
その経緯についてです。
背景
Quality Central ブラウザを作る事になった背景です。
Borland / Inprise / Codegear / Embarcadero のバグトラッキングシステム
Borland / Inprise / Codegear / Embarcadero のバグトラッキングシステムは代替わりしているので、いくつか種類があります。まずはこれを説明する必要があります。
■ Quality Central
最初のバグトラッキングシステムです。要 BDN/CDN/EDN アカウントですが、見るだけならアカウント不要でした。
ベータテスト用の報告も可能で、通常アカウントでは見る事ができない 青 QC というものがありました。なので、報告すると「重複している」と言われる事も。
Windows 用の Qualitycentral.exe
というクライアントアプリも存在し、一部の開発製品には同梱されていました。Java 製のクライアントもありました。
廃止予告が 2014 年に出され、2017/06 頃にシャットダウンされました (Web サービスを含めた完全シャットダウンの時期は不明)。
現在は閲覧できません。
See also:
- Quality Keeps Moving Forward ([Internet Archive] community.embarcadero.com)
- Embarcadero QualityCentral is dead; man-decades of customer work down the drain (wiert.me)
- Quality Central についての基礎知識 (ht-deko.com)
- Quality Central についての補足事項 (ht-deko.com)
■ Quality Portal (オンプレミス)
先代のバグトラッキングシステムです。要 EDN アカウント。
Quality Central のレポートは内部的 (Internal Tracking) には移行されていますが、一般的には見る事ができません。なので、報告すると「重複している」と言われる事も。
Atlassian がオンプレミスのバグトラッキングシステムを提供しなくなったため、『Quality Portal (クラウド)』へ移行する事になったのですが、この時期、Embarcadero のサイトが全般に不調で、そのためか移行が遅れ、オンプレミスの Quality Portal が読み取り専用になった後でクラウドの Quality Portal が運用開始になりました。つまり、バグ報告できない期間がありました。
現在は読み取り専用となっています。
See also:
■ Quality Portal (クラウド)
現行のバグトラッキングシステムです。2024/04 運用開始。要 EDN アカウント。
Quality Portal (オンプレミス) のレポートは内部的 (Internal Tracking) には移行されていますが、一般的には見る事ができません。なので、報告すると「重複している」と言われる事も。
「個人的には」と前置きしておきますが、過去一で使いにくいです。自分の投稿はすぐに探せるのですが、他にどのような問題が投稿されているのかをこのページからは探せません。検索窓のように見えるのは問題を探すためのものではありません。
See also:
Quality Central について
Quality Central はログインなしで閲覧可能だったため、結構な数のページが Internet Archive に捕捉されています。Quality Central に対して張られたリンクは Internet Archive 経由で読めるものが多いです。
Quality Central の重要性
古い Delphi のバグと関連情報が載っています。つまり、古い Delphi で書かれたコードをメンテナンスする場合や、そのコードをマイグレーションする際に役立ちます。
Workaround やコメント欄には解決方法が載っていて、一種のナレッジベースとしても機能していました。
今では Web 検索に引っ掛からないような情報もあります。ChatGPT 先生は何も教えてはくれません。
Internet Archive (Wayback machine)
で、先日 Internet Archive が DDoS 攻撃によりダウンしました。
- Internet Archive、ダウンは続くも「データは破損していない」 (ITmedia)
- 「Internet Archive」がDDoS攻撃でダウン--3100万件のアカウント情報が漏えい (ZDNET Japan)
これには困りました。Internet Archive 依存はダメで、本当に重要なデータは自分で管理しなければならないと悟りました。明日の事なんて誰にもわかりませんしね。
こうして重い腰を上げて 「Quality Central ブラウザを作ろう!」 と思い立ったのでした。
QCScraper
遡って QC がシャットダウンされた頃、Uwe Raabe 氏が QC の情報をローカルにダウンロードする QCScraper を公開しました。
これを使えば添付ファイルを除いた、Quality Central の情報を丸ごとダウンロードできるものでした。ダウンロードされた XML は TClientDataSet に直接読み込む事ができます。
ただ、日本語環境ではそのままだと文字化けが発生していました。
function TByteDynArrayHelper.DecodeAndUnCompress: string;
var
bytes: TBytes;
fWorkStream: TMemoryStream;
fEncodedStream: TMemoryStream;
fStreamDeCompressor: TDeCompressionStream;
Enc: TEncoding; // ADD
begin
fEncodedStream := TMemoryStream.create;
try
fWorkStream := TMemoryStream.Create;
try
fWorkStream.Write(Self[0], Length(Self));
fWorkStream.Position := 0;
TNetEncoding.Base64.Decode(fWorkStream, fEncodedStream);
finally
fWorkStream.Free;
end;
fEncodedStream.position := 0;
fWorkStream := TMemoryStream.create;
try
fStreamDeCompressor := TDeCompressionStream.create(fEncodedStream);
try
fWorkStream.CopyFrom(fStreamDeCompressor, 0);
finally
FreeAndNil(fStreamDeCompressor);
end;
fWorkStream.position := 0;
SetLength(bytes, fWorkStream.size);
fWorkStream.Read(bytes, fWorkStream.size);
finally
fWorkStream.Free;
end;
finally
FreeAndnil(fEncodedStream);
end;
// Result := TEncoding.ANSI.GetString(bytes); // MOD
Enc := TEncoding.GetEncoding(1252);
try
Result := Enc.GetString(bytes);
finally
Enc.Free;
end;
end;
Quality Central からのダウンロードに数時間掛かったため、あまり利用される事はなかったように思います。
Quality Central の Web サービスがシャットダウンされているため、QCScraper は現在利用できません。
QCScraper のデータ
私も QCScraper が吐いたデータを持っていたのですが、どのストレージに置いたのか失念してしまいました。自分のアカウントで作ったデータなので、青 QC が含まれていて、どのみち公開はできないシロモノでした。
そして、少し時間が経った頃、Jeroen W. Pluimers 氏が QCScraper のデータを公開しました。
公開されたデータは 4 種類あります。
ファイル | 説明 |
---|---|
QCScraper.Anonymous.cds.xml | ログインしない状態で取得された QC データ |
QCScraper.Anonymous.cds.tidy.xml | ↑ を整形したデータ |
QCScraper.Regular.cds.xml | 新規 EDN アカウントでログインして取得された QC データ |
QCScraper.Regular.cds.tidy.xml | ↑ を整形したデータ |
-
tidy
と付くものは TClientDataSet に読み込ませようとするとエラーになります -
QCScraper.Anonymous.cds.xml
は未ログインで閲覧可能だったデータのみです - 自分で使うなら件数の多い
QCScraper.Regular.cds.xml
がオススメです
これを Quality Central ブラウザのデータとして使う事にしました。
Quality Central Browser
サクッと作って X (Twitter) でバイナリを公開した後、プロジェクト一式を整理して GitHub で公開しました。
Delphi 12.0 で作っていますので、無償版の Community Edition でビルドできます。
標準のコンポーネントしか使っていませんが、比較的新しい Delphi でないとビルドできないと思います。
そのままビルドするとデータのない QCBrowser.exe
ができてしまいます。ビルド前に QCScraper.Regular.cds.xml
を TClientDataSet に読み込ませてください。
正しく読み込ませてビルドすると 80MB 程度の実行ファイルが出来上がると思います。
実行時に XML を読み込ませたいのであれば、ソースコードをいじってみてください。
余談ですが、何故こんなにも小さいプログラムでフォームとデータモジュールを分離しているのかというと、QCScraper の XML データが DFM に格納されてしまうためです。
メインフォームに XML データが格納されると (大きなデータを格納すると)、フォームをいじった際に履歴として残ってしまい、__history
フォルダが簡単に数 GB に膨れ上がります。
フォームデザイナの動作も緩慢になり DFM の破損にもつながるため、一度貼ったらコード以外ほぼ触らないデータモジュールはとても都合がいいのです。
Quality Central Browser の使い方
QCBrowser.exe
を起動します。表示は Web 版の Quality Central に寄せています。
タブ
データが存在しないタブのアイコンはグレーアウトします。
タブは次のようになっています。
名称 | 説明 |
---|---|
Description | この報告の詳細な説明です |
Steps | この報告がバグであれば、その再現方法です |
Workaround | この報告がバグであれば、その回避方法です |
Attachment | 添付ファイルです (取得はできません) |
Comments | この報告に寄せられたコメントです。他ユーザーからの回避方法が書かれている事があります |
検索
QC 番号が判っているのなら、上の虫眼鏡アイコンのボタンを押します。
Go to Report
ダイアログが出るので、QC 番号を入力します。
最新版では Report #:
の所に直接入力でも検索できます。
各部のショートカット
ショートカットキーは次のようになっています。
フィルター (高度な検索)
下部にあるフィルターでレコードを絞り込む事ができます。
フィールド名は検索したい箇所のラベルやタブをダブルクリックすると挿入されます。
ただ、星印の箇所はルックアップフィールドなので、元のコードで検索する必要があります。例えば STATUS
は次のようになっています。
Code | Name |
---|---|
10 | Open |
20 | Resolved |
30 | Closed |
40 | Reported |
50 | Withdrawn |
60 | Automated Report |
70 | Pending |
元のコード
はソースコードに付属の XML で確認できます。
フィルタ式の文法については DocWiki を参照してください。
レコードの選択と移動
絞り込んだレコードは右下のナビゲーションボタンで移動できます。
ナビゲーションボタンの横のボタンを押すと一覧が表示されます。
QCWIN: プロトコル
管理者権限で次のコマンドを実行すると QCBrowser.exe
が QCWIN:
プロトコルに関連付けられます。
QCBrowser.exe /RegisterProtocol
関連付けがうまく行くと、画像のようなリンクをクリックすると QCBrowser.exe が起動します。
こちらのページで試してみてください。
[ファイル名を指定して実行]
からも使えます。
関連付けの解除は次のようにします (要管理者権限)。
QCBrowser.exe /UnregisterProtocol
QCWIN:
プロトコルは元々 QualityCentral.exe
で使われていました。古い Delphi / C++Builder をインストールしている場合、ひょっとすると関連付けが残っているかもしれませんね。
DeepL 翻訳
QCBrowser.exe
と同じ場所に、必要な項目を埋めた QCBrowser.env
を置くと、
[TranslateAPI]
APIType=1 // 1=DeepL
Enabled=0 // 1 で有効
URL=https://api-free.deepl.com // URL (無償版)
;URL=https://api.deepl.com // URL (有償版)
ContentType=application/x-www-form-urlencoded // コンテンツタイプ
Resource=/v2/translate // リソース
AuthKey=******** // 取得した DeepL の API キー
Language=JA // 翻訳先の言語
フォーム下部にあるタブ内のメモフィールドを 〔Ctrl〕+〔T〕
で DeepL 翻訳できます (トグル)。
[Comments]
タブのコメントはネストされたレコードなので、ポップアップで翻訳されます。
※うまく翻訳されない時は文字列を選択してから〔Ctrl〕+〔T〕
を押してみてください。選択範囲を部分的に翻訳します。
DeepL の API キーを取得するには、無償版であってもクレジットカードの登録が必要です。
See also:
Google 翻訳 (Google Cloud Translation API)
翻訳に Google Cloud Translation (Basic) を使う事もできます。
[TranslateAPI]
APIType=2 // 2=Google Cloud Translation
Enabled=0 // 1 で有効
URL=https://translation.googleapis.com // URL
ContentType=application/json; charset=UTF-8 // コンテンツタイプ
Resource=/language/translate/v2 // リソース (BASIC)
AuthKey=******** // 取得した Google の API キー
Language=ja // 翻訳先の言語
See also:
- Cloud Translation ドキュメント (cloud.google.com)
- Method: translate (cloud.google.com)
- Use API keys to access APIs (cloud.google.com)
Google Cloud Translation を利用するには、無償の範囲であってもクレジットカードの登録が必要です。
ヘッダ
EDN のページヘッダを模したヘッダがあり、次の機能があります。
- GitHub リポジトリへのリンク
- X へのシェア
- Internet Archive での閲覧 (表示されている QC)
- Embarcadero Quality Portal へのリンク
デフォルトでオフですが QCBrowser.env
に次の記述を行うと起動時に表示されるようになります。
[SYSTEM]
ShowHeader=1
ヘッダは〔Ctrl〕+〔H〕
で表示をトグルします。
おわりに
Workaround (回避方法) タブと Comments タブの内容が Quality Central の真骨頂です!
今更ですが、高橋さんありがとうございました (謎)。