この記事は The Qt Blog の Modern Qt Development: The Top 10 Tools You Should Be Using を翻訳したものです。
執筆: Matthias Kalle Dalheimer, 2018年10月12日
仕事をする上で、正しいツールを使うことがどうして重要なのでしょう?効率と成果というのがすぐに思い浮かぶ2つの理由です。工事現場で働く人たちは釘の刺さるような靴を履きません。ソフトウェア開発者である我々は、どうしてバグを発見したりコードの最適化をする際にマニュアルな方法で行うのでしょう?どう考えても非効率でイライラするし、成果も芳しくないですよね?
新しいツールを学ぶのは時間のかかる作業です。では、自分の時間をどこに割くかはどう決めるべきでしょう?私たち KDAB はそれに値する Qt 関連の開発ツールをこの記事で共有したいと思います。私たちはよくこういったツールを使って厄介なバグの所在を突き止めたり修正したり、難解な最適化の問題を解決したりしています。Qt での開発の最前線にいるみなさんは、既にこういったツールに馴染みがあるかもしれませんが、様々なスキルレベルのみなさんの中にはまだ試したことのないツールもあるかもしれません。
GammaRay – Qt の構造に基づいた内部調査用デバッガ
Qt の内部の構造のデバッグでイライラしているみなさんに強くおすすめしたいツールです。GammaRay は QtQuick シーングラフやモデル/ビューの構造、QTextDocument、シグナル/スロット、フォーカスのハンドリング、GPU のテクスチャ、QWidgets、ステートマシンといった Qt の主要なコンポーネントに対応し、Qt 内部のこういった情報を可視化するだけではなく、実行時に内部の値の変更ができてしまうツールです。アプリケーションを起動してのデバッグや、起動中のアプリケーションへのアタッチ(ローカルでもリモートでも)が可能となっています。
Clazy – Qt のセマンティクスに基づいたコンパイラプラグイン
これはすべての Qt ユーザーの引き出しに入れておきたいツールです。clazy を clang に追加することで、必要のないメモリの確保や API の間違った使い方、非効率な生成といった Qt のベストプラクティスに基づく警告をコンパイル時に得ることができるようになります。Clazy はみなさんの Qt のコードをより良くするための素晴らしいツールで、いくつかのエラーのパターンでは実際のコードを変えずとも自動的にリファクタリングを行います。
Modern C++ – C++11/14/17 の新機能を活かしたソースコード
C++11 と C++14 が出てから結構時間が経ってはいますが、昔ながらのコードはなかなか滅びないものです。まだ多くの開発者は最新の C++ が提供する効率の良い、可読性の高い、メンテナンス性の高い方法の恩恵を受けていません。みなさんのコードを劇的に改善するちょっとした変更をするのに、C++ の標準化委員会のエキスパートである必要はありません。以下で提供する PDF で、主要な機能を紹介しています。これを学ぶためのトレーニングクラスも用意していますし、さらなる詳細を学ぶためのコースも提供いたします。
Clang Tidy – みなさんの C++ のコードを近代化するためのコンパイラツール
これは怠惰な方向けの近代化ツールです。clang ベースの Clang Tidy は古い C++ の記述で改善できるものを発見します。新しい C++11 や C++14 の新機能で書き換えるべき箇所に旗印を立て、多くのケースでは自動的なリファクタリングが可能です。なんて生産的なんでしょう!
HotSpot – アプリケーションの CPU のパフォーマンスの可視化ツール
最適化の段階では、プロフファイラーに勝るものはありません。しかし、低レベルな pref のログを読むのは罰ゲームのようなもので、zip ファイルが最高のソース管理ツールだといまでも信じているような人のための手段であるべきです。HotSpot は Linux の pref のログを分析し(呼び出し元、タイムライン、トップダウン、ボトムアップといった)複数のビューを提供するため、アプリケーションのどこが炎上しているのかを簡単に知ることができます。
apitrace – グラフィックスの API のデバッグやパフォーマンスの改善のためのツール群
GUI を伴うアプリケーションを書いている場合、プロファイリングは C++ のコードだけにはとどまりません。OpenGL や Direct3D、DirectDraw などの API の実行も確認し、グラフィカルな方法でそれらの内容の確認をし、パフォーマンスのプロファイリングをしなければいけません。apitrace はまさにそのためのツールです。トレースファイルの再生も可能なため、改善前後のベンチマークの比較も容易に実現できます。
Kernel/System プロファイラ – OS のパフォーマンスの可視化ツール
パフォーマンスの問題がアプリケーションではない場所にある場合があります。プロセス間通信やドライバスタックの奥底、OS の機能と連携しているところなどです。こういったすごく低レベルな箇所のデバッグには、システムのプロファイリングツールが必要となるでしょう。鶏の解体に牛刀を用いているように聞こえますが、システムプロファイラは他のツールでは発見できない問題を発見しうる非常に貴重なツールです。
Heaptrack – アプリケーションのメモリ使用量の監視ツール
パフォーマンスの改善はなにも速度だけではありません。メモリの使用量のプロファイリングをしたい場合、このツールを試すことをおすすめします。ピーク時のメモリ使用量や、メモリリークの箇所、もっとも多くのメモリを確保している場所や、もっとも一時的にメモリを確保している場所を可視化することで、アプリケーションの中でメモリの使用を分析でき、メモリ使用量の削減の大きな手がかりを提供します。
継続的インテグレーション(CI) – システム構築をアジャイル/XP開発で
CI はユニットテストを総合的に行うための仕組みで、アジャイル開発を行っているかどうかに関わらずソフトウェアの品質を現実的に解決するための方法論です。CI システムをゼロから構築する必要はありません。高品質の製品の開発を支援する素晴らしいツールが世の中にはたくさんあります。
Qt Creator – Qt のための IDE
Qt Creator はすべての Qt ユーザーの PC に既にインストールされているので、このリストに載せるのはずるいと思うかもしれませんね。でも、例えば組み込まれている QML のプロファイラで Qt Quick の遅い箇所を特定することができるということをご存知でしたか?Alt+Enter のショートカットで、カーソルが存在する場所のソースコードに対して有効なリファクタリングの機能の一覧が表示されるのはどうでしょう?シンボルを参照するための便利なショートカットや、git diff、マクロの記録、非常に強力なコードのナビゲーションや編集支援機能などはいかがでしょう?もし存在を知っていれば、毎日10回は使うようなものたちです。マウスに囚われてはいけませんよ。便利なまとめを作成しましたので、印刷をして目の前に貼っておくといいでしょう。
以上が Qt で開発をする際に知っておきたい10のツールです。効率的なコードレビューの方法とか、コーディングのベストプラクティスといった一般的なまとめができないものも世の中にはありますが、そういったものに対してはオーダーメイドのトレーニングを提供していますので、お気軽にご相談ください。
もしこれ以外にも共有したいすごいツールがありましたら、(元の記事の)コメント欄に書いてくださいね!