Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20160128 jjug Nightセミナー_Git実践入門
Search
syobochim
January 30, 2017
Programming
1
1.2k
20160128 jjug Nightセミナー_Git実践入門
syobochim
January 30, 2017
Tweet
Share
More Decks by syobochim
See All by syobochim
AWSで実現する「好き」の感情 / Develop Suki by AWS #devio2022
syobochim
1
340
ドメイン駆動設計のススメ#1 / DDD DevLiveShow Chapter1
syobochim
0
290
ドメイン駆動設計のススメ#2 / DDD DevLiveShow Chapter2
syobochim
0
500
しょぼちむのエヴァンス本のススメ / syobochim read Evans Book
syobochim
9
26k
オンラインのプレゼンがさみしくて 拍手👏アプリつくりました #javajo / ClapHand Application
syobochim
1
280
いちばんやさしいGit入門
syobochim
2
2.8k
KotlinでAndroidアプリつくってみた
syobochim
0
1.2k
第三回マイクロサービスアーキテクチャ読書会(後半)
syobochim
0
1.1k
SIerもはじめる わたしたちのDevOps #jjug_ccc
syobochim
0
1.1k
Other Decks in Programming
See All in Programming
MCP with Cloudflare Workers
yusukebe
2
220
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
760
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
330
Jakarta EE meets AI
ivargrimstad
0
240
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
330
Effective Signals in Angular 19+: Rules and Helpers @ngbe2024
manfredsteyer
PRO
0
140
快速入門可觀測性
blueswen
0
350
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
360
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
250
バグを見つけた?それAppleに直してもらおう!
uetyo
0
180
HTTP compression in PHP and Symfony apps
dunglas
2
1.7k
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
520
39k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Navigating Team Friction
lara
183
15k
Mobile First: as difficult as doing things right
swwweet
222
9k
Bash Introduction
62gerente
608
210k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
Transcript
Git実践入門 JJUGナイトセミナー Git入門 2016-01-25(月)19:00 - 21:00
• しょぼちむ • @syobochim • TIS株式会社 こんばんわ!
受託開発 お客様は金融系 基盤チームのメンバーとして案件に参入
結論から言うと 少人数チームでGit導入するのはいいけど 大規模でやるためには 本当にちゃんと運用フローを考えて 体制を整えるか ある程度妥協しないと 大惨事になるということ
※あくまでイメージです
今日は私や、私の周りの人が 案件にGitを導入・運用した時の 開発プロセスについて お話ししていきます
まずソースコードを管理するための 基本的な開発スタイルについて
開発スタイル
構成管理サーバ : GitBucket
CI : Jenkins
mavenリポジトリ : artifactory
ちなみに全部無料!
(Redmine以外は) JVMで動く!
今日はここの話をします
ちなみに全体のざっくりした説明は ↓に書いてます http://syobochim.hatenablog.com/ entry/2015/09/03/214050
GitBucket 構成管理用の リポジトリ管理ツール
GitBucketのいいところ • インストールが簡単 • 無料! • GitHubに似ているから 普段GitHubを使ってい る人には親しみやすい
GitBucketのインストールDEMO
warを直接起動できる!かんたん! ちなみに環境構築についての ブログ書きました http://syobochim.hatenablog.com/entry/ 2015/05/31/232650
https://github.com/gitbucket/gitbucket/wiki/Backup 極たまにデータが飛ぶことがある バックアップを取得しておくことが大事 困ったこと
GitBucketは無償と思えないほど使いやすい! 無償+インストールが簡単なので「とりあえず やってみよう!」の ハードルが低い ただ、トラブル対応などで 導入・運用のコストはかかってしまうので 可能なら最初から有償ツールを 検討した方がいいかも
プロジェクトの構成とブランチモデルについて
プロジェクト構成やブランチモデルは プロジェクトの体制や要員のスキルに 合わせて一番検討する必要があります
• ケース1 ‣ 小規模で構成管理の大切さを知っている人 が各拠点に一人はいる体制 • ケース2 ‣ 小〜中規模でGitを知らない+構成管理につ いて知らない人たちがほとんどを占める体
制 • ケース3 ‣ 中〜大規模でGitを知らない+構成管理につ いて知らない人たちがほとんどを占める体 制
ケース1 • アプリチーム2つ×基盤チーム1つ • プロジェクトの体制は小規模(1チーム10人未満) • アプリチームも基盤チームも主体的に行動している • 基盤チームはアプリ開発への影響を理解している •
アプリチームは基盤部品の重要度を理解している • 必要な基盤部品の提供時期がアプリチームの計画とマッチして いる • 構成管理についてある程度のスキルや知識をもっている人が各 チームに一人はいる
プロジェクト構成 • チームや拠点ごとにリポジトリが分かれるようにする • 画面・バッチ・基盤ごとにチームや拠点が分かれている • ベースリポジトリとサイトリポジトリに分けている
ベースリポジトリ • ライブラリアンのみmerge / pushする権限がある • リリースしてもいいソースのみを格納する
サイトリポジトリ • 拠点ごとにリポジトリを分けている • 各開発者が直接push / pullする
サイトリポジトリ 開発拠点は違うが同じフレームワークを使う場合は 共通用リポジトリから更にリポジトリをforkさせていく fork
ブランチ • 開発者はfeatureブランチを作って開発をする • pull request形式でレビューをする • サイトリポジトリのmasterブランチへのマージは責任者がやる • ベースリポジトリへのマージはライブラリアンがやる
ブランチ • 開発者はfeatureブランチを作って開発をする • pull request形式でレビューをする • サイトリポジトリのmasterブランチへのマージは責任者がやる • ベースリポジトリへのマージはライブラリアンがやる
ブランチ • 開発者はfeatureブランチを作って開発をする • pull request形式でレビューをする • サイトリポジトリのmasterブランチへのマージは責任者がやる • ベースリポジトリへのマージはライブラリアンがやる
ブランチ • 開発者はfeatureブランチを作って開発をする • pull request形式でレビューをする • サイトリポジトリのmasterブランチへのマージは責任者がやる • ベースリポジトリへのマージはライブラリアンがやる
ブランチ • 開発者はfeatureブランチを作って開発をする • pull request形式でレビューをする • サイトリポジトリのmasterブランチへのマージは責任者がやる • ベースリポジトリへのマージはライブラリアンがやる
いいところ リポジトリごとにpush権限を変更できるので 「あっ!間違えてpushしちゃいました!」 というミスをシステム的に防ぐことが出来て安全 自分たちがどのチームにいて 何を開発しているのかが明確になる フレームワーク用にリポジトリを分けているので 自分たちの好きなタイミングでフレームワークの変更を 取り込むことができる 拠点間でのビルドの失敗が他の拠点に影響を与えない
他の会社からのソースコード受け入れ時に 対象ソースが何かがわかりやすい
いまいちなところ 運用コストが高い フレームワークの変更の取り込みタイミングを 各拠点に任せるので 「後でいいや」って思い続けられると死ぬ
ケース3つのまとめ ケース1 運用コスト × フレームワーク変更 の取り込む速さ △ フレームワーク変更 の取り込みタイミン グを決められる
◯ リリース成果物への 権限設定 ◯ レビューしたものの み成果物に出来る ◯ 所感 重厚
ケース2 • アプリチーム複数×基盤チーム1つ • プロジェクトの体制は小〜中規模 • 構成管理についてあまり知識がない人ばかり
プロジェクト構成 • 画面・バッチ・基盤ごとにモジュールが分かれている • ブランチ単位で開発拠点やリリース用ソースを分けて いる
プロジェクト構成 • リリース用のブランチを作って、そこからリリース成果物を 作成する • 開発者はリポジトリに対して直接pull / pushをする
ブランチ • 開発者はfeatureブランチを作って開発をする • 1リポジトリに開発拠点が複数ある場合はdevelopブランチを分ける • pull request形式でレビューをする • masterブランチへのマージはライブラリアンがやる
ブランチ • 開発者はfeatureブランチを作って開発をする • 1リポジトリに開発拠点が複数ある場合はdevelopブランチを分ける • pull request形式でレビューをする • masterブランチへのマージはライブラリアンがやる
ブランチ • 開発者はfeatureブランチを作って開発をする • 1リポジトリに開発拠点が複数ある場合はdevelopブランチを分ける • pull request形式でレビューをする • masterブランチへのマージはライブラリアンがやる
ブランチ • 開発者はfeatureブランチを作って開発をする • 1リポジトリに開発拠点が複数ある場合はdevelopブランチを分ける • pull request形式でレビューをする • masterブランチへのマージはライブラリアンがやる
いいところ 自分たちがどのチームにいて 何を開発しているのかが明確になる フレームワークの変更をdevelopにmergeするので 素早く変更を反映・取り込むことが出来る 拠点間でのビルドの失敗が他の拠点に影響を与えない 他の会社からのソースコード受け入れ時に 対象ソースが何かがわかりやすい
いまいちなところ 「あっ!間違えてmasterにpushしちゃいました!」 というミスがたまに発生する フレームワークの変更の受け入れタイミングを アプリ開発者が自発的に決められない (もちろん事前に調整することが前提)
ケース3つのまとめ ケース1 ケース2 運用コスト × △ フレームワーク変更 の取り込む速さ △ ◯
フレームワーク変更 の取り込みタイミン グを決められる ◯ × リリース成果物への 権限設定 ◯ × レビューしたものの み成果物に出来る ◯ ◯ 所感 重厚 無難
ケース3 • アプリチーム1つ×基盤チーム1つ • プロジェクトの体制は中〜大規模 • アプリチームは完全にオフショア開発 • 構成管理についてあまり知識がない人ばかり
プロジェクト構成 • 画面・バッチ・基盤ごとにモジュールが分かれて いる • ブランチ単位でリリース用ソースを分けている
ブランチ • svnと同じdevelopブランチへの直接commit • masterブランチへのマージは受け入れ時にやる • 基盤チームはパターン2と同じブランチのフローで開発
いいところ 教育・運用コストがかからない フレームワークの変更をdevelopにmergeするので 素早く変更を反映・取り込むことが出来る 他の会社からのソースコード受け入れ時に 対象ソースが何かがわかりやすい (契約によっては開発フローを強制出来ないので 相手のやりやすいように開発してもらう)
いまいちなところ 「あっ!間違えてmasterにpushしちゃいました!」 というミスがたまに発生する フレームワークの変更の受け入れタイミングを アプリ開発者が自発的に決められない (もちろん事前に調整することが前提) レビューしていない成果物が リリース対象に入ってしまう可能性がある
ケース3つのまとめ ケース1 ケース2 ケース3 運用コスト × △ ◯ フレームワーク変更 の取り込む速さ
△ ◯ ◯ フレームワーク変更 の取り込みタイミン グを決められる ◯ × × リリース成果物への 権限設定 ◯ × × レビューしたものの み成果物に出来る ◯ ◯ × 所感 重厚 無難 不安
導入・運用してみて思った事
ガイドを用意するとスムーズ ググったらわかるので皆さん調べてください! ではなく、ガイド化してあげると受け入れられやす い エンジニアならコマンドくらい使えろ!じゃなく プロジェクトメンバーが使いやすいと思うツールを 選んであげる事が大事 ちなみに、ガイドをGitHubで公開しています http://syobochim-doc.readthedocs.org/ja/ latest/index.html
ややこしいことはさせない 必要最低限な操作しかやらせない cherry pickやrebaseなどは、 ある程度知見がたまっている、この人なら安心 できるなーと思う人に「こういうことも出来ま すよ。ただ、こういうところに注意してくださ い」と個人的に教えてあげる方がいいと思う よくわかってない人がよくわからないまま何か すると死ぬ
ある程度の柔軟性も必要 今までのやり方と違うので出来ない!生産性が 上がらない!!という人は絶対数いると思う 『こう使うと、こんなメリットがあってね』っ て説明はしてあげるべきだけど「こうやるん だ!!」って強制すると「うまくいかない!全 てGitが悪い!!」って思っちゃう人もいて、 自分が疲れちゃうので 「じゃあ、そちらのチームとこちらのチームで 使い方変えましょう」くらいの柔軟性も必要
とにかくやってみるとイイ 私はGitをお仕事で使ったことなかったし、GitHub もブランチ切ったりしたことなかった でも導入・運用してみたら、辛いこともあったけど なんとかなった 運用についてのドキュメントや相談相手がチーム外 にでもいると、より安心して運用できると思う なお、今日お話ししたケース1の事例詳細はドキュ メントにまとめられてる https://www.gitbook.com/book/uga/mastering-
builder/details
改善が必要だと思うこと
featureブランチは息短めにする featureブランチが長生きすると、コンフリクト したり共通部品をうまく使えなかったりと、め んどうなことが起こりやすくなる 注意喚起はしているけど、実際何週間もfeature ブランチで開発し続けている人がいるので、解 決策募集中!! ちなみに「syobochim/XXX」のようなブランチ名 になっていたら息が長くなる兆候なので即刻や めさせる
できれば最初にデモしてあげる たまに、「えっ?!そんな使い方してたの?!」って 人がいるので、最初に実際の開発フローがイメージで きるようにデモしてあげればよかったと思う
ちゃんとトレーニングを重ねていく 継続して改善していくためには ちゃんとしたトレーニングが必要 sandboxやhandsonを使って開発者が自由に触 れる環境で遊んでもらうことで Gitに慣れてもらう+使い方を知ってもらえ ればよかった
ありがとうございました
One more thing… created by @kawasima http://unit8.net/gq/