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