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"; }
- ナビゲーションメソッド名は navigateToXxxvoid 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プロジェクトのコードが統一され、メンテナンスしやすくなる。特にファイル名・クラス名・関数名の一貫性を保つことが重要である。
ドキュメントの一貫性を保つことは、プロジェクトの成功に不可欠です。特にコードとの整合性を意識することで、エラーを未然に防ぐことができます。早期に対応することで、後々の修正作業も最小限に抑えられるでしょう。一部の設定が抜けている場合でも、今後の部分から適用していくことが重要です。どのような点に特に注意を払うべきでしょうか?