なにで作るかを考える

システムをローンチする
VBAからの卒業?
最近は「Excelからの卒業」や「VBAからの脱却」といった言葉をよく耳にします。
実際、多くの企業がPower Platform(特にPowerAppsやPower Automate)への切り替えを検討・導入しているようです。
しかし、私はこう考えます。
「VBAで十分なものを、わざわざコストをかけて移行する必要があるのか?」
VBAの強みはなんといっても、Excelという身近なツールの中で、簡単かつ手軽に処理を自動化できる点です。
日々の業務改善や小さな仕組みづくりには、開発環境を別途用意せず、すぐに使えるVBAは非常に有効だと感じています。
でもVBAやPower Platformでは残念ながらローンチと言わない。私は「ローンチした」と言ってみたいのです。しかたなくVBAを卒業します・・・
インターネット上で動作するシステムをローンチするには
インターネット上で動作するシステムをローンチするには、どのような技術を使うかを慎重に検討する必要があります。
今まで培ってきたExcel VBAの知識を生かしながらも、新しい言語やフレームワークにも挑戦していきたいと考えています。
Excel VBAでは、セル(表)を基盤にして処理を簡単に記述でき、Excelという環境内だけで完結するのが特徴です。
一方で、ネット上でアプリケーションをローンチするためには、開発言語の選定や環境構築、運用の仕組みまで考慮する必要があります。
これは、VBAではあまり意識しなかった「インフラ」や「公開方法」などの新たな視点を持つきっかけにもなります。
年代別 VB / .NET Framework / .NET Core / C# バージョン一覧
| 年代 | Visual Basic(VB) | .NET Framework | .NET(Core / 5+) | C# バージョン | 主な特徴・備考 |
|---|---|---|---|---|---|
| 2002 | VB.NET 7.0 | 1.0 | - | 1.0 | .NET最初のリリース(VS.NET 2002) |
| 2003 | VB.NET 7.1 | 1.1 | - | 1.2 | Windows Forms、ASP.NET拡張 |
| 2005 | VB 8.0 | 2.0 | - | 2.0 | ジェネリクス、匿名メソッド、Nullable型 |
| 2007 | VB 9.0 | 3.5 | - | 3.0 / 3.5 | LINQ、ラムダ式、拡張メソッド |
| 2010 | VB 10.0 | 4.0 | - | 4.0 | 動的型(dynamic)、並列処理対応 |
| 2012 | VB 11.0 | 4.5 | - | 5.0 | async/await の導入 |
| 2015 | VB 14.0 | 4.6.x | - | 6.0 | 省略可能な戻り値型、静的インポート |
| 2016 | VB 15.0 | 4.6.2 | .NET Core 1.0 | 7.0 | パターンマッチ、タプル |
| 2017 | VB 15.x | 4.7 | .NET Core 2.0 | 7.1〜7.3 | switch拡張、Span型 |
| 2019 | VB 16.x | 4.8(最終) | .NET Core 3.1 | 8.0 | VB新機能停止、WinFormsは継続 |
| 2020 | 開発終了傾向 | - | .NET 5.0 | 9.0 | .NET FrameworkとCoreの統一 |
| 2021 | - | - | .NET 6.0(LTS) | 10.0 | global using、record struct |
| 2022 | - | - | .NET 7.0 | 11.0 | リストパターン、ジェネリクス強化 |
| 2023 | - | - | .NET 8.0(LTS) | 12.0 | defaultインターフェース、プライマリコンストラクタ |
学習計画について
現在のスキルを土台にしながら、以下のステップでスキルアップを目指しています
Excel VBA → VB → .NET(VB)→ .NET(C#)
いきなりC#で.NETを一から学ぶのはハードルが高いと感じたため、まずはVisual Basic 2019(Web Forms)を使って、オブジェクト指向や.NET Frameworkの基礎をしっかりと学ぶ計画です。
その後、VBで学んだ知識をもとに、より現代的な言語であるC#にスムーズに置き換えていければと考えています。
このアプローチにより、単に言語を学ぶのではなく、.NETの構造やWebアプリ開発の全体像も理解しやすくなると期待しています。
購入予定【購入済】書籍
VBA→VisualBasic2019 Windows フォーム 【購入済】
「VisualBasic2019パーフェクトマスター」
VB→.NET(VB)【購入済】
「ASP.NET Webフォームアプリ開発(VisualBasic対応)」
「ASP.NET Webフォームアプリ開発(C#対応)」
.NET(VB)→.NET(C#) ASP.NET Core
「プログラミングASP.NET Core」
「独習C# 第5版」
- 価格: 4180 円
- 楽天で詳細を見る
ASP.NET MVC Web Forms
「ASP.NET Core MVCプログラミング入門 .NET 7対応版」
Blazor
「C#ユーザーのためのWebアプリ開発パターン ASP.NET Core Blazorによるエンタープライズアプリ開発」
「VisualBasic2019パーフェクトマスター」を読んでみて
VBAのClassを理解している人であれば、この本の難易度は非常に低く感じると思います。VisualBasicは全体の半分以上は「知っている内容」で、安心して読み進めることができました。特に印象的だったのは、オブジェクト指向の解説です。YouTubeなどの動画で学ぶよりも、テキストベースで丁寧に段階を追って説明されている点が非常に分かりやすく、納得しながら読み進められました。とはいえ、やはり内容の密度は高く、一度読んだだけではすべてを理解するのは難しいと感じます。繰り返し読み返すことで、徐々に定着していくタイプの書籍だと思います。
Web向け技術の進化
ASP.NET Web Forms から ASP.NET Core まで
| 項目 | Web Forms | ASP.NET MVC | Blazor |
|---|---|---|---|
| 登場時期 | 2002年(.NET Framework 1.0) | 2009年(.NET Framework 3.5) | 2019年(.NET Core 3.0) |
| 設計パターン | イベント駆動 | MVC(Model-View-Controller) | Componentベース(SPA) |
| URL制御 | 自動(非REST) | ルーティング自由(REST対応) | ルーティング可能(ページ/SPA両対応) |
| HTMLの自由度 | 低い(サーバーコントロール依存) | 高い(Razorで自由に構築) | 高い(Razor + C#で構築) |
| 開発スタイル | WinForms的、ドラッグ&ドロップ | コード主導、疎結合設計 | SPA志向、C#中心 |
| JavaScriptとの関係 | JSは補助的 | JSは必要に応じて | Blazor Server: JS不要 Blazor WASM: JSと連携可能 |
| モバイル対応 | 弱い(Web標準未対応) | 標準的(HTML5対応) | 優秀(SPA、レスポンシブ) |
| クロスプラットフォーム | ×(Windows限定) | △(.NET Core以降で可) | ◎(.NET 6+で完全対応) |
| 今後の将来性 | 開発停止、保守のみ | 継続サポートあり | Microsoft推奨、積極開発中 |
ポイント
- Web Forms(2002~)
→ GUI的にWebを作れるが、URLやHTML制御に制約あり。現在は新規開発非推奨。
WinFormsに似たUI開発。古くなったが、レガシー案件では現役も・・・
※Web Forms
- ASP.NET MVC(2009~)
→ コードとビューの分離、テストしやすい構成に
HTML制御、SEO、疎結合などモダン設計向け。現在も一部で使用
- ASP.NET Core(2016~)
→ モジュール化・マルチOS・マイクロサービス対応
- Blazor(2019~)
→ JavaScript不要で、C#だけでSPA開発が可能に
C#だけでSPA開発。JavaScriptの代替や補完が可能 ※SPA
WASM版は完全なクライアント実行、Server版はリアルタイム通信(SignalR)
【ASP.NET 技術の進化系統図】
Web Forms(2002〜)
├─▶ ASP.NET MVC(2009〜2020) ─┐
│ │
└─────────┬─────────▶ ASP.NET Core(2016〜)
│
└────▶ Blazor(2019〜)
├─ Blazor Server(SignalR)
└─ Blazor WebAssembly(WASM)
※Web Forms は保守対象。現在は ASP.NET Core + Blazor が主流。
※SPA (Single Page Application) 開発とは、Webアプリケーションを構築する手法の一つで、ユーザーがページを移動する際にページ全体を再読み込みするのではなく、JavaScriptを使って必要な部分のみを動的に更新することで、よりスムーズなユーザー体験を提供します