Dart/Flutter Naming Convention
どの開発プロジェクトでもドキュメントの一貫性は重要だ。特にプログラムコードを伴う場合プロジェクト内のコードでは注意したい点である。なるべく早期に適用する事が肝要だ。また設定していなければ、今後の部分だけでも用いることにすればいい。
Flutterプロジェクトでは、Dartの公式スタイルガイドに準拠しつつ、Flutter特有の命名規則を考慮する必要がある。Dart/Flutter向けのNaming Conventionを以下にまとめる。
1. ファイル名
- スネークケース(snake_case)を使用
home_screen.dartlogin_page.dartapp_constants.dart
- フォルダ名もスネークケース
services/models/widgets/
2. 変数・関数名
- ローワーキャメルケース(lowerCamelCase)
userNamegetUserData()fetchPosts()
- ブール値は
is/has/canで始めるisLoadinghasPermissioncanEdit
3. クラス名
- アッパーキャメルケース(UpperCamelCase)
UserProfileAuthServiceNetworkHelper
- Widgetのクラス名は
Widget/Page/Screen/Viewで統一HomeScreenLoginPageProfileView
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プロジェクトのコードが統一され、メンテナンスしやすくなる。特にファイル名・クラス名・関数名の一貫性を保つことが重要である。
ドキュメントの一貫性を保つことは、プロジェクトの成功に不可欠です。特にコードとの整合性を意識することで、エラーを未然に防ぐことができます。早期に対応することで、後々の修正作業も最小限に抑えられるでしょう。一部の設定が抜けている場合でも、今後の部分から適用していくことが重要です。どのような点に特に注意を払うべきでしょうか?