2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

React開発者のためのGitワークフローとGitHubセットアップ (和訳)

Last updated at Posted at 2023-01-06

Professional React Development

  1. 2022年に最も普及するReactの技術スタック
  2. Screaming Architecture - Reactのディレクトリ構成を進化させる
  3. プロフェッショナルなReactプロジェクトの立ち上げ方
  4. React開発者のためのGitワークフローとGitHubセットアップ

(こちらの記事の和訳です)

一人で自分のプロジェクトに取り組んでいる開発者の場合、Git のワークフローはたいてい単純なものです。毎日毎日、メイン (あるいは master) ブランチで作業していることでしょう。

プロの開発者チームがこのように機能していないことは、皆さんもご存じでしょう。複数の開発者がひとつのブランチにコミットしていると、すぐに混乱してしまいます。そして、未レビュー・未テストのコードが最終的に本番環境に入ってしまう可能性が高いのです。Danger!

プロのチームは、このようなことが起こらないようにプロセスやワークフローを使用します。そして、開発者チームで最もよく使われるGitのワークフローは、、、

トランクベース開発(正確にはScaled Trunk-Based Development)です。

もしあなたがプロの開発者として就職することを目標にしているのなら、このワークフローに前もって慣れておくことを強くお勧めします。プロとしての仕事の進め方を知っていれば、初めての仕事でも戸惑うことはないでしょう。

約束します。Gitの基本さえ知っていれば、それほど難しいことではありません。しかし、その周りにはたくさんの用語集があり、最初は戸惑うかもしれません。

以下のビデオで、このワークフローの一サイクルを説明します。ビデオのリンクの以下では、このワークフローを実行するためにGitHubリポジトリでブランチ保護を設定する方法と、スクリーンショットに基づいた詳細なチュートリアルがあります。

ビデオのリンク

トランクベース開発の概要

  • メインブランチから新しいブランチをチェックアウトする。
  • そのブランチにコードをコミットし、GitHubリポジトリにプッシュします。
  • Pull Request (または GitLab では Merge Request) をオープンします。
  • 自動化されたテストは、アプリケーションが期待通りに動作することを検証します。
  • チームメイトがあなたのコードをレビューし、あなたはそのフィードバックに従ってコードを調整します。
  • Pull Request (short PR) を使って、自分のブランチをメインブランチにマージします。

もし、この文章がちんぷんかんぷんでも大丈夫。このワークフローを学び、実践することができる私の無料コースをご覧ください。

プルリクエストとは一体何なのか?

GitHubのPull Requestという名前は、いつも紛らわしいと思っていました。GitLabではMerge Request(マージリクエスト)と呼んでおり、こちらのほうがよりわかりやすいでしょう。基本的にPull Requestは自分のコードをメインブランチにマージする許可を得るための手段です。

「やあ、チーム、誰かこのコードを見て、良いかどうか教えてくれないかな?これをメインブランチに取り込んで、ユーザが恩恵を受けられるようにしたいんだけど......。」

Pull Request は、Git ブランチの上位にある機能で、チームメイトからのフィードバックを得るためのものだと考えればよいでしょう。また、前述のとおり、コードの変更をメインブランチに反映させる前にチェックやテストを自動的に実行することもできます。

要約すると、Pull Requestsは

  • フィードバックを収集し、コードの品質を向上させるための仕組み
  • 自動化(テストなど)を実行するためのツールで、プロダクションコードにバグを持ち込むリスクを低減する

ブランチプロテクション。Pull Requestsの利用を強制する

プロセスやワークフローは素晴らしいものです。しかし、人は怠惰なもので、回避策を探します。そこで、チームの全員がメインブランチに直接コミットするのではなく、Pull Requests を使うようにするのが理想的です。

幸いなことに、GitHub は "ブランチ保護" という機能で私たちをサポートしてくれています。メインブランチを保護するには、GitHub のリポジトリ設定を開き、左メニューの "Branches" を選択し、"Add rule" ボタンをクリックします。

image.png

選択されたルールについて、いくつか注意点があります。

  • 開発者のチームでは、“Require a Pull Request before merge” → “Require approvals”(「マージ前にプルリクエストを要求する」→「承認を要求する」)オプションがほとんど有効になっています。こうすることで、開発者がお互いのコードをレビューして承認することを強制することができます。これは新しいバグに対する一つの安全策であり、理想的にコードの品質と一貫性を高めるものです。
  • "Require linear history" オプションは必須ではありませんが、私の経験では、最近多くのチームがこのオプションを使用しています。このオプションを指定すると、該当ブランチでのマージコミットができなくなります。代わりに、プルリクエストを "Squash and merge" するか "Rebase" する必要があります。"Squash and merge" を実際に行っている様子をビデオでご覧いただけます。
  • "Include administrators "オプションは、自分のリポジトリでワークフローを適用する場合に重要です。あなたが管理者である以上、このルールはあなたには適用されません。

