VB 未経験者のための VB.NET 入門ロードマップ

プログラム言語

Visual Basic.NET(以下VB.NET)をやってみたいが、前世(旧バージョン)のVisual Basic(以下VB)に触れたことがないので、どうやって学べばいいのかと悩んでいませんか?

VB.NETを学ぶためのロードマップをご紹介いたします。
ロードマップの順序でたいていの人はVB.NETを身につけることができます。

ただし、BASIC以外でもプログラム言語をある程度知っていることが条件となりますので、ご了承ください。

  1. ①開発環境の準備
  2. ② 基本文法を学ぶ
  3. ③ .NET の基本ライブラリを使う
  4. ④ オブジェクト指向(OOP)の基礎
  5. ⑤ GUI アプリ開発(Windowsフォーム)
  6. ⑥ データベース操作(ADO.NET / Entity Framework)
  7. ⑦ 実務レベルの応用
  8. ⑧ C# との比較も学ぶ(おすすめ)
  9. 学習順まとめ(ステップ表)
  10. VB.NET サンプルコード集
    1. 1) 基本文法(Console)
      1. 1-1 変数・条件分岐・繰り返し
      2. 1-2 関数・ByVal/ByRef・オプション引数
    2. 2) 例外・ファイル・日時
      1. 2-1 例外処理(Try…Catch…Finally)
      2. 2-2 ファイル入出力(UTF-8)
      3. 2-3 日付・時刻
    3. 3) OOP(クラス・継承・インターフェース)
      1. 3-1 クラスとプロパティ
      2. 3-2 継承・オーバーライド・インターフェース
    4. 4) コレクション・LINQ
      1. 4-1 List / Dictionary
      2. 4-2 LINQ(Where/Select/OrderBy)
    5. 5) 正規表現・文字列処理
      1. 5-1 Regex(メール検証)
      2. 5-2 文字列補間・Split/Join
    6. 6) 非同期 I/O(HttpClient + JSON)
    7. 7) JSON シリアライズ/デシリアライズ
    8. 8) ADO.NET(SQLite で CRUD)
    9. 9) Windows フォーム(イベント処理の基本)
      1. 9-1 ボタンでテキスト表示(Form1.vb の例)
      2. 9-2 タイマーで現在時刻を表示(Label1 と Timer1)
    10. 10) 実務で役立つミニツール
      1. 10-1 CSV を読み込んで整形
      2. 10-2 ディレクトリ一括処理(拡張子フィルタ)
      3. 10-3 シンプルなログ出力(日付付き)
    11. 11) 単体テスト入門(xUnit + .NET)
    12. 12) ちょい応用:拡張メソッド
  11. 使い方のヒント

①開発環境の準備

  • Visual Studio Community(無料版) をインストール
    👉「VB.NET コンソールアプリ」「Windowsフォームアプリ」などのテンプレートがすぐに使えます。
  • .NET 6 以降ならクロスプラットフォーム開発も可能ですが、最初は Windowsフォームアプリ が学びやすいです。

② 基本文法を学ぶ

まずは「VB.NET の文法の基本」から学びます。

  • 変数とデータ型 Dim name As String = "Taro" Dim age As Integer = 20
  • 条件分岐(If / Select Case)
  • 繰り返し(For / While / For Each)
  • 配列・リストの操作
  • 関数・メソッドの作成

👉 この段階では「VB6 っぽさ」ではなく、英語に近い VB.NET の書き方に慣れることが大切です。
最初から文法や専門用語をきちんと身に着けようとすると、途中でうんざりするケースがほとんどです。

初歩の頃は、アバウトな身につけ方でいいと思います。


③ .NET の基本ライブラリを使う

VB.NET は「言語」そのものより .NET Framework / .NET のライブラリを使いこなすことが大事です。

  • 文字列操作(String)
  • 日付操作(DateTime)
  • ファイル入出力(System.IO)
  • 例外処理(Try…Catch)
  • コレクション(List, Dictionary)

👉 VB.NET の文法はシンプルなので、ライブラリの使い方に重点を置くと実用的です。
プログラムが必要とする処理が、ライブラリにたいてい格納されていると言っていいでしょう。


④ オブジェクト指向(OOP)の基礎

VB.NET を VB6 と分ける最大のポイントは、オブジェクト指向言語であること。

初めは、以下の用語を軽く知っておくことぐらいでも大丈夫です。
徐々に詳しくなっていけばいいでしょう。

  • クラスの定義
  • プロパティ / メソッド
  • 継承 / インターフェース
  • インスタンス化とカプセル化

例:

Public Class Person
    Public Property Name As String
    Public Property Age As Integer

    Public Sub Greet()
        Console.WriteLine("こんにちは、" & Name & "です。")
    End Sub
