ST_FUNC開発日記

建築構造設計Excelアドイン開発の記録

建築構造設計用Excel Online アドイン計画

建築構造設計は計算用のプログラムがいろいろあるが、ちょっとした計算をするときに、Excelを使うことはよくある。 その時に断面性能や許容応力度を求める式は、数式だけでも十分作れるが、地味に面倒な計算もあったりするので(鉄骨のfbとか)それ用の関数があると便利だとは思う。

既存の構造計算用のExcelアドインは以下のようなものがある。

STLIB

構造計算用EXCELアドイン

X-FUNX

X-FUNX

どちらもxlaとVBA(とdll)を使ったアドインのため、Excel Onlineでは使うことができない。

本格的なアドインを作ろうとするとVSTOという技術がある。

.NetFrameworkで動くもので、.Net standardのライブラリを使えるため、デスクトップアプリに対してはしっかりした開発ができるし、計算速度も非常に速い。

しかし現状ではExcel Onlineには対応していない。.Net Coreがあるし、いつか対応することを信じて、.Net Standardを使いながらVSTOでアドインを開発しようかな、と思ったが・・・

Visual Studio を使用して Office 用 VSTO アドインを作成する | Microsoft Learn

上記ページを見ると下記のようなコメントがある。

重要

VSTO .NET Framework に依存しています。 COM アドインも .NET Framework を使用して記述することができます。 Office アドインは、.NET Core と .NET 5+ (.NET の最新バージョン) では作成できません。 これは、.NET Core と .NET 5+ を .NET Framework と同じプロセスで動作させることができず、アドインの読み込みエラーが発生する可能性があるためです。 引き続き .NET Framework を使用して、Office 用の VSTO アドインと COM アドインを記述できます。 MicrosoftVSTO または COM アドイン プラットフォームを、.NET Core または .NET 5+ を使用するように更新することはありません。 .NET Core と .NET 5+ (ASP.NET Core を含む) を利用して、Office Web アドインのサーバー側を作成できます。

これによると、今後VSTOを発展する気はないらしい・・・。

Microsoftは最近はクラウド屋さんになりつつあるので、もしかしたらもうデスクトップのOfficeは見限る準備を始めているのだろうか?

将来的にExcelは全部オンラインでやりましょうみたいな時代が来ないとも限らない。

やはり、Excel Onlineで使えるようにしてみたい。Excel Onlineはどこでも使えたり、無料で使えたりメリットも大きい。

テストのときに感じた計算速度のすさまじい遅さ(1つの計算に1秒)は実用には現実的ではない気もするが、 将来的に速度が改善されることを信じる。


21:00追記

夕方実験したときは、計算はそこそこ大量にやってもスムーズに行われた。

家の通信環境はそんなに良くないので、回線速度が影響しているのかも。

ということは、サーバーをちゃんとしたところにすればそれなりに実用的になるかも?


言語については

カスタム関数プロジェクトの作成 - ST_FUNC開発日記

で書いたとおり、言語はJavaScriptかTypeScriptの2択であるが、数値計算という観点から型付けは重要と考え、TypeScriptを用いる。

しかしTypeScriptだとweb以外では使わないので汎用性に欠ける気がするんだよな・・・。使いやすいのPythonC#(かせめてc++)を使いたかった。

とおもって、上の文章をよく見るとサーバー側はASP.NET Coreで作れるの??

ワクワクしながらVisual StudioExcelアドインWEBのプロジェクトを作ってみたが、結局functionのところはJavaScriptになっていた。

そうすると、別言語を使おうとすると結局TypeScriptから呼び出せるかどうか、という話になってくる。 直接呼び出すとすると

などがある。また、webAPIを経由して呼び出すという選択もある。

しかし、いずれにしてもコードがかなり複雑化しメンテナンス性に欠ける。そもそも検証も大変・・・。

TypeScriptでライブラリを作るデメリットは下記のようなものがある

  • 速度が遅い
  • 汎用性に欠ける

しかし、速度に関しては、どちらかというとapi呼び出しの通信速度のほうが影響が大きそうなので、あまり気にしないでいいんじゃないかという気がする。 また、そんな複雑な計算をするつもりはないので、ライブラリを他で活用できなくてもいいんじゃないかな、とも思う。

それよりシンプルで分かりやすいメリットのほうが勝りそう。

ということで、まずはTypeScriptオンリーで行ってみることにする。ライブラリのほうは将来的にいいのが出てきたら中身を変更してもいいわけだし。

長々と書いたが、結局TypeScriptを使ったExcel Online用のアドインを作ってみようと思う。

現時点の計算速度などを見ていると本格的な設計で使うようなアドインにはならなそうだが、ちょこっとした計算を電卓代わりにやってみる程度はできるんじゃないかな。 クラウド化の時代にどう向き合うか、という実験的な意味合いが強いかも。

アドイン名のST_FUNCはSTructure FUNCtionから。建物モデルの共通フォーマットであるST-Bridgeをリスペクトしてこう名付けた。

関数の命名等の規則は、共通フォーマットであるST-Bridgeを参考につけていこうと思う。そうすると直感的に使いやすいかなと。

XFUNXやSTLIBも参考にしながら、まずは簡単な断面性能を計算できるようにしてみようかと考えている。

技術屋はブラックボックスだと使いたくないと思うので、オープンソースで開発していこうと思う。ので、開発を協力してくれる人大歓迎です(一人で作り切るのはたぶん無理)。