カテゴリ: Swift 更新日: 2025/12/26

Swiftのstaticとclassの違いとは?初心者向けにやさしく解説!

Swift static と class の違いを理解する
Swift static と class の違いを理解する

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

生徒

「Swiftでstaticclassの違いがいまいち分かりません。どっちを使えばいいのか迷います…」

先生

「それはとても大切なポイントですね。staticclassは似ているようで実は役割が少し違うんですよ。」

生徒

「えっ、どっちもクラスの中で使って、共通の機能を作るんじゃないんですか?」

先生

「たしかに両方とも『インスタンス(実体)を作らなくても使える』点では似ていますが、classにはオーバーライドという強力な特徴があります。それを軸に見ていくと違いが分かりやすいですよ!」

1. staticとclassは何が違うの?

1. staticとclassは何が違うの?
1. staticとclassは何が違うの?

staticclassは、どちらも「インスタンス化せずに使えるメソッドやプロパティ」を定義するために使います。これはつまり、「わざわざnewで作らなくても、クラス名だけで呼び出せる便利な機能」です。

たとえば、計算機アプリで「足し算」や「引き算」のような処理は、個々のインスタンスごとに持つ必要はありません。そんなときに便利なのがstaticclassです。

2. staticは固定されたメソッドやプロパティ

2. staticは固定されたメソッドやプロパティ
2. staticは固定されたメソッドやプロパティ

staticを使うと、そのメソッドやプロパティは「変更されない固定のもの」になります。つまり、サブクラス(子クラス)で上書きできないのが特徴です。

例を見てみましょう。


class Animal {
    static func sound() {
        print("なんらかの動物の鳴き声")
    }
}

class Dog: Animal {
    // staticはオーバーライド(上書き)できないのでエラーになる
    // override static func sound() {
    //     print("ワンワン")
    // }
}

Animal.sound() // → なんらかの動物の鳴き声

Dogクラスでsoundメソッドを上書きしようとするとエラーになります。これがstaticの「変更できない」特徴です。

3. classは上書きできるメソッドやプロパティ

3. classは上書きできるメソッドやプロパティ
3. classは上書きできるメソッドやプロパティ

一方でclassを使うと、そのメソッドやプロパティはサブクラスで上書きできるようになります。つまり、overrideキーワードを使えば、動作を変えることができるのです。


class Animal {
    class func sound() {
        print("なんらかの動物の鳴き声")
    }
}

class Dog: Animal {
    override class func sound() {
        print("ワンワン")
    }
}

Dog.sound()    // → ワンワン
Animal.sound() // → なんらかの動物の鳴き声

このように、親クラスと子クラスで異なる動作をさせたいときはclassを使います。

4. いつstatic、いつclassを使うべき?

4. いつstatic、いつclassを使うべき?
4. いつstatic、いつclassを使うべき?

変更されたくない機能であればstaticを使いましょう。たとえば定数や共通ユーティリティのように、「決まった処理だけを提供したい」ときに向いています。

拡張性をもたせたい場合にはclassを使います。サブクラスごとに処理を変えたいとき、つまりオーバーライド可能にしたいときに適しています。

5. staticとclassの使い分け 具体例

5. staticとclassの使い分け 具体例
5. staticとclassの使い分け 具体例

例えば、動物園のアプリを作るとしましょう。すべての動物に共通する「登録番号のフォーマット」は変更されたくないのでstaticで定義します。一方、動物の「鳴き声」は種類ごとに違うのでclassで定義します。


class Animal {
    static let registerPrefix = "ZOO-"

    class func sound() {
        print("...")
    }
}

class Cat: Animal {
    override class func sound() {
        print("ニャー")
    }
}

print(Animal.registerPrefix + "001") // → ZOO-001
Cat.sound()                          // → ニャー

6. staticとclassの共通点と違いのまとめ表

6. staticとclassの共通点と違いのまとめ表
6. staticとclassの共通点と違いのまとめ表
特徴 static class
インスタンス不要で呼び出せる
サブクラスでオーバーライドできる ×
Swiftの構造体(struct)でも使える ×
変更を防ぎたいとき
拡張性を持たせたいとき ×

7. 構造体(struct)ではstaticしか使えない?

7. 構造体(struct)ではstaticしか使えない?
7. 構造体(struct)ではstaticしか使えない?

ここも大事なポイントです。Swiftではstruct(構造体)の中ではclassキーワードは使えません。つまり、構造体ではstaticしか使えないのです。


struct Utility {
    static func showMessage() {
        print("こんにちは!")
    }
}
Utility.showMessage() // → こんにちは!

クラスと構造体の違いを意識しながら、適切に使い分けましょう。

まとめ

まとめ
まとめ

Swiftでクラスを扱うときに欠かせない要素として、staticclassの使い分けがあります。両者はよく似た書き方を持ち、どちらもインスタンス化せずに利用できるという共通点がありますが、それぞれが担う役割は実に違いが大きく、特にアプリの構造設計や拡張性に関わる重要な選択になります。たとえば、共通の値や変わらない処理を提供したいときにはstaticを使うことで、変更されない安定した振る舞いをクラス全体に持たせることができます。これにより、意図しないオーバーライドを防ぎ、一定の動作を確保できます。一方で、さまざまな動物を扱うアプリやユーザーの種類によって動作が異なるシステムでは、classを使ってメソッドをオーバーライドできるようにすることで、柔軟な振る舞いの変更を実現できます。

