はじめに
Flutterを網羅的に学習するにあたってRoadmapを使って学習を進めることにしました。
この記事では、Flutter初学者やこれからFlutterを学習し始める方に向けて、Git・GitHubについてまとめています。
RoadmapはFlutterだけでなく、他の言語やスキルのロードマップも提供されており、何から学習して良いか分からないと悩んでいる方にとって有用なサイトになっています。
ぜひRoadmapを利用して学習してみてください。
Roadmapとは
簡潔に言えば、Roadmap.shは学習者にとってのガイドブックであり、学習の方向性を提供する学習ロードマップサイトです。
初心者から上級者まで、ステップバイステップでスキルを習得するための情報が提供されています。
学習の進め方が分かりやすく示されているだけでなく、個々の項目に参考資料やリソースへのリンクも提供されているので、学習者は目標を設定し、自分自身のペースで学習を進めることができます。
Git・GitHub
FlutterロードマップVersion Control Systems / Repo Hosting Servicesでは以下の12のサイトが紹介されています。興味のある方はぜひお読みください。
- Version Control System Introduction: https://www.youtube.com/watch?v=zbKdDsNNOhg
- Git & GitHub Crash Course For Beginners: https://www.youtube.com/watch?v=SWYqp7iY_Tc
- Learn Git in 20 Minutes: https://www.youtube.com/watch?v=Y9XZQO1n_7c&t=21s
- Git & GitHub Crash Course For Beginners: https://www.youtube.com/watch?v=SWYqp7iY_Tc
- Learn Git with Tutorials, News and Tips - Atlassian: https://www.atlassian.com/git
- Git Cheat Sheet: https://cs.fyi/guide/git-cheatsheet
- Host Flutter Website On GitHub Pages: https://www.youtube.com/watch?v=z-yOqoQ2q6s
- How to Deploy a Flutter Web App?: https://medium.com/solute-labs/flutter-for-web-how-to-deploy-a-flutter-web-app-c7d9db7ced2e
- Deploying - Flutter: https://docs.flutter.dev/deployment/web#deploying-to-the-web
- Git and GitHub for Beginners - Crash Course: https://www.youtube.com/watch?v=RGOj5yH7evk
- Get Started with Github: https://docs.github.com/en
- GitHub Tutorial – for Beginners: https://www.freecodecamp.org/news/git-and-github-for-beginners/
バージョン管理システム (Version Control Systems)とは
バージョン管理システム (Version Control Systems)とは、ソフトウェア開発やコンテンツ管理などで使用されるツールで、ファイルやプロジェクトの変更履歴を記録し、管理するために使用されます。
代表的なVCS(Version Control Systems)にはGit、Subversion(SVN)、Mercurial、CVSなどがあり、その中でもGitは特に広く使用されており、オープソース1のプロジェクトや企業でのソフトウェア開発において主流になっています。
VCSの特徴
1. 変更の記録とトラッキング
プロジェクト内の全てのファイルとディレクトリの変更を記録します。新しいファイルの追加、既存ファイルの変更、ファイルの削除など、どのような変更が行われたかが、明確になり、誰が変更を行なったかも追跡できます。
2. バージョン管理
プロジェクトの異なるバージョンを作成して、管理することができます。これによって、過去の状態に戻ったり、特定のバージョンを比較したりすることが可能です。バージョン間の差分を確認することで、バグの追跡が容易になります。
3. 共同開発
複数の開発者が同じプロジェクトで協力しながら開発することができます。各開発者は自分の変更をコミットして、変更が他の開発者と競合しないように、マージを行います。
4. バックアップと復元
ファイルの変更履歴を保持するため、データのバックアップと復元が可能です。誤ってデータを削除した場合や問題が発生した場合でも、以前の状態に戻すことができます。
5. ブランチとマージ
異なるバージョンを独立して開発できるブランチ(分岐)を作成できるので、これらのブランチをマージ(統合)することにより、新しいバージョンを作成することができます。これにより、新機能の開発やバグ修正を安全に行うことが可能です。
6. リモートリポジトリ
多くのVCS(Version Control Systems)はリモートリポジトリをサポートしており、複数の開発者やチームが分散して作業することができます。
Gitとは
Gitは分散型バージョン管理システム(DVCS)の一つで、ソフトウェア開発やプロジェクト管理で広く使用されています。
Gitの特徴
1. 分散型
Gitは分散型のバージョン管理システムです。これは、リモートリポジトリとローカルリポジトリの両方にコードの完全なコピーが存在し、各開発者が独立して作業ができることを意味しています。これによって、オフラインで作業したり、異なるブランチで作業したりすることが可能になります。
バージョン管理管理システムには中央集中型と分散型が存在します。以下リンクでそれぞれの違いについて説明されているので、興味のある方は是非読んでみてください。
2. バージョン管理
プロジェクトの変更履歴を追跡し、バージョン管理を行います。各変更はコミット(commit)として記録され、プロジェクトの異なるバージョン間の差分を確認できます。これにより、バグのトラッキングや特定のバージョンの復元が可能になります。
3. ブランチ
Gitはブランチと呼ばれる独立した開発空間を作成することができます。新機能の開発やバグ修正を行う際に、ブランチを作成して作業し、後でマージすることによって、メインのコードに統合できます。これにより、コードの変更と並行開発が安全に行えるのです。
以下リンクでブランチについて説明されているので、興味のある方は是非読んでみてください。
4. リモートリポジトリ
Gitはリモートリポジトリをサポートしており、複数の開発者がコードを共有できるようにしています。主要なリモートリポジトリサービスとしてGitHub、GitLab、Bitbucketなどがあります。
リモートリポジトリについてわかりやすい記事があったので、是非読んでみてください。
5. コミット
コミットは変更セットを記録する単位です。コミットにはメッセージ(コミットメッセージ)を含むことができるため、他の開発者に変更の目的を説明することができます。
コミットについてわかりやすい記事があったので、是非読んでみてください。
6. マージ
マージは異なるブランチを統合するためのプロセスです。Gitはマージする際に変更箇所が異なっていて、競合が起きた場合、マージコンフリクト(競合)を自動的に検出することができます。そのため、開発者が競合を解決することが可能になるのです。
マージについてわかりやすい記事があったので、是非読んでみてください。
7. タグ
タグは特定のコミットに名前を付けることができ、リリースバージョンなど重要なポイントを示すのに使用されます。
タグについてわかりやすい記事があったので、是非読んでみてください。
8. ステージング
Gitにはステージングエリアがあり、変更をステージングエリアに追加してからコミットできます。これにより、コミット前に変更内容を確認することができるのです。
ステージングについてわかりやすい記事があったので、是非読んでみてください。
Gitの使用方法
Gitの機能やコマンドはさまざまで、オプションを使用するとかなり高度な操作まで行えるようになります。ここでは、開発を行う上で使用する一般的なコマンドについて説明していきます。
1. Git init
git init
コマンドは、一言で言うとリポジトリ2を新規に作成するときに使用するコマンドです。
init
コマンドを実行すると、現在のディレクトリまたは指定したディレクトリに.git
というリポジトリを構成するディレクトリが作成されます。
Gitでバージョン管理を始めるには、リポジトリの初期化をしなければなりません。.git
ディレクトリにはGitで使用するファイルが新規に作成されるため、既に存在するリポジトリを再度初期化したい場合にも使用できます。
2. Git clone
git clone
は特定のリポジトリの内容(ファイルやディレクトリ)を別のリポジトリに複製(クローン)するためのコマンドです。
一般的にはリモートリポジトリをローカルリポジトリにクローンする際に使用されるため、既存のプロジェクトを開始する時に使うコマンドになります。
git clone https://github.com/username/repo.git
3. Git add / Git commit
git add
コマンドを使うと、ステージングエリアにファイルを追加することができます。gitではステージングエリアに、新規のファイルや編集したファイルを一度乗せた後、コミットするため、コミットの対象となるのはステージされたコンテンツだけになります。
git add ファイル名 // 指定したファイル・ディレクトリのみ
git add . // すべてのファイル・ディレクトリ
git add *.css // すべてのCSSファイル
git add -n // 追加されるファイルを調べる
git add -u // 変更されたファイルを追加する
git rm --cached // addしてしまったファイルを除外
git commit
コマンドとは一言で言うと追加・変更したファイルをGitに登録するためのコマンドです。通常のファイル操作では変更した内容を上書き保存すれば、ファイルの内容が変更されますが、Gitのリポジトリに変更内容を登録(保存)するためには、git commit
を使用する必要があります。
git add ファイル名 // 指定したファイル・ディレクトリのみ
git commit -a //変更のあったファイルすべて
git commit --amend //直前のコミットを取り消す
git commit -v //変更点を表示してコミット
4. Git diff / Git status
git diff
コマンドとは2つのファイルを比較して違いなどを探すことができるコマンドです。
git diff
コマンドで表示するのは作業ディレクトリとステージングエリア間の変更差分です。ステージングエリアとローカルリポジトリ間の変更差分を表示す流には--staged
オプションを付与します。
git diff // カレントディレクトリの差分を表示
git diff ファイル名 // 指定したファイル・ディレクトリのみ
git diff --staged // ステージングエリアとローカルリポジトリ間の変更差分
git diff HEAD^ // 最後のコミットからの差分を表示
git diff --name-only HEAD^ // 差分ファイルを表示
git diff file1.txt file2.txt // 特定ファイルの差分
git diff commit1 commit2 // コミットの差分
git status
コマンドは、作業ディレクトリの状態とステージングエリアの状態を表示するコマンドです。このコマンドを実行すると、どの変更がステージング済みでどの変更がまだステージングされていないのか、どのファイルが Git の追跡対象外になっているのかが表示されます。
git status
5. Git log
git log
コマンドを使うことで、コミットした履歴を確認することができます。使用例としては作業中のファイルを特定のバージョンに戻したい場合などが挙げられます。特定のバージョンに戻すためにはgit rebase
コマンドを用いますが、その際にgit log
で得られるコミット番号が役に立ちます。
git log // コミットのログが見れる
git reflog // Git内のコマンド操作の全ての履歴を見れる
git reflog origin/branch_name //pushのログが見れる
6. Git branch / Git checkout
ブランチを作成すると、現在の開発フローから離れて、別のコミット履歴を記録していくことが可能になります。ブランチ作成には2通りあり、git branch ブランチ名
もしくはgit checkout -b ブランチ名
で作成します。
git branch ブランチ名
branch
コマンドを利用した作成方法はシンプルです。git branch
の後に作成したいブランチ名を記述するのみです。
git checkout -b ブランチ名
checkout
コマンドを利用した作成方法は-b
オプションを使用します。-b
オプションをつけないとただのブランチの切り替えになってしまうので、ブランチを作成する際には必ず-b
オプションを付与してください。
ローカルのブランチ一覧を確認したい場合は、git branch
コマンドを実行します。
先頭に*
がついているものが現在のブランチです。
git branch
issue1
* master
現在いるブランチから切り替えたい場合は、git checkout
コマンドを実行します。
git checkout 切り替えたいブランチ名
git branch
issue1
* master
git checkout issue1
git branch
* issue1
master
git branch -d [branch_name] // ブランチの削除
git branch -m [branch_name] // 現在のブランチ名の変更
git branch -a // リモートとローカルのブランチの一覧
git branch -r // リモートブランチの一覧
7. Git fetch / Git pull
git pull
コマンドを使用すると、gitリポジトリにある最新のソースコードをローカルリポジトリに反映することができます。引数なしでgit pull
コマンドを実行した場合は、現在作業中のブランチと関連付けられているリモートリポジトリのブランチを対象にpull
が行われます。
関連づけられているブランチのことをアップストリームブランチといいます。アップストリームブランチを確認するにはgit branch
に-vv
オプションを付与します。
git pull // 関連付けられているブランチから取得する
git branch -vv // アップストリームブランチを確認する
git pull <remote> <branch> // デフォルト
git pull origin main // 実行例: リモートリポジトリのmainブランチの最新コードを取得
git fetch
コマンドを実行すると、リモートリポジトリの最新の履歴の取得だけを行うことができます。取得したコミットは、名前の無いブランチとして取り込まれます。このブランチはFETCH_HEADという名前でチェックアウトすることができます。
git fetch
コマンドはローカルのmasterブランチまで更新されていない(mergeされていない)ので、git reset --hard HEAD
を使用することで、直前のcommitまで戻すことができます。
git fetch
git reset --hard HEAD // 直前のcommitまで戻して、無かった事にします。
リモートから情報をローカルに持ってきますが、場所はmasterブランチではなく、origin/masterブランチに取り込まれます。
- masterブランチ: ローカルの中心となる統合ブランチで、他のローカルの作業ブランチと繋がったもの。
- origin/masterブランチ: ローカルにある、リモートのmasterブランチを追跡するリモート追跡ブランチ。
git pull
は、git fetch
、git merge
を同時に行うコマンドです。そのため、git pull
はリモートのmasterブランチから、ローカルのorigin/masterブランチを介して、ローカルのmasterまで一気に最新情報を持ってきます。
git pull = git fetch + git merge
8. Git push
git push
コマンドを使うことで、Gitのリモートリポジトリに現在のコミット履歴を反映させることができます。
コミットまではローカルで管理していますが、リモートリポジトリにプッシュするとPublicの場合は全体公開され、Privateの場合は招待しているチームのユーザーに公開されます。
git push <remote> <remote branch> // デフォルト
git branch
issue1
* master
// 実行例: ローカルのmasterブランチからリモートのmasterブランチへ最終コミットを反映
git push origin master
リポジトリホスティングサービス(Repository Hosting Services)とは
リポジトリホスティングサービス(Repository Hosting Service)は、ソースコード管理やバージョン管理システム(GitやSubversionなど)を使用する開発者やチーム向けに提供されるクラウドベースのプラットフォームです。
これらのサービスは、コード、ドキュメントなどを安全に管理し、共有するためのツールとして提供されます。
一般的なリポジトリホスティングサービスにはGitHub、GitLab、Bitbucket、AWS CodeCommit、Microsoft Azure DevOpsなどがあります。
リポジトリホスティングサービスの特徴
1. ソースコードホスティング
開発者は自分のプロジェクトのソースコードをリポジトリにアップロードし、バージョン管理を行うことができます。これにより、コードの変更履歴、ブランチ、タグなどが追跡可能なります。
2. コラボレーション
複数の開発者が同じプロジェクトにアクセスし、コードの共同編集やレビューができます。多くのリポジトリホスティングサービスは、チームでの協力を強化するためのツールを提供しています。
3. バグトラッキング
プロジェクトに関連するバグや課題を管理するための機能を提供しています。
4. CI/CD統合
リポジトリホスティングサービスは一般的にCI/CD34(継続的インテグレーション/継続的デリバリー)ツールと統合されており、自動ビルド、テスト、デプロイを行うためのパイプラインを設定することができます。
5. セキュリティ
アクセス制御、認証、監査ログなどさまざまなセキュリティ機能が提供されており、プライベートリポジトリの作成も行えるため、プロジェクトを安全に管理することができます。
6. 統計と分析
プロジェクトの進捗状況やコードの品質に関するデータを収集・分析するツールが提供されています。リポジトリの閲覧、コードの比較、変更の追跡なども行えます。
GitHubとは
ソフトウェア開発者やチームがソースコードを管理、共有するためのウェブホスティングサービスです。
GitHubでソースコードを管理すれば、最新版や変更履歴が分かりやすくなります。また共同での開発に役立つ機能も豊富なため、プロジェクトに携わるプログラマーが多くなっても、スムーズに開発を進められます。
また、無料で非公開のリポジトリ(プライベートリポジトリ)を作成するなど開発に必要な機能を無料で利用することができます。
GitHubの特徴
1. フォーク
GitHubには、フォークという機能があります。一つのプロジェクトが複数に分派していくのを食器のフォークの先端に例えているのが名称の所以です。誰かのリポジトリをコピーする際に使用されます。オリジナルのものに対する編集・アクセス権限がなくても、自分の環境で改変が可能です。
2. プルリクエスト
自分が行った変更をオリジナルのものに反映したい時に使われます。オリジナルのオーナーにプルリクエストと呼ばれる通知を送ることができるのです。
3. マージ
プルリクエストを受け取ったオーナーは、ボタンをクリックするだけでリポジトリに対して行われた変更を自分のリポジトリにも取り入れられます。人のコードを自分のコードに導入するのをマージすると言います。マージは、複数の開発者が関わるプロジェクトにおいて最重要工程であり、GitHubではそれを安全かつ迅速に行うことができるのです。
GitHubのセットアップ
1. GitHubのアカウント作成
GitHubへアクセスし、ユーザ名・メールアドレス・パスワードを入力し、「Sign up for GitHub」ボタンをクリックします。
次に「Verify your account」の設問に回答後、「Join a free plan」を選択します。
「Welcome to GitHub」と表示された画面へ進みますが、一番下に進み、「Complete setup」ボタンをクリックしてください。
最後に以下画面が表示され、入力したメールアドレスに認証用メールが配信されますので、認証を行ってください。
2. リモートリポジトリを作成する
GitHubにアクセスし、リモートリポジトリを作成します。
トップ画面で「Create Repository」ボタンをクリックしてください。
リポジトリ作成画面に移動するので、「Repository name」には任意のリポジトリ名を入力します。
次にリポジトリの種類として、「Public」か「Private」を選択します。
Publicの場合は全体公開され、Privateの場合は招待しているチームのユーザーのみに公開されます。
次に「Initialize this repository with a README」ですが、リポジトリの説明や使い方を記述するREADME5ファイルを事前作成しておく場合にはチェックをONにします。
最後に「Create repository」ボタンをクリックすると、リポジトリが作成されます。
リポジトリを作成した後の流れなどより詳細でわかりやすい記事があったので、以下リンクから是非読んでみてください。
-
オープンソース
ソフトウェアを構成しているプログラム「ソースコード」を、無償で一般公開することです。 一般公開することによって、誰でもそのソフトウェアの改良や再配布が行なえるようになります。
こちらにわかりやすい記事があったので、是非読んでみてください。 ↩ -
リポジトリ
簡潔に言うとファイルやプログラムなどさまざまな情報・データを保管する場所のことです。
こちらにわかりやすい記事があったので、是非読んでみてください。 ↩ -
CI(Continuous Integration) 継続的インテグレーション
特定の技術を指すものではなく、ソフトウェアの変更をテストして、自動で本番環境に適用できるような状態にしておく開発手法のことです。ソースコードの変更を、定期的にビルドおよびテストして、共通のリポジトリに統合します。CIを用いることによって、クラスや各種のモジュールなど構成するすべての要素に対して実施するテストを自動化できます。そのため、プログラムの不具合を早く見つけ、すぐに修復できるのです。
こちらにわかりやすい記事があったので、是非読んでみてください。 ↩ -
CD(Continuous Delivery) 継続的デリバリー
CDとは検証済みコードのリリースを自動化することを指します。コード変更のマージから本番環境に対応するためのビルドまで、すべての段階でテストとコードリリースを自動化できます。これにより、本番環境にアプリケーションをすぐデプロイできるのです。
こちらにわかりやすい記事があったので、是非読んでみてください。 ↩ -
README
簡潔に言えば、ソフトやプログラムの部品などの説明書ファイルのことです。
こちらにわかりやすい記事があったので、是非読んでみてください。 ↩