手戻りを減らし、速度と品質を保つ
AIを本格的に活用する以前から、実装の速さを強みとしてきました。着手やコーディングの速さ、開発環境の整備に加え、TDD(テスト駆動開発)で期待する振る舞いを確かめながら実装し、手戻りを大きく減らしていたことが、その速さを支えていました。
自動テストで既存の振る舞いを確かめられるため、仕様の追加や変更、リファクタリングにも積極的に取り組めました。変更を重ねても開発速度と保守性を保つことを大切にしています。自分で設計・実装・テストを重ねてきた経験を土台に、現在はAIに実装を任せ、検証方法を選び、結果から採用や修正を判断しています。
事業や現場の言葉から、開発を考える
開発にあたっては、目的・予算・納期・優先順位を整理することを大切にしています。技術的な論点も専門用語だけに頼らず共有し、何を作るか、何を後にするかをチームで考えます。
データの整合性を、設計の土台にする
変更コストの高いDBの設計と検証に、特に重点を置いています。データの状態と制約を明確にし、アプリケーション側の処理をシンプルにすることを重視します。NULLは極力減らし、boolは必要な場合に限り、状態の表現にはEnum型も検討します。論理削除は十分な理由がある場合に選び、DBの制約や必要に応じたトリガーで不正なデータの登録を防ぎます。整合性とともに、パフォーマンスも大切にしています。
型と責務を明確にし、変更しやすく作る
事業フェーズに合う、必要十分な設計を重視します。undefinedやoptionalなプロパティを極力減らし、データが取り得る状態を型で明確にします。制約が曖昧な配列を処理間で受け渡し続けず、Value Objectなどに制約と整合性を持たせ、各処理をシンプルに保ちます。
共通化は目的や責務が同じで、変更・保守の負担を減らす十分なメリットがある場合に行います。最初から作り込みすぎず、他のエンジニアも読みやすく変更しやすいコードに。既存システムは、事業を止めずに段階的に改善する進め方を大切にしています。
品質の判断基準を、仕組みに組み込む
現在は、機械的に判定できる規則を厳格なリンター・Formatterで自動検証し、設計・保守性などの観点はAIのSkillとレビューの仕組みに組み込む方針です。繰り返し見つかる問題やチーム固有の判断基準を蓄積し、多くの問題を自動で拾える状態を目指しています。
人の確認が必要な変更をできるだけ減らし、メンバーや開発量が増えても品質を保てる仕組みを重視します。レビューする人の時間と注意力に依存する部分を減らすことも、開発組織の改善だと考えています。
重要な仕様を、変更に耐えるテストとして残す
金額計算など重要な処理には、期待する振る舞いを説明するUnit Testを必ず用意します。各APIには少なくとも1つのFeature Testを設け、変更後の正常動作を確認できるようにします。実装の内部構造を変えても壊れにくいテストを重視し、仕様変更やリファクタリングを継続できる状態を作ります。
AIによって自動テストの作成・修正にかかる負担が減り、その価値をより活かせるようになったと感じています。結果が速く返ること、保守しやすいことも重視し、PRレビューと組み合わせて改善を続けます。