From 928c98aec4323ad130421dd51f2e77d8d32583e5 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 20 Jun 2023 21:47:08 +0900 Subject: スライドを追加 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - slide.pdf | Bin 0 -> 194763 bytes slide.saty | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 slide.pdf diff --git a/.gitignore b/.gitignore index 905ae0a..19780ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ /slide.satysfi-aux -/slide.pdf diff --git a/slide.pdf b/slide.pdf new file mode 100644 index 0000000..648680e Binary files /dev/null and b/slide.pdf differ diff --git a/slide.saty b/slide.saty index 1d2c58e..33c6971 100644 --- a/slide.saty +++ b/slide.saty @@ -12,7 +12,7 @@ document '< +make-title(| title = { - |TODO + |巨大なコードベースへ突撃するために |}; author = {|nsfisis (いまむら)|}; date = {|PHPカンファレンス福岡2023 前夜祭 (非公式)|}; @@ -35,8 +35,139 @@ document '< %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - +frame{まとめ}< - +p{TODO} + +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}; + ]); + > > > -- cgit v1.2.3-70-g09d2