また、構造体ではstaticのみが使えるという点も非常に重要です。構造体はクラスとは異なり継承ができないため、そもそもclassキーワードを使う場面が存在しません。この違いは、Swiftという言語が持つ特徴や設計思想にも深く関係しており、構造体を軽量で安全に扱うための工夫ともいえます。構造体の用途に合った静的な機能を提供したい場合、staticの特性はとても扱いやすく、単純なユーティリティや便利関数をまとめるときに大変役立ちます。こうして比較すると、staticclassは単純な言葉の違い以上にコード全体の設計や管理に影響を及ぼすことがわかります。

実際の開発では、アプリ全体で共有したい値や振る舞い、計算処理、フォーマットをstaticで記述し、種類ごとに異なる挙動や将来的な仕様変更を想定した処理はclassを選択することで、より自然なデザインが実現できます。さらに、Swiftは型ごとに安全性を重視した設計がなされているため、どのキーワードを使うかでエラーの有無や将来的な変更のしやすさが変わる点も見逃せません。オーバーライドする必要がない場面でclassを使うと、意図せず子クラスで動作を変えられてしまう可能性があり、逆に拡張性が必要な場面でstaticを使ってしまうと柔軟性が損なわれます。そのため、両者の違いを正しく理解しておくことは、Swiftで安全かつ効率的なコードを書くうえで欠かせないスキルといえます。

サンプルコードで理解を深める

最後に、staticclassの動きをまとめたサンプルコードを紹介します。上書きできるかどうかの違いがより分かりやすくなるはずです。


class Vehicle {
    static func companyName() -> String {
        return "Swift Motors"
    }

    class func fuelType() -> String {
        return "Unspecified"
    }
}

class ElectricCar: Vehicle {
    override class func fuelType() -> String {
        return "Electric"
    }
}

print(Vehicle.companyName()) // Swift Motors
print(ElectricCar.fuelType()) // Electric

このように、企業名など「絶対に変更されたくない情報」はstaticで固定し、車種ごとに異なる特徴を持たせたい部分はclassで柔軟に変更できます。この考え方を理解しておくことで、アプリ全体の構造設計や再利用性が大きく向上します。

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

生徒

「staticとclassって、見た目が似ているから混乱していましたけど、役割がぜんぜん違うことがよく分かりました!」

先生

「その気づきはとても大切ですね。特にオーバーライドできるかどうかは、設計の段階で大きな意味を持ちます。」

生徒

「構造体ではstaticしか使えないっていうのも、理由を聞くと納得できました。軽量構造に合っているんですね。」

先生

「そうなんです。Swiftは型の使い分けがとても重要なので、こうした基礎をしっかり理解しておくと応用が効きやすくなりますよ。」

生徒

「今日学んだことを意識してコードを書けば、もっと読みやすくて安全なプログラムが作れそうです!」

先生

「その調子です。書くときだけでなく、誰かのコードを読むときにも役立つ知識なので、ぜひ繰り返し使って慣れていきましょう。」

Swiftを基礎から実践レベルまで学びたい人や、 iOSアプリ開発を本格的に始めたい人には、 定番の入門+実践書がこちらです。

Swift実践入門をAmazonで見る

※ Amazon広告リンク

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Swiftのstaticとclassの違いは何ですか?初心者にも分かりやすく教えてください

Swiftのstaticは固定された機能で、classはオーバーライド可能な機能です。どちらもインスタンス化せずに使えますが、拡張性の有無が最大の違いです。
関連セミナーのご案内

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

「iPhoneアプリを作りたいけれど、Macを持っていないから諦めている」そんな方のための画期的な入門講座です。実は、プログラミングの本質を学ぶのに高価な機材は必要ありません。本講座では、Windowsパソコンを使用し、クラウド環境を活用してAppleの最新言語Swift(スウィフト)の基礎を最短距離でマスターします。

Windowsで実現する開発環境

【つくるもの】
ブラウザ上で動作する「スマート・計算ツール」や「データ判定プログラム」をゼロから作成します。変数の扱いや条件分岐など、iPhoneアプリの内部で動くロジックを自分の手で構築する感動を体験してください。

【開発環境】
ブラウザだけでSwiftが動くプロ仕様のオンラインエディタ(Replit等)を使用します。面倒な設定は一切不要。今あるWindows PCで、プロのエンジニアと同じコードを書き始められます。

この60分で得られる3つの理解

1. WindowsでのSwift実行環境の作り方

OSの壁を越え、クラウドを活用してスマートに学習を開始する「現代的な開発スタイル」を習得します。

2. Swiftの基本構造(変数・型・定数)

iPhoneアプリ特有のデータの扱い方や、Appleが推奨する「安全で美しいコード」の書き方を学びます。

3. アプリエンジニアとしてのロードマップ

将来的にiOSエンジニアとして副業・転職するために必要な準備や、Mac選びのポイントを伝授します。

※本講座は、将来的にiPhoneアプリ開発で収益化や転職を目指したい未経験者のためのエントリー講座です。マンツーマン形式により、Windows環境ならではの疑問にもその場でお答えし、あなたの理解度に合わせて進行します。

セミナー画像

Windowsで始めるiPhoneアプリ開発入門

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.7
Java&Spring記事人気No7
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.8
Java&Spring記事人気No8
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説