見出し画像

MGL週報 #54 - 単体ビルド環境と大規模リファクタリング

このエントリはゲーム開発用フレームワーク「MGL」の開発記録です。MGLはzlibライセンスの下に無償で提供されています。



今週の作業内容

単体ビルド環境の構築

前回紹介した静的解析ツール「clang-tidy」の導入の都合もあり、MGLを単体でビルドするための環境を用意しています。

ドキュメントのMGLについての項にもある通り、MGLは移植性とカスタマイズ性を重視しているため、その中核部分はプラットフォームに依存しないようC++の標準機能のみで作成されています。ここに様々な環境依存のプログラムをリンクして動作させるというのがMGLの基本的な設計方針です。これは頒布の都合で同梱されているWindowsやmacOS向けのコードも例外ではなく、一見オールインワンのように見えて内部的にはちゃんと分離した構成になっています。

今回、この中核部分のみをビルドする環境を整備しています。SConsとCMake向けの設定ファイルとして用意しており、これらが利用可能な環境であれば簡単にMGLを静的ライブラリとして出力可能です。もちろんそれは一切のバックエンドを含まない「素の」MGLです。標準構成に含まれないプラットフォームに対応させる場合など、自前のバックエンドでMGLを動作させたい場合にはこちらの方が都合が良いはずです。

CやC++の開発に馴染みのある方なら「CMakeはともかくSCons?」と思うかもしれません。この辺は語ると長くなりそうなので割愛しますが、端的に言うとCMakeはIDEを用いて開発したい方向け、SConsはコンソール上での開発に慣れている方向けに用意してあります。どちらも出力結果は同じですので、扱い慣れた方を使用してください。

さて、両者はコンパイル時の情報をJSON形式で出力する機能を備えており、今回の目的はこのJSONファイルになります。compile_commands.jsonという名前のファイルで、これがclang-tidyの実行に必要な情報です。この情報はビルドに成功することで生成されるため、その状態であればclang-tidyが実行可能になります。

現状、単体ビルドとclang-tidyの実行には成功するところまでは確認できています。この環境をしばらく使用してみて、問題がなさそうであればこのタスクは完了です。

大規模リファクタリング

clang-tidyとclang-formatが動作するようになったら、本格的にこれらを用いて修正を加えていく予定です。

実は試しにちょっとだけ着手してみたところ、言われるがままに直すよりは1つ1つ慎重に調査しながら進めたほうが良さそうな感じでした。目的はより安全で可読性の高いコードに変更することですが、それによって意図しない挙動へと変化してしまったら、それは単なる不具合ですからね。

コンパイラの警告もそうですが、私は基本的にツールやコンパイラが指摘する問題は極力全て解決するようにしています。中には必要のない修正も含まれるのですが、提示された問題の一覧を眺めて取捨選択するよりも全てを解決したほうが早いし、大量の警告に埋もれた致命的な問題を見落とすリスクもありません。

ただ、clang-tidyは設定項目が非常に多く、試しにざっくり作ってみた設定ではかなりの件数が指摘されている状態です。ほとんどは動作に影響のない指摘であり(値を返すだけの関数には[[nodiscard]]を付けようね的な)、安全に解決可能ではありそうではあるものの、場合によっては設定を調整する必要も出てくるかもしれません。また、中には何が問題で指摘されているのだろう? というものもあり、これは純粋にC++の仕様についての調査が必要です。

要するに、この作業には結構な時間を食われそうです。しかし、これを片付ける過程でC++について今よりもう少し理解が深まりそうでもあります。それならば時間を掛けるだけの価値は期待できるでしょう。


その他

おかしいな、あんまり作業していないはずなのに休日が消えたぞ。

この記事が気に入ったらサポートをしてみませんか?