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
バージョン管理とは / GitHub VCS
Search
kaityo256
PRO
October 01, 2021
Education
4
6k
バージョン管理とは / GitHub VCS
物理情報工学ソフトウェア開発演習
kaityo256
PRO
October 01, 2021
Tweet
Share
More Decks by kaityo256
See All by kaityo256
生成AIとの付き合い方 / Generative AI and us
kaityo256
PRO
8
1.4k
モンテカルロ法(3) 発展的アルゴリズム / Simulation 04
kaityo256
PRO
8
1.5k
UMAPをざっくりと理解 / Overview of UMAP
kaityo256
PRO
6
2.6k
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
6
590
論文紹介のやり方 / How to review
kaityo256
PRO
17
86k
デバッグの話 / Debugging for Beginners
kaityo256
PRO
15
1.7k
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
8
610
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
15
5.4k
制限ボルツマンマシンの話 / Introduction of RBM
kaityo256
PRO
3
1.4k
Other Decks in Education
See All in Education
Introduction - Lecture 1 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
2.5k
『会社を知ってもらう』から『安心して活躍してもらう』までの プロセスとフロー
sasakendayo
0
270
ÉTICA, INCLUSIÓN, EDUCACIÓN INTEGRAL Y NEURODERECHOS EN EL CONTEXTO DEL NEUROMANAGEMENT
jvpcubias
0
120
AI for Learning
fonylew
0
190
GOVERNOR ADDRESS:2025年9月29日合同公式訪問例会:2720 Japan O.K. ロータリーEクラブ、2025年10月6日卓話:藤田 千克由 氏(国際ロータリー第2720地区 2025-2026年度 ガバナー・大分中央ロータリークラブ・大分トキハタクシー(株)顧問)
2720japanoke
0
260
自分だけの、誰も想像できないキャリアの育て方 〜偶然から始めるキャリアプラン〜 / Career planning starting by luckly v2
vtryo
1
210
【Discordアカウント作成ガイド】
ainischool
0
210
”育てる”から”育つ”仕組みへ!スクラムによる新入社員教育
arapon
0
160
ROSConJP 2025 発表スライド
f0reacharr
0
230
2025年度春学期 統計学 第13回 不確かな測定の不確かさを測る ー 不偏分散とt分布 (2025. 7. 3)
akiraasano
PRO
0
140
【品女100周年企画】Pitch Deck
shinagawajoshigakuin_100th
0
7.3k
登壇未経験者のための登壇戦略~LTは設計が9割!!!~
masakiokuda
3
710
Featured
See All Featured
Done Done
chrislema
185
16k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Music & Morning Musume
bryan
46
6.8k
Side Projects
sachag
455
43k
Facilitating Awesome Meetings
lara
56
6.6k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Making Projects Easy
brettharned
119
6.4k
Designing for Performance
lara
610
69k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Rails Girls Zürich Keynote
gr2m
95
14k
Transcript
1 22 バージョン管理とは 慶應義塾大学理工学部物理情報工学科 渡辺 物理情報工学ソフトウェア開発演習
2 22 実行 開発 デバッグ 多くの知的生産活動は、修正を繰り返す 執筆 添削 プログラム開発 論文執筆
3 22 ありがちな事例1: 先生から添削済みの論文受け取ったとき、家で 修正した最新版ではなく、大学のPCに入ってい た古い版を渡していたことに気づく ありがちな事例2: 開発したコードをスパコンで実行しようとしたら動かず、 苦労して動くように修正。その後、スパコンで実行中に 新機能を開発、それをスパコンにアップロードした時に
動くように修正したコードを上書きしてしまう。
4 22 仕様書_佐藤修正_吉本追記.docx 仕様書_最終版_田中修正v2.docx どっちが最新? バージョン管理システム (Version Control System, VCS)
5 22 • ファイルの編集履歴を管理するためのシステム • 編集履歴をすべて保存する「リポジトリ」というデータベースを持つ • ユーザはリポジトリにアクセスしながら開発を行う バージョン管理システムとは? 何ができるようになるの?
• 任意の時点に状態を戻すことができる • 任意の時点間の差分を確認できる • 誰が、いつ、どこを修正したか確認できる 超優秀な秘書のようなもの
6 22 ローカル型 クライアント・サーバ型 分散型 SCCS, RCS等 CVS, Subversion等 Mercurial,
Git等 歴史的に大きく分けると、以下の三種類
7 22 第一期:ローカル型 • (おそらく)世界初のVCS • IBM System/370向けに開発、後にPDP-11へ移植 • 複数のバージョンを一つのファイルに保存
1992年 Source Code Control System (SCCS) 1982年 Revision Control System (RCS) • バージョン管理はファイル単位 • ファイルを修正する時に「チェックアウト」する ファイル修正時にロックをかける(排他制御) → 複数の人が同時に編集できない 管理がファイル単位 →プロジェクトとして管理できない
8 22 第二期:クライアント・サーバ型 • RCSのフロントエンド • リモートリポジトリを導入 • 複数の人が同時に修正可能 •
「マージ」の導入 1986年 Concurrent Version System (CVS) 2000年 Subversion • ファイル名変更やディレクトリの管理をサポート • プロジェクト全体にバージョン番号(リビジョン)を付与 中央集権的なリモートリポジトリ → 全ての歴史がリモート側にある → 単一障害点になってしまう
9 22 第三期:分散型 2000年 BitKeeper • ローカルに全ての情報がある(分散型) • Linuxカーネル開発に使われた商用ソフトウェア 2005年
Git • 一部のLinux開発者がBitKeeperをリバースエンジニアリング • BitKeeperを使えなくなったLinusがGitを開発 • 高速なブランチ切り替えやマージ 全てのリポジトリが完全な履歴を持つ リモートとローカルの歴史の整合性を取る
10 22 Eclipse Community Survey SubversionとGitのシェア 利用率(%) 2018年のStackoverflow Surveyでは、Git 87.2%、Subversion
16.1% 現在、VCSとしてはGitが大きなシェアを持っている
11 22 バージョン管理システム導入の二大メリット 渡辺が 考える バックアップ 履歴保存
12 22 1. 結果の新規性 2. 適切な引用 3. 体裁 4. ストーリー
Q: 卒論で一番大事なのは?
13 22 1. 結果の新規性 2. 適切な引用 3. 体裁 4. ストーリー
5. バックアップ もちろん 大事ですが 期日までに提出することが最も大事 Q: 卒論で一番大事なのは?
14 22 バージョン管理システムとして Git/GitHubを使うと上記要件を 自動的に満たす バックアップは定期的にとる バックアップ頻度=データが飛んだ時の手戻りの時間 最低でも毎日バックアップすること バックアップはリモートにとる 自分のPCの別フォルダにコピーするのはダメ
USBへのコピーも信用できない
15 22 バージョン管理システムを使っていると... • 任意の時点に状態を戻すことができる • 任意の時点間の差分を確認できる デバッグ時間の短縮
16 22 数値計算コードを開発中、 • メインカーネルを修正し • 別のインプットを与えたら 計算に失敗した 計算ルーチン (修正前)
インプット A OK 計算ルーチン (修正版) インプットB NG その機能を追加したことによるバグ? もともとあったバグがインプットにより顕在化?
17 22 バージョン管理システムを使っていないと... ソースとにらめっこして 気合でデバッグ 徹夜でなんとか バグ発見 自分で入れたバグを自分でとっただけで、仕事はなんら進んでいない
18 22 バージョン管理システムを使っていれば... 修正前のメインカーネルを取得し、Input Bを食わせる OK NG 今回の修正でバグが入った 計算ルーチン (修正前)
インプット B もともとあったバグが顕在化 問題の切り分けが容易
19 22 昔入れたバグほど、デバッグが困難に (修正内容を忘れているから) 開発時間軸 Ver. 1 Ver. 2 Ver.
3 Ver. 4 Ver. 5 (1)ここでバグ発覚 (3)ここでバグ混入 (2)ここまでは動作することを確認 デバッグ時間軸 Ver. 2とVer. 3の差分を取れば、バグの原因がすぐにわかる
20 22 開発 デバッグ 開発 デバッグ 作業時間 進捗 作業時間 プログラミングが早い人は「デバッグ時間」が短い
左の人の方が「がんばっている」ように見えるが、 右の人の方が作業は進んでいる
21 22 バージョン管理システムを使えばデバッグ時間が短く なるわけではない 「できる人」はGitが使えるから「できる」のではない GitやGitHubはあくまでも「開発スタイル」を支援するツール • Gitが「何を」実現するツールなのか • 自分がGitで「何を」しようとしているのか
を理解することなしに開発効率は向上しない
22 22 • バージョン管理システムとは、ドキュメントやソフ トウェアのバージョンを管理するためのシステム • 複数人開発で有用なツールだが、個人開発でも有用 →三日前の自分は他人 • バージョン管理システムを使えば開発効率が上がる
わけではない →開発スタイルを変えなくてはならない Git/GitHubの使い方を学ぶことが目的ではない ツールに流れる哲学を学ぶ