SendGridのオープンソースライブラリの改善 ~PHP編~

SendGridのオープンソースライブラリの改善 ~PHP編~

この記事は Improving SendGrid’s Open Source Software Development Kit: PHP Edition の抄訳です。

この度、SendGrid公式のPHPライブラリ(”SDK”と呼ぶ場合もあります)v7.0.0をリリースしました。このライブラリは、Packagist経由のインストール数320万以上GitHubのスター数800以上フォーク数400以上、そして、コントリビュータ数90人以上という、SendGrid公式ライブラリの中でも4番目の規模を誇ります。これまでSendGridでは「コミュニティ主導のライブラリを提供する」という我々のオープンソース精神を忠実に守ってきており、今回のアップデートは、14人の外部コントリビュータが関わった共同作業の成果です。

今回のアップデートでは、C#やNode.js向けのライブラリで培った手法を応用しましたが、PHP特有の課題解決手法が今後実施する他のアップデート作業でも役立つことを期待しています。

数年前にDeveloper Experienceチームが結成された当時、チームの最も大きなタスクは7つの公式ライブラリをアップデートしてSendGridのWeb API v3をサポートすることでした。その中で学んだことのいくつかはDevRel.netで紹介していますが、今回はPHPライブラリに限ったお話をご紹介します。

ステップ1:依存関係の最小化

最初のステップは、サードパーティのHTTPクライアントに依存しないようにすることでした。以前は、Guzzle(素晴らしいHTTPクライアントです)に依存していましたが、優れたPHPのフレームワークが登場するにつれてGuzzleとの非互換性の問題が増えてきました。

他言語向けライブラリでも同じようなことが起きていたため、その方が合理的であるならば依存関係は取り除く、という戦略をとることにしました。PHPライブラリでの実現方法についてはこちらの記事を参照してください。

ステップ2:自動化

次に、233以上あるエンドポイントのテストを自動化する必要がありました。以前のライブラリはSendGridで最も重要なメール送信エンドポイントのみをサポートしていましたが、新しいライブラリではすべてのエンドポイントをサポートするよう変更されています。

この課題に対して、Stoplight.io、Prism、そしてOpen API仕様などを利用してテストの自動化を行っています。詳しくはこちらの記事をご参照ください。

ステップ3:コミュニティ主導のデザイン提案

最後に、SendGridのAPIを利用する一般的なユースケースで、初心者が自然に扱えるような開発体験を作りたいと考えました。今回のv7.0.0はこれを実現する最初のバージョンです。

Web API v3をサポートするためにライブラリを書き直していた当初、GitHub上で開発者向けのメッセージを(太字の赤いフォントで目立つように)投稿しましたが、フィードバックはあまり多くありませんでした。このため、ライブラリの大部分はチーム内部で書き直す必要がありました。これは望ましいことではありませんでしたが、v3のサポートを優先させるため、やむを得ませんでした。

これに対して今回は、ドキュメント駆動型開発を実践しました。具体的には、新しい設計案を作成して、GitHub issueでタグ付けした主要なコントリビュータに、PHPライブラリv7.0.0の開発を助けてくれるようヘルプを依頼しました。こうしたコラボレーションのおかげで、SendGridのオープンソースコミュニティに対して扱いやすいライブラリを提供することができました。

もちろん、これはPHPライブラリ改善の「Day One」に過ぎません。次にどんなユースケースが現れ、コミュニティとともにライブラリがどのように進化し続けるか楽しみです。こういったプロセスに興味のある方は、是非GitHubでissueを参照したり、Pull Requestを作成したりしてください。一緒に改善していけることを願っています!