プル・リクエスト(PR)は、コードベースへの変更を提案する方法です。ソフトウェア開発者は、メインのコード・リポジトリー(リポジトリーとも呼ばれる)を別のブランチにフォークし、作業中にそのブランチにコードをコミットし、ブランチからメイン・コードに変更をプルまたはマージする前に、コード・レビューのために提案された変更にフラグを立てるためにプル・リクエストを作成します。
PRは、BitbucketやGitHubなどのGitリポジトリーで一般的なメカニズムです。GitLabでは、このプロセスに対してプル・リクエストではなく「マージ・リクエスト」という用語を適用しています。
開発者は、コマンドライン・インターフェース(CLI)またはWebインターフェースを使用してプル・リクエストを作成できます。新しいプル・リクエストは通常、バグの修正プログラム、依存関係の更新、新しい機能、またはリファクタリングされたコードのためにオープンされます。プル・リクエストは、コード・レビューを効率化し、コードベースを標準に保ち、ソフトウェア開発チームのメンバー間のコラボレーションを促進します。
PRを使用すると、開発者はソース・コードを作成し、ローカルでテストできます。コード変更はメイン・ブランチから分離されているため、開発者はコードベース全体を壊すことを心配する必要がありません。
プル・リクエスト手法には、主にオープンソース・プロジェクトに適用される3つの重要な役割が含まれますが、独自プロジェクトやクローズドソース・プロジェクトでも採用できます。
保守担当者:プロジェクト保守担当者は、プロジェクトを管理(多くの場合、所有者)し、PRを承認およびマージする、または拒否する権限を持っています。
レビュアー:これらのチーム・メンバー(保守担当者自身でも、プロジェクトのエクスペリエンスが豊富な他の積極的なコントリビューターでもかまいません)は、コード品質に関する変更案をレビューし、必要に応じて改善を提案します。
コントリビューター:これらの開発者は、変更を加え、プル・リクエストを開くといったタスクを担っています。
プル・リクエストの作成には、通常、次の7段階の手順が必要です。
ソフトウェア開発チームは、ニーズに応じていくつかのPRワークフロー・オプションから選択できます。一般的なプル・リクエストのワークフローには、次のようなものがあります。
フィーチャーブランチのワークフロー
フォーキングのワークフロー
git-flow
スタックワークフロー
新機能のそれぞれには、その機能の目的を強調する説明的な名前が付いた独自の専用ブランチが付けられます。機能が完成すると、開発者は機能ブランチをメイン・ブランチにプッシュし、プル・リクエストを作成できます。
このワークフローでは、コントリビューターが個別に機能について作業するため、メイン・ブランチの安定性が維持されます。しかし、複数の機能ブランチの管理は困難になる可能性があります。
プル・リクエストの作成に関する前のセクションで概説した7ステップの手順は、フォーキングワークフローに対応しています。オープンソースのプロジェクトでは、継続的統合/継続的デリバリー(CI/CD)のプラクティスを補完するこのワークフローが採用されることが多いです。GitHubのフローは、フォークするワークフローと似たようなプロセスに従います。
ソフトウェアエンジニアのヴィンセント・ドリーセンは2010年にgit-flowを策定しました。通常、厳しいリリーススケジュールでソフトウェアを構築する場合や、さまざまなバージョンをサポートするソフトウェアを構築する場合に使用されます。
このワークフローは、以下の分岐で構成される分岐モデルに従っています。
開発者は、レビューが必要な
スタックワークフローは、大規模なタスクを、小さな段階的なコード変更のシーケンスに分解します。次のコード変更は前のコード変更に依存するため、プル・リクエストは相互に重ねて構築されます。
これらの機能の変更を伴う機能を考えてみましょう。データベースやデータ・モデル、API、フロントエンドです。従来の機能ブランチまたはフォーキングのワークフローでは、コントリビューターは、API更新を開始する前に、データベースまたはデータ・モデルの変更がレビューされ、承認され、メイン・ブランチにマージされるまでPRを待つ必要があります。スタックワークフローでは、この待ち時間がなくなり、コントリビューターはデータベースまたはデータ・モデルの変更から分岐してAPIの作業を開始し、それに対するPRを送信し、APIの変更からフロントエンドのタスクに取り組むことができます。
プル・リクエストには、次のようなメリットがあります。
コラボレーションを促進
コードの品質を向上
透明度を高める
コーディング・スキルを強化する
プル・リクエストは協力関係を促進し、役割に関係なくチーム・メンバーが協力して作業することを奨励します。PRはフィードバックとその対処方法を促進し、議論を促し、改善のアイデアを生み出します。
プル・リクエストにより、チームはどのような変更が実装されたか、誰が行ったか、どこに適用されたか、およびその背後にある理由を確認できます。このような可視性により、コードベースとプロジェクト自体の状態をより詳細な洞察を得られるようになります。
レビュアーとコントリビューターの両方が互いに学び、その過程で新しい手法を見つけ、問題に対する斬新なアプローチを発見することができます。初心者や新しいチーム・メンバーは、以前のPRを研究してコードベースをより深く理解し、チームのコーディング基準とベスト・プラクティスを把握することもできます。
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
プル・リクエストの作成は簡単に思えますが、プロセスをさらにスムーズにするためのヒントとコツをいくつか紹介します。
ドラフトを検討する
細部が重要
集中力を維持する
最新情報を入手
テンプレートを取り入れましょう
ドラフト・プル・リクエストやマージ・リクエストは、開発者が進行中の作業を共有するための道として機能します。これにより、チーム・メンバーはコラボレーションをより早く開始し、より早くフィードバックを募集できるため、問題で行き詰まった人がチームメイトから潜在的な解決策をクラウドソーシングできます。
開発者は、新しいコミットについて、明確、簡潔、具体的なメッセージを提供する必要があります。明確さ、簡潔さ、具体性はPRタイトルや説明にも適用されるため、レビュアーがコード変更の背後にある意図をより簡単かつ迅速に把握できるようになります。
1つのPRに複数の問題をまとめると、レビューにかかる時間が長くなり、改訂の数も増加する可能性があります。各プル・リクエストは、バグ修正または機能に対して1つだけ対応する必要があります。集中的なプル・リクエストにより、より効率的なコード・レビューが可能になります。
コードをプッシュしてPRを開く前に、開発者はブランチが最新であることを確認する必要があります。最新の変更と新しいコミットを取得することで、プル・リクエストがマージされた後の競合を防ぎます。
PR記述テンプレートは一貫性を確保し、コード・レビューを合理化するための重要なコンテキストを提供するのに役立ちます。チームは、バグ修正プログラム、機能、またはリファクタリングされたコードなど、さまざまなプル・リクエストタイプに対応するテンプレートを作成できます。
テンプレートは通常、マークダウン・マークアップ言語を使用して作成され、ルート・フォルダーまたはプロジェクト・リポジトリーのメイン・ブランチに配置されます。典型的なフィールドには、次のようなものがあります。
問題または機能の説明(参照用に、Jiraまたはその他の問題追跡ソフトウェアの対応するチケットへのリンク付き)
コード変更の詳細な概要を説明するソリューション
構成変更
関連タスクのチェックリスト(コードのドキュメント化や、エラーや警告のないクリーンなコード・ビルドなど)
PRを自動化すると、プル・リクエストの作成からレビュー、マージまでのライフサイクルを短縮できます。PR自動化は、ボトルネックを緩和するためのシステムの層を含みます。
スタックPR
CI/CDパイプライン
SDLC管理システム
AI搭載のコーディング・アシスタント
自動化されたDevOpsワークフローとして、CI/CDパイプラインはコードの品質を確保するのに役立ちます。GitHub ActionsやGitLabなどのプラットフォームやその他のCIツールは、単体テストや統合テストを実行し、PRのコード変更を表示およびテストするためのサンドボックスとして機能するプレビュー環境をデプロイできます。
CI/CDパイプラインはまた、安全なコーディング慣行を強化します。静的コード・アナライザーやその他の静的アプリケーション・セキュリティー・テスト(SAST)ツールは、ほとんどのCI/CD環境とシームレスに連携して、コードの脆弱性の可能性を正確に特定できます。DevOpsチームは、シークレットの検知のためのコミット前フックを実装できるため、開発者がコードをコミットしたりプル・リクエストを開始したりする前にシークレット・スキャンが必須のステップとなり、ハードコードされたシークレットを含む変更をブロックできます。
JiraやIBM Engineering Lifecycle Management(ELM)などのプラットフォームは、ソフトウェア開発ライフサイクル(SDLC)全体にわたるプル・リクエストの追跡と管理をサポートします。
ELMスイートの一部として、IBM Engineering Workflow Management(EWM)とIBM Engineering Integration Hubは、PRオートメーションを開発ワークフローに直接組み込んでいます。EWMはHubのコネクターを介してGitリポジトリーに接続し、作業項目からPRの作成をトリガーできます。要件または変更リクエストがEWMで承認されると、ルールによってリンクされたGitリポジトリーでプル・リクエストが自動的に開き、説明に事前入力できます。
ELMのAl駆動オートメーションは、PRが開かれると静的分析とテスト・スイートを実行し、成果を作業項目にポストして戻し、基準が満たされるまでマージをブロックすることもできます。一方、Hubはツール間でPRステータスを同期し、リポジトリーとEWMダッシュボードに反映してリアルタイムの可視性を実現します。
GitHub CopilotやIBM BobなどのAI搭載コーディング・アシスタントは、プル・リクエストのワークフローを強化できます。例えば、Bobは適切に形式化された意味のあるコミット・メッセージを生成できます。ブランチ名とコミット履歴を調べて、プロジェクトのスタイル規則に一致できるようにします。
Bobは開発者のIDEから直接プル・リクエストを作成することもできます。ブランチ名、コード変更、コミット履歴を分析して、目的と範囲を理解します。次に、変更を要約したPRタイトルと詳細な説明を生成し、自動的に検出してプル・リクエストの説明用のプロジェクトの既存のPRテンプレートを使用します。
安全で意図を認識した開発を実現するAIパートナーであるBobと連携して、ソフトウェア・デリバリーを加速させましょう。
信頼性の高いAI駆動型ツールを活用することで、コード作成、デバッグ、リファクタリング、コード補完に費やす時間を最小限に抑え、イノベーションに集中できる余地を広げます。
AIの導入によって重要なワークフローと業務を再構築し、エクスペリエンスの最大化、リアルタイムの意思決定、ビジネス価値の向上を実現しましょう。