この記事は Up&Coming という雑誌へ寄稿している内容とほぼ同一のものです。Up&Coming はフォーラムエイトさんという会社が発行している広報誌で、縁あって僕も記事を書かせていただけることとなりました。
「IT ならなんでも!」というご依頼だったのでネタチョイス的にこのブログとも相性がよく、寄稿した内容もブログに投稿することにしました。よければ本誌のほうもぜひお読みください(ネットで無料で読めます!)。
=====
最初の話題は何にしようかと考えたところ、自分のブログが広く読まれるきっかけになった「フリーソフト」というキーワードがふさわしく感じられました。これは筆者のブログでもある種「初めて」のことでしたし、「本誌 Up&Coming での初めて」とも掛けられそうです。
Windows ユーザーにとって重要な文化であるフリーソフトの変遷、現代のデスクトップアプリケーション開発に用いられる主要な技術。これらを俯瞰しつつ短めに要約してご紹介します。
.NET Framework とフリーソフト全盛期
「フリーソフトといえば」のイメージ、みなさんはきっとこのようなものを思い浮かべるのではないでしょうか。
![筆者が開発した「ぜんぶひらく」というフリーソフト](https://mirumi.in/wp-content/uploads/3d46a548c170ba3731a532f1d4388608.png)
ちなみにこれは筆者が昔に開発した「ぜんぶひらく」というフリーソフトです。
これは Microsoft が提供している .NET Framework というものを使って作られています。マウスを使って各 UI 部品(ボタンや入力フォームなど)を設置していけるのが特徴で、この手軽さが受けたのか多くのプログラマを惹きつけることとなりました。ハードウェア畑であっても、デバッグツール等の開発のために VB や C# などに触れた経験をお持ちの方も多いかもしれません。
![Visual Studio](https://mirumi.in/wp-content/uploads/af7fb79b039696f8896143778a63203e.png)
統合開発環境(Microsoft Visual Studio)上で UI 部品を設置していくところ。
利用できる GUI パーツ(「コントロール」と呼ばれる)の一覧は、筆者がオリジナルのイラスト付きでまとめたページがありますのでご興味あればご覧ください。
https://mirumi.tech/dotnet-control-list
GUI によってユーザーからのデータ入力を受け取れるという特徴のほかに、なんといっても Windows ネイティブな機能をラップした API に簡単にアクセスできるというのも大きな魅力でした。これがあるからこそフリーソフトの覇権を取れたと言えるでしょう。開発者側の自由度も高く、OS のカスタマイズソフトを作れるという意味でも流行の礎になったと考えられます。
![.NET Framework のアーキテクチャ概要図](https://mirumi.in/wp-content/uploads/cbd1b6393c137ade5b92f19861437702.png)
.NET Framework のアーキテクチャ概要図。複数のプログラミング言語の差分を吸収しつつ、Windows の機能にアクセスできるクラスライブラリ群などを使用して実行バイナリをビルドしていきます。(出典:https://dotnet.microsoft.com/ja-jp/learn/dotnet/what-is-dotnet-framework)
また、当時は JavaScript をはじめとする「ウェブ系」といわれるようなプログラミングがまだ成熟していなかったことも .NET Framework が人気を獲得できた理由のひとつだったのではと筆者は考えています。手軽に GUI を構築できるソリューションとして画期的だったわけですね。
※.NET Framework はいわゆるウェブアプリケーション領域のフレームワークとしてもその機能を提供していますが、ここでは狭義のニュアンス、つまりデスクトップアプリケーション分野に限定した形でお話しています。
UWP の登場と衰退、そして別種のフレームワークの普及
その後しばらくの間は .NET Framework の時代が続きますが、上述したようなブラウザベースのプログラミングが流行ってきたこともあり、「よりリッチでモダンな UI を持つクロスプラットフォームなデスクトップアプリケーションを作れるようにしよう!」という機運が高まってきます。
ここで Microsoft は UWP (Universal Windows Platform) という新しいフレームワークを発表することになりますが、残念ながら(筆者が知る限りでは)これはあまり流行ることなく衰退へと向かってしまいます。
※実は UWP の前に WPF (Windows Presentation Foundation) というものもあったのですが、今回は割愛します。
![UWP のアーキテクチャ図](https://mirumi.in/wp-content/uploads/ac5767ee625646e03049d776aed30b9c.png)
Microsoft が新しく発表した UWP のイメージ図。(出典:https://learn.microsoft.com/ja-jp/visualstudio/cross-platform/develop-apps-for-the-universal-windows-platform-uwp)
流行らなかった理由は大きく 2 つ挙げられるでしょう:
- UWP は Windows 10 以降でのみサポートされましたが、Microsoft が予想した以上に Windows 10 にアップグレードするユーザーが少なく、この時点で供給の幅を大きく狭めてしまいました。
- これまででいうところの「フリーソフト」とは、個人開発者が自分のホームページで実行ファイルを直接配布できたりする可搬性に良さがあったと思われますが、UWP は Microsoft Store からインストールするしかないという点で非常に大きな制限となりました。そもそも現在ですら Microsoft Store はあまり受け入れられていません。
※開発用として Microsoft Store を介さないで配布する方法(サイドローディング)も一応存在はしています
その他、主にセキュリティを目的として、フレームワークから実行できる Windows 機能にも制限が追加されました。こうなると既存のフリーソフト群を置き換える能力としては足りない部分も多かったでしょう。
そして、この時代からデスクトップアプリケーション界隈にも新しい風が吹き始めます。
クロスプラットフォームという概念が広がり始めたのを機に、特定の OS の開発元(例えば Microsoft)が提供するフレームワークのみに依存する必要はない、という考え方も同時に広がることになるのです。
この例で最も代表的なのは Electron でしょう。「JavaScript ベースで記述された UI の制御プログラムをそのままデスクトップアプリケーションの GUI として扱う」という趣旨のフレームワークで、Windows や macOS 用のアプリケーション作成はもちろん、Web ページで提供されているサービスと実装を共通化することさえ可能です。
※皮肉なことに、Electron の開発元であった GitHub はその後 Microsoft に買収されることになりますが…。
![「ぜんぶひらく」の Electron で書き直したバージョン](https://mirumi.in/wp-content/uploads/0c228127c9f896b3873458fdcc14a716-1999x1196.jpg)
前述した筆者開発の「ぜんぶひらく」を Electron で書き直したバージョン。ウェブ上でよく見られるようなインターフェースを採用しています。
Microsoft の「Visual Studio Code」やコミュニケーションツールのデファクトスタンダードである「Slack」など、現在では必須レベルに普及しているアプリケーションが実際に Electron で開発されています。
ただし、本記事としても重要視したい点ですが、「これはいわゆる "フリーソフト" なのか?」という観点があると思うのです。
たしかにフリー(free: 無料)なソフトウェアではありますが、私たちが考える「フリーソフト」というイメージとはなんだか少し離れているような気がしませんか?
これは、いかに .NET Framework による初期のフリーソフト大流行が圧倒的なものであったかを物語るとともに、フリーソフトという言葉には実質的な「役割のラベル付け」もあるのではという示唆に思えます。
例えば、Electron の例として挙げられる著名なソフトは「ブラウザでも提供されているサービスがデスクトップクライアントになっただけ」という意味でいえば「単なる窓口の違い」です。この印象の強さから、従来でいうところの「OS の動作をカスタマイズしたりするようなソフトとは違う」というイメージを持ってしまい、結果として「フリーソフトという言葉に期待する役割とちょっとずれているかも…」となるのではないでしょうか。
これは筆者の一意見に過ぎませんが、現代で提供されるサービスの開発方針が、歴史ある「フリーソフト」という言葉に複雑に絡みあっていく、というのはとても興味深いですね。
フリーソフトという言葉はなんと日本独特のものです。近い用語に「フリーウェア」というものがありますが、こちらは本当に「無料のソフトウェア」というニュアンスに振り切っていると考えていいでしょう。
フリーソフトという文化自体が日本独自に発展したものであるとなると、歴史としてはより面白く感じられますよね。
Windows 10 以降の真のスタンダードになれるか、新生 .NET や Windows App SDK
Electron をはじめとするクロスプラットフォームなデスクトップアプリケーション開発用フレームワークというものが流行るようになり、Microsoft も挽回するべく新たな手を次々と打ち出してきました。
いまでは 2024 年にサポート終了が発表されている「Xamarin」や、ウェブアプリケーションフレームワークとしても開発されていた「.NET Core」がその代表例となるでしょう。
しかしこれらは結局「.NET」という新生のフレームワークに統合される形となり(従来と違い .NET の後ろに何もつかないのが名前の違いです)、これまでの開発成果を総力戦で利用しようとしている感が伺えます。
では、私たちがフリーソフトと呼んでいた従来の .NET Framework の潮流は現在どのようになっているのでしょうか。これは、直接的な関連が示されているわけではありませんが、おそらく Windows App SDK (旧 Project Reunion) というプロジェクトが引き継いでいると思われます。
![Windows デスクトップアプリケーション開発フレームワークの関係](https://mirumi.in/wp-content/uploads/a80e2b1cf809f82f2c6fd2391b698a05.png)
Windows App SDK の立ち位置。(出典:https://ascii.jp/elem/000/003/047/3047136/img.html
Microsoft も UWP の反省などから「やはりユーザーは .NET Framework のような立ち位置のものを望んでいるのでは」ということに気がついたようで、「クラシックなアプリケーションからモダンな UI や API にアクセスできるようにする & UWP でアクセスできなくなってしまった主要な API にも対応できるようにする」という本当の意味での統合を目指したプロジェクトです。
Windows App SDK に内包される UI セットは「WinUI 3」というものですが、これは簡単にいうと「Windows 10 や 11 の純正の [設定] アプリの UI」です。
![Windows Settings](https://mirumi.in/wp-content/uploads/62795f596cb2cb25fed85a8c7c56ef22-1999x1468.png)
WinUI 系の見た目イメージ(筆者の個人情報部分は塗りつぶしています)。
この時代になると Windows 10 は十分に普及しているといえるレベルになっていたため、動作環境の幅の問題はクリアできています。インストール方法については、UWP よりはサイドローディングはやや行いやすくなりましたが、やはりまだいくつかの追加の手順を必要とします。Microsoft Store の普及も時間によって多少推進されたかもしれませんが、ここはまだまだ改善の余地がありそうです。
以上のように、Windows を取り巻くフリーソフトという文化、およびデスクトップアプリケーションの開発事情というのは一定の関連があるのでは…と筆者は考えています。
これからの Microsoft のデスクトップアプリケーション戦略が気になるとともに、我々日本人のフリーソフト文化がどのように発展していくのかもとても楽しみですね。