とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

イベントレポート 第22回とことんDevOps勉強会「Gitで始めるバージョン管理入門」

今回のとことんDevOps勉強会は「Gitで始めるバージョン管理入門」と題して、日本仮想化技術の宮原が、GitとGitHubの基本とライブデモ形式で実際にリポジトリを作成してからプルやコミット、プッシュなどの操作を紹介しました。

Gitをはじめとするバージョン管理は、アプリケーション側のエンジニアに限らず、インフラエンジニアを含めた幅広い層で必要な知識となってきました。特にインフラエンジニアとしてはInfrastructure as Code (IaC)と呼ばれるようなインフラ環境をコード化して自動化する流れが当たり前になってきたことで、ソースコードのバージョン管理の知識が必要になってきています。

今回はこれからGitを始めたい人や改めて学び直したい人に向けて、GitやGitHubの入門編として開催しました。

振り返りも兼ねて当日の配信の様子をYouTubeでアーカイブしていますので、是非ご覧ください。当日参加できなかった方も、これを機会にとことんDevOps勉強会に興味を持っていただければと思います。また、当日いただいたQ&Aに関してもこちらのブログでまとめていますので、ぜひご覧ください。

セミナー動画

www.youtube.com

発表資料

speakerdeck.com

Q&A まとめ

IoTアプリのリポジトリ構成について

質問

IoTのアプリなど、センサ側のデバイス(ソースコード)が複数種類有って、 サーバー側に可視化用のWebアプリをおくような場合、リポジトリは1つにまとめるのが一般的ですか?

回答

IoTアプリでインフラコードとアプリコードを一緒にするかはケースバイケースで、明確な答えはありません。 ディレクトリを分けてモノレポ形式にするか、1つか2つのリポジトリに分ける方針で設計するのが望ましいです。

リモートリポジトリ作成時の初期内容について

質問

リモートリポジトリを先に作成した方がいいとのことでしたが、 そうなると最初のリモートリポジトリの内容は空(README.mdとLicenseくらい?)になる感じ?

回答

多くのGitの本では、最初にローカルリポジトリで操作を練習し、その後にGitHubと連携する方法が紹介されています。 しかし、チーム開発を前提とした場合、リモートリポジトリから始めた方が理解しやすいので、そのように説明しています。

オンプレミスでのGitLabサーバ構築時のストレージ見積もりについて

質問

ちょっとGit本体からは話がずれますが、Gitlabサーバをオンプレで構築する際、 ストレージってどのくらい見積もればいいですか?そんなに更新していないのにストレージがすぐ枯渇してしまって・・・

回答

ストレージ見積もりはGitLabの使用状況によるため、実際の検証をしてみないことには見積もるのは難しいと考えています。

Rebaseとは?エラーの原因と対処法

質問

rebase ってなにですか? なんで今回エラーになったんですか? ききもらしていたらすいません。

回答

rebaseは、Gitのバージョン管理システムで使われるコマンドの一つで、ブランチの履歴を再構築するために使用されます。 具体的には、あるブランチの基点(ベース)を別のブランチに変更する操作です。これにより、より直線的で読みやすい履歴を保つことができます。

Gitではgit pull時のマージ方法を設定する必要があります。これは、Gitが複数のマージ方法を提供しているためであり、組織やチームごとに異なる方針が存在するからです。そのため、事前にルールを明確にするための設定が必要になったと考えられます。

GitHub上で直接コミット時にリポジトリごとに改行コードを制御する方法は?

質問

Webからのコミット時には表記違ってたと思いますが、リポジトリ毎に改行コードを制御する(LF以外弾く)みたいなことってできますか?

**回答

GitHubから直接のコミットはおすすめできませんが、今回はデモ用に行われています。GitHubの標準機能で改行コードを制御する方法はわかりませんが、GitHub Actionsを使用して改行コードをチェックし、エラーにすることはできます。ただし、それが最良の方法とは限りません。代わりに、GitHub上での直接変更を避けるための方針やルールの設定が望ましいです。

コンフリクトの発生と対応について

質問

コンフリクト発生時は、場合によっては、他の方の変更を読み込み、関連の意図も考えながら、修正しなおしとかなり大変になる。という理解でよろしいでしょうか?コンフリクトはみなさんあまりこわくないのでしょうか? 

回答

分散型のバージョン管理では、複数の開発者が同時に作業を進めるため、コンフリクトが発生しやすいです。各開発者が独立して作業を進めるため、同じファイルや行に対して競合する変更を行うことがあります。そのため、コンフリクトを回避することはほぼ不可能であり、発生した場合には解決する手順やツールが必要です。

プライベートクラウド運用チームのコード管理に関するベストプラクティス

質問

プライベートクラウド運用のチームにおいて、SWコンフィグの変更管理や、Ansible・Teraformによるnfvコンポーネントデプロイ作業のコード管理などをgit管理したいのですが、ポリシーやチームでの運用方法など何を参照すればよいでしょうか?ベストプラクティスなどあれば知りたいのですが、、、

回答

非常に難しい質問ですが、開発・検証・本番のステージを作って回していくことができるかはポイントになりそうですね。頂いた質問のキーワドとしてはGitOpsに近いように思いますので、その辺りを中心に情報収集をしてみたら良いのではないでしょうか。

プッシュ/プルの動きについて

質問

develop(ローカル)→master(リモート)にpushするとローカルの編集内容がリモートにはあるが、ローカルは編集前になってしまいます。リモートのをpullして反映させれば良いと思いますが、プルリクエストだと承認するまでpullしても編集後のデータが取得できないと思うのですが…

回答

develop(ローカル)→master(リモート)にPushした場合は、master(ローカル)にブランチを切り替えると編集前の状態に戻ったように見えてしまいます。この場合には、Pullしてmaster(リモート)の内容を反映することで質問者さんが意図している変更が反映されるのではないでしょうか。

プルリクエストの場合は、承認されるまで変更が反映されないことを意図してやっているため、一定仕方ないことかと思います。そのため、プルリクエストでレビュー中の変更内容を元に次の修正などを始めたい場合にはひと工夫が必要になります。

おわりに

Gitの入門編として開催しました。これから始めたい方や復習したい方にとって参考になる内容でしたでしょうか。今後Gitの応用編などについて企画を進めているところですので、今後の勉強会の案内をチェックして頂けたら嬉しいです。