blob: 33c69712f97e4344d59dc92d6bc2b1dd6d2ec48a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
@require: class-slydifi/theme/akasaka
@require: figbox/figbox
open FigBox
in
document '<
+set-config(|
SlydifiThemeAkasaka.default-config with
color-emph = Color.black;
|);
+make-title(|
title = {
|巨大なコードベースへ突撃するために
|};
author = {|nsfisis (いまむら)|};
date = {|PHPカンファレンス福岡2023 前夜祭 (非公式)|};
|);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+frame{自己紹介}<
+fig-center(vconcat [
gap 75pt;
hconcat [
textbox{nsfisis (いまむら)};
gap 20pt;
include-image 50pt `assets/me.jpeg`;
];
gap 20pt;
textbox{\@ デジタルサーカス株式会社};
]);
>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+section{|はじめに|}<
+frame{前置き}<
+listing{
* 巨大なコードベースとは
** 数十万から数百万行のソースコード
* 主な対象
** 巨大なコードベースを読んだことがない方
* 話さないこと
** 特定の言語向けの how-to (デバッガの使い方など)
}
>
+frame{アジェンダ}<
+enumerate{
* ソースコードに突撃する前にできること
* ソースコードを効率的に読む
* 巨大なコードベースを読むときの心構え
}
>
>
+section{|ソースコードに突撃する前に|できること|}<
+frame{読む前にできること}<
+fig-center(vconcat [
gap 75pt;
textbox?:(set-font-size 24pt){読まなくても分かるなら、};
gap 15pt;
textbox?:(set-font-size 24pt){読まないに越したことはない};
]);
>
+frame{読む前にできること}<
+listing{
* 公式ドキュメント
** あれば
* イシュートラッカー
** 誰かが報告しているかも
* リリースノート
** 実はもう直っているかも
}
>
>
+section{|ソースコードを効率的に読む|}<
+frame{ソースコードを取得する}<
+listing{
* ローカルに clone してすぐに読めるようにする
* \code(`--depth=1`); つきで shallow clone する (Git の場合)
** 新しめの Git なら git scalar も (巨大リポジトリに最適化した Git の拡張)
* ブランチ‥タグを自分が読みたいものにする
}
>
+frame{構成を把握する}<
+listing{
* ディレクトリ構成を把握する
* 全体のアーキテクチャを知る
}
+fig-center(gap 15pt);
+p{
典型的なパターンを知っていると有利
}
>
+frame{該当個所を見つける}<
+p{
コードリーディング3種の神器
}
>
+frame{該当個所を見つける}<
+p{
コードリーディング3種の神器
}
+fig-center(gap 15pt);
+listing{
* git grep
}
>
+frame{該当個所を見つける}<
+p{
コードリーディング3種の神器
}
+fig-center(gap 15pt);
+listing{
* git grep
* git log
}
>
+frame{該当個所を見つける}<
+p{
コードリーディング3種の神器
}
+fig-center(gap 15pt);
+listing{
* git grep
* git log
* vim
}
>
+frame{該当個所を見つける}<
+p{
コードリーディング3種の神器
}
+fig-center(gap 15pt);
+listing{
* git grep
* git log
* vim (neovim でも可)
}
>
+frame{調査・デバッグ}<
+listing{
* テストコードを調べる
* 脳内でトレースする
* 言語・ライブラリ特有の落とし穴を重点的に読む
}
>
>
+section{|巨大なコードベースを読むときの心構え|}<
+frame{心構え}<
+fig-center(vconcat [
gap 75pt;
textbox?:(set-font-size 24pt){すべての調査過程を記録せよ};
gap 50pt;
textbox{開いたファイル、読んだ関数、立てた仮説、etc};
]);
>
>
>
|