開発者がメインブランチにコミットを作成し、それをプッシュしようとすると、エラーメッセージが表示されます。
image.png

トランクベースの開発ワークフローを巡るツアー

プルリクエストを作成する

git checkout -b migrate-to-styled-components

ここでコードを書き、コミットしてGitHubのリモートリポジトリにプッシュします。

git commit -m "Migrate home page to styled-components"
git push origin migrate-to-styled-components

GitHub に、Pull Request を作成するためのバナーが表示されているはずです。
image.png

ボタンをクリックすると、タイトルと説明を入力するためのフォームが表示されます。次に、"Create Pull Request "ボタンをクリックします。
image.png

おめでとうございます、あなたは最初のPull Requestを作成しました。このように表示されるはずです。
image.png

継続的インテグレーションのパイプライン

PRの下部にあるステータスチェックに気付きましたか?
image.png

これは本当に便利な機能です。Pull Requestsの中でnpm run lintnpm run testなどのスクリプトを実行することで、バグを混入させるリスクを減らすことができます。これをContinuous Integrationパイプラインと呼びます。

コードレビュー

実際のチームでは、あなたのコードは通常、少なくとも1人のチームメイトによってレビューされます。これもまたバグを防ぎ、コードベースをクリーンで一貫性のある状態に保つのに役立ちます。Pull Requestは、あなたがコードに行き詰まったときに、コードについて議論するための素晴らしい方法です。

そこで、リポジトリにアクセスできる別のアカウントに切り替えてみましょう。ここで、私たちの想像上のチームメイトがあなたのコードをどのようにレビューするのかを見てみましょう。
image.png

チームメイトは、コードにコメントを加えることができます。
image.png

最後に、レビューを提出するのです。
image.png

Pull Requestの作者として、コメントを見ることができるようになりました。
image.png

レビューコメントへの対応

コメントに従ってコードを更新するか、議論を始めるか、2つの選択肢があります。

コードを調整するには、ローカルマシンに戻り、コードを変更し、コミットしてプッシュするだけです。新しいコミットは、レビューコメントの下に表示されます。また、コメントを追加して議論を続けることもできます。

image.png

最後に、新たなレビューを依頼することができます。
image.png

プルリクエストを承認する

チームメイトが満足したら、彼らはレビューを送信してあなたのPull Requestを承認します。彼らはあなたを喜ばせるために、役に立たないけれども肯定的な絵文字のコメントを加えるかもしれません。
image.png

プルリクエストをマージする

最後に、Pull Request をマージします。これで、私たちのコードの変更が main ブランチに追加されることになります。
image.png

ブランチ保護ルールで "Require linear history" オプションを設定したのを覚えていますか?そのため、デフォルトでは単純な "Merge" ボタンではなく "Squash and merge" ボタンが表示されます。

ボタンを押すとどうなるか見てみましょう。
image.png

そして、確認ボタンを押せば完了です。
image.png

メインブランチの歴史

"Squash and merge" ボタンが何をするものなのか、まだ説明していませんでしたね。Pull Request (または私たちの Git ブランチ) には複数のコミットが含まれていました。
image.png

メインブランチのコミット履歴を見ても、これらのコミットはもう見当たりません。代わりに、プルリクエストを指すコミットがひとつだけ残っています (#6 のリンクから)。
image.png

元のブランチのすべてのコミットが、ひとつのコミットにまとめられました。この利点は、Pull Request に記載するコミットを極端に整理しておく必要がないことです。たとえば、「Remove unused class name」のようなレビュー中の単純な修正であれば、メインブランチの履歴に表示される必要はありません。

ローカルのメインブランチの更新

最後のステップ (忘れがちですが) として、ローカルのメインブランチをリモートリポジトリと同期させます。マージは GitHub 上で行われたので、ローカルのマシンはまだメインブランチの変更内容を知りません。

git pull origin main

開発者のチームで作業する場合は、新しいブランチで作業を開始するたびに、実際にこの作業を行う必要があります。

まとめ

この記事では、GitHub リポジトリにブランチ保護を設定して Trunk-Based Development と呼ばれる Git ワークフローを実行する方法を学びました。Git や GitHub に対する苦手意識が薄れてきたのではないでしょうか。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?