6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Delphi】Quality Central ブラウザを作った話

Last updated at Posted at 2024-10-19

はじめに

Quality Central へのレポートを閲覧するブラウザを作りました。

image.png

その経緯についてです。

背景

Quality Central ブラウザを作る事になった背景です。

Borland / Inprise / Codegear / Embarcadero のバグトラッキングシステム

Borland / Inprise / Codegear / Embarcadero のバグトラッキングシステムは代替わりしているので、いくつか種類があります。まずはこれを説明する必要があります。

■ Quality Central

最初のバグトラッキングシステムです。要 BDN/CDN/EDN アカウントですが、見るだけならアカウント不要でした。

image.png

ベータテスト用の報告も可能で、通常アカウントでは見る事ができない 青 QC というものがありました。なので、報告すると「重複している」と言われる事も。

Windows 用の Qualitycentral.exe というクライアントアプリも存在し、一部の開発製品には同梱されていました。Java 製のクライアントもありました。

廃止予告が 2014 年に出され、2017/06 頃にシャットダウンされました (Web サービスを含めた完全シャットダウンの時期は不明)。

現在は閲覧できません。

See also:

■ Quality Portal (オンプレミス)

先代のバグトラッキングシステムです。要 EDN アカウント。

image.png

Quality Central のレポートは内部的 (Internal Tracking) には移行されていますが、一般的には見る事ができません。なので、報告すると「重複している」と言われる事も。

Atlassian がオンプレミスのバグトラッキングシステムを提供しなくなったため、『Quality Portal (クラウド)』へ移行する事になったのですが、この時期、Embarcadero のサイトが全般に不調で、そのためか移行が遅れ、オンプレミスの Quality Portal が読み取り専用になった後でクラウドの Quality Portal が運用開始になりました。つまり、バグ報告できない期間がありました。

現在は読み取り専用となっています。

See also:

■ Quality Portal (クラウド)

現行のバグトラッキングシステムです。2024/04 運用開始。要 EDN アカウント。

image.png

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 依存はダメで、本当に重要なデータは自分で管理しなければならないと悟りました。明日の事なんて誰にもわかりませんしね。

こうして重い腰を上げて 「Quality Central ブラウザを作ろう!」 と思い立ったのでした。

QCScraper

遡って QC がシャットダウンされた頃、Uwe Raabe 氏が QC の情報をローカルにダウンロードする QCScraper を公開しました。

これを使えば添付ファイルを除いた、Quality Central の情報を丸ごとダウンロードできるものでした。ダウンロードされた XML は TClientDataSet に直接読み込む事ができます。

ただ、日本語環境ではそのままだと文字化けが発生していました。

uQCScraper.pas
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 に読み込ませてください。

image.png

正しく読み込ませてビルドすると 80MB 程度の実行ファイルが出来上がると思います。

image.png

実行時に XML を読み込ませたいのであれば、ソースコードをいじってみてください。

余談ですが、何故こんなにも小さいプログラムでフォームとデータモジュールを分離しているのかというと、QCScraper の XML データが DFM に格納されてしまうためです。

メインフォームに XML データが格納されると (大きなデータを格納すると)、フォームをいじった際に履歴として残ってしまい、__history フォルダが簡単に数 GB に膨れ上がります。

フォームデザイナの動作も緩慢になり DFM の破損にもつながるため、一度貼ったらコード以外ほぼ触らないデータモジュールはとても都合がいいのです。

Quality Central Browser の使い方

QCBrowser.exe を起動します。表示は Web 版の Quality Central に寄せています。

image.png

タブ

データが存在しないタブのアイコンはグレーアウトします。

image.png

タブは次のようになっています。

名称 説明
Description この報告の詳細な説明です
Steps この報告がバグであれば、その再現方法です
Workaround この報告がバグであれば、その回避方法です
Attachment 添付ファイルです (取得はできません)
Comments この報告に寄せられたコメントです。他ユーザーからの回避方法が書かれている事があります

検索

QC 番号が判っているのなら、上の虫眼鏡アイコンのボタンを押します。

image.png

Go to Report ダイアログが出るので、QC 番号を入力します。

image.png

最新版では Report #: の所に直接入力でも検索できます。

各部のショートカット

ショートカットキーは次のようになっています。

image.png

フィルター (高度な検索)

下部にあるフィルターでレコードを絞り込む事ができます。

image.png

フィールド名は検索したい箇所のラベルやタブをダブルクリックすると挿入されます。

image.png

ただ、星印の箇所はルックアップフィールドなので、元のコードで検索する必要があります。例えば STATUS は次のようになっています。

Code Name
10 Open
20 Resolved
30 Closed
40 Reported
50 Withdrawn
60 Automated Report
70 Pending

元のコードソースコードに付属の XML で確認できます。

フィルタ式の文法については DocWiki を参照してください。

レコードの選択と移動

絞り込んだレコードは右下のナビゲーションボタンで移動できます。

image.png

ナビゲーションボタンの横のボタンを押すと一覧が表示されます。

image.png

QCWIN: プロトコル

管理者権限で次のコマンドを実行すると QCBrowser.exeQCWIN: プロトコルに関連付けられます。

QCBrowser.exe /RegisterProtocol

関連付けがうまく行くと、画像のようなリンクをクリックすると QCBrowser.exe が起動します。

image.png

こちらのページで試してみてください。

[ファイル名を指定して実行] からも使えます。

image.png

関連付けの解除は次のようにします (要管理者権限)。

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 翻訳できます (トグル)。

image.png

[Comments] タブのコメントはネストされたレコードなので、ポップアップで翻訳されます。

image.png

※うまく翻訳されない時は文字列を選択してから〔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:

Google Cloud Translation を利用するには、無償の範囲であってもクレジットカードの登録が必要です。

ヘッダ

EDN のページヘッダを模したヘッダがあり、次の機能があります。

  • GitHub リポジトリへのリンク
  • X へのシェア
  • Internet Archive での閲覧 (表示されている QC)
  • Embarcadero Quality Portal へのリンク

デフォルトでオフですが QCBrowser.env に次の記述を行うと起動時に表示されるようになります。

[SYSTEM]
ShowHeader=1

ヘッダは〔Ctrl〕+〔H〕で表示をトグルします。

おわりに

Workaround (回避方法) タブと Comments タブの内容が Quality Central の真骨頂です!

今更ですが、高橋さんありがとうございました (謎)。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?