カテゴリ: VB.NET 更新日: 2026/02/07

VB.NETでSharedメソッドを定義する方法と使い方ガイド

VB.NETでSharedメソッドを定義する方法
VB.NETでSharedメソッドを定義する方法

先生と生徒の会話形式で理解しよう

生徒

「先生、VB.NETで作ったメソッドは毎回オブジェクトを作らないと使えないんですか?」

先生

「普通のメソッドはそうですが、VB.NETにはSharedメソッドというオブジェクトを作らずに使える方法があります。」

生徒

「Sharedメソッドってどうやって作るんですか?」

先生

「それでは、具体例を見ながら説明しますね。」

1. Sharedメソッドとは?

1. Sharedメソッドとは?
1. Sharedメソッドとは?

VB.NETのSharedメソッドは、クラス自体に属するメソッドで、オブジェクトを作らずに呼び出せます。これはクラス共通の機能や、ユーティリティ的な処理をまとめるときに便利です。通常のメソッドはオブジェクト単位で動作しますが、Sharedメソッドはクラス単位で動作するのが特徴です。

2. VB.NETでSharedメソッドを定義する方法

2. VB.NETでSharedメソッドを定義する方法
2. VB.NETでSharedメソッドを定義する方法

Sharedメソッドを作るには、メソッド定義の先頭にSharedキーワードを付けます。これによりオブジェクトなしでメソッドを呼べるようになります。


Public Class MathUtility
    Public Shared Function Multiply(a As Integer, b As Integer) As Integer
        Return a * b
    End Function
End Class

Dim result As Integer = MathUtility.Multiply(4, 5)
Console.WriteLine(result) '20が表示される

20

この例では、MathUtilityクラスのMultiplyメソッドをオブジェクトを作らずに呼び出しています。

3. Sharedメソッドと通常メソッドの違い

3. Sharedメソッドと通常メソッドの違い
3. Sharedメソッドと通常メソッドの違い

通常のメソッドはオブジェクトの状態を操作できますが、Sharedメソッドはクラス全体の共通処理のみ扱えます。逆に言うと、Sharedメソッドはどのオブジェクトからも同じ動作を保証できる便利なメソッドです。


Public Class Counter
    Private Shared count As Integer = 0

    Public Shared Sub Increment()
        count += 1
        Console.WriteLine("カウント: " & count)
    End Sub
End Class

Counter.Increment()
Counter.Increment()

カウント: 1
カウント: 2

Sharedメソッドで共通のカウント値を更新し、オブジェクトを作らずに使用しています。

4. Sharedメソッドの活用例

4. Sharedメソッドの活用例
4. Sharedメソッドの活用例

Sharedメソッドは以下のような場合に役立ちます:

  • 数学計算や文字列操作などのユーティリティ関数
  • プログラム全体で共通の状態や設定を管理する処理
  • オブジェクトを作る必要がない一時的な処理

このようにSharedメソッドを使うことで、コードを簡潔に整理でき、プログラム全体の効率も向上します。

5. Sharedメソッドを使うときの注意点

5. Sharedメソッドを使うときの注意点
5. Sharedメソッドを使うときの注意点

Sharedメソッドは個別オブジェクトの情報にアクセスできないため、オブジェクトごとの状態を操作したい場合は通常のメソッドを使う必要があります。また、Sharedメソッド内で使用する変数もクラス単位で管理する必要があります。

6. まとめとして覚えておきたいポイント

6. まとめとして覚えておきたいポイント
6. まとめとして覚えておきたいポイント

VB.NETでSharedメソッドを使うことで、オブジェクトを作らなくても便利な処理を呼び出せます。ユーティリティ関数や共通処理の管理、設定操作などで活用すれば、プログラムが効率的に動き、コードもすっきり整理できます。

まとめ

まとめ
まとめ

ここまで、VB.NETにおけるSharedメソッド(共有メソッド)の定義方法から、具体的な活用シーン、そして通常のインスタンスメソッドとの決定的な違いについて詳しく解説してきました。プログラミングの学習を進めていくと、「なぜこのメソッドを使うために、わざわざインスタンス化(New)しなければならないのか?」という疑問に直面することが多々あります。その疑問に対する一つの明確な答えが、このSharedキーワードに隠されています。

共有メソッドの本質を理解する

Sharedメソッドは、特定の「個体(インスタンス)」ではなく、「種族(クラス)」そのものに紐付いた機能です。例えば、数学的な計算(平方根の計算や絶対値の取得など)を行う際、その計算機がどのような状態であっても結果は変わりません。このような「状態に依存しない共通の機能」を定義する際に、Sharedメソッドは真価を発揮します。

SEOの観点からも、VB.NETの開発現場では「メモリ効率」と「コードの可読性」が常に重視されます。不要なNew(インスタンス化)を避けることで、ヒープ領域のメモリ消費を抑えることができ、結果として大規模なシステムでも安定した動作を期待できるのです。

実践的なサンプルコードで復習

より実践的な例として、アプリケーション全体で利用する共通の設定値を取得したり、ログを出力したりするユーティリティクラスの構成を考えてみましょう。下記のように定義することで、プログラムのどこからでも一行で機能を呼び出すことが可能になります。


