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プロジェクトのコードが統一され、メンテナンスしやすくなる。特にファイル名・クラス名・関数名の一貫性を保つことが重要である。