デバッギングツールHawkeyeの作者Corneliu Tusnea氏(source)は、オープンソースプロジェクトとして無料バージョンをCodePlex上でリリースした。
Hawkeye(source)は実行中のいかなる.NETプロセスにもアタッチでき、そのオブジェクトを操作できるデバッギングツールである。Hawkeyeは、Visual Studioなどの他のデバッガが全く通用しない分野で、実に力を発揮する。実行中のフォームに十字をドラッグするだけで、その所定のコントロール用のすべてのプロパティとイベントを見ることができる。対応する変数名やプロセスさえ知る必要はない。すべて自動で行われる。
最近、HawkeyeについてTusnea氏と話す機会を得た。
Hawkeyeを作成することになった元々のきっかけは何ですか。
私のWinFormsアプリケーションのデバッグに役立つツールが必要だったことです。最初にHawkeye(当時の名称はRuntime Object Editor)を書き始めた時、私は大規模なWindows Formsアプリケーションに取り組んでいました。ランタイム生成UIやconfiguration Xmlに基づいて生成されたコントロールが多数存在し、コントロールがなぜ機能しているか、あるいは機能していないかを理解するのが非常に難しかったのです。当時、Runtime Object Editorはとても初歩的なものでした。見て、編集することができたのは、Designerの中で見る標準的なプロパティだけでした。
その後、CodeProject(source)上にRuntime Object Editorをリリースすると、素晴らしいフィードバックがあったのです。
私にとってそのツールは、当時素晴らしいツールであり、仕事で大いに役立ってくれました。
およそ1年後、すべてのプロパティに対するサポートとメソッド表示、インボケーションを追加しました。そうすると残りの機能は、リフレクションでどれほどのことが達成できるかという練習になったのです。イベントとイベントハンドラの表示、イベントハンドラの呼び出し、新規ハンドラの追加、オブジェクトのフィールドやアプリケーションインフォメーションの表示といったことです。Windows Formsアプリケーションの開発をやめたので、実はそれ以上やる必要はなかったのですが、リフレクションコードの発行とCLRについてさらに学ぶには良い練習となりました。
2006年の秋、[SSW(サイト・英語)の]Adam Coganと話していたら、あのツールにはもっと良い名前をつけなければいけないと言われました。Runtime Object Editorという名前は奇妙で、ツールを言い表していない、と言われたのです。Adamは、ツールの左上角にあるターゲットボタンの外見から「Bullseye」(的の中心点)という名前を考えてくれました。このツールを使えば、他のアプリケーションのコードの中身が手に取るように分かるので、その後私が「Hawkeye」と改名しました。
最近、CodePlexにHawkeyeをリリースしましたが、これは難しい決定でしたか。
答えは、イエスとノーの両方です。元々はCodeProjectで、いくつかのバージョン、そしてソースコードをリリースしていました。
しかし、CodeProjectは共同作業に向かないため、皆がHawkeyeの開発に参加できず、それが理由でHawkeyeの進歩が止まってしまいました。私には時間がなく、もう管理ができなかったのです。
新しい機能性に加え、テストやさらに優れたデバッギングを可能にする変更について多数のリクエストをもらっていたのですが、修正する時間がありませんでした。リクエストされた機能を追加できず、皆の期待を裏切っていたことを心苦しく思っていました。
その後も機能性追加のリクエストをいくつかもらい、ついに決心したわけです。Hawkeyeを再度リリースし、皆に参加してもらって新しいコードを追加するのがHawkeyeにとって一番の得策であると。
1年ほど前、Hawkeyeは無料バージョンとより強力な有料バージョンの両方でリリースされた記憶があります。CodePlexには両バージョンが入っているのでしょうか。それともプロフェッショナル版を今でも販売しているのでしょうか。
CodePlexコードには無料バージョンだけが入っています。しかし、Hawkeyeのライセンスにも明記してあるとおり、有料バージョンには無料バージョンに入っていない機能性が2つあるだけで、99%のデベロッパにはこの2つの機能性は必要ありません。
この2つは、真に有用というより、どちらかというと「かっこよく」て「わくわくする」機能性なのです。
C++とC#を混合してお使いになっているようですが、なぜそうなさったか、少し教えていただけますか。
お気づきのように、コードの大部分はC#です。C++の部分は、C#では事実上不可能なプロセス注入部分のみです。全部をC++で書いてしまっては、やり過ぎになってしまったでしょう。
たいていは、適切なツールを適切な機能に使うということではないでしょうか。
Corneliu Tusnea氏はReadify(サイト・英語)のシニアコンサルタントで、現在はMicrosoft SDCで開発リーダーをしている。Tusnea氏は、ヨーロッパのEuroNextやXetra、東京証券取引所、東京工業品取引所、大阪証券取引所、ナスダックなど、様々な市場向けのリアルタイム取引プラットフォームを書いた経歴の持ち主である。