Public Class AppLogger
    ' ログファイルへの出力を行うSharedメソッド
    Public Shared Sub WriteLog(message As String)
        Dim timestamp As String = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")
        Console.WriteLine(timestamp & " [LOG] " & message)
    End Sub
End Class

' 呼び出し側:インスタンス化せずに直接呼び出す
AppLogger.WriteLog("システムの起動に成功しました。")
AppLogger.WriteLog("Sharedメソッドの動作確認中です。")

実行結果の確認

上記のコードを実行すると、コンソールには以下のように出力されます。クラス名に続けてドット(.)を打ち、メソッド名を指定するだけで動作している点に注目してください。


2026/02/06 17:45:10 [LOG] システムの起動に成功しました。
2026/02/06 17:45:11 [LOG] Sharedメソッドの動作確認中です。

設計時に意識すべき注意点

非常に便利なSharedメソッドですが、乱用は禁物です。Sharedメソッド内からは、そのクラスのSharedではない変数(インスタンス変数)にアクセスすることはできません。これは、Sharedメソッドが呼び出された時点では、まだ特定のオブジェクトが存在していない可能性があるためです。

オブジェクト指向プログラミングにおいて、データとその操作をセットにするのが基本ですが、Sharedメソッドはあえてその枠組みから一歩外れた「共通ツール箱」のような役割を担います。この役割分担を明確にすることで、メンテナンス性の高い、美しいソースコードを書くことができるようになります。

これからVB.NETで開発を行う際は、そのメソッドが「個別のオブジェクトごとに異なる結果を出すべきものか」それとも「誰がいつ使っても同じ結果を出すべきものか」を意識して、Sharedキーワードを適切に使い分けてみてください。

先生と生徒の振り返り会話

生徒

「先生、Sharedメソッドの使い所がかなりスッキリしてきました。要するに、わざわざNewして自分の分身を作らなくても、クラスに直接お願いすればやってくれる便利屋さんのようなイメージですね!」

先生

「その通りです。とても良い例えですね。例えば、消費税の計算をするメソッドなどは、どの商品に対しても計算ルールは同じですから、Sharedにしておくと使い勝手が良くなります。」

生徒

「でも、さっきの注意点で聞いた『インスタンス変数にアクセスできない』っていうのはどういうことですか?具体的に失敗するパターンを知っておきたいです。」

先生

「例えば、クラスに『ユーザー名』という変数があったとします。Sharedメソッドは特定のユーザーが誰かを知らないので、その名前を表示することはできないんです。もしやろうとすると、コンパイルエラーになりますよ。」

生徒

「なるほど。誰のデータか特定しなきゃいけないときは普通のメソッド、誰でも共通のルールならSharedメソッド、と使い分ければいいんですね。コードの書き方が少し変わるだけで、プログラムの構造がずっと読みやすくなりそうです!」

先生

「素晴らしい理解度です。実際に大規模なアプリケーションを組むようになると、このSharedをうまく使いこなすことで、メモリの節約やバグの軽減につながります。まずは身近な共通処理からShared化に挑戦してみてくださいね。」

生徒

「はい、ありがとうございます!早速自分のプロジェクトでも、汎用的なツールクラスを作って試してみようと思います。Sharedキーワードを付けるだけで、呼び出しが楽になるのは本当に快感ですね。」

カテゴリの一覧へ
新着記事
New1
ASP.NET
ASP.NET Web APIとMVCの違いを完全解説!初心者でもわかるWebアプリとAPIの基本
New2
ASP.NET
ASP.NET開発環境構築|コマンドライン(dotnet CLI)でASP.NETプロジェクトを作成する方法
New3
VB.NET
VB.NETで文字列を綺麗に整える!String.Formatと文字列補間の使い方
New4
ASP.NET
LinuxでASP.NET Coreを動かす手順|初心者でもわかる開発環境構築ガイド
人気記事
No.1
Java&Spring記事人気No1
VB.NET
VB.NETのJoinメソッドを徹底解説!バラバラの文字列を一つに結合する方法
No.2
Java&Spring記事人気No2
VB.NET
VB.NETの配列(Array)の作り方と基本操作を徹底解説!初心者でもわかる入門ガイド
No.3
Java&Spring記事人気No3
VB.NET
VB.NETの文字列置換を完全解説!初心者でもわかるReplaceメソッドの使い方
No.4
Java&Spring記事人気No4
VB.NET
VB.NETで文字列結合を高速化!StringBuilderクラスの使い方を完全ガイド
No.5
Java&Spring記事人気No5
VB.NET
VB.NETのList(Of T)の使い方を完全ガイド!初心者が最初に覚えるべきリスト操作
No.6
Java&Spring記事人気No6
VB.NET
VB.NETのDictionaryを完全ガイド!初心者でもわかる辞書の基本と応用
No.7
Java&Spring記事人気No7
VB.NET
VB.NETでStaticメソッドを定義する方法と活用例
No.8
Java&Spring記事人気No8
VB.NET
VB.NETのTrimで空白削除!初心者向け文字列整形完全ガイド