🤖

ネイティブ開発するうえで役立つリファクタリングツール紹介

2024/12/25に公開

この記事は、神戸電子専門学校 ゲーム技研部 Advent Calendar 2024の20日目の記事です。
https://qiita.com/advent-calendar/2024/kdgamegiken

はじめに

ゲーム開発をしていくうえで果たしてこのコードはよいコードなのだろうか…と悩んだことはありませんか?
他人に確認してもらうにしても全ソースに対して詳細に確認してもらうなんてことはさすがに無理があります。
ならその確認を一定の条件を定めてツールにやってもらおう、という試みです。

基本的に後輩たちに向けたものなので、
・比較的楽に導入/試行ができる
・C++でのネイティブゲーム開発

といった前提でやっていきます。

VisualStudioパフォーマンスプロファイラー

Visual Studio標準搭載の機能なので簡単に実践できます。
大まかにできることとして、

  • CPU 使用率
  • メモリ使用量
  • インストルメンテーション(呼び出しの回数/時間の収集)
  • ファイル I/O(ファイルの読み取り/書き込み情報)
  • GPU 使用率

等を調べることができます。


使用例として、処理にかかった時間のグラフを表示しています。
ボトルネックがどこか一目でわかりやすくなっています。

詳細は公式リファレンスを見ることをおすすめします。
https://learn.microsoft.com/ja-jp/visualstudio/profiling/profiling-feature-tour?view=vs-2022&wt.mc_id=visualstudio_inproduct_aka_vs17overview

SourceMonitor

続いて、ソースコードそのものの品質を評価するツールです。
複雑度、ネストの深さ、コメント割合などを把握できます。

自分なりのルールを設定しておくとコードに一貫性ができて他人が見やすくなります。

このツールの導入により、私のコードは

  • 複雑度 26->10
  • ネストの深さ 8->5
    まで改善できました。

余談ですが、とある1年生チーム作品の複雑度は200くらいありました。恐ろしいです。

https://www.derpaul.net/SourceMonitor/

SourceTrail

ソースの相互関係を図式的に可視化するツールです。
スパゲッティコードや神クラスの低減に役立ちます。
列挙型,名前空間などのカテゴリに分けて何があるかまとめてくれるのも便利ですが、
どちらかというと人のコードを見る用途で使うことが多かったです。


https://github.com/CoatiSoftware/Sourcetrail/releases

cppcheck

超繊細インテリセンスです。
各ソースに細かく指摘をしてくれます。

https://cppcheck.sourceforge.io/

SonarLit

Visual Studio拡張機能 リアルタイムでコーディングしながら静的解析をしてくれます。
リアルタイムでコードにダメ出ししてくれるのがありがたいです。

https://qiita.com/emnmtm/items/5ef9ae62806e69106205

最後に

いかがでしたでしょうか。
リファクタリング作業でソースはきれいにはなりますが作品自体のゲームとしてのクオリティは変わらないので企業に見せれるくらいきれいにしたらほどほどに済ませましょう。

神戸電子専門学校ゲーム技術研究部

Discussion