自社製品のバージョン管理 進化と問題解決の道のり
2019/1/10
サイエンスパーク株式会社 須藤圭太
1
• ID:suusanex( connpass・Twitter・GitHub共通)
• 名前:須藤圭太
• サイエンスパーク株式会社という独立系ソフトウェアベンダーに所属
• 4年ほど受託開発で、上流から下流まで全部を回す
• ここ6年ほどは、自社製品開発を担当
勉強会、今後も開いていきます。
https://sciencepark.connpass.com/
自己紹介
2
• Windowsデスクトップアプリ開発のソースコード管理
• バージョン管理が無いところからsvnに、そしてGitに。
• 周辺のシステムも合わせて進化
• 移行理由や困った事などを紹介します
概要
3
• 共有フォルダにタイムスタンプつけて、リリースコードとシンボルをフォルダ管理
はじまり
4
• はや幾年、フォルダは数十。特別版、マイナー修正版、派生版
• バージョン・課題を示すのはフォルダ名のみ
• ブランチ構造が分からん!
フォルダ爆発
5
• svnへ
• Trac Lightningで導入
• ソースコードとシンボルをブランチとタ
グで管理
• コミットログをTracのチケットへ連携
svnでツリー管理
6
• 開発チームが増えてきたので、機能ブランチで並走開発を開始
• 一つマージするたびに大量の競合
• 共通ブランチで開発すると、今度はビルドが通るまでコミットできない
• 開発途上のプロトのバージョン管理に困る
分担を始めた時の問題
7
• 共有フォルダでホストしたgitへ
• Redmineと連携
• svn→git変換はうまく行かず、過去の
svnを履歴参照用に残す
マージと機能ブランチが得意なgitへ
8
• 機能ブランチの競合が激減
• ローカルコミットでプロトも楽に
• Git-flowでコードレビュー(redmineチケット作成)
Gitは思った以上に便利だった
9
• マージ時にOfficeファイルが必ず競合
• (svnはフォルダ単位のマージなので、競合していなかった)
• リポジトリのサイズがどんどん増えていく
• リポジトリが壊れた
• GitLFSも無かった当時、gitでバイナリ管理は非推奨だった
Gitのバイナリ管理問題
10
CI含めて再設計
• リポジトリを分ける
• バイナリは共有フォルダ
• Jenkinsでビルド履歴&結果管
理
• ドキュメントはテキストへ移
行
• (Markdown,PlantUMLで書き、
Sphinxでビルド)
11
• オンプレで完結してるけど、協力会社との開発どうしよう
• VPN繋いで共有フォルダ公開すればいいね
社外と協力する規模になってきた
12
• クソ遅い
• push/pullの1回ごとに10分単位の時間がかかる
共有フォルダじゃダメだった
13
• 共有フォルダ経由時のプロト
コルの問題っぽい
• Webサーバーホストに変更
• GitLabも検討したが、Azure
DevOpsの登場
• MSDN持ちは無料で使えるの
が決め手
• JenkinsとTestLinkも統合
• Jenkins同様にオンプレPCを
エージェントにできた
一気にクラウドへ移行
14
• 10倍以上速くなった
• redmineで無理やりやっていたプルリクが普通に使えるように
• サーバー保守作業から解放
• MSDNPro.だと、テスト管理は別料金になる。そこは難点
メリットは色々大きい
15
• クラウドだからソースコードを持ち出せるけど、どうなの?
セキュリティ問題
持ち出し
16
• 社外のPCについては・・・
• Webログインは禁止
• ファイルはセキュリティソフトで持ち出し禁
止
• ソフトは自社製品NonCopy 2
• https://sciencepark.co.jp/information_security/noncopy/
• プルリクが使えないのが次の課題
• Azure ADやIntuneを組み合わせれば行けるか
も・・・?
• 研究中なので、欲しいという声があれば加速
します
社外については、利便性を妥協して暫定処置
17
• バージョン管理などのシステムは、入れただけのメリットがある
• 開発規模や状況で必要なものは変わっていくので、その都度見直しすれば良い
• 開発を取り巻く環境にも目を向けて、仕事を楽しくしていきましょう!
まとめ
18
SP1901-E02-01

自社製品のバージョン管理 進化と問題解決の道のり