PR TIMESでCTOをやっている金子 (@catatsuy) です。
私がCTOとして入社してからもうすぐ3年になります。過去2年で開発が進むようになり、組織として大きめのリリースもできるようになってきました。
年末にはエディター・プレスリリースページのリニューアルという会社にとって重要な一歩を踏み出すことができています。
まだ通過点ではありますが、年末なので今年やったことを振り返ってみようと思います。ちなみに過去の振り返りは以下の記事です。
PR TIMES開発本部2022年振り返り
挑戦する組織にするためにCTOになってからやったこと
目次
Findy Team+振り返り
早速今年の移動平均推移のグラフを貼ります。
プルリク作成数が増えて、マージにかかる時間も前後はあるものの、減少傾向にあります。
去年もFindy Team+ Award 2022を受賞しましたが、今年もMedium Divisionで受賞することができました。今後も開発生産性を高めていき、更に様々な機能を提供できるようにしていこうと考えています。
エディター・プレスリリースページリニューアルプロジェクト
エディターのreplaceが完了し、旧エディターの廃止が完了したことでエディターの機能変更が可能になりました。
しかしこれだけではエディターの機能変更は不可能でした。理由はエディターが生成したHTMLはプレスリリースページで表示されています。プレスリリースページはまだreplace前であり、以前のプレスリリースページではエディターの機能変更に対応できませんでした。
PR TIMESのプレスリリースページはアクセス数が多く、またSEO上、SSRが必須です。そこで以下の方針を決めました。
- Next.jsを使ってSSRをすることを前提にプレスリリースページのreplaceを行う
- SSRした結果を柔軟な設定が行えるCDNのFastly上でキャッシュして配信する構成で配信する
- プレスリリースページをCDN上でキャッシュして問題がないようなシステムに変更する
詳しくは後ほど紹介しますが、元々CDNはFastlyではなかったため、Fastly移行プロジェクト行ったり、CDN上でキャッシュして問題がないようにアクセスログ改善プロジェクトもプレスリリースページreplaceプロジェクトとほぼ同時並行で進めていました。すべてのプロジェクトが噛み合った結果、最終的なリリースに繋がっています。
Next.jsを利用したプレスリリースページリプレイスの技術的な詳細についてこちらで発信しています。
この後紹介する検索ページが、プレスリリースページよりも先にNext.jsにreplaceを完了させていました。こちらのプロジェクトと協力しながらプレスリリースページreplaceを進めて、リニューアルをリリースできています。
ここまでフロントエンド中心でしたが、リニューアルプロジェクトではバックエンドでもHTMLの構造を変更しないことを前提にしたコードが非常に多く、それらの改修も同時並行に行っています。それについても近いうちに発信できればと思います。
検索ページreplaceプロジェクト
去年の記事の通り、PR TIMESの検索はOpenSearchを利用した仕組みに移行が完了していました。それによりバックエンドに変更を入れることが可能になり、replaceプロジェクトが開始しました。
結果的に、検索ページは社内第一号のNext.js事例になりました。そしてBFCacheを利用したUX改善も行うことで、UX改善も同時に達成できました。
またOpenSearchに移行したことで、PR TIMESの主要機能のデータセンター撤退が完了しました。このことが後で紹介するデータセンター撤退に繋がります。
Fastly移行
ここまで紹介してきたように、Next.jsを活用してSSRの結果をCDN上に柔軟にキャッシュさせる必要がありました。そこでFastlyの導入が決定し、移行プロジェクトが立ち上がりました。
Fastly自体はこれまでもサムネイル画像で使ってきました。以下の記事は今年のPR TIMES STORYでFastly Image Optimizerを活用した事例です。
CloudFrontからFastlyへの移行が完了し、以下の記事の発信に繋がりました。
この記事の発信により、担当メンバーがFastly Yamagoya 2023での登壇も行えました。
Fastly移行後すぐにFastlyの機能を活用した開発が加速し、Next.js導入も進みました。
メディアリストreplaceプロジェクト
メディアリスト機能は今後リニューアルを予定しているため、現在replaceプロジェクトを進めています。大きめの発信は来年になると思いますが、フロントエンド開発に関する記事を公開しています。
PR TIMES Webクリッピング改善プロジェクト
去年からβ版として提供してきた広報効果測定サービスのPR TIMES Webクリッピングは今年正式版としてリリースすることができました。
現在はWebクリッピングの技術的負債の解消を進めています。一部発信済みの記事もあるので紹介します。
プレスキット機能拡充
プレスキット機能は去年リリース済みですが、機能拡張を行っています。プレスキット一括ダウンロード機能開発に関する記事も公開しています。
セキュリティ向上プロジェクト
開発本部の目標であるセキュリティ向上の一環で、今年セキュリティ診断を行いました。それに伴い複数の修正を行っています。一部の変更については発信を行っています。
来年以降もセキュリティ向上を進めていく予定です。
アクセスログ改善プロジェクト
PR TIMESはアプリケーション上でアクセスログを扱っている処理が複数存在しています。アクセスログをDB上で1アクセス1レコードとして扱っており、サービスの成長に耐えられなくなるのが明白でした。
またアクセスログの収集はアプリケーションにリクエストが到達する前提の構成になっており、Next.jsでSSRしたHTMLをCDN上でキャッシュさせる構成を取れないシステムになっていました。
そこでFastlyのアクセスログをS3にputするイベントをtriggerしてLambdaを呼び出す構成で1からシステムを作り直すことでこれらの問題を一気に解決しました。
これらの改修を行うことで、先日カテゴリ別ランキングを表示する新機能をリリースすることができました。負荷になりにくい構成を選択したことで、追加のリソースなしで実現する事ができました。
こちらはシステム的には分かれていますが、同様にLambdaを利用した事例です。
データセンター撤退プロジェクト
PR TIMESのAWS移行が進み、データセンターを利用しているのは他のプロジェクトのみになってきました。そこでデータセンターを撤退することを決めました。それによりPR TIMES TVのAWS移行も行われ、データセンターの機材も既に撤去済みの状況になっています。
認証プロバイダー廃止プロジェクト
認証プロバイダーは障害や定期メンテナンスなどの手間、sessionが分かれていることによる機能追加の手間・バグ発生、開発環境構築の難易度の高さ、など様々な問題を抱えており、私が入社してからずっと廃止したいと言ってきたシステムでした。
具体的な問題を言えば、例えばPR TIMESのフロントエンドからWebクリッピングのAPIを呼び出せない(Webクリッピング側のsessionが存在しているか分からないため)などの問題が発生していました。この問題をJWTを利用した新システムに移行することで解決する事ができました。
この変更によりインフラがシンプルになったのはもちろん、フロントエンドは自由にAPIを呼び出すことができるようになり、実装の幅が広がりました。
開発環境のシンプル化も進められるようになり、今後開発環境改善も行っていきたいと考えています。
フロントエンド開発環境改善
React/Next.jsを利用しているフロントエンドの開発環境改善は随時行っており、行った変更の開発者ブログでの発信も盛んです。今年は以下のような記事が公開されています。
これらの開発環境改善は主にフロントエンドを開発しているメンバーがフロントエンド定例で議論を行い、自主性が高い形で方向性を決めて実装をしています。
監視強化
安定したサービス運用のためにNew Relicを活用してバックエンドの監視強化を行っています。
バックエンドの改善は進んできましたが、フロントエンドはまだできていない部分も多いです。来年進めて行きたいと思っています。
開発コミュニティ支援
PR TIMESはPHPを始め、様々な言語や仕組みで動いています。そして私達自身も開発コミュニティの一員です。
そこで開発コミュニティに対してスポンサーを行ったり、イベントで登壇を行うことを推奨しています。実際に何人も登壇しています。
来年以降もこれらの取り組みは続けていく予定です。
インターン活躍
既に紹介したプロジェクトでインターンが活躍していた事例はありますし、インターンが書いた記事もあります。そんなインターンが活躍している弊社らしい記事として、インターンが書いた記事でここまで紹介していない記事を紹介します。
インターンはいつも募集しているので、興味のある方はぜひ応募してみてください。
まとめ
今年を振り返ってみて、Fastly移行が今年であることに気付いて驚きました。プレスリリースページリニューアルに向けて始まったプロジェクトでしたが、結果的にFastly移行・アクセスログ改善・プレスリリースページreplaceの3プロジェクトをほぼ同時並行で進行する事になりました。最終的に全プロジェクトを無事にリリースすることができ、目標であったリニューアルプロジェクトもリリースすることができました。
またアクセスログ改善プロジェクトにより、個人的に楽しみにしていたカテゴリー別ランキングをリリースできましたし、技術的な改善がサービスに影響を与えられるようになってきた実感もあります。
またセキュリティ向上やデータセンター撤退など、会社にとって重要なことも進められた年にすることができました。
今年進めた内容もすべて開発者ブログで発信できていませんし、来年のために準備しているものもあります。なので引き続き楽しみにしてもらえたらうれしいです。よろしくお願いします!