貢献
まず最初に、Puppeteerにご興味をお持ちいただきありがとうございます!皆様からのパッチや貢献を歓迎します!
貢献者ライセンス契約
このプロジェクトへの貢献には、貢献者ライセンス契約が必須です。あなた(またはあなたの雇用主)は貢献に対する著作権を保持しますが、これは単にプロジェクトの一部としてあなたの貢献を使用し、再配布する許可を私たちに与えるものです。<https://cla.developers.google.com/> にアクセスして、現在ファイルにある契約を確認するか、新しい契約に署名してください。
一般的にCLAは一度提出するだけで済みます。そのため、すでに(別のプロジェクトのものであっても)提出済みの場合は、再度提出する必要はないでしょう。
はじめに
-
このリポジトリをクローンします。
git clone https://github.com/puppeteer/puppeteer
cd puppeteerまたは
-
依存関係をインストールします
npm install
# Or to download Firefox by default
PUPPETEER_PRODUCT=firefox npm install -
すべてのパッケージをビルドします
npm run build
-
すべてのテストを実行します
npm test
単一のパッケージのビルド
単一のパッケージをビルドするには、以下を実行できます。
npm run build --workspace <package> # e.g. puppeteer
これにより、依存するすべてのパッケージが自動的にビルドされるため、単一のパッケージを指定するだけで十分です。これはすべて、wireit のおかげで、GNU Make と同様に動作します。
ウォッチモード
パッケージを継続的にビルドするには、以下を実行できます。
npm run build --watch --workspace <package> # e.g. puppeteer
ウォッチ対象として単一のパッケージのみを指定する必要があります。そうしないと、期待どおりに動作しません。上記のように wireit のおかげで、変更が発生すると、すべての依存関係がビルドまたは再ビルドされます(必要な場合)。
古い成果物の削除
生成された一部の成果物(packages/puppeteer-core/src/types.ts
など)は、ビルドシステムでキャプチャできない複雑な条件(異なるファイルの名前など)に依存しているため、古くなる可能性があります。成果物をクリーンアップするには、以下を実行できます。
npm run clean
# or specify the package
npm run clean --workspace <package>
包括的なテスト
npm test
の他にも、CI を通して通常チェックされるいくつかの npm
スクリプト があります。
test-install
-puppeteer
およびpuppeteer-core
が正しくインストールされ、機能するかどうかをテストします。test-types
-tsd
を使用して、puppeteer
の TypeScript 型をテストします。test:chrome:**
- Chromium でpuppeteer
をテストします。test:firefox:**
- Firefox でpuppeteer
をテストします。unit
- ユニットテストを実行します。
デフォルトの npm test
では test:{chrome,firefox}:headless
が実行されます。これは一般的に十分です。
Puppeteer は、TestExpectations.json を参照して、特定のテスト結果が期待どおりかどうかを確認する、Mocha の上に構築されたカスタムテストランナーを使用しています。テストランナーの詳細については、tools/mocha-runner
を参照してください。
ユニットテスト
コードのみをテストするテスト(実行中のブラウザなし)は、テスト対象のクラスの横に配置され、Node テストランナーを使用して実行されます(Node 20以降が必要です)。
npm run unit
コードレビュー
プロジェクトメンバーによる提出を含め、すべての提出にはレビューが必要です。この目的のために GitHub プルリクエストを使用します。プルリクエストの使用方法の詳細については、GitHubヘルプ を参照してください。
コードスタイル
私たちのコーディングスタイルは、.eslintrc
(ESLint)および .prettierrc.cjs
(Prettier)で完全に定義されています。
コードは PR に対して自動的にチェックされます。以下のコマンドを実行して、手動でコードをチェックできます。
npm run lint
エラーが返された場合は、以下を使用して修正を試みることができます。
npm run format
プロジェクト構成
以下は、Puppeteer の主要なフォルダーの説明です。
packages
には、すべての公開ソースコードが含まれています。test
には、すべてのテストソースコードが含まれています。test-d
には、tsd
を使用した型テストが含まれています。tools
には、ビルドなどで使用されるさまざまなスクリプトが含まれています。tools/mocha-runner
- テストランナーのソースコードが含まれています。
API ガイドライン
新しい API メソッドを作成する際は、以下を考慮してください。
- 必要な最小限の情報だけを公開します。迷った場合は、新しい情報を公開しないでください。
- メソッドはゲッター/セッターよりも優先されます。
- 唯一の例外は、名前空間(例:
page.keyboard
およびpage.coverage
)です。
- 唯一の例外は、名前空間(例:
- すべての文字列リテラルは小文字にする必要があります。これには、イベント名とオプション値が含まれます。
- 非常に需要がない限り、「砂糖」API(ユーザー空間で簡単に実装できる API)の追加は避けてください。
コミットメッセージ
コミットメッセージは、Conventional Commits 形式に従う必要があります。
特に、破壊的な変更はコミットメッセージフッターに「BREAKING CHANGE:」として明確に記載する必要があります。例:
fix(page): fix page.pizza method
This patch fixes page.pizza so that it works with iframes.
Issues: #123, #234
BREAKING CHANGE: page.pizza now delivers pizza at home by default.
To deliver to a different location, use the "deliver" option:
`page.pizza({deliver: 'work'})`.
ドキュメントの作成
ドキュメントは、npm run docs
を介して TSDoc コメントから生成されます。マージ時にドキュメントサイトに自動的に公開され、リリース時にバージョン管理されます。
つまり、docs/api
ファイル内の Markdown を手動で変更しないでください。
TSDoc コメントの作成
Puppeteer へのすべての変更は、TSDoc コメントを使用して徹底的にドキュメント化する必要があります。正確な構文については、API Extractor ドキュメントを参照してください。
- すべての新しいメソッドには、公開 API の一部であるかどうかによって、
@public
または@internal
をタグとして追加する必要があります。 - コメント内の各行は、90文字以内にしてください(これを超えると ESLint が警告します)。VSCode ユーザーの場合は、Rewrap プラグイン を強くお勧めします!
ドキュメントサイトをローカルで実行する
- ルートで、
npm i --ignore-scripts
を使用してすべての依存関係をインストールします。 npm run docs
を実行すると、すべての.md
ファイルがpuppeteer/docs/api
に生成されます。puppeteer/website
でnpm i
を実行します。puppeteer/website
でnpm start
を実行します。
新しい依存関係の追加
すべての依存関係(インストールと開発の両方)について:
- 目的の機能が簡単に実装できる場合は、依存関係を追加しないでください。
- 依存関係を追加する場合は、適切にメンテナンスされ、信頼できるものでなければなりません。
新しいインストール依存関係を導入するハードルは特に高くなっています。
- プロジェクトの成功に不可欠な場合を除き、インストール依存関係を追加しないでください。
環境に依存しない依存関係については、追加の考慮事項があります。詳細については、third_party/README.md
を参照してください。
テストのヒント
- すべての機能にはテストを伴う必要があります。
- すべての公開 API イベント/メソッドにはテストを伴う必要があります。
- テストは外部サービスに依存すべきではありません。
- テストは、Mac、Linux、Win の3つのすべてのプラットフォームで動作する必要があります。これは、スクリーンショットテストにとって特に重要です。
特定の構成でテストが失敗することが予想される場合、または不安定になった場合は、TestExpectations.json を更新して、それを反映してください。TestExpectations.json の詳細については、tools/mocha-runner
を参照してください。
API カバレッジ
すべての公開APIメソッドまたはイベントは、テストで少なくとも1回は呼び出す必要があります。これを保証するために、メインのtest
コマンドはテスト中にカバレッジを実行します。
Puppeteerのデバッグ
デバッグのヒントを参照してください。
VSCode経由でのPuppeteerテストのデバッグ
提供されているデフォルトの.vscode/launch.template.json
を.vscode/launch.json
にコピーし、統合されたVSCodeデバッガーを使用してテストをデバッグします。
起動する前に、以下でテストをビルドすることを忘れないでください。
npm run build --workspace @puppeteer-test/test
プロジェクトメンテナー向け
新しいChromeバージョンのロール
1日に1回実行されるGitHubアクションがあります。このアクションには、アクションタブで見つけることができる手動トリガーがあります。
手動での手順
tools/update_chrome_revision.mjs
をローカルで実行し、コミットする必要がある変更があるかどうかを確認できます。
注:スクリプトは
fetch
に依存しているため、node --experimental-fetch tools/update_chrome_revision.mjs
を実行する必要がある場合があります
以下の手順は、上記のスクリプトの手動バージョンです。
- https://googlechromelabs.github.io/chrome-for-testing/またはhttps://chromiumdash.appspot.com/で適切なChromeの
revision
とversion
を見つけてください。 - 見つけた
version
番号でpackages/puppeteer-core/src/revisions.ts
を更新します。 - 新しいChromeとPuppeteerの
version
マッピングでversions.js
を更新し、リストから次のバージョンでlastMaintainedChromeVersion
を更新します。 npm run check
を実行します。失敗した場合は、予想されるdevtools-protocol
バージョンでpackages/puppeteer-core/package.json
を更新し、npm install
を実行して更新されたpackage-lock.json
を生成します。npm run clean
、npm install
、npm run build
を実行します。npm test
を実行し、すべてのテストが合格することを確認します。テストが失敗した場合は、失敗の原因となった上流側の変更を二分探索し、それに応じてテストの期待値を更新するか(意図された変更の場合)、Puppeteerの動作を変更することが望ましくない場合は、Puppeteerの変更を回避します。- 変更をコミットしてプッシュし、プルリクエストを開きます。コミットメッセージには、pptr.devが正しく解析できるように、
Chrome <version> (r<revision>)
形式でバージョンを含める必要があります。例:feat(chrome): roll to Chrome 90.0.4427.0 (r856583)
。
注:バージョンに対応するバージョンを見つけることができるもう1つの場所は、
Find Releases
でr<revision>
を検索することで見つけることができるomahaproxy.appspot.comです。
上流の変更の二分探索
Chrome/Chromiumの変更を二分探索するには、https://www.chromium.org/developers/bisect-builds-py/を使用してください。
npmへのリリース
リリースを自動化するためにrelease-pleaseを使用します。リリースを実行する必要がある場合は、プルリクエストでリリースPRを確認し、マージします。
Release Pleaseが失敗した場合
release-pleaseが失敗した場合、以下を実行する必要があります
-
公開されるはずだったすべてのパッケージのCHANGELOGに不足しているものを更新します。たとえば、ヘッダーが不足している場合は、次を追加する必要がある場合があります。
-
puppeteerの場合
## [{NEW_VERSION}](https://github.com/puppeteer/puppeteer/compare/v{PREVIOUS_VERSION}...v{NEW_VERSION}) ({CURRENT_DATE})`
-
その他のパッケージの場合
## [{NEW_VERSION}](https://github.com/puppeteer/puppeteer/compare/{PACKAGE_FOLDER_NAME}-v{PREVIOUS_VERSION}...{PACKAGE_FOLDER_NAME}-v{NEW_VERSION}) ({CURRENT_DATE})
-
-
以前のリリースに従って、各パッケージのGitHubリリースを作成します。
バグトリアージのガイドライン
confirmed
またはneeds-feedback
ラベルのない受信したバグレポートを確認してください
- 問題を
bug
またはfeature
のいずれかとしてラベル付けされていることを確認してください。 - 問題に明確な再現手順がない場合、または再現できない場合は、再現手順を要求し、
needs-feedback
ラベルを設定します。 - 以前にフィードバックを求めた問題についてフォローアップします(ユーザーが応答すると、GitHubで通知が表示されます)。
- ユーザーがフィードバックを提供しない場合、問題は最終的にstale botによって閉じられます。
- 問題を再現できる場合は、
confirmed
ラベルを追加します。 - バグがChromium側にある場合は、対応するcrbug.comの問題を作成し、GitHubの問題に
upstream
ラベルを付け、コメントにcrbug.comへのリンクを投稿します。 - 問題がPuppeteerまたはChromiumのいずれにも関連していない場合は、問題を閉じます。
- 問題が不足している/不適切なドキュメントに関するものである場合は、
documentation
としてラベル付けします。
PDFに関する問題
- 通常印刷ダイアログまたはヘッドフルを使用して問題が再現される場合は、
Blink>Layout
コンポーネントに対してcrbug.comを提出してください。 - 問題がヘッドレスモード固有のものである場合は、
Internals>Headless
コンポーネントに対してcrbug.comに問題を提出してください。