End Class

⑤ GUI アプリ開発(Windowsフォーム)

  • フォーム(Form)にボタンやテキストボックスを配置してイベント処理を書く
  • 例:ボタンをクリックしたらテキストボックスの内容を表示

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     MessageBox.Show("入力値: " & TextBox1.Text)
    End Sub

👉 ここまでで「業務システムでよくある画面アプリ」は作れるようになります。


⑥ データベース操作(ADO.NET / Entity Framework)

  • SQL Server や SQLite と連携する方法を学ぶ
  • 「社員一覧を表示する」「登録フォームからデータを保存する」といったアプリが作れる

👉ADO.NET(ActiveX Data Objects .NET)やEntity Frameworkは、.NET Framework上で動作するプログラムからデータベースへアクセスするため、Microsoftが提供するインターフェースです。


⑦ 実務レベルの応用

  • ファイル変換やバッチ処理などのコンソールアプリ
  • 帳票出力(Excel, PDF 連携)
  • Web API 呼び出し(HttpClient)
  • 業務システムの保守に対応できるスキルが身に付きます。

👉ここでは、実際の実務レベルで使用する機能を実装する技術を身につけます。


⑧ C# との比較も学ぶ(おすすめ)

  • VB.NET は C# とほぼ同じ機能を持つため、文法の違いだけ理解すれば相互に応用可能
  • 今後のキャリアのために「C# のコードも読める」ようになると強みになります。

👉VB.NET と C# はどちらも .NET Framework / .NET (Core) 上で動作するプログラミング言語であり、共通の基盤を持っています。

そのため、多くの部分で類似しています。
例えば、オブジェクト指向のサポートについては、次の通りです。

クラス、継承、ポリモーフィズム、インターフェース などを両方とも利用可能で、
public / private などのアクセス修飾子や、抽象クラス・仮想メソッドも同じ概念。」


学習順まとめ(ステップ表)

  1. 開発環境準備(Visual Studio)
  2. 基本文法(変数・条件分岐・繰り返し)
  3. .NETライブラリの活用(文字列・ファイル・例外処理など)
  4. オブジェクト指向の基礎(クラス・継承)
  5. GUI開発(Windowsフォーム)
  6. データベース連携(ADO.NET / EF)
  7. 実務アプリ開発(帳票・バッチ・API)
  8. C#との比較学習(キャリア拡張)

👉 この流れで学べば、VB未経験者でもきっと半年〜1年で業務アプリ開発に耐えられるVB.NETスキルが身につきます。

VB.NET サンプルコード集

1) 基本文法(Console)

1-1 変数・条件分岐・繰り返し

Module Program
    Sub Main()
        Dim name As String = "Taro"
        Dim age As Integer = 20

        If age >= 18 Then
            Console.WriteLine($"{name} は成人です。")
        Else
            Console.WriteLine($"{name} は未成年です。")
        End If

        ' For
        For i = 1 To 3
            Console.WriteLine($"カウント: {i}")
        Next

        ' For Each
        Dim colors = New List(Of String) From {"Red", "Green", "Blue"}
        For Each c In colors
            Console.WriteLine($"色: {c}")
        Next

        Console.WriteLine("Enterキーで終了")
        Console.ReadLine()
    End Sub
End Module

1-2 関数・ByVal/ByRef・オプション引数

Module Program
    Sub Main()
        Console.WriteLine(Add(3, 5))
        Dim x = 10
        Inc(x) ' ByRef なので x 自体が 11 になる
        Console.WriteLine(x)
        Greet("Hanako")          ' 省略時は "こんにちは"
        Greet("Ken", "こんばんは")
    End Sub

    Function Add(a As Integer, b As Integer) As Integer
        Return a + b
    End Function

    Sub Inc(ByRef n As Integer)
        n += 1
    End Sub

    Sub Greet(name As String, Optional message As String = "こんにちは")
        Console.WriteLine($"{message}、{name} さん")
    End Sub
End Module

2) 例外・ファイル・日時

2-1 例外処理(Try…Catch…Finally)

Module Program
    Sub Main()
        Try
            Dim n = Integer.Parse("abc") ' 例外発生
        Catch ex As FormatException
            Console.WriteLine("数値に変換できませんでした。")
        Finally
            Console.WriteLine("後処理(Finally)")
        End Try
    End Sub
End Module

2-2 ファイル入出力(UTF-8)

Imports System.IO
Module Program
    Sub Main()
        Dim path = "sample.txt"
        File.WriteAllText(path, "こんにちは、VB.NET!" & Environment.NewLine, System.Text.Encoding.UTF8)
        Dim text = File.ReadAllText(path, System.Text.Encoding.UTF8)
        Console.WriteLine(text)
    End Sub
End Module

