はじめに
私が代表を務めている株式会社シフトロックで開発している3次元非線形電磁場解析ソルバQmeとその3次元モデラーPというソフトウェアの開発環境について述べたいと思います。
この二つのソフトウェアは、基本的にはOfficeシリーズなどと良く似た一般的なWindowsのパッケージソフトウェアです。 インストーラで配布され、起動すると複数のWindowを持ったGUIで、科学技術計算をします。 WordやExcelと少し違うのは、シミュレーションソフトウェアなのでPCに大きなメモリと計算能力があれば、それだけ大きなモデルのシミュレーションできるというスケーラビリティを持っていることです。 Qme, P ともC++11 言語でソーコードが20万~30万ステップという巨大なプログラムですが、まともなGUI・3Dグラフィックス・高度計算機能を持った 3D-CAEプログラムは簡単にこのくらいのサイズになります。 しかし、プログラミング自体は、オブジェクト指向で設計し開発すると一部修正・変更・追加などは見通しよく作業できます。 むしろ、品質維持のための機能やパフォーマンスの回帰テストや、ユーザ向けのドキュメント類の作成の方が大変です。
従いまして、メモリ空間・高速化・並列化につき、開発ツールの制限をなるべく受けたくないという観点からブログラミング言語・コンパイラ・ライブラリなどを選定しています。 つまり、ソフトウェアの目的であるシミュレーションの問題解決に専念したいという理由です。 またそれとは別に、最近では「多言語化がし易いこと」というのも選定の基準になっています。
とは言え、開発効率、それに私自身のスキルや私が常に使用可能な環境も含めたであることという制限があります。
以下に項目だけ列挙します。 個々の具体的なバージョン等は、後で言及いたしますが毎年少しずつ変化します。
概略構成
- ハードウェア
・少しハイスペックな一般的なミニタワー PC を2台 - OS
・Windows10 Pro 64bit - フォント
・Ricty Diminished Font - プログラミング言語
・C++11 (コンパイラはMSのものとインテルコンパイラ)
・アプリケーション構築用には使用しないが、Python, Perl, fortran, C#, VB,等も補助的に使用 - IDE
・Visual Studio Professional
・Qt Creator
・Intel Parallel Studio XE(Visual Studioのアドインとして使用) - ライブラリ
・Qt デスクトップ
・Intel Math Kernel Library (Intel Parallel Studioに付属のもの)
・boost (ごく一部の数学ライブラリとして使用) - ドキュメント類作成ツール
マニュアルやヘルプなどはもちろんのこと、開発ノートなどのドキュメント類の作成使用するものとして使用しています。
・Office 365
One Note, Word, Excel
・ホームページビルダー
Htmlファイルの作成補助
・ヘルプファイル作成
Html Help Workshop
・Qtに付属する多言語化ツール
Linguist - インストーラ
Wixツールキット - バージョン管理
GitLab
Tortoise Git - その他
ソースやデータの比較に重宝しています。
WinMerge
開発環境の二重化
長年の経験からPCのハードディスクは平均5年程度で故障する確率が急激に増すことを実感していますので、ディスクアレイやNASサーバに定期的にバックアップをとったり、開発環境のクローンPCを作ったりして自己防衛をしてきました。 また、特に貴重なファイルは万一、被災しても大丈夫なのように、危機管理として場所を分散させるために、信頼の置けるクラウドにバックアップをとっています。 さらに、販売中のソフトウェアの場合、故障とかアクシデントが原因の開発環境の破損以外に、開発ツール類のバージョンアップや変更に伴うソフトウェアの設定がらみの破損に対しても、継続的な開発を担保するための考慮が必要です。
特に最近ではセキュリティーホールのパッチなどを含んだ開発ツールの更新が比較的頻繁に生じますので、新旧2系統の開発環境を構築しています。 新環境を作るために使用中の現環境を旧環境として温存し、新環境完成後は旧バージョンのメンテナンス・サポート用として使用します。 また、新環境を作るときのセッティングなどで、前はどうしていたかな?というとき、実働しているものを参照することができるので非常に便利です。
以下に2021年2月現在使用している開発環境の具体的なバージョンを紹介いたします。
新開発環境(現開発環境)
- バードウェア
・CPU Intel Core i9-9820X CPU @3.3GHz (10 コア 20スレッド)
・メモリ 64GB
・ストレージ 1TB SSD NVMe + 3TB HDD
・グラフィックボード NVIDA Quadro P2000 - IDE
・Visual Studio 2019
・Qt Creator 4.14.0
・Intel Parallel Studio XE 2020 - ライブラリ
・Qt 5.15.2 デスクトップ ※mvsc 2019 64bitが標準
・インテル® MKL 2020 for Windows
・boost 1.75.0
旧開発環境
- バードウェア
・CPU Intel Core i7-5820K CPU @3.3GHz (8 コア 16スレッド)
・メモリ 64GB
・ストレージ 2TB SSD SATA3 + 4TB HDD
・グラフィックボード NVIDA GeForce GTX 970 - IDE
・Visual Studio 2017
・Qt Creator 4.11.1
・Intel Parallel Studio XE 2019 - ライブラリ
・Qt 5.12.7 デスクトップ ※mvsc 2017 64bitが標準
・インテル® MKL 2019 for Windows
・boost 1.65.1
開発環境構築の順序
開発環境構築の順序は、使用するライブラリやIDEのリリースされたバージョンによって自ずとインストールする順序が決まってしまいます。 特に、Qtを Visual Studioでも使用する場合、使用するバージョンのQtが標準でサポートするアドインで制限を受けます。 アドインを変更して、ソースからビルドするという手もありますが、開発環境を構築するのが目的ではなく、その開発環境を使用してソフトウェアを作ることが目的ですので、大抵の場合、準備段階で非標準なことや、あまり余計な仕事を増やさない方が得策です。
例えば、2020年2月に新環境でQt 5.15.2を選択すると Visual Studio 2019が決まりですし、Intel Parallel Studio XE 2020 が選択されることとなります。 これらは、いずれもインストールに結構時間がかかりますので、注意が必要です。
構築した環境のチェック
また、開発環境構築の初期段階では、ターゲットのソフトウェアのプロジェクトをQt CreatorやVisual Studio のIDEにインポートして、正常にビルドできるまで調整する必要があります。 もちろんその後、回帰テストを重ね、インストールパッケージの作成・テストインストールまでが一連の工程になります。
ここで、これらのチェックやテストのためのスクリプトやバッチを作成して、その手順を明確にしておくことが非常に重要です。 新環境を作成したとき、これらの変更も必要ですがその変更部分が、実は環境の違いを示していることにもなります。
基本的に、新旧の環境で回帰テストの結果が一致しておれば、新環境の構築は一段落したと考えて良いでしょう。