© 2022 NTT DATA Corporation 1
Open Source Conference 2022 Online/Kyoto
PostgreSQL開発コミュニティに参加しよう!
~2022年版~
2022年7月29日
株式会社NTTデータ 藤井 雅雄
© 2022 NTT DATA Corporation 2
自己紹介
藤井 雅雄
Database Technical Lead @ NTTデータ
データベース研究開発
PostgreSQL 技術支援
PostgreSQLコミッタ
レプリケーション
WAL圧縮
バックアップ進捗確認
pg_bigm(全文検索モジュール) コミッタ
fujii_masao
MasaoFujii
© 2022 NTT DATA Corporation 3
PostgreSQL開発コミュニティに参加しよう!
© 2022 NTT DATA Corporation 4
PostgreSQLコミュニティ (グローバル)
The PostgreSQL Global Development Group
PostgreSQL本体を開発しているコミュニティ
Local User Groups
世界各地 (35ヶ国67地域) にあるPostgreSQLユーザグループ
PUG = PostgreSQL User Group
Events
世界各地でPostgreSQLに関するカンファレンスなどのイベントが開催
Slack, IRC, LinkedIn, etc
様々なチャンネルでPostgreSQLユーザが集まってコミュニケーション
© 2022 NTT DATA Corporation 5
PostgreSQLコミュニティ (日本)
日本PostgreSQLユーザ会
日本のPostgreSQLユーザグループ
JPUG = Japan PostgreSQL User Group
支部
北海道、東北、新潟、名古屋、関西、四国、中国、九州、沖縄
文書・書籍関連分科会
PostgreSQL関連の文書の翻訳
PostgreSQLエンタープライズ・コンソーシアム
PostgreSQLの普及推進を目的とする企業コンソーシアム
PGECons = PostgreSQL Enterprise Consortium
© 2022 NTT DATA Corporation 6
PostgreSQLコミュニティ (日本)
Events
日本の様々なコミュニティ・団体・企業・個人がカンファレンスなどのイベントを開催
PostgreSQL Conference Japan
PostgreSQLアンカンファレンス ...etc
Slack
PostgreSQLに関する日本語Slack
© 2022 NTT DATA Corporation 7
PostgreSQLコミュニティ (グローバル)
The PostgreSQL Global Development Group
PostgreSQL本体を開発しているコミュニティ
Local User Groups
世界各地 (35ヶ国67地域) にあるPostgreSQLユーザグループ
PUG = PostgreSQL User Group
Events
世界各地でPostgreSQLに関するカンファレンスなどのイベントが開催
Slack, IRC, LinkedIn, etc
様々なチャンネルでPostgreSQLユーザが集まってコミュニケーション
PostgreSQL開発コミュニティに参加しよう!
© 2022 NTT DATA Corporation 8
The PostgreSQL Global Development Group
メーリングリスト Wiki
Gitレポジトリ
コアチーム コミッタ
開発、レビュー、テスト、バグ報告
コントリビュータ
ユーザ
© 2022 NTT DATA Corporation 9
The PostgreSQL Global Development Group
メーリングリスト Wiki
Gitレポジトリ
コアチーム コミッタ
開発、レビュー、テスト、バグ報告
コントリビュータ
ユーザ
参加
選出
選出
7名
28名
v14開発では
415名
© 2022 NTT DATA Corporation 10
The PostgreSQL Global Development Groupに参加の企業例
1 663 Crunchy Data (4)
2 650 EnterpriseDB (7)
3 337 VMWare (3)
4 224 Microsoft (4)
5 126 Fujitsu (1)
6 102 NTT Data (1)
7 44 Zenith Labs, Inc (1)
8 39 Unknown (3)
9 26 Redpill Linpro (1)
10 22 Postgres Professional (2)
11 17 NTT (1)
12 13 University of Cambridge (1)
13 4 credativ (1)
14 2 SRA OSS (1)
※2021年のコミッタ別のコミット数について、
2021年末時点のコミッタの所属企業ごとに集計
※()内の数字は、各企業の所属コミッタ数
2021年の(コミッタ所属の)会社別のコミット数 第30回PostgreSQLアンカンファレンス
資料からの抜粋
© 2022 NTT DATA Corporation 11
モチベーション
PostgreSQL開発コミュニティになぜ参加したいか?
技術者にとってのモチベーションの例としては、
① PostgreSQLの内部や設計思想、仕様、制約などを深く理解できる。
PostgreSQLを効果的に利用できるようになる
② 世界中の様々な技術者たちの考えに触れることで、
技術者としての見識が大きく広がる。様々な技術者とのパイプができる
③ パッチの作成やレビューを通じて、コーディングスキルが向上する
④ 新機能開発やバグ修正の成果に対して世界中から感謝される。
自身の成果として名前が残り、セルフブランディングになる
© 2022 NTT DATA Corporation 12
モチベーション
PostgreSQL開発コミュニティになぜ参加したいか?
事業者にとってのモチベーションの例としては、
① データベース技術の最新動向について早期に情報を入手でき、
事業に活かすことで、その事業領域でのプレゼンスを獲得できる
② 世界中の様々な企業・技術者とパイプができ、
他社とのアライアンスなどの機会につながる可能性がある
③ 事業で必要な機能やバグ修正をPostgreSQLに取り込める。
事業者の技術力アピールやブランド力を向上できる
© 2022 NTT DATA Corporation 13
PostgreSQL開発のフロー
新機能の提案やバグの報告を行う
新機能の必要性やユーザI/F、アーキテクチャ、
実現方法、バグ原因、修正方法などを議論する
議論結果を踏まえて、新機能やバグ修正を
コーディングして、パッチを作成・投稿する
パッチをレビューして、不備を改修する
コミッタがパッチをPostgreSQL本体に取り込む
提案・バグ報告
議論
パッチ作成
レビュー
コミット
繰
り
返
し
© 2022 NTT DATA Corporation 14
議論に参加しよう!
© 2022 NTT DATA Corporation 15
メーリングリストの購読
PostgreSQL開発コミュニティでのコミュニケーションはメーリングリストが基本
PostgreSQL公式サイトでコミュニティアカウントを作成して、4つのMLを購読
pgsql-hackers
新機能の提案やバグ修正、開発課題などについて議論する
pgsql-bugs
ユーザからのバグ報告先。報告されたバグやその修正などについて議論する
pgsql-docs
ドキュメントやその問題、改修などについて議論する
pgsql-committers
コミットされた内容が通知される
© 2022 NTT DATA Corporation 16
議論を読む
藤井がv13向けに
バックアップ取得の
進捗確認機能を
提案したときのメール
© 2022 NTT DATA Corporation 17
議論を読むコツ
興味あるテーマ・機能・バグの議論から読む
OSS-DBの資格取得などを通じて
PostgreSQLの体系的な事前知識を得ておく
英語の長い議論を手軽に読みたいときは、翻訳サイトなども活用
例えば、Shaperで英文を整形して、DeepLで日本語翻訳
https://dream-exp.net/shaper/
https://www.deepl.com/translator
© 2022 NTT DATA Corporation 18
議論で返信する
宛先にMLを含める
内容は公開されることに注意
bottom-posting
返信したい対象の文章を引用して、
その下に返信を記載する
行動規範に則った発言
https://www.postgresql.org/about/p
olicies/coc/ja/
引用
返信
引用
返信
© 2022 NTT DATA Corporation 19
議論で返信するコツ
翻訳サイトなどを活用して、英文を作成
例えば、日本語で文章を作成して、DeepLで英語翻訳、Grammarlyで添削
https://www.deepl.com/translator
https://www.grammarly.com/
文を無理に長くしない、箇条書きにする、例を出して説明する
他の人のメールやPostgreSQLドキュメント、ソースコメントの
英文を参考にする
© 2022 NTT DATA Corporation 20
レビューに参加しよう!
© 2022 NTT DATA Corporation 21
PostgreSQL開発のサイクル
2021年度 2022年度
6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11
CF CF CF CF CF
v15開発
v14開発
v16開発
CF CF
Beta / RC
Beta / RC
Feature
Freeze リリース
リリース
コミュニティサポート
CF
CommitFest
パッチレビューに
集中する期間
© 2022 NTT DATA Corporation 22
CommitFest
CommitFest Appでレビュー対象のパッチを一覧管理
https://commitfest.postgresql.org/
© 2022 NTT DATA Corporation 23
CommitFestのワークフロー
Needs review
レビュー待ち
Waiting on Author
開発者の対応待ち
Ready for
Committer
コミッタの判断待ち
Committed
コミット成功!
Moved to next CF
次回CFでレビュー継続
Returned with
Feedback
今回CFで十分にレビュー済
Rejected
提案却下
Withdrawn
提案撤回
パッチ修正 レビュー
パッチ提案
レビュー完了
差し戻し
コミット
パッチレビュー中 パッチクローズ
提案撤回
提案却下
レビュー十分
CF終了
パッチ作者 レビュア コミッタ
© 2022 NTT DATA Corporation 24
レビューするパッチを決める
興味ある機能や分野のパッチ
レビューしやすいパッチ
ドキュメントやテストケースのパッチ
独立した機能などで影響範囲の小さいパッチ
(クライアントツール、contribモジュール、SQL関数など)
サイズの小さいパッチ
仕様やI/Fなどの内容がコミュニティで合意済のパッチ
メインのレビュアがいるパッチ
メインのレビュアによるレビュー内容を勉強しながら、サブのレビュアとして取り組む
© 2022 NTT DATA Corporation 25
レビュアとして登録する
CommitFest App
「Become reviewer」を押して、
レビュアとして登録
CF App 内の各パッチのページ
© 2022 NTT DATA Corporation 26
パッチを入手する
~
パッチをダウンロード
CF App 内の各パッチのページ ML上でパッチについて議論しているメール
© 2022 NTT DATA Corporation 27
パッチをレビューする
提案レビュー
パッチは適用できるか?ドキュメントやテストを含んでいるか?
仕様レビュー
パッチは本当に必要か?仕様はコミュニティで合意されているか?
機能テスト
仕様通りに動作するか?クラッシュや想定外のエラーはないか?
性能試験
パッチにより性能劣化しないか?
コーディング・レビュー
Windowsでも動作するか?コーディング規約に従っているか?
アーキテクチャ・レビュー
他機能と一貫性のあるアーキテクチャか?
https://wiki.postgresql.org/wiki/Reviewing_a_Patch/ja
レビューコメントとして
MLで返信する
© 2022 NTT DATA Corporation 28
パッチを適用、コンパイル、テストする
① ソースの入手、コンパイルに必要なライブラリをインストールする
$ sudo dnf install git gcc make bison flex readline readline-devel zlib-devel
② TAPテスト(*)に必要なライブラリをインストールする
$ sudo dnf install perl-CPAN
$ sudo cpan -i IPC::Run Test::Simple Time::HiRes Test::Harness
③ ドキュメントのコンパイルに必要なライブラリをインストールする
$ sudo dnf install docbook-dtds docbook-style-xsl libxslt
環境によって必要なライブラリやインストールのコマンドが異なることに注意!
上記はRHEL8系環境での実行例
(*) PostgreSQLのクライアントツールなどを対象とする追加テスト
© 2022 NTT DATA Corporation 29
パッチを適用、コンパイル、テストする
④ PostgreSQLのgitレポジトリをクローンする
$ git clone git://git.postgresql.org/git/postgresql.git
⑤ パッチ適用先ブランチをチェックアウトする
$ cd postgresql
$ git checkout master
⑥ パッチ用の新規ブランチを作成する
$ git checkout -b xxx
$ git branch
master
* xxx
基本的に「開発中の最新メジャーバージョン」の
masterブランチがパッチ適用先
手元環境だと
クローンにかかった時間は約15分
レビュー完了後などに
パッチ適用を手軽にクリアできるように、
パッチ用のブランチを作成するのがおススメ!
© 2022 NTT DATA Corporation 30
パッチを適用、コンパイル、テストする
⑦ パッチを適用する
$ patch -p1 -d. < $HOME/xxx.patch
⑧ PostgreSQLをコンパイルする
$ ./configure --enable-debug --enable-cassert --enable-tap-tests 
--prefix=$HOME/pgsql/xxx CFLAGS=-O0
$ make -j 4
$ make install
デバッグしやすいようにオプションを指定する
--enable-debug
--enable-cassert
--enable-tap-tests
CFLAGS=-O0
インストール先のディレクトリを指定する
--prefix
時間短縮のため複数多重でコンパイルするように
-jオプションを指定するのがおススメ!
パッチ適用やコンパイルで発生したエラー・警告は、レビューコメントとしてMLで報告する
© 2022 NTT DATA Corporation 31
パッチを適用、コンパイル、テストする
⑨ contribモジュールをコンパイルする
$ cd contrib
$ make
$ make install
$ cd ..
⑩ ドキュメントをコンパイルする
$ make html
⑪ リグレッションテストを実行する
$ make -j 4 check-world
コンパイルやテストで発生したエラー・警告は、レビューコメントとしてMLで報告する
CF登録のパッチは自動的にテストが走り、
その結果をPatch Testerから確認できる
http://cfbot.cputube.org/
時間短縮のため複数多重でコンパイルするように
-jオプションを指定するのがおススメ!
© 2022 NTT DATA Corporation 32
パッチを適用、コンパイル、テストする
⑫ PostgreSQLを起動する
$ cd $HOME/pgsql/xxx
$ bin/initdb -D data --locale=C --encoding=UTF8
$ bin/pg_ctl -D data start
⑬ パッチの新機能をテストする
$ bin/psql
...
⑭ PostgreSQLを停止する
$ bin/pg_ctl -D data stop
思いつく限りの新機能の使い方を試してみる!例えば、
入力のバリエーション (境界値、大規模データ、不正値など)
大量実行、複数多重同時実行
物理/論理レプリケーション環境での動作
起動・停止やテストで発生したエラー・想定外動作は、レビューコメントとしてMLで報告する
© 2022 NTT DATA Corporation 33
パッチをコーディング・レビューする
コーディング規約やエラーメッセージのスタイルガイドに従っているか?
https://www.postgresql.jp/document/current/html/source.html
コメントやドキュメントに内容誤り(古い内容のまま)やTypoはないか?
関数名、変数名、マクロ名、ファイル名などの命名が分かりやすく適切か?
初期化忘れ、クローズ・解放忘れ、戻り値のチェック忘れなどのバグはないか?
セグメンテーションフォルトやアサーションエラーを引き起こすコードパスはないか?
無駄、非効率、(必要以上に)複雑すぎる、理解しにくいコードはないか?
例えば、以下の観点でコード上気になる点をレビューコメントとしてMLで報告する
© 2022 NTT DATA Corporation 34
レビューコメントを返信する
レビューコメントの返信メールの例 (抜粋)
変数の初期値の誤りや
初期化忘れを指摘
カラム名の命名が
適切でないことの指摘
© 2022 NTT DATA Corporation 35
パッチのステータスを変更する
「Change Status」を押して、
パッチのステータスを変更
© 2022 NTT DATA Corporation 36
CommitFestのワークフロー
Needs review
レビュー待ち
Waiting on Author
開発者の対応待ち
Ready for
Committer
コミッタの判断待ち
Committed
コミット成功!
Moved to next CF
次回CFでレビュー継続
Returned with
Feedback
今回CFで十分にレビュー済
Rejected
提案却下
Withdrawn
提案撤回
パッチ修正 レビュー
パッチ提案
レビュー完了
差し戻し
コミット
パッチレビュー中 パッチクローズ
提案撤回
提案却下
レビュー十分
CF終了
パッチ作者 レビュア コミッタ
© 2022 NTT DATA Corporation 37
パッチのコミットを確認する
コミットログの例
レビューしたパッチがコミットされると、
レビュアとして名前がコミットログに
記録される!
© 2022 NTT DATA Corporation 38
さいごに
© 2022 NTT DATA Corporation 39
困ったときは日本のコミュニティで相談も
例えば、ほぼ月1ペースで開催のアンカンファレンスで開発者に直接話を聞くなど
© 2022 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発表資料)

  • 1.
    © 2022 NTTDATA Corporation 1 Open Source Conference 2022 Online/Kyoto PostgreSQL開発コミュニティに参加しよう! ~2022年版~ 2022年7月29日 株式会社NTTデータ 藤井 雅雄
  • 2.
    © 2022 NTTDATA Corporation 2 自己紹介 藤井 雅雄 Database Technical Lead @ NTTデータ データベース研究開発 PostgreSQL 技術支援 PostgreSQLコミッタ レプリケーション WAL圧縮 バックアップ進捗確認 pg_bigm(全文検索モジュール) コミッタ fujii_masao MasaoFujii
  • 3.
    © 2022 NTTDATA Corporation 3 PostgreSQL開発コミュニティに参加しよう!
  • 4.
    © 2022 NTTDATA Corporation 4 PostgreSQLコミュニティ (グローバル) The PostgreSQL Global Development Group PostgreSQL本体を開発しているコミュニティ Local User Groups 世界各地 (35ヶ国67地域) にあるPostgreSQLユーザグループ PUG = PostgreSQL User Group Events 世界各地でPostgreSQLに関するカンファレンスなどのイベントが開催 Slack, IRC, LinkedIn, etc 様々なチャンネルでPostgreSQLユーザが集まってコミュニケーション
  • 5.
    © 2022 NTTDATA Corporation 5 PostgreSQLコミュニティ (日本) 日本PostgreSQLユーザ会 日本のPostgreSQLユーザグループ JPUG = Japan PostgreSQL User Group 支部 北海道、東北、新潟、名古屋、関西、四国、中国、九州、沖縄 文書・書籍関連分科会 PostgreSQL関連の文書の翻訳 PostgreSQLエンタープライズ・コンソーシアム PostgreSQLの普及推進を目的とする企業コンソーシアム PGECons = PostgreSQL Enterprise Consortium
  • 6.
    © 2022 NTTDATA Corporation 6 PostgreSQLコミュニティ (日本) Events 日本の様々なコミュニティ・団体・企業・個人がカンファレンスなどのイベントを開催 PostgreSQL Conference Japan PostgreSQLアンカンファレンス ...etc Slack PostgreSQLに関する日本語Slack
  • 7.
    © 2022 NTTDATA Corporation 7 PostgreSQLコミュニティ (グローバル) The PostgreSQL Global Development Group PostgreSQL本体を開発しているコミュニティ Local User Groups 世界各地 (35ヶ国67地域) にあるPostgreSQLユーザグループ PUG = PostgreSQL User Group Events 世界各地でPostgreSQLに関するカンファレンスなどのイベントが開催 Slack, IRC, LinkedIn, etc 様々なチャンネルでPostgreSQLユーザが集まってコミュニケーション PostgreSQL開発コミュニティに参加しよう!
  • 8.
    © 2022 NTTDATA Corporation 8 The PostgreSQL Global Development Group メーリングリスト Wiki Gitレポジトリ コアチーム コミッタ 開発、レビュー、テスト、バグ報告 コントリビュータ ユーザ
  • 9.
    © 2022 NTTDATA Corporation 9 The PostgreSQL Global Development Group メーリングリスト Wiki Gitレポジトリ コアチーム コミッタ 開発、レビュー、テスト、バグ報告 コントリビュータ ユーザ 参加 選出 選出 7名 28名 v14開発では 415名
  • 10.
    © 2022 NTTDATA Corporation 10 The PostgreSQL Global Development Groupに参加の企業例 1 663 Crunchy Data (4) 2 650 EnterpriseDB (7) 3 337 VMWare (3) 4 224 Microsoft (4) 5 126 Fujitsu (1) 6 102 NTT Data (1) 7 44 Zenith Labs, Inc (1) 8 39 Unknown (3) 9 26 Redpill Linpro (1) 10 22 Postgres Professional (2) 11 17 NTT (1) 12 13 University of Cambridge (1) 13 4 credativ (1) 14 2 SRA OSS (1) ※2021年のコミッタ別のコミット数について、 2021年末時点のコミッタの所属企業ごとに集計 ※()内の数字は、各企業の所属コミッタ数 2021年の(コミッタ所属の)会社別のコミット数 第30回PostgreSQLアンカンファレンス 資料からの抜粋
  • 11.
    © 2022 NTTDATA Corporation 11 モチベーション PostgreSQL開発コミュニティになぜ参加したいか? 技術者にとってのモチベーションの例としては、 ① PostgreSQLの内部や設計思想、仕様、制約などを深く理解できる。 PostgreSQLを効果的に利用できるようになる ② 世界中の様々な技術者たちの考えに触れることで、 技術者としての見識が大きく広がる。様々な技術者とのパイプができる ③ パッチの作成やレビューを通じて、コーディングスキルが向上する ④ 新機能開発やバグ修正の成果に対して世界中から感謝される。 自身の成果として名前が残り、セルフブランディングになる
  • 12.
    © 2022 NTTDATA Corporation 12 モチベーション PostgreSQL開発コミュニティになぜ参加したいか? 事業者にとってのモチベーションの例としては、 ① データベース技術の最新動向について早期に情報を入手でき、 事業に活かすことで、その事業領域でのプレゼンスを獲得できる ② 世界中の様々な企業・技術者とパイプができ、 他社とのアライアンスなどの機会につながる可能性がある ③ 事業で必要な機能やバグ修正をPostgreSQLに取り込める。 事業者の技術力アピールやブランド力を向上できる
  • 13.
    © 2022 NTTDATA Corporation 13 PostgreSQL開発のフロー 新機能の提案やバグの報告を行う 新機能の必要性やユーザI/F、アーキテクチャ、 実現方法、バグ原因、修正方法などを議論する 議論結果を踏まえて、新機能やバグ修正を コーディングして、パッチを作成・投稿する パッチをレビューして、不備を改修する コミッタがパッチをPostgreSQL本体に取り込む 提案・バグ報告 議論 パッチ作成 レビュー コミット 繰 り 返 し
  • 14.
    © 2022 NTTDATA Corporation 14 議論に参加しよう!
  • 15.
    © 2022 NTTDATA Corporation 15 メーリングリストの購読 PostgreSQL開発コミュニティでのコミュニケーションはメーリングリストが基本 PostgreSQL公式サイトでコミュニティアカウントを作成して、4つのMLを購読 pgsql-hackers 新機能の提案やバグ修正、開発課題などについて議論する pgsql-bugs ユーザからのバグ報告先。報告されたバグやその修正などについて議論する pgsql-docs ドキュメントやその問題、改修などについて議論する pgsql-committers コミットされた内容が通知される
  • 16.
    © 2022 NTTDATA Corporation 16 議論を読む 藤井がv13向けに バックアップ取得の 進捗確認機能を 提案したときのメール
  • 17.
    © 2022 NTTDATA Corporation 17 議論を読むコツ 興味あるテーマ・機能・バグの議論から読む OSS-DBの資格取得などを通じて PostgreSQLの体系的な事前知識を得ておく 英語の長い議論を手軽に読みたいときは、翻訳サイトなども活用 例えば、Shaperで英文を整形して、DeepLで日本語翻訳 https://dream-exp.net/shaper/ https://www.deepl.com/translator
  • 18.
    © 2022 NTTDATA Corporation 18 議論で返信する 宛先にMLを含める 内容は公開されることに注意 bottom-posting 返信したい対象の文章を引用して、 その下に返信を記載する 行動規範に則った発言 https://www.postgresql.org/about/p olicies/coc/ja/ 引用 返信 引用 返信
  • 19.
    © 2022 NTTDATA Corporation 19 議論で返信するコツ 翻訳サイトなどを活用して、英文を作成 例えば、日本語で文章を作成して、DeepLで英語翻訳、Grammarlyで添削 https://www.deepl.com/translator https://www.grammarly.com/ 文を無理に長くしない、箇条書きにする、例を出して説明する 他の人のメールやPostgreSQLドキュメント、ソースコメントの 英文を参考にする
  • 20.
    © 2022 NTTDATA Corporation 20 レビューに参加しよう!
  • 21.
    © 2022 NTTDATA Corporation 21 PostgreSQL開発のサイクル 2021年度 2022年度 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 CF CF CF CF CF v15開発 v14開発 v16開発 CF CF Beta / RC Beta / RC Feature Freeze リリース リリース コミュニティサポート CF CommitFest パッチレビューに 集中する期間
  • 22.
    © 2022 NTTDATA Corporation 22 CommitFest CommitFest Appでレビュー対象のパッチを一覧管理 https://commitfest.postgresql.org/
  • 23.
    © 2022 NTTDATA Corporation 23 CommitFestのワークフロー Needs review レビュー待ち Waiting on Author 開発者の対応待ち Ready for Committer コミッタの判断待ち Committed コミット成功! Moved to next CF 次回CFでレビュー継続 Returned with Feedback 今回CFで十分にレビュー済 Rejected 提案却下 Withdrawn 提案撤回 パッチ修正 レビュー パッチ提案 レビュー完了 差し戻し コミット パッチレビュー中 パッチクローズ 提案撤回 提案却下 レビュー十分 CF終了 パッチ作者 レビュア コミッタ
  • 24.
    © 2022 NTTDATA Corporation 24 レビューするパッチを決める 興味ある機能や分野のパッチ レビューしやすいパッチ ドキュメントやテストケースのパッチ 独立した機能などで影響範囲の小さいパッチ (クライアントツール、contribモジュール、SQL関数など) サイズの小さいパッチ 仕様やI/Fなどの内容がコミュニティで合意済のパッチ メインのレビュアがいるパッチ メインのレビュアによるレビュー内容を勉強しながら、サブのレビュアとして取り組む
  • 25.
    © 2022 NTTDATA Corporation 25 レビュアとして登録する CommitFest App 「Become reviewer」を押して、 レビュアとして登録 CF App 内の各パッチのページ
  • 26.
    © 2022 NTTDATA Corporation 26 パッチを入手する ~ パッチをダウンロード CF App 内の各パッチのページ ML上でパッチについて議論しているメール
  • 27.
    © 2022 NTTDATA Corporation 27 パッチをレビューする 提案レビュー パッチは適用できるか?ドキュメントやテストを含んでいるか? 仕様レビュー パッチは本当に必要か?仕様はコミュニティで合意されているか? 機能テスト 仕様通りに動作するか?クラッシュや想定外のエラーはないか? 性能試験 パッチにより性能劣化しないか? コーディング・レビュー Windowsでも動作するか?コーディング規約に従っているか? アーキテクチャ・レビュー 他機能と一貫性のあるアーキテクチャか? https://wiki.postgresql.org/wiki/Reviewing_a_Patch/ja レビューコメントとして MLで返信する
  • 28.
    © 2022 NTTDATA Corporation 28 パッチを適用、コンパイル、テストする ① ソースの入手、コンパイルに必要なライブラリをインストールする $ sudo dnf install git gcc make bison flex readline readline-devel zlib-devel ② TAPテスト(*)に必要なライブラリをインストールする $ sudo dnf install perl-CPAN $ sudo cpan -i IPC::Run Test::Simple Time::HiRes Test::Harness ③ ドキュメントのコンパイルに必要なライブラリをインストールする $ sudo dnf install docbook-dtds docbook-style-xsl libxslt 環境によって必要なライブラリやインストールのコマンドが異なることに注意! 上記はRHEL8系環境での実行例 (*) PostgreSQLのクライアントツールなどを対象とする追加テスト
  • 29.
    © 2022 NTTDATA Corporation 29 パッチを適用、コンパイル、テストする ④ PostgreSQLのgitレポジトリをクローンする $ git clone git://git.postgresql.org/git/postgresql.git ⑤ パッチ適用先ブランチをチェックアウトする $ cd postgresql $ git checkout master ⑥ パッチ用の新規ブランチを作成する $ git checkout -b xxx $ git branch master * xxx 基本的に「開発中の最新メジャーバージョン」の masterブランチがパッチ適用先 手元環境だと クローンにかかった時間は約15分 レビュー完了後などに パッチ適用を手軽にクリアできるように、 パッチ用のブランチを作成するのがおススメ!
  • 30.
    © 2022 NTTDATA Corporation 30 パッチを適用、コンパイル、テストする ⑦ パッチを適用する $ patch -p1 -d. < $HOME/xxx.patch ⑧ PostgreSQLをコンパイルする $ ./configure --enable-debug --enable-cassert --enable-tap-tests --prefix=$HOME/pgsql/xxx CFLAGS=-O0 $ make -j 4 $ make install デバッグしやすいようにオプションを指定する --enable-debug --enable-cassert --enable-tap-tests CFLAGS=-O0 インストール先のディレクトリを指定する --prefix 時間短縮のため複数多重でコンパイルするように -jオプションを指定するのがおススメ! パッチ適用やコンパイルで発生したエラー・警告は、レビューコメントとしてMLで報告する
  • 31.
    © 2022 NTTDATA Corporation 31 パッチを適用、コンパイル、テストする ⑨ contribモジュールをコンパイルする $ cd contrib $ make $ make install $ cd .. ⑩ ドキュメントをコンパイルする $ make html ⑪ リグレッションテストを実行する $ make -j 4 check-world コンパイルやテストで発生したエラー・警告は、レビューコメントとしてMLで報告する CF登録のパッチは自動的にテストが走り、 その結果をPatch Testerから確認できる http://cfbot.cputube.org/ 時間短縮のため複数多重でコンパイルするように -jオプションを指定するのがおススメ!
  • 32.
    © 2022 NTTDATA Corporation 32 パッチを適用、コンパイル、テストする ⑫ PostgreSQLを起動する $ cd $HOME/pgsql/xxx $ bin/initdb -D data --locale=C --encoding=UTF8 $ bin/pg_ctl -D data start ⑬ パッチの新機能をテストする $ bin/psql ... ⑭ PostgreSQLを停止する $ bin/pg_ctl -D data stop 思いつく限りの新機能の使い方を試してみる!例えば、 入力のバリエーション (境界値、大規模データ、不正値など) 大量実行、複数多重同時実行 物理/論理レプリケーション環境での動作 起動・停止やテストで発生したエラー・想定外動作は、レビューコメントとしてMLで報告する
  • 33.
    © 2022 NTTDATA Corporation 33 パッチをコーディング・レビューする コーディング規約やエラーメッセージのスタイルガイドに従っているか? https://www.postgresql.jp/document/current/html/source.html コメントやドキュメントに内容誤り(古い内容のまま)やTypoはないか? 関数名、変数名、マクロ名、ファイル名などの命名が分かりやすく適切か? 初期化忘れ、クローズ・解放忘れ、戻り値のチェック忘れなどのバグはないか? セグメンテーションフォルトやアサーションエラーを引き起こすコードパスはないか? 無駄、非効率、(必要以上に)複雑すぎる、理解しにくいコードはないか? 例えば、以下の観点でコード上気になる点をレビューコメントとしてMLで報告する
  • 34.
    © 2022 NTTDATA Corporation 34 レビューコメントを返信する レビューコメントの返信メールの例 (抜粋) 変数の初期値の誤りや 初期化忘れを指摘 カラム名の命名が 適切でないことの指摘
  • 35.
    © 2022 NTTDATA Corporation 35 パッチのステータスを変更する 「Change Status」を押して、 パッチのステータスを変更
  • 36.
    © 2022 NTTDATA Corporation 36 CommitFestのワークフロー Needs review レビュー待ち Waiting on Author 開発者の対応待ち Ready for Committer コミッタの判断待ち Committed コミット成功! Moved to next CF 次回CFでレビュー継続 Returned with Feedback 今回CFで十分にレビュー済 Rejected 提案却下 Withdrawn 提案撤回 パッチ修正 レビュー パッチ提案 レビュー完了 差し戻し コミット パッチレビュー中 パッチクローズ 提案撤回 提案却下 レビュー十分 CF終了 パッチ作者 レビュア コミッタ
  • 37.
    © 2022 NTTDATA Corporation 37 パッチのコミットを確認する コミットログの例 レビューしたパッチがコミットされると、 レビュアとして名前がコミットログに 記録される!
  • 38.
    © 2022 NTTDATA Corporation 38 さいごに
  • 39.
    © 2022 NTTDATA Corporation 39 困ったときは日本のコミュニティで相談も 例えば、ほぼ月1ペースで開催のアンカンファレンスで開発者に直接話を聞くなど
  • 40.
    © 2022 NTTDATA Corporation その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。