2-3 日付・時刻

Module Program
    Sub Main()
        Dim now = DateTime.Now
        Console.WriteLine(now.ToString("yyyy/MM/dd HH:mm:ss"))
        Dim nextWeek = now.AddDays(7)
        Console.WriteLine($"一週間後: {nextWeek:yyyy-MM-dd}")
    End Sub
End Module

3) OOP(クラス・継承・インターフェース)

3-1 クラスとプロパティ

Public Class Person
    Public Property Name As String
    Public Property Age As Integer
    Public Sub New(name As String, age As Integer)
        Me.Name = name
        Me.Age = age
    End Sub
    Public Overridable Sub Introduce()
        Console.WriteLine($"私は {Name}、{Age} 歳です。")
    End Sub
End Class

Module Program
    Sub Main()
        Dim p = New Person("Satoshi", 30)
        p.Introduce()
    End Sub
End Module

3-2 継承・オーバーライド・インターフェース

Public Interface IWork
    Sub DoWork()
End Interface

Public Class Employee
    Public Property Id As Integer
    Public Overridable Function GetRole() As String
        Return "Employee"
    End Function
End Class

Public Class Engineer
    Inherits Employee
    Implements IWork

    Public Overrides Function GetRole() As String
        Return "Engineer"
    End Function

    Public Sub DoWork() Implements IWork.DoWork
        Console.WriteLine("コードを書いています…")
    End Sub
End Class

Module Program
    Sub Main()
        Dim e As Employee = New Engineer() With {.Id = 1}
        Console.WriteLine(e.GetRole())
        DirectCast(e, IWork).DoWork()
    End Sub
End Module

4) コレクション・LINQ

4-1 List / Dictionary

Module Program
    Sub Main()
        Dim nums = New List(Of Integer) From {1, 2, 3, 4, 5}
        nums.Add(6)
        Console.WriteLine(String.Join(", ", nums))

        Dim map = New Dictionary(Of String, Integer) From {{"apple", 120}, {"banana", 90}}
        map("orange") = 150
        Console.WriteLine($"orange: {map("orange")}")
    End Sub
End Module

4-2 LINQ(Where/Select/OrderBy)

Imports System.Linq
Module Program
    Sub Main()
        Dim people = New() {
            New With {.Name = "A", .Age = 18},
            New With {.Name = "B", .Age = 25},
            New With {.Name = "C", .Age = 30}
        }
        Dim adults = people.Where(Function(p) p.Age >= 20).OrderBy(Function(p) p.Age).Select(Function(p) p.Name)
        Console.WriteLine(String.Join(", ", adults)) ' B, C
    End Sub
End Module

5) 正規表現・文字列処理

5-1 Regex(メール検証)

Imports System.Text.RegularExpressions
Module Program
    Sub Main()
        Dim pattern = "^[\w\.\-]+@[\w\.\-]+\.\w+$"
        Dim ok = Regex.IsMatch("user@example.com", pattern)
        Console.WriteLine(If(ok, "OK", "NG"))
    End Sub
End Module

5-2 文字列補間・Split/Join

Module Program
    Sub Main()
        Dim items = "a,b,c".Split(","c)
        Console.WriteLine(String.Join(" | ", items))
        Dim name = "Miki"
        Console.WriteLine($"Hello, {name}")
    End Sub
End Module

6) 非同期 I/O(HttpClient + JSON)

参照追加:System.Net.Http
JSONは .NET 付属の System.Text.Json

Imports System.Net.Http
Imports System.Text.Json
Imports System.Threading.Tasks

Module Program
    Async Function FetchJsonAsync(url As String) As Task(Of JsonDocument)
        Using client As New HttpClient()
            Dim res = Await client.GetAsync(url)
            res.EnsureSuccessStatusCode()
            Dim stream = Await res.Content.ReadAsStreamAsync()
            Return Await JsonDocument.ParseAsync(stream)
        End Using
    End Function

    Async Sub Main()
        Dim doc = Await FetchJsonAsync("https://jsonplaceholder.typicode.com/todos/1")
        Console.WriteLine(doc.RootElement.GetProperty("title").GetString())
        Console.WriteLine("Enterキーで終了")
        Console.ReadLine()
    End Sub
End Module

7) JSON シリアライズ/デシリアライズ

Imports System.Text.Json

Public Class Todo
    Public Property Id As Integer
    Public Property Title As String
    Public Property Completed As Boolean
End Class

Module Program
    Sub Main()
        Dim t = New Todo With {.Id = 1, .Title = "Learn VB.NET", .Completed = False}
        Dim json = JsonSerializer.Serialize(t, New JsonSerializerOptions With {.WriteIndented = True})
        Console.WriteLine(json)

        Dim back = JsonSerializer.Deserialize(Of Todo)(json)
        Console.WriteLine($"{back.Id}: {back.Title} / {back.Completed}")
    End Sub
