開発手法応用用語
経験豊富なエンジニア・応用情報技術者試験レベル
-
ドメイン駆動設計
(ドメインくどうせっけい) Domain-Driven Design (DDD) 上級複雑なソフトウェアをビジネスドメインの専門知識を中心に設計する手法。ドメインモデル、境界づけられたコンテキスト、ユビキタス言語を活用。ドメイン駆動設計(Domain-Driven Design, DDD)は、Eric Evansが提唱したソフトウェア開発手法で、複雑なビジネスロジックを持つアプリケーションを、ドメイン(事業領域)の専門知識を中心に設計します。ドメインモデル、エンティティ、値オブジェクト、集約、ドメインサービス、境界づけられたコンテキスト、ユビキタス言語などの概念を使用し、ビジネスロジックとインフラストラクチャを分離します。
例: エンティティ, 値オブジェクト, 集約, 境界づけられたコンテキスト -
クリーンアーキテクチャ
(クリーンアーキテクチャ) Clean Architecture 上級依存性の方向を制御し、ビジネスロジックを外部の詳細から分離するソフトウェアアーキテクチャ。テスタビリティと保守性を向上。クリーンアーキテクチャ(Clean Architecture)は、Robert C. Martin(Uncle Bob)が提唱したソフトウェアアーキテクチャです。依存性逆転の原則に基づき、内側の層(ビジネスロジック)が外側の層(UI、データベース、外部API等)に依存しないよう設計します。エンティティ、ユースケース、インターフェースアダプター、フレームワーク&ドライバーの4つの層で構成され、テスタビリティ、保守性、独立性を実現します。
例: 依存性逆転, レイヤード構造, ビジネスルール, インターフェース分離 -
テスト駆動開発
(テストくどうかいはつ) Test-Driven Development (TDD) 中級テストを先に書いてから実装を行う開発手法。Red-Green-Refactorサイクルにより品質とコード設計を改善。テスト駆動開発(Test-Driven Development, TDD)は、実装より先にテストを書く開発手法です。Red(失敗するテストを書く)、Green(テストが通る最小限の実装)、Refactor(コード改善)のサイクルを繰り返します。Kent Beckによって普及し、品質向上、設計改善、仕様の明確化、リグレッション防止の効果があります。単体テスト、受入テスト駆動開発(ATDD)、振舞駆動開発(BDD)などの手法があります。
例: Red-Green-Refactor, 単体テスト, リグレッション, ATDD -
ペアプログラミング
(ペアプログラミング) Pair Programming 中級2人のプログラマーが1つのワークステーションで共同作業する開発プラクティス。コード品質向上と知識共有を実現。ペアプログラミング(Pair Programming)は、2人のプログラマーが1つのコンピューターで協力してコードを書く開発プラクティスです。ドライバー(コードを書く人)とナビゲーター(レビューや設計を考える人)の役割を交互に担い、リアルタイムコードレビュー、知識共有、メンタリング、集中力向上の効果があります。エクストリームプログラミング(XP)の主要プラクティスの一つです。
例: ドライバー・ナビゲーター, リアルタイムレビュー, 知識共有, XP -
行動駆動開発
(こうどうくどうかいはつ) Behavior-Driven Development (BDD) 上級ソフトウェアの振る舞いを自然言語で記述し、ステークホルダー間の共通理解を促進する開発手法。Given-When-Then形式でシナリオを記述。行動駆動開発(Behavior-Driven Development, BDD)は、Dan Northが提唱したソフトウェア開発手法で、システムの振る舞いを自然言語で記述してステークホルダー間の共通理解を促進します。Given-When-Then形式でシナリオを記述し、Cucumber、SpecFlow、Jasmine等のツールで実行可能な仕様として自動テストに変換します。テスト駆動開発(TDD)から発展し、ビジネス価値を重視します。
例: Given-When-Then, Cucumber, 実行可能仕様, 自然言語記述 -
リファクタリング
(リファクタリング) Refactoring 上級外部の振る舞いを変えることなく、コードの内部構造を改善するプロセス。可読性、保守性、拡張性の向上を目的とする。リファクタリング(Refactoring)は、Martin Fowlerが体系化したソフトウェア開発プラクティスで、ソフトウェアの外部振る舞いを変更せずに内部構造を改善するプロセスです。コードの重複除去、長いメソッドの分割、適切な責任分離、デザインパターンの適用などにより、可読性、保守性、拡張性を向上させます。テストがあることを前提とし、小さなステップで安全に実行することが重要です。
例: メソッド抽出, 変数名変更, クラス抽出, 重複コード除去 -
アジャイル開発
(アジャイルかいはつ) Agile Development 中級短いイテレーションを通じて動作するソフトウェアを継続的に提供し、変化する要求に柔軟に対応する開発手法。アジャイル開発(Agile Development)は、2001年のアジャイルマニフェストに基づく軽量な開発手法の総称です。個人と対話、動作するソフトウェア、顧客との協調、変化への対応を重視し、短いイテレーション(スプリント)で継続的にソフトウェアを提供します。Scrum、Kanban、XP(エクストリームプログラミング)、リーンソフトウェア開発などの具体的手法があります。
例: Scrum, Kanban, スプリント, ユーザーストーリー -
スクラム
(スクラム) Scrum 中級アジャイル開発の代表的フレームワーク。スプリント、スクラムマスター、プロダクトオーナーなどの役割で構成される。スクラム(Scrum)は、Ken SchwaberとJeff Sutherlandが開発したアジャイル開発フレームワークです。1-4週間のスプリントで動作するソフトウェアを提供し、プロダクトオーナー(要求定義)、スクラムマスター(プロセス支援)、開発チーム(実装)の役割で構成されます。デイリースタンドアップ、スプリントプランニング、スプリントレビュー、レトロスペクティブなどの儀式があります。
例: スプリント, プロダクトバックログ, バーンダウンチャート, レトロスペクティブ -
継続的インテグレーション
(けいぞくてきインテグレーション) Continuous Integration (CI) 中級開発者が頻繁にコードを統合し、自動化されたテストで品質を保証する開発プラクティス。早期問題発見を実現。継続的インテグレーション(Continuous Integration, CI)は、Martin Fowlerが普及させた開発プラクティスで、開発者が少なくとも1日1回はメインブランチにコードを統合し、自動化されたビルドとテストを実行します。Jenkins、GitHub Actions、CircleCI、Travis CIなどのツールを使用し、問題の早期発見、統合リスクの軽減、チーム間の協調促進を実現します。
例: Jenkins, GitHub Actions, 自動テスト, ビルド自動化 -
継続的デプロイメント
(けいぞくてきデプロイメント) Continuous Deployment (CD) 上級コードの変更がテストに合格すると自動的に本番環境にデプロイされる手法。継続的デリバリーの究極形。継続的デプロイメント(Continuous Deployment, CD)は、コード変更がすべての自動テストに合格すると、人間の介入なしに自動的に本番環境にデプロイされる開発プラクティスです。継続的デリバリー(Continuous Delivery)の究極形で、高度な自動化、包括的テスト、監視、ロールバック機能、カナリアリリースなどが必要です。Netflix、Facebook、Amazonなどの企業で実践されています。
例: 自動デプロイ, カナリアリリース, フィーチャーフラグ, 監視 -
コードレビュー
(コードレビュー) Code Review 中級他の開発者がコードを検査し、品質向上、バグ発見、知識共有を行う開発プラクティス。Pull Request形式が一般的。コードレビュー(Code Review)は、コード変更を他の開発者が検査・承認する品質保証プラクティスです。GitHub、GitLab、Azure DevOpsのPull Request/Merge Request機能を通じて行われ、バグ発見、設計改善、コーディング標準遵守、知識共有、メンタリングの効果があります。非同期レビュー、ペアプログラミング、フォーマルインスペクションなどの手法があります。
例: Pull Request, Merge Request, 静的解析, レビューコメント -
GitFlow
(ギットフロー) Git Flow 上級Gitブランチモデルの一種。feature、develop、release、hotfix、masterブランチで構成される体系的なワークフロー。GitFlow(Git Flow)は、Vincent Driessenが提唱したGitブランチモデルで、大規模チームでの安定したリリース管理を目的とします。masterブランチ(本番リリース)、developブランチ(開発統合)、featureブランチ(機能開発)、releaseブランチ(リリース準備)、hotfixブランチ(緊急修正)で構成されます。明確な役割分担により、並行開発と安定リリースを両立します。
例: master/develop, feature branch, release branch, hotfix -
モブプログラミング
(モブプログラミング) Mob Programming 中級チーム全員が同じ時間に同じ作業に取り組む開発プラクティス。ペアプログラミングをチーム全体に拡張した形式。モブプログラミング(Mob Programming)は、Woody Zuillが普及させた開発プラクティスで、チーム全員が同じ時間に同じコンピューターで同じ作業に取り組みます。一人がドライバー(コード入力)を担い、他のメンバーがナビゲーター(指示・設計)として協力し、定期的に役割をローテーションします。知識共有、集合知活用、品質向上、チーム結束強化の効果があります。
例: 全員参加, ドライバー・ナビゲーター, 知識共有, チーム結束 -
技術的負債
(ぎじゅつてきふさい) Technical Debt 上級短期的な開発速度を優先して作られた不完全なコードが、将来の開発効率を低下させる概念。Ward Cunninghamが提唱。技術的負債(Technical Debt)は、Ward Cunninghamが提唱した概念で、短期的な開発速度やリリース圧力により、本来あるべき設計や実装を妥協した結果生じる「借金」です。急いで実装されたコード、重複コード、不適切な設計、テスト不足などが蓄積し、将来的な変更コスト増大、バグ発生率向上、開発速度低下を引き起こします。意図的負債と偶発的負債に分類されます。
例: レガシーコード, 重複コード, 設計妥協, テスト不足 -
カンバン
(カンバン) Kanban 中級作業の可視化とフロー最適化を行う開発手法。To Do、Doing、Doneのボードで作業状況を管理し、WIP制限で効率化を図る。カンバン(Kanban)は、トヨタ生産方式から発展したリーンソフトウェア開発手法で、作業の可視化とフロー最適化を重視します。David J. Andersonがソフトウェア開発に適用し、カンバンボード(To Do、Doing、Done)で作業状況を可視化し、WIP(Work In Progress)制限により並行作業数を制御します。継続的フロー、プル型システム、改善文化を特徴とします。
例: カンバンボード, WIP制限, リードタイム, サイクルタイム -
エクストリームプログラミング
(エクストリームプログラミング) Extreme Programming (XP) 上級Kent Beckが提唱したアジャイル開発手法。TDD、ペアプログラミング、リファクタリングなどの工学プラクティスを重視。エクストリームプログラミング(Extreme Programming, XP)は、Kent Beckが開発したアジャイル開発手法で、優れた工学プラクティスを「極限まで」実践することを特徴とします。テスト駆動開発、ペアプログラミング、継続的統合、リファクタリング、シンプル設計、集合コード所有、オンサイト顧客、小さなリリースなど12のプラクティスで構成され、高品質なソフトウェアの継続的提供を目指します。
例: 12のプラクティス, シンプル設計, 集合コード所有, オンサイト顧客 -
ユーザーストーリー
(ユーザーストーリー) User Story 中級エンドユーザーの視点から記述される機能要求。「〜として、〜したい、なぜなら〜だから」の形式で表現される。ユーザーストーリー(User Story)は、アジャイル開発で使用される機能要求の記述手法で、エンドユーザーの視点から「誰が、何を、なぜ」を簡潔に表現します。「[役割]として、[機能]したい、なぜなら[理由]だから」の形式で記述し、受入条件(Acceptance Criteria)と組み合わせて使用されます。技術詳細ではなくユーザー価値に焦点を当て、開発チームとステークホルダー間の共通理解を促進します。
例: 役割・機能・理由, 受入条件, エピック, ストーリーポイント -
レトロスペクティブ
(レトロスペクティブ) Retrospective 上級チームが定期的に作業プロセスを振り返り、改善策を見つける活動。「うまくいったこと」「改善すべきこと」「試すこと」を整理。レトロスペクティブ(Retrospective)は、アジャイル開発において、チームが定期的に(通常はスプリント終了時に)作業プロセス、チーム動態、成果物を振り返り、継続的改善を行う活動です。Norman Kerrthが体系化し、「うまくいったこと(Keep)」「問題だったこと(Problem)」「試してみること(Try)」の観点で整理し、具体的なアクションプランを策定します。チーム学習と組織改善の核となる活動です。
例: Keep-Problem-Try, 改善アクション, チーム学習, プロセス改善 -
ベロシティ
(ベロシティ) Velocity 中級アジャイル開発におけるチームの開発速度を測る指標。スプリント期間内に完了できるストーリーポイントの合計で表現。ベロシティ(Velocity)は、アジャイル開発におけるチームの開発能力を測定する指標で、一定期間(通常はスプリント)内に完了できる作業量をストーリーポイントで表現します。過去のベロシティデータから将来のスプリント計画や納期予測を行い、チームの改善状況を追跡できます。ただし、チーム間比較や個人評価には使用すべきではなく、チーム内の計画ツールとして活用することが重要です。
例: ストーリーポイント, スプリント計画, 納期予測, 改善追跡 -
デザインパターン
(デザインパターン) Design Pattern 上級オブジェクト指向設計における再利用可能な設計の雛形。GoF(Gang of Four)による23のパターンが有名。デザインパターン(Design Pattern)は、オブジェクト指向プログラミングにおける設計上の問題に対する再利用可能な解決策のテンプレートです。Erich Gamma、Richard Helm、Ralph Johnson、John Vlissidesら(Gang of Four, GoF)が体系化し、生成パターン、構造パターン、振る舞いパターンの3カテゴリ23パターンを定義しました。Singleton、Factory、Observer、Strategyなどが代表例です。
例: Singleton, Factory, Observer, Strategy, MVC