PrePoMax開発秘話 (開発者インタビュー)

# まえがき
PrePoMaxとはオープンソースのFEMプリポストインターフェースです.
開発者はスロベニア共和国 University of Maribor の [Matej Borovinšek](https://www.linkedin.com/in/matej-borovin%C5%A1ek-0b8569b5/?originalSubdomain=si)(マテイ ボロヴィンシェック)先生.

https://prepomax.fs.um.si/

先生とは2019年に知り合い, 今年(2022年)は3ヶ月間University of Mariborに滞在して研究を行っています.
折角の機会と思い, Matej先生にPrePoMax開発の背景や裏話を伺いました.

これをきっかけにOpenCAE普及の一助となれば幸いです.
それでは早速どうぞ!

# 開発者インタビュー
![Matej Borovinšek先生](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/219949/3cb8ba7e-8c5b-d5f0-e8bd-0cb7f50c34e0.jpeg "Matej Borovinšek先生")

## 改めてPrePoMaxとはなにか教えてください
PrePoMaxはエンジニアが有限要素法ソルバを簡単に使えるようにするためのオープンソースソフトウェアです.
現在はオープンソースのソルバであるCalculiXに対応しています.
モデルの準備, 実行, 結果の評価など, **有限要素解析(FEA)を行う上で必要な複数のステップを1つのソフトウェアで実現しよう** というものです.

CAEの分野ではメッシング, ソルバなどオープンソースソフトウェアが多くありますが, それぞれのソフトがそれぞれの挙動を持ち, FEAを行うためには自分で全てを組み合わせる必要がある, というのが課題としてありました.
研究者であれば使いこなせるようになるまで時間を掛けて勉強しても良いかもしれませんが, 現場のエンジニアはもっとユーザーフレンドリーでサクッと結果が出てくるものを求めています.
その要求に答えるのがPrePoMaxです.

## どんなきっかけで開発を始めたのでしょうか?
Abaqusを使って授業などをしていた当時, ある学生たちが相談しに来ました.
彼らは企業のバックグラウンドがあり, 社内のプロジェクトで使うためにFEAを勉強したいということでした.
しかし1つの小さなプロジェクトで使いたいだけらしく, Abaqusのような高額な商用ソフトを使うのは理に適わない.

そこでオープンソースなものを使って教えようと思ったんですが, 5つぐらいの異なるソフトウェアを連携させて使う必要がありました.
決してエレガントとは言えないし, 限られた時間の中で学生に全てを教えるのは不可能でした.

 **有限要素法を学び始めたばかりのような初心者にも気軽におすすめできるものが欲しい.** 
プログラミングは元から好きだったので, もしかしたらこれは自分でなんとかできるかもしれない, と思ったのがきっかけでした.
ただ当時はどんな結果になるかなんて考えていなくて, とりあえず試しにやってみようか, ぐらいの気持ちでした.

最初のアイディアは, どこか他で作ったメッシュを読み込んで, GUIで境界条件の設定や解析, ビジュアライズなどができるソフトを作ろうというものでした.
これは2015年の話で, PrePoMaxという名前もまだ無い状態でした.
まともに動く最初のバージョンができるまで半年ちょっとかかったと思います.
そのうちジオメトリをどう扱えばよいかといった知識もついてきて, じゃあ次はメッシュも切れるようにしよう, その次は… といった調子で少しずつ機能が増えてきました.

基本的には, 良いライブラリが存在するならそれを使う方針で開発しています.
PrePoMaxは仕事の一部でしかなく, あまり多くの時間を割くことができないためです.
ジオメトリはOpen Cascade, メッシュはNetGen, ソルバはCalculiX, ビジュアライゼーションはVTKといった形で, ユーザーが中身を気にしなくて良いように, それらを1つのソフトウェアとしてまとめています.

これは思ったよりも簡単ではなくて, UIはC#で書いていますが, ライブラリはC++だとか他の言語で書かれていることもあるので, どうやって統合するかという問題があります.
統合は必ずしも完璧とは言えないですが, **ロバストであることを第一に** やっています. 少なくともクラッシュして動かないということは避けたい.

## 開発で一番難しいのはなんでしょうか?
技術的に困難でどう解決すれば良いかわからない, という場面は少ないように思います.

1年を超えるような長期プロジェクトを一人でやるには, モチベーションの維持が大変です.
これについては, 私の場合プログラミングが好きなのであまり問題ではありませんでした.

同時に, 大きなプログラムを書くには, 小分けにして考えて小さなステップを積み重ねていくことが必要になります.
これができたらあとはコツコツと書いていくだけですが, 量をこなすにはとにかく時間がかかる.
この **コードを書く時間を確保することが一番難しい** です.

私のメインの仕事は大学での教育で, それ以外にもちろん研究もしています.
実は開発を始めて最初の3~4年は, 週末や夜などの自由時間にやっていました.

しばらくして, 韓国の[KIMM](https://www.kimm.re.kr/eng) (韓国機械研究院)という機関から予算を頂けることになりました.
PrePoMaxはUniversity of Mariborの授業にも使われるようになり, 今では勤務時間中にも開発しています.

ただ特に最近は忙しいので, 1~2ヶ月近くコードに触れていないと思います.


## 開発の最終的なゴールはあるのでしょうか?
本当の意味で"最終的なゴール"はありません.
ソフトウェアは常に進化し続けるため, 終わりはないのです.

商用コードは大掛かりな開発をしているため, 当然機能も豊富です.
そうしたものと比べるとPrePoMaxはまだまだ機能も少なく, やりたいことはいくらでもあります.
全てを実現しようと思うと, それは終わりのない旅路となるでしょう.

開発をしていると, 新機能を追加するために出戻りが必要になることがよくあります.
例えばメッシングを追加したときは, 開始当初は想定していなかった機能だったので, 既存のコードを大幅に書き換える必要がありました.
これは効率が悪いように見えるかもしれませんが, 最初から全てを事前に計画するのは不可能です.

だからこそ, **1つずつ目の前のことを積み重ねていくのが重要** なのです.

## 現在計画している追加機能があれば教えてください
まずはなんといっても, **動的陽解法のサポート** ですね.
これはKIMMとも合意が取れていて, プロジェクトは既に始まっています.
ただ先程も言ったように時間が中々取れず, 少し計画より遅れ気味です.

他に考えている大きなアップデートは, volumetric meshをサポートするためのmesherの変更です.
六面体メッシュを使えるようにしたいのですが, オープンソースで良いものがあまりなく, チャレンジングな開発になります.
無くはないのですが, 利用が難しかったりするんです.
具体的にいつのアップデートでというのはわかりませんが, 将来どこかのタイミングでは確実にやりたいと思っています.

ユーザーからのフィードバックで多いのは結果解析機能の追加についてですね.
多少のグラフが作れる機能は既にありますが, 更に詳細な解析をできるようにしたいです.
あとは複合材のサポートですね. これはCalculiXではサポートされているのですが, PrePoMaxではまだです.
特に難しいということではないんですが, 実装するには時間が必要です.

## 開発方針はどのように決めているのでしょうか?

どんな機能を実装するか, 最初は自分が使いたいからという理由で決めていましたが, ソフトウェアを公開して時間が経つにつれてユーザーからのリクエストも増えてきました.
メールで受け付けるのが大変になり, ユーザーフォーラムも作りました.

実はユーザーフォーラムは管理が大変そうだと思ってあまり乗り気ではなかったんです.
しかしとてもありがたいことに, 今では[Jakub](https://www.linkedin.com/in/jakub-michalski-55b688185/?locale=en_US)が助けてくれています.
彼はポーランドにいる博士課程学生で, AbaqusやCalculiXにとても詳しんです.
Jakubはフォーラムでほとんどの質問に答えてくれていて, とても助けられています.

当初はexe配布だけだったのを, オープンソースにしたのもフォーラム開設と同時期です.
オープンソースにすることで他の人がコントリビュートしてくれるのは良いですが, それを全て管理するのが大変だと思ってexeだけ配布していました.
まあただ結局は, オープンソースにすることを決めました.

実際, ユーザーインターフェースというのは色々なコンポーネントが密接に絡み合っていて, 変更を加えるのが大変なんです.
まず全体像を把握して, 変更がどこまで影響するのかしっかり考えないといけない.
これまでに他の開発者がコントリビュートしてくれたこともありましたが, 上のような理由もあって, 比較的独立したモジュールに対するコミットでした.

## 最後に, ユーザーに対してメッセージがあればお願いします
ぜひお願いしたいのは, **何か問題があったらそれを報告してほしい** ということです.
テストしないといけないことがあまりにも沢山あるので, 報告がないと問題がいつまでもそのままになってしまうかもしれません.

自分のミスかもしれないとかそういうことは気にしないでください.
とにかく動かなかったら教えて欲しい.
受け取ったら我々が, PrePoMaxのバグなのかユーザーのミスなのかWindowsのバグなのか切り分けていきます.

あとは新機能の要求とか, 直してほしいこととか, どんどんフォーラムを使ってください.
要求は多ければ多いほど嬉しいです.
数ヶ月とかで対応することは難しいかもしれませんが, 将来どこかのタイミングで反映させていきます.

最後に伝えたいのは, **計算結果は注意して使ってほしい** ということです.
オープンソースコードは特に, 商用コードに比べてテストが手薄になっている場合があります.
例えソフトウェアが完璧に動いているとしても, その結果の利用に責任を持つのはユーザー自身です.
他のコードと結果を比較したり, 常に全てをダブルチェックし, 今までの知識を総動員して何が起きているのかを考えてください.
綺麗なビジュアライゼーションに惑わされて結果を盲目に信じ込むだけでは, いつか上手くいかないときがやってきます.

# Q&Aコーナー
Twitterにて開発者への質問を募集しました.
以下, その回答です.

https://twitter.com/SagittariusChi3/status/1590382091258449920?s=20&t=kp-gWayGPqBpngng1QybIA

## 1) 日本のユーザーについてどのような印象をお持ちでしょうか？

日本にはPrePoMaxの書籍があることを知っているので, ユーザーがいるのだろうとは思っています.
しかし残念ながら, 日本のユーザーからフィードバックを頂くことはあまりありません.

恐らく言語の壁が一番大きいのだろうと思いますが, 最近は機械翻訳の性能も十分上がっています.
ユーザーには様々な国の人がいますし, 私も英語を完璧に話すことはできません.
言語が完璧かどうかは重要ではなく, 言いたいことが伝わるのが重要です.
もし質問などがあれば, まずは試しにフォーラムにポストしてみてください.


## 2) 英文マニュアルのライセンスは何ですか？　和訳に対する許諾が必要ですか､それとも自由にできますか？

ドキュメンテーションのライセンスは書いていなかったと思いますが, 翻訳は自由にして頂いて構いません.

ドキュメンテーションの殆どはJakubが書いてくれました. [Ihor](https://www.linkedin.com/in/ihor-rokach-8023a31/?originalSubdomain=pl)も手伝ってくれたと思います.
二人共ポーランドにいますが, Ihorはウクライナ出身なのでロシア語翻訳も作ってくれました.

彼らの名前は最初のページに書いてあります.
翻訳を作る場合, 著者の名前, そして翻訳者が誰なのかということは最初のページで明記されるべきだと思います.

もし自分で新しいマニュアルを作りたいのであればそれも良いと思います.
その場合もぜひ著者は書いてください.

## 3) Youtubeの動画に日本語のアテレコ（revoicing）をしても良いですか？

はい, 構いません.
動画を良くしようとする取り組みである限り(つまり悪用でなければ), どんな風に使っていただいても良いです.

私の動画はほとんど音声無しですがそれに日本語で解説を加えてもいいし, 音声有りの動画の吹き替えでも良いです.
動画はもちろんご自身のチャンネルに上げて頂いて構いません.
どこかに, Video by~, Voice by~といった情報はあるといいかもしれませんね.

Jacubも[FEAnalyst](https://www.youtube.com/@feanalyst4302)というチャンネル名でYoutubeに動画を上げています.
彼の動画は音声付きが多かったと思います.
彼の動画を吹き替えたい場合には, 私は答えられないので, 彼に直接コンタクトしてみてください.

https://twitter.com/ShibataRyoichi/status/1590454988924674048?s=20&t=g__BtVUM5zIJn6HCDqJFsQ

## 4) 日本語表示の可能性はありますか？どのような協力があれば実現できますか？

開始当初多言語対応を考えたこともありました.
ただかなり大変な作業になります.
またスロベニア語, ドイツ語あたりであれば自分でチェックできますが, 日本語のように知らない言語だと翻訳が正確なのか確かめるために信頼できる人の協力が必要になります.

UIは多言語で表示しようとするとテキストボックスの大きさをダイナミックに変えなければいけないので, その大変さもあります.
もちろんそうした問題を解決するためのライブラリもありますが, 労力を鑑みて採用しませんでした.
そのため, これから多言語対応をしようとすると全面的なコードの書き換えが必要になる可能性があります.

もちろんNoではないですが, 多言語対応するとしてもかなり遠い将来のことになるでしょう.

# あとがき
非常にお忙しい中, 快くインタビューを引き受けてくださいましたことに, この場を借りてお礼申し上げます.
Matej先生は思いやりと気遣いに溢れる人柄で, ディスカッションしていると, 圧倒的な知識量と深い洞察力でいつも多くのことに気付かされます.

先生のライフワークとなっているPrePoMaxですが, 単純に研究者としてのキャリアを積んで職位を早く上げたいならソフトウェア開発は業績にならないから得策ではないと仰っていました.
それでも自分の信じるものに向かって突き進む姿勢, 見習っていきたいと感じました.

本記事の感想やコメントなどありましたら, QiitaもしくはTwitter等にてぜひお寄せください.
ご覧いただきありがとうございました!


:::note warn
本記事は, 直訳を避け会話の意図がなるべく伝わることを優先して執筆しています.
そのため本文中に不正確な記述などがある場合, それは訳者の責任によります.
:::