End Module

8) ADO.NET(SQLite で CRUD)

事前に NuGet で System.Data.SQLite.Core を追加してください。
プロジェクト → 右クリック → NuGet パッケージの管理 → 検索してインストール。

Imports System.Data.SQLite

Module Program
    Sub Main()
        Dim cs = "Data Source=app.db"
        Using conn As New SQLiteConnection(cs)
            conn.Open()

            Using cmd As New SQLiteCommand("CREATE TABLE IF NOT EXISTS Users(Id INTEGER PRIMARY KEY, Name TEXT)", conn)
                cmd.ExecuteNonQuery()
            End Using

            Using insertCmd As New SQLiteCommand("INSERT INTO Users(Name) VALUES(@name)", conn)
                insertCmd.Parameters.AddWithValue("@name", "Taro")
                insertCmd.ExecuteNonQuery()
            End Using

            Using selectCmd As New SQLiteCommand("SELECT Id, Name FROM Users", conn)
                Using r = selectCmd.ExecuteReader()
                    While r.Read()
                        Console.WriteLine($"{r.GetInt32(0)}: {r.GetString(1)}")
                    End While
                End Using
            End Using
        End Using
    End Sub
End Module

9) Windows フォーム(イベント処理の基本)

9-1 ボタンでテキスト表示(Form1.vb の例)

プロジェクト種類:Windows フォーム アプリ
デザイナで TextBox1Button1 を配置してから以下を Form1 に貼り付け。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim text = TextBox1.Text.Trim()
        If String.IsNullOrEmpty(text) Then
            MessageBox.Show("文字を入力してください。")
        Else
            MessageBox.Show($"入力: {text}")
        End If
    End Sub
End Class

9-2 タイマーで現在時刻を表示(Label1 と Timer1)

Timer1 の Enabled=True, Interval=1000 に設定

Public Class Form1
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Label1.Text = DateTime.Now.ToString("HH:mm:ss")
    End Sub
End Class

10) 実務で役立つミニツール

10-1 CSV を読み込んで整形

Imports System.IO

Module Program
    Sub Main()
        Dim path = "data.csv" ' 1列目: 名前, 2列目: 年齢
        If Not File.Exists(path) Then
            File.WriteAllText(path, "Taro,20" & Environment.NewLine & "Hanako,25")
        End If
        Dim lines = File.ReadAllLines(path)
        For Each line In lines
            Dim cols = line.Split(","c)
            Console.WriteLine($"{cols(0)} さん({cols(1)} 歳)")
        Next
    End Sub
End Module

10-2 ディレクトリ一括処理(拡張子フィルタ)

Imports System.IO
Module Program
    Sub Main()
        Dim dir = "."
        For Each f In Directory.EnumerateFiles(dir, "*.txt", SearchOption.AllDirectories)
            Console.WriteLine(f)
        Next
    End Sub
End Module

10-3 シンプルなログ出力(日付付き)

Imports System.IO
Module Program
    Sub Main()
        Log("アプリ開始")
        ' …何か処理…
        Log("アプリ終了")
    End Sub
    Sub Log(message As String)
        Dim line = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} {message}"
        File.AppendAllText("app.log", line & Environment.NewLine)
        Console.WriteLine(line)
    End Sub
End Module

11) 単体テスト入門(xUnit + .NET)

新規プロジェクトで「xUnit テスト プロジェクト」を作成し、被テスト対象(Console/Library)を参照追加してください。

Imports Xunit

Public Class MathUtil
    Public Shared Function Add(a As Integer, b As Integer) As Integer
        Return a + b
    End Function
End Class

Public Class MathTests
    <Fact>
    Public Sub Add_Works()
        Assert.Equal(8, MathUtil.Add(3, 5))
    End Sub
End Class

12) ちょい応用:拡張メソッド

Module StringExtensions
    <System.Runtime.CompilerServices.Extension>
    Public Function ToSnake(s As String) As String
        ' 超簡易実装: 空白をアンダースコアに
        Return s.Trim().Replace(" ", "_").ToLowerInvariant()
    End Function
End Module

Module Program
    Sub Main()
        Console.WriteLine("Hello World".ToSnake()) ' hello_world
    End Sub
End Module

使い方のヒント

  • 最初はコンソールで基本ロジックに集中 → 慣れたらWinFormsでUIとイベント処理
  • データ保存が必要ならSQLite + ADO.NETから。
  • ネット連携はHttpClient + JSONを定番として押さえましょう。
  • 実務では「例外処理・ログ・設定ファイル」をセットで考えると安定します。

コメント

タイトルとURLをコピーしました