リリースエンジニアリング( REまたは短縮形のRelengと略されることが多い)は、ソースコードをコンパイル、アセンブリ、および完成品やその他のソフトウェアコンポーネントに納品することに関わるソフトウェアエンジニアリングのサブ分野です。ソフトウェアリリースライフサイクルに関連して、Google Inc. の Boris Debic 氏[ 1 ] [ 2 ]は、リリースエンジニアリングはソフトウェアエンジニアリングにとって、製造業が工業プロセスにとっての存在と同じであると述べています。
リリースエンジニアリングとは、小規模チームやスタートアップ企業によるソフトウェア開発と、再現性があり、予測可能な結果をもたらし、拡張性に優れた産業的な方法でソフトウェアを開発することとの違いを指します。こうした産業的な手法は、企業の成長に貢献するだけでなく、成長を促進する上で重要な要素となります。
リリースエンジニアリングがテクノロジー企業の成長を可能にする上で重要であることは、ジョン・オドゥイン[ 3 ]とブラム・アダムス[ 4 ]によって繰り返し主張されてきた。リリースエンジニアリングの目的は、プロセスオーバーレイでソフトウェア開発を煩雑にするものではないが、組織的および開発的な成熟の兆候と見なされることが多い。
現代のリリースエンジニアリングは、ソフトウェア生産のいくつかの側面に関係しています。
リリースエンジニアリングは、より複雑なソフトウェア開発チームの統合ハブとなることが多く、開発、製品管理、品質保証、その他のエンジニアリング活動( DevOpsとも呼ばれる)の交差点に位置します。リリースエンジニアリングチームは、特定の重要な製品においてゲートキーパー(Facebook、Google、Microsoftなど)の役割を担うことが多く、その判断は本番リリース(プッシュ)に関する責任と権限の並行的なラインを形成します。
構成管理システムやリビジョン管理システムにおける変更履歴の追跡は、多くの場合、リリースエンジニアの業務範囲に含まれます。ソフトウェアにバージョン番号体系を作成して適用し、その番号が適用される特定のソースファイルまで追跡する責任も、多くの場合、リリースエンジニアが負います。ソフトウェア開発における自動化の実現または改善は、通常、リリースエンジニアの目標です。特定のソフトウェアの開発と構築に必要なすべてのツールを収集、追跡、提供することは、リリースエンジニアの業務となる場合があり、顧客への初回リリースから数年後でも、ソフトウェアを確実に再現または保守できるようにするためです。
ほとんどのソフトウェアエンジニアやソフトウェア開発者は、業務の一環として上記の多くの、あるいはすべてを行いますが、大規模な組織では、リリースエンジニアの専門性を活かして、異なるソースツリー、プロジェクト、チーム、コンポーネントを調整することができます。これにより、開発者はソフトウェアの機能実装に専念でき、品質保証エンジニアは、作成されたソフトウェアをより広範かつ詳細にテストできるようになります。
リリースエンジニアは、ソフトウェアエンジニアリングチームおよびソフトウェア品質保証チームに、ソフトウェア、サービス、またはその両方を提供する場合があります。提供されるソフトウェアには、コンパイル出力を事前に定義されたツリー構造に配置するツール、アセンブリ、またはその他の再編成スクリプトの構築、さらにはテストチームやソフトウェアの最終ユーザーが使用するインストーラの作成などが含まれます。提供されるサービスには、ソフトウェアビルド(コンパイル)の自動化、自動テストの統合、結果レポート、およびソフトウェア配信システム(例えば、電子メディア(CD、DVD)や電子ソフトウェア配布メカニズムの形式)の作成または準備などが含まれます。