Webアプリケーション作成のための10ステップ　4. バージョン管理

# この記事を書いたきっかけ

この記事では、Webアプリケーションエンジニアに必要なスキルを具体的に解説し、その学び方を示します。

Webアプリケーション作成に必要なスキルを10個にまとめ、一つずつ学ぶ目的と手段を整理したいと思います。今回は**バージョン管理**について書きます。

### この記事を書いた目的
- webアプリケーションエンジニアになりたい
- そのために、自分に足りないものは何かを知りたい
- すぐに行動に移すために、学ぶ目的と手段を具体化したい
- webアプリケーションエンジニアに必要なスキルを全て把握したい
- 今、自分はなんのために、何を学んでいるのか、見失わないようにしたい


***
こちらの記事が大変参考になります

https://qiita.com/gold-kou/items/7f6a3b46e2781b0dd4a0

# Webアプリケーション作成のための10ステップ
1. プログラミング言語の習得
1. フロントエンド開発
1. バックエンド開発
1. バージョン管理
1. 開発ツールと環境
1. セキュリティ
1. デプロイメントとクラウド
1. テスト
1. アーキテクチャの知識
1. ソフトスキル

# 4. バージョン管理
バージョン管理は、コードの変更履歴を管理し、共同作業を円滑に行うための重要な技術です。

# バージョン管理とは何か（What）
バージョン管理とは、同じファイルの複数の状態（バージョン）を記録・管理することを指します。日々の作業でファイルを新規作成したり、修正したり、加筆したりすることで、ファイルのバージョンが変化します。これらの状態を全て記録しておくことがバージョン管理です。

バージョン管理システム（VCS）は、いつ、誰が、どこを、なぜ修正したのかなど、コードの修正履歴を記録するためのツールです。最も広く使われているVCSはGitです。

Gitは、一言で言えば、プログラム開発の作業履歴を記録するツールです。

# なぜバージョン管理をする必要があるのか（Why）
バージョン管理システム（VCS）を使用することで、コードの変更履歴を記録できます。ファイルの変更をバージョンとして記録することで、以前の状態に簡単に戻すことができます。例えば、「かなり前のファイルの状態に戻したい！」と思ったとき、すぐにその状態に戻せます。記録したバージョンの間を自由に行き来できるのは非常に便利です。

さらに、複数の開発者が同じファイルで作業する際に、内容の競合を防ぐこともできます。

### バージョン管理をする主な理由

- **変更履歴の追跡**：誰が、いつ、どのような変更を行ったかを記録できるため。
- **コードの復元**：簡単に以前のバージョンに戻すことができるため。
- **共同作業の効率化**：複数人での開発がスムーズになるため。
- **ブランチ機能**：新機能の開発やバグ修正を独立して行うことができ、完成後に簡単に統合できるため。


# 具体的にどのようにバージョン管理をすればいいのか（How）

## バージョン管理で行う具体的な作業

**リポジトリの作成**：GitHubやGitLab、Bitbucketなどのサービスでリポジトリを作成します。
**クローン**：リポジトリをローカルマシンにクローンします。
**変更のコミット**：コードを変更したら、変更内容をコミットして履歴に追加します。
**プッシュ**：ローカルの変更をリモートリポジトリにプッシュします。
**プルリクエスト**：新機能やバグ修正を行ったブランチをメインブランチにマージするためのプルリクエストを作成します。

***
Gitについて簡単に記事にまとめたので、ぜひ参考にしてみてください。
- [Gitとは](https://qiita.com/eric50905/items/94ea4503d42ea5ca019a)
- [Gitでコードの変更を記録する方法（add, commit）](https://qiita.com/eric50905/items/48d66cf5b90956b40240)
- [Gitで現在の状態や変更箇所を確認する方法（diff,log）＋.gitignoreについて](https://qiita.com/eric50905/items/4a0cd49d79e45a6bff34)
- [Gitで状態の復元と取消、削除する方法とその違い(git checkout, git reset, git revert, git rm)](https://qiita.com/eric50905/items/d9662c4c4838f4efaa59)
- [Gitのブランチとマージについて(git branch, git merge)](https://qiita.com/eric50905/items/fa0fe0d8430b5191688e)


## バージョン管理について勉強する方法は
バージョン管理を学ぶための方法についてまとめてみました。

- **ネットの解説**：Qiitaの記事や、ネット上のGit解説サイトはとても参考になります。[サル先生のGit入門](https://backlog.com/ja/git-tutorial/)はわかりやすいです。
- **書籍で学習**：Gitをテーマにした書籍がたくさんあります。図が多くてわかりやすい自分に合った書籍を一冊読んでみると理解が早いです。
- **動画で学習**：YouTubeやUdemyには、Gitの基本から応用までを解説する動画がたくさんあります。
- **実践**：実際のプロジェクトでGitを使用してみることが最も効果的だと思います。簡単なプロジェクトを始めて、そこでGitを使るといいと思います。
- **公式ドキュメント**：余力があれば、[Gitの公式ドキュメント](https://git-scm.com/book/ja/v2)も読んでみるといいと思います。


# 実際にバージョン管理について勉強したこと（Try）
私が実際に行った勉強方法を紹介します。

- **書籍を読む**：[いちばんやさしいGit&GitHubの教本](https://www.amazon.co.jp/%E3%81%84%E3%81%A1%E3%81%B0%E3%82%93%E3%82%84%E3%81%95%E3%81%97%E3%81%84Git-GitHub%E3%81%AE%E6%95%99%E6%9C%AC-%E4%BA%BA%E6%B0%97%E8%AC%9B%E5%B8%AB%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86-%E5%85%B1%E6%9C%89%E5%85%A5%E9%96%80-%E3%80%8C%E3%81%84%E3%81%A1%E3%81%B0%E3%82%93%E3%82%84%E3%81%95%E3%81%97%E3%81%84%E6%95%99%E6%9C%AC%E3%80%8D%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4295013617)が参考になります。
- **paizaの講義**：講義を受けながら、実際にコマンドを入力する練習もできます（[「Git」入門講座一覧](https://paiza.jp/works/search_courses/2112)）。
- **Udemyの動画視聴**：「[ちゃんと学ぶ、Git/GitHub・SourceTree講座（Win/Mac対応・コマンド対応）](https://www.udemy.com/course/git-beginning/?couponCode=JUST4U02223)」を視聴しました。
- **Qiitaに記事を書く**：アウトプットすることで理解が深まります。
- **実践練習**：自分でWebアプリを作成してデプロイするときに、GitHubでリポジトリを作成し、実際にコミットやプッシュを行いました。複数人で管理する練習はできていませんが、自分のだけのプロジェクトだからこそgitコマンドをばんばん練習できます。

まだ、仕事としてGitを使ったことはありませんが、いろいろな手段で勉強することで、少しずつ苦手意識を減らしています。独学でもできることは意外とあります。実際にプロジェクトに関わるときには、勉強したことが役に立つはずです。

# まとめ
Webアプリを作成・運用していく以上、バージョン管理のスキルは必須です。基礎知識を身につけて、実践の場で使いこなせるようになっていきたいです。