エンバカデロでは、Delphi、WPF .NET Framework、Electronの3つをWindowsデスクトップアプリケーション構築の観点で比較するホワイトペーパーの執筆を委託しました。 同書で使用したベンチマークアプリケーションは、Windows 10 Calculator(電卓)のクローンですが、3名のDelphi MVP(Most Valuable Professionals)の有志、1名のフリーランスのWPF開発者、1名のフリーランスのElectron開発者のエキスパートによって、それぞれのフレームワークによって再構築されたものです。このブログ記事では、ホワイトペーパーで機能比較において使用された、長期的な実現可能性について説明していこうと思います。
Table of Contents
長期的な実現可能性
企業が開発支援フレームワークとしてDelphiを選択する場合、一定の初期費用とオプションの年間更新費用を支払うことで、独自のフレームワーク(ランタイムライブラリのソースコードを含む)に投資することになります。このコストによって、安定性と後方互換性を備え、成長性のあるフレームワークを獲得でき、将来にわたってアプリケーションが存続し、サポートとメンテナンスを継続できると確信をもつことができます。
.NET FrameworkのWPF(Windows Presentation Foundation)は、Microsoftがフルサポートするリーズナブルなフレームワークを企業に提供しますが、Microsoftの選択肢がもたらす課題のすべてを含んでいます。WPFは、Delphiよりも歴史は短く、2018年にオープンソース化されました。ほとんどのWindows向け開発で独自の.NET Frameworkとの連携が必要であるものの、GUIの構築という観点から見れば、長期的な見通しも悪くありません。Microsoftによれば、.NET Framework 4.8は、2019年4月18日にリリースされた最終版ということになります。
Electronは無料のオープンソースフレームワークで、すべての主要なオペレーティングシステムでアプリケーション開発できる環境を、企業に提供します。しかしながら、Electronの先行きは不確実です。ElectronプロジェクトはGitHub上で進められていますが、それは現在ではMicrosoftの子会社です。比較した3つのフレームワーク中で最も歴史が短く、まだ発足間もないハネムーン期間といったところです。Electronには、企業にとって選択肢となる、ネイティブIDEはなく、統合コンパイル機能やテストライブラリの搭載といった利便性も排除されています。企業がElectronで内製ツールを開発する場合、他のフレームワークと比較して難題に直面することになると予想されます。
それでは、各フレームワークについて詳細を見ていきましょう。
Delphi
Delphiは、1995年の登場以来、成長、成熟、拡大を続けてきました。1995年に作成したアプリケーションであっても、最小限の変更で現在のバージョンのDelphiに移植できるほど、下位互換性が維持されています。包括的なドキュメントがメンテナンスをサポートしており、製品のアップグレードや移行、トラブルシューティングには、サポートサービスを利用することができます。本記事執筆時点で、Delphiの最新バージョンは、2020年9月2日にリリースされたRAD Studio 10.4.1 Sydneyです。過去のリリースの詳細について知りたい場合は、過去のリリースノートを参照してください。
プログラミング言語のタイムラインによれば、C++は1983年、Pythonは1991年、Javaは1995年、PHP、JavaScriptも1995年に登場しています。そして、Delphiも1995年に誕生しています。1995年は、数多くのプログラミング言語が誕生した年でした。Delphi Anniversary Webサイトには、1995年から現在までのDelphiのリリースタイムラインが掲載されています。以下は、その過去25年間のリリースタイムラインの抜粋です。
DELPHI 1 – 1995年2月14日
16-bit Windows 3.1サポート、ビジュアル2Wayツール、コンポーネント / VCL、BDEとSQL Linksによるデータベースサポート、設計時のライブデータベースデータ
DELPHI 2 (1996年)
32-bit Windows 95サポート、データベースグリッド、OLEオートメーション、ビジュアルフォームの継承、長い文字列型、16-bit向けのDelphi 1を同梱
DELPHI 3 (1997年)
インターフェイス(COMベース)、Code Insight、コンポーネントテンプレート、DLLのデバッグ、WebBroker、ActiveForms、コンポーネントパッケージ、MIDAS多層アーキテクチャ
DELPHI 4 (1998年)
ドッキング、AnchorsおよびConstraints、メソッドのオーバーロード、動的配列、Windows 98サポート
DELPHI 5 (1999年)
デスクトップレイアウト、Frames、XMLサポート、DBGo for ADO、言語翻訳
DELPHI 6 (2001年)
構造ウィンドウ、SOAP Webサービス、dbExpress、BizSnap、WebSnap、DataSnap
DELPHI 7 (2002年)
Webアプリケーション開発、Windows XPテーマ
DELPHI 8 (2003年)
.NETサポート
DELPHI 2005 (2004年)
マルチユニット名前空間、Error Insight、履歴タブ、for..in、関数のインライン化、テーマ対応IDE、リファクタリング、uses節でのワイルドカード、データエクスプローラ、ユニットテストの統合
DELPHI 2006 (2005年)
演算子のオーバーロード、静的メソッド/プロパティ、デザイナーガイドライン、フォーム位置ビュー、ライブコードテンプレート、ブロック補完、行番号、変更バー、同期編集、コード折り畳みとメソッドナビゲーション、デバッグツールチップ、検索可能なツールパレット、FastMMメモリマネージャー、MySQLのサポート、dbExpressでのUnicodeサポート、TTrayIcon、TFlowPanel、TGridPanel
DELPHI 2007 (2006年)
MS Build、ビルドイベント、ビルド構成、Windows Vistaサポート(グラス効果、テーマなど)、dbExpress 4(コネクションプール、でれげーとドライバなど)、CPUビューウィンドウ、FastCodeの拡張、IntraWeb / AJAXサポート、ウェルカムページ、英語版、フランス語、ドイツ語版、日本語版の同時リリース
DELPHI 2009 (2008年)
Unicodeサポート、ジェネリクス、無名メソッド、リボンコントロール、DataSnap、ビルド設定、クラスエクスプローラ、タイプライブラリエディタ、PNGサポート
DELPHI 2010 (2009年)
属性、RTTIの拡張、Direct2Dキャンバス、Windows 7のサポート、タッチ/ジェスチャー、ソースコードの整形、スレッド固有のブレークポイント、デバッガビジュアライザ、ファイル/パス/ディレクトリ向けIOUtilsユニット、ソースコードの検査/測定機能、バックグラウンドコンパイル、MIDAS.DLLのソースコード
DELPHI XE (2010年)
正規表現ライブラリ、Subversionの統合、dbExpress(フィルター、認証、プロキシ生成)、JavaScriptフレームワーク、RESTサポート、Indy WebBroker、クラウドサポート(Amazon EC2、Microsoft Azure)、ビルドグループ、デバッガにおける名前付きスレッド、検査/測定およびドキュメント生成のコマンドラインサポート
DELPHI XE2 (2011年)
64-Bit Windows、Mac OSX、FireMonkey、Live Bindings(FireMonkeyおよびVCL向け)VCLスタイル、ユニットスコープ名、プラットフォームアシスタント、DataSnap(モバイルデバイス向けコネクター、クラウドAPI、HTTPSサポート、TCPモニタリングなど)、dbExpressのODBCドライバサポート、配置マネージャ
DELPHI XE3 (2012年)
Windows 8、7、Vista、XP向けMetropolis UI、FireMonkey向けのアクション、タッチ/ジェスチャー、レイアウトとアンカー、ビットマップスタイルのFireMonkeyサポート、FireMonkey 3Dコンポーネント向けの3D Materialsのサポート、FireMonkey オーディオ/ビデオ、VCLおよびFireMonkey向けセンサーデバイスサポート、FireMonkey位置センサーコンポーネント、仮想キーボードのサポート、DirectX 10のサポート
DELPHI XE4 (2013年4月)
iOSサポート(デバイス、シミュレーター、iOS App Store)、iOSの標準およびRetinaディスプレイサポート、iOSスタイル、Retinaスタイル、仮想キーボード、モバイルフォームデザイナ、TWebBrowserコンポーネント、すべてのTObjectクラス向けのiOS ARC(Automatic Reference Counting)、プラットフォームサービス、通知、位置/加速度/回転センサーコンポーネント、TListViewコンポーネント、Mac OSXフルスクリーンサポート、iOSデバイス向け配置マネージャ、FireDAC共通データアクセスコンポーネント、InterBase(IBLiteおよびIBToGo)
DELPHI XE5 (2013年9月)
Androidサポート(デバイスおよびエミュレータ)、OSバージョン: Jelly Bean、Ice Cream Sandwich、 Gingerbreadをサポート、通知コンポーネント、iOS 7スタイルのサポート、モバイルデバイス向けの設定可能なフォームデザイナ、Androidデバイス向け配置マネージャ、RESTサービスクライアントアクセスと認証コンポーネント、すべてのXE4 FireMonkeyおよびデータベース機能のAndroidサポート
DELPHI XE6 (2014年4月)
Windows 7 / 8.1スタイル、クラウドベースのRESTful WEBサービスへのアクセス、より多くのデータベースをFireDACでサポート、InterBaseサポートをフル統合
DELPHI XE7 (2014年9月)
デスクトップおよびモバイルプラットフォームの双方のFireMonkeyマルチデバイスアプリケーションのサポート、Windows、Mac、Android、iOS向けの組み込みデータベースIBLite、マルチディスプレイサポート、マルチタッチサポートとジェスチャーの変更、Android 向けの没入型フルスクリーンモード、FireMonkeyでiOSおよびAndroid向けTListViewのプルリフレッシュ(Pull-to-Refresh)機能をサポート、FireMonkeyの状態保存機能
DELPHI XE8 (2015年4月)
GetItパッケージマネージャ、FireDACの強化、新しいエンバカデロコミュニティツールバー、TListView、TSwitch、TMemo、TCalender、TMultiView、TEditのiOSネイティブプレゼンテーション、インタラクティブマップ、メディアライブラリの新しいオプション、InputQueryでマスク入力フィールドをサポート
DELPHI 10 ‘SEATTLE’ (2015年8月)
Androidバックグラウンドサービスのサポート、NoSQL MongoDBデータベースのFireDACサポート、FireMonkeyコントロールのWindows向けzOrderサポート、新しいTBeaconDeviceクラスでデバイスがビーコンになっている状態をシミュレート、Windows 10 スタイル用の新しいスタイルビューアがビットマップスタイルデザイナに追加、High-DPI対応と4Kモニタのサポート、Windows 10スタイル、IDEでのAndroidサービスのサポート、WinRT API呼び出しのサポート
DELPHI 10.1 ‘BERLIN’ (2016年4月)
Android 6.0サポート、Windows Desktop Bridgeのサポート、iOSおよびAndroid向けAddress Book、新しいListView Itemデザイナ、新しいCalendarViewコントロール、VCL向けQuickEdits、Windows向けHigh DPIサポート、Hintプロパティの変更、EMS Apache Serverサポート、GetItベースのWebインストーラ
DELPHI 10.2 ‘TOKYO’ (2017年3月)
Delphiの64-bit Linuxサポート、Linux対応DBMSに対するFireDAC Linuxサポート、MariaDB(v5.5)サポート、MySQL(v5.7)およびFirebird Direct I/Oサポート、FireMonkey向けQuickEdits、Windows 10向けの新しいVCLコントロール、IDEのルック&フィールのアップデート(ダークテーマ)、RAD Server配置ライセンスの同梱
DELPHI 10.3 ‘RIO’ (2018年11月)
Win32向けC++17、新しいDelphi言語機能、FireMonkeyのAndroid zOrder、 ネイティブコントロールとAPI Level 26サポート、Windows 10、VCL、HighDPIの改善、IDE UIのモダナイゼーション、RAD Serverアーキテクチャの拡張、品質およびパフォーマンスの改善
DELPHI 10.3.1 ‘RIO’ (FEBRUARY 2019)
iOS 12およびiPhone Xシリーズデバイスのサポート強化、RAD ServerコンソールUIの再設計とExt JSフレームワークへの移行 framework(GetIt経由で提供)、Firebird 3.0.4およびFirebird embeddedサポートの改善、Windows向けHTTPおよびSOAPクライアントライブラリの強化、2つの新しいIDE生産性強化ツール:ブックマークとナビゲーター、15の新しいカスタムVCL WindowsスタイルとマルチデバイスFireMonkeyスタイル
DELPHI 10.3.2 ‘RIO’ (2019年7月)
Delphi macOS 64-bit、Windows 64-bit向けC++17、C++ LSP Code Insightの改善、RAD Serverウィザードと配置の改善、Firebase Androidサポートの強化、Delphi Linuxクライアントアプリケーションサポート
DELPHI 10.3.3 ‘RIO’ (2019年11月)
Delphi Android 64-bitサポート、iOS 13、macOS Catalina (Delphi)サポート、RAD Server Docker配置、Enterprise ConnectorsをEnterpriseおよびArchitect版に搭載
DELPHI 10.4 ‘SYDNEY’ (2020年5月)
ネイティブWindowsサポートの大幅なパフォーマンス改善、コード補完の大幅なパフォーマンス改善による生産性向上、マネージドレコードとモダンマルチコアCPU向け並列ライブラリによるコードの高速化、1000以上の品質およびパフォーマンス改善など
DELPHI 10.4.1 ‘SYDNEY’ (2020年9月)
RAD Studio 10.4.1では、IDE、Delphi Code Insight(LSP)、並列ライブラリ、SOAP、XML、C++ツールチェイン、FireMonkey、 VCL、Delphiコンパイラ、iOS配置などの大幅な品質改善にフォーカス
WPF .NET Framework
2006年にリリースされたWPFは、.NET frameworkとともに開発されました。2018年にMicrosoftによってオープンソース化され、コミュニティの関与と近い将来の成長を示すロードマップを提供しています。.NETの大幅な変更やMicrosoftの設計上の決定が移り変わることで、WPFの長期的な実現可能性に影響が出ています。Microsoftによれば、WPF .NET Framework 4.8は、2019年4月18日にリリースされた.NET Frameworkの最終版ということになります。
WPFは、2006年に.NET Framework 3.0で導入されました。CodeProject Webサイトの記事によれば、WPFのバージョンと機能拡張は、以下のような歴史があります。
WPF バージョン | リリース(YYYY-MM) | .NET Version | Visual Studio バージョン | 主な機能 |
---|---|---|---|---|
3.0 | 2006-11 | 3.0 | N/A | ファーストリリース WPF開発はVS 2005(2005年11月リリース)で可能 |
3.5 | 2007-11 | 3.5 | VS 2008 | 以下の点での変更や改善: アプリケーションモデル、データバインディング、コントロール、ドキュメント、アノテーション、3D UI要素 |
3.5 SP1 | 2008-08 | 3.5 SP1 | N/A | ネイティブスプラッシュスクリーンのサポート、新しいWebBrowserコントロール、DirectX pixel shaderのサポート 起動時間の高速化とビットマップ効果のパフォーマンス改善 |
4.0 | 2010-04 | 4.0 | VS 2010 | 新しいコントロール: Calendar、DataGridおよびDatePicker マルチタッチと処理 |
4.5 | 2012-08 | 4.5 | VS 2012 | 新しいリボンコントロール 新しいINotifyDataErrorInfoインターフェイス |
4.5.1 | 2013-10 | 4.5.1 | VS 2013 | 大きな変更なし |
4.5.2 | 2014-05 | 4.5.2 | N/A | 大きな変更なし |
4.6 | 2015-07 | 4.6 | VS 2015 | 透過子ウィンドウのサポート HDPIとタッチの改善 |
.NET Framework 4.6.1から4.8までについては、Wikipediaの「.NET Framework Version History」ページをご確認ください。
Electron
2013年にリリースされたElectronは、GitHubによって積極的に開発/メンテナンスされており、Apple Siliconへの対応(2020年11月頃)など、新しいテクノロジーのサポートを迅速に提供しています。ただし、2020年に構築されたElectronアプリが、2030年まで存続するかどうかを判断するために必要とされる歴史と継続性の実績が不足しています。GitHubは現在、Microsoftの子会社となっています。Electronは、DelphiやWPFの代替として利用できる無料の環境で、フロントエンド開発に適しておりクロスプラットフォーム開発機能を提供しますが、IPセキュリティ、標準IDEツール、アプリケーションパフォーマンスを犠牲にしています。
Electronのリリースタイムライン(https://www.electronjs.org/docs/tutorial/electron-timelines)によれば、以下のようなリリース歴があります。
バージョン | -beta.1 | 安定板 | Chrome | ノード |
---|---|---|---|---|
2.0.0 | 2018-02-21 | 2018-05-01 | M61 | v8.9 |
3.0.0 | 2018-06-21 | 2018-09-18 | M66 | v10.2 |
4.0.0 | 2018-10-11 | 2018-12-20 | M69 | v10.11 |
5.0.0 | 2019-01-22 | 2019-04-24 | M73 | v12.0 |
6.0.0 | 2019-05-01 | 2019-07-30 | M76 | v12.4 |
7.0.0 | 2019-08-01 | 2019-10-22 | M78 | v12.8 |
8.0.0 | 2019-10-24 | 2020-02-04 | M80 | v12.13 |
9.0.0 | 2020-02-06 | 2020-05-19 | M83 | v12.14 |
10.0.0 | 2020-05-21 | 2020-08-25 | M85 | v12.16 |
11.0.0 | 2020-08-27 | 2020-11-17 | M87 | v12.18 |
12.0.0 | 2020-11-19 | 2021-03-02 | M89 | v14.x |
Delphiは商用ライセンスコストという初期費用と引き換えに、最も確かな長期的見通し、最も堅牢なIPセキュリティ、最も簡便なインハウスカスタマイゼーションを提供します。これに対し、WPFの導入障壁はより低く、よりよいアクセシビリティオプションを提供しますが、Microsoft .NET のオーバーホールに追随を余儀なくされ、カスタマイズが難しく、簡単に逆コンパイル可能であるという脆弱性を併せ持ちます。Electronは完全に無料で、3つの主要デスクトッププラットフォームのいずれでもアプリケーション開発は可能ですが、その柔軟性と長期的見通しの不確かさは表裏をなすもので、追加の開発には企業のスポンサーシップとコミュニティサポートに頼らざるを得ないでしょう。
3つの開発フレームワーク比較の詳細は、ホワイトペーパー「ベンチマークで検証!ベスト開発フレームワークとは」(日本語版)をダウンロードしてご覧ください。