はじめに
命名が、ずっと苦手です。
変数名、Widget名、関数名。
何となく書いてみるけど、
「これでいいのか?」という気持ちが毎回残ります。
最近はそれに加えて、
ブランチ名・コミットメッセージ
も、普通に苦手です。
命名に迷う瞬間が多すぎる
たとえば変数名。
final data = fetchSomething();
final list = getItems();
final info = response.data;
一度はこう書いて、
あとから直そうと思って、そのままになる。
Widget名も同じです。
- ItemWidget
- CardView
- DetailSection
間違ってはいない。
でも「これ何?」って聞かれたら、
ちょっと説明が必要になる。
「命名が下手なんだ」と思っていた
前はずっと、
- 語彙力がない
- センスがない
- 経験不足
そういう問題だと思っていました。
でも最近、
命名で詰まるコードには共通点がある気がしてきました。
名前をつけづらいとき、だいたい中身が決まっていない
名前で迷うときって、
よく考えるとこういう状態が多いです。
- 何を表しているのか自分でも曖昧
- 責務が多い
- 将来どう変わるか分からない
- 「とりあえず」書いている
つまり、
名前をつけるのが下手なんじゃなくて、
まだ決めきれていないものに名前をつけようとしている
だけな気がしています。
Widget名で特にそれを感じる
Flutterを書いていると、
Widget名で毎回立ち止まります。
- 見た目の名前?
- 役割の名前?
- 画面専用?共通?
class UserInfoWidget extends StatelessWidget {
...
}
これが、
- 表示専用なのか
- 編集もするのか
- この画面だけのものなのか
自分の中で整理できていないと、
名前も決まりません。
名前に迷うWidgetほど、
だいたい後から分割したくなります。
変数名も同じで、責務が広いと雑になる
const data = await fetchUser();
data という名前は便利だけど、
「何の data なのか」は外から見えません。
でもこれって、
変数名の問題というより、
この値をどう扱うか決めていない問題な気がします。
ブランチ名が決まらない問題
ブランチ名も地味にしんどいです。
- feature/add
- fix/update
- work/temp
何をするブランチなのか、
後から見て分からない。
ブランチ名で悩むときも、
よく考えると、
- 変更内容がまだ曖昧
- ゴールがはっきりしていない
- 「とりあえず着手」している
ことが多いです。
コミットメッセージが一番つらい
個人的に一番苦手なのは、
コミットメッセージかもしれません。
- fix
- update
- adjust
- wip
あとで見返しても、
何をしたコミットか分からない。
でもこれも、
「このコミットで何を完了させたか」
を自分で言語化できていない
だけな気がしています。
名前がつけやすくなる瞬間がある
不思議なことに、
名前がスッと出てくる瞬間もあります。
それはだいたい、
- 処理を分けたあと
- 責務が1つになったあと
- 誰かに説明できる状態になったあと
名前は「考えてひねり出すもの」じゃなくて、
整理した結果、自然に出てくるものなのかもしれません。
最近はこう考えるようにしている
名前で悩んだときは、
無理に良い名前を探さずに、
- これって何?
- 何をする?
- どこまで責任持つ?
を自分に問い直すようにしています。
それでも決まらなければ、
「まだ早い」と判断してそのまま進めます。
命名が苦手=ダメ、ではない
命名で悩むようになったのは、
たぶんコードを雑に扱わなくなったからです。
以前よりも、
- 意味を考えるようになって
- 後から読むことを意識して
- 変更を怖がるようになった
その結果、
名前で立ち止まるようになった気がします。
おわりに近い何か
命名が苦手なのは変わらないけど、
「なぜ迷っているのか」は
前より分かるようになりました。
名前が出てこないときは、
たいてい中身がまだ曖昧。
そう思えるようになっただけで、
少し楽になった気がします。