Flutterプロジェクトにおける命名規則 (Naming Convention)

投稿者: | 2025年2月27日

Dart/Flutter Naming Convention

どの開発プロジェクトでもドキュメントの一貫性は重要だ。特にプログラムコードを伴う場合プロジェクト内のコードでは注意したい点である。なるべく早期に適用する事が肝要だ。また設定していなければ、今後の部分だけでも用いることにすればいい。

Flutterプロジェクトでは、Dartの公式スタイルガイドに準拠しつつ、Flutter特有の命名規則を考慮する必要がある。Dart/Flutter向けのNaming Conventionを以下にまとめる。


1. ファイル名

  • スネークケース(snake_case)を使用
    • home_screen.dart
    • login_page.dart
    • app_constants.dart
  • フォルダ名もスネークケース
    • services/
    • models/
    • widgets/

2. 変数・関数名

  • ローワーキャメルケース(lowerCamelCase)
    • userName
    • getUserData()
    • fetchPosts()
  • ブール値は is / has / can で始める
    • isLoading
    • hasPermission
    • canEdit

3. クラス名

  • アッパーキャメルケース(UpperCamelCase)
    • UserProfile
    • AuthService
    • NetworkHelper
  • Widgetのクラス名は Widget / Page / Screen / View で統一
    • HomeScreen
    • LoginPage
    • ProfileView

4. 定数

  • すべて大文字+スネークケース
    • const double DEFAULT_PADDING = 16.0;
    • const String API_URL = "https://api.example.com";
  • クラス内の定数は static const を使う
    class AppConstants {
    static const String appName = "MyApp";
    static const double borderRadius = 8.0;
    }
    

5. Enum

  • アッパーキャメルケース
    enum UserRole {
    Admin,
    Editor,
    Viewer,
    }
    
  • 定数のように扱う場合、全て大文字+スネークケース
    enum Status { LOADING, SUCCESS, ERROR }
    

6. 引数・コンストラクタ

  • ローワーキャメルケース
    class User {
    final String firstName;
    final String lastName;
    
    User({required this.firstName, required this.lastName});
    }
    

7. プライベート変数・関数

  • アンダースコア(_)で始める
    class AuthService {
    String _token = "";
    
    void _authenticate() {
      // 認証処理
    }
    }
    

8. Mixin / Extension

  • Mixin: Mixin を末尾に付ける
    mixin LoggingMixin {
    void log(String message) {
      print("[LOG] $message");
    }
    }
    
  • Extension: Extension を末尾に付ける
    extension StringExtension on String {
    bool get isNullOrEmpty => this == null || isEmpty;
    }
    

9. StatefulWidget の命名

  • State クラスは _<Widget名>State にする
    class HomeScreen extends StatefulWidget {
    @override
    _HomeScreenState createState() => _HomeScreenState();
    }
    
    class _HomeScreenState extends State<HomeScreen> {
    @override
    Widget build(BuildContext context) {
      return Container();
    }
    }
    

10. Router & Navigation

  • ルート名はスネークケースの定数
    class RouteNames {
    static const String home = "/home";
    static const String login = "/login";
    }
    
  • ナビゲーションメソッド名は navigateToXxx
    void navigateToHome(BuildContext context) {
    Navigator.pushNamed(context, RouteNames.home);
    }
    

11. API & ネットワーク

  • APIエンドポイントの定数は api_ をつける
    class APIEndpoints {
    static const String apiLogin = "/auth/login";
    static const String apiUsers = "/users";
    }
    

12. 状態管理(RiverpodやBlocなど)

  • Provider, State, Bloc などの末尾に _Notifier / _State / _Cubit をつける
    class AuthNotifier extends StateNotifier<AuthState> {
    AuthNotifier() : super(AuthInitial());
    }
    
    class AuthState {}
    
    class AuthInitial extends AuthState {}
    

まとめ

種類 命名規則
ファイル スネークケース (home_screen.dart)
変数・関数 ローワーキャメルケース (userName, fetchPosts())
クラス アッパーキャメルケース (AuthService, UserProfile)
Widgetクラス Screen, Page, View をつける (HomeScreen, LoginPage)
定数 全て大文字スネークケース (DEFAULT_PADDING)
Enum アッパーキャメルケース (UserRole)
プライベート変数 _ で始める (_token)
StatefulWidget の State クラス _<Widget名>State (_HomeScreenState)
Mixin / Extension Mixin, Extension をつける
Router & Navigation navigateToXxx, ルート名はスネークケース定数 (RouteNames.home)
状態管理 _Notifier, _State, _Cubit をつける (AuthNotifier, AuthState)

この命名規則に従えば、Flutterプロジェクトのコードが統一され、メンテナンスしやすくなる。特にファイル名・クラス名・関数名の一貫性を保つことが重要である。

コメントを残す