DoError

大阪府在住 新たな趣味を模索中

何か作りたいものをなにで作るかを考える①

なにで作るかを考える

システムをローンチする

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版」

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を使って必要な部分のみを動的に更新することで、よりスムーズなユーザー体験を提供します