去年、こんな記事を書いていました。
あれから1年、いまはどうなんでしょうか。
結論から言うと
よほどの理由がない限り、Playwrightでしょう。
6月頃にはもうこの結論は出ていました。
Playwrightを使う理由
- JavaScript, Python, C#, Java の言語を公式にサポートしている
- Goも公式入りするという話はあるが、半年以上経った今もまだされていない
-
Auto waiting により、いちいちwaitForナントカを書かなくても、ある程度は安定した自動操作ができる
- 2021年8月ごろにリリースされたPlaywright 1.14で導入されたLocatorにより、さらにこの特性が利用しやすくなった。
-
ドキュメントの品質がとても良い
-
マイクロソフトとは思えないクオリティさすが元Googleの人が作ったOSS
-
他にもテストランナーなど便利な特徴はありますが、
ともかく、PuppeteerにできてPlaywrightにはできないこと、というのが2021年12月現在、ほとんどありません。しいていうなら、Cooperative Request Interceptionくらいではないでしょうか。
以下は、かなり開発視点での内容です。PuppeteerやPlaywrightを利用される方々にはあまり有り難みのない内容であることをご承知おきください・・・(苦笑)
Puppeteerの1年
2021/2月 混乱のリリース
- 2月2日 https://github.com/puppeteer/puppeteer/releases/tag/v6.0.0
- 2月4日 https://github.com/puppeteer/puppeteer/releases/tag/v7.0.0
- 2月4日 https://github.com/puppeteer/puppeteer/releases/tag/v7.0.1
- 2月9日 https://github.com/puppeteer/puppeteer/releases/tag/v7.0.2
- 2月9日 https://github.com/puppeteer/puppeteer/releases/tag/v7.0.3
- 2月9日 https://github.com/puppeteer/puppeteer/releases/tag/v7.0.4
- 2月12日 https://github.com/puppeteer/puppeteer/releases/tag/v7.1.0
- 2月26日 https://github.com/puppeteer/puppeteer/releases/tag/v8.0.0
おそらく、メンテナーが変わってbreaking changesに敏感になったのか、頻繁にメジャーバージョンが上がるようになりました。
度重なるリリースは、TypeScriptの型定義まわりでちょっとやらかしていたみたいですね。
その後は、1〜2ヶ月に一度のリリース
- 4月21日 https://github.com/puppeteer/puppeteer/releases/tag/v9.0.0
- 5月3日 https://github.com/puppeteer/puppeteer/releases/tag/v9.1.0
- 5月5日 https://github.com/puppeteer/puppeteer/releases/tag/v9.1.1
- 5月31日 https://github.com/puppeteer/puppeteer/releases/tag/v10.0.0
- 6月29日 https://github.com/puppeteer/puppeteer/releases/tag/v10.1.0
- 8月4日 https://github.com/puppeteer/puppeteer/releases/tag/v10.2.0
- 9月22日 https://github.com/puppeteer/puppeteer/releases/tag/v10.4.0
- 11月2日 https://github.com/puppeteer/puppeteer/releases/tag/v11.0.0
- 11月28日 https://github.com/puppeteer/puppeteer/releases/tag/v12.0.0
- 11月30日 https://github.com/puppeteer/puppeteer/releases/tag/v12.0.1
- 12月10日 https://github.com/puppeteer/puppeteer/releases/tag/v13.0.0
少しずつながらも開発は進んでいるようです。(11月頃からまたメンテナーが変わってる感じもします)
公式ドキュメントが、Docusaurusに移行されようとしていた時期もあり、https://puppeteer.github.io/puppeteer/ というサイトにその形跡がありますが、v10.1.0 のまま更新が止まっています。
ちなみに、v10.3.0はなぜ欠番なのか、コミットログを見ても形跡は残っていません。本当に何かまずったのでしょう。
コントリビューションチャンス?
最近のPuppeteerは、issueを上げてもあまり反応されませんが、Pull Requestまで上げると反応があり、内容が合理的なものであれば議論&マージしてもらえます。個人的に、Playwrightにあって便利だった機能をPuppeteerにも部分的にポーティングしてみたんですが、割とすんなり受け入れてもらえました。
Playwrightの1年
毎月の順調なリリース
1.8.0から1.17.1まで、順調に開発が続けられています。
私が適当に解説するよりも、公式のGitHubのリリースノードを見たほうが正確に各バージョンの変化がわかると思いますので、気になる方は是非見ましょう。
https://github.com/microsoft/playwright/releases
テストフレームワークとしての地位を確立しようとしている?
ざっくりですが、最近のPlaywrightはブラウザ自動操作の利便性を向上する内容よりも、テストランナーに注力されているようです。
- もともと、テストランナーはmicrosoft/folioという別プロジェクトでしたが、Playwright 1.12でそれがplaywright-testパッケージに組み込まれ、
- Cypressのような詳細なテストレポート機能がPlaywright 1.16で組み込まれ、
- Fetch API がAPIテスト機能として Playwright 1.16で正式リリースとなり、
導入実績はまだ少ないものの、機能的にはCypressに少しずつ近づいてきているように思えます。
欲しい機能や不具合報告は、まずissueから
Puppeteerに比べると、Playwrightは組織的に開発されているため、いきなりPull Requestをポイと出しても、「なにこれ?」という扱いをされます。
まずissueを上げて、どんなユースケースに欲しい機能なのか?代替案はないのか?みんな使いたい機能なのか? などを議論の末に、Playwrightチームがサッと実装する、というパターンが多いです。
まとめ
- ブラウザ自動操作でPuppeteerとPlaywrightのどっちを使うか迷っているならば、間違いなくPlaywrightを使いましょう。
- ブラウザの自動操作ライブラリにコントリビューションしてみたいなー、というニッチな方にはPuppeteerがおすすめです。