kawasimaさんの「マジックナンバーとデータ抽象」の記事をきっかけに、定数とEnumの使い分けを話しました。状態を持つかどうかで扱いが変わる、という話から、ドメインを理解する難しさまで。久しぶりにコード設計を話した回です。
参考:kawasimaさんのポスト/記事「マジックナンバーとデータ抽象」
【今回の話】
マジックナンバーと定数化/Enumも名前付けの延長/データ抽象という概念/振る舞いを問う設計/ライブラリとアプリの境界/DDD学習の理想と現実/AI時代のレビュー不要論/新規開発でのAI活用/エンジニアの存在意義
【関連回】
AI時代に必要なコーディング力とは|コーディングとリファクタリングを語る #7
感想は #いつまじラジオ でポストしてもらえるとうれしいです
---
J(けちーん)
1991/03/21生まれ、北海道出身。エンジニアリングマネージャー
上原
1992/05/15生まれ、鹿児島出身。エンジニアリングマネージャー
感想
まだ感想はありません。最初の1件を書きましょう!
サマリー
今回のエピソードでは、マジックナンバーを定数に置き換える際の課題と、より本質的なコード設計の考え方について深く掘り下げています。まず、定数を単一のファイルやクラスにまとめることが、見かけ上の可読性を向上させる一方で、値の文脈を失わせ、かえって判断に必要な情報量を減らす可能性があるという問題提起から始まります。定数名だけでは「なぜその値なのか」という根拠が不明瞭になり、定義元への確認作業が発生するため、むしろ「改悪」になりうると指摘されています。 次に、Enum(列挙型)もまた、名前付けの延長に過ぎず、根本的な解決にはならないと議論されます。真の解決策として「データ抽象」の概念が導入され、使う側の関心は値そのものではなく「振る舞い」にあるべきだと強調されます。例えば、注文のステータス値ではなく、「注文がキャンセル可能か」という振る舞いをオブジェクトに持たせることで、内部の詳細を隠蔽し、変更に強い設計を実現します。これはドメイン駆動設計(DDD)の考え方にも通じるものです。 しかし、理想的なデータ抽象やDDDの実践は、深いドメイン知識と経験を要するため、実際の開発現場では難しい側面も多いと語られます。特定の文脈で自明なマジックナンバーの許容範囲や、コメントの役割についても議論が交わされました。最後に、AIが開発プロセスに与える影響に話が及び、AIによるコード生成やレビューの自動化が進む中で、エンジニアが何を楽しみ、どのようなスキルを磨くべきかという、未来のエンジニアリングのあり方について考察が深められています。