-
Storybook を継続的に管理するためのツールを作成しました
開発
こんにちは、PR TIMES でインターンをしている水野です。 今回、社内運用の Storybook 上で閲覧できなくなった story を発見するために、全 story を定期的に巡回するクローラを作成したのでご紹介します。 【作成の背景】 PR TIMES では2022年よりコンポーネントの継続的な保守管理に加えて、エンジニアとデザイナー・QAチームとの連携をより強くし開発効率を高めることを目的として Storybook を導入し始めました。 https://developers.prtimes.com/2022/07/22/introduced-storybook-at-pr-times/ 導入以降、Sto... -
Next.js から React Router に移行しました
開発
こんにちは、フロントエンドエンジニアのやなぎ(@apple_yagi)です。 PR TIMESでは、2023年頃からプレスリリース掲載ページやトップページなどをNext.jsへ移行してきましたが、今回、そのNext.jsからReact Routerへの移行を行いました。その結果、既存の要件を維持しながら、ビルドやデプロイにかかる時間を大幅に短縮することができました。 この記事では、Next.jsからReact Routerへ移行した理由や移行方法、移行によって得られた効果、実際に発生した問題について紹介します。 【Next.jsを採用していた理由】 ... -
Amazon RDS for PostgreSQLにpgAuditを導入し、監査ログで事後調査に備える
開発
こんにちは。PR TIMESでインターンをしている河野拓真です。 今回、Amazon RDS for PostgreSQLにpgAuditを導入し、監査ログを取得できるようにしました。 PostgreSQLの標準ログでも、log_statementを設定すれば実行されたSQLを記録できますが、「どのユーザーが、どのオブジェクトに対して、どのような操作を行ったか」を監査目的で検索・分析するには十分ではありません。pgAuditを利用すると、操作の種類や対象オブジェクトなどが決まった形式で出力されるため、インシデント発生後の調査がしやすくなります。 ... -
PR TIMES は PHPカンファレンス愛媛2026に協賛・登壇します!#phpcon_ehime
カンファレンス
【自己紹介】 こんにちは、PR TIMESでエンジニアをしている中山です。 このたび、2026年10月3日(土)に愛媛大学城北キャンパスで開催される「PHPカンファレンス愛媛2026」に、PR TIMESが協賛します。 また、当日は弊社エンジニアも登壇します。 【PHPカンファレンス愛媛2026について】 PHPカンファレンス愛媛2026は、今年初開催となるテックカンファレンスです。 「技術愛とコミュニティ愛と愛媛愛と」をスローガンに、PHPやWeb開発に関わるエンジニアが集まり、学び、交流する場として開催されます。 開催概要は... -
GitHub Actionsのparallelを使用してPHPUnitを並列実行する
開発
こんにちは、フロントエンドエンジニアのやなぎ(@apple_yagi)です。 2026年6月25日にGitHub Actionsに追加されたparallelを利用してPHPUnitを並列実行するようにした結果、CIのtest job全体の実行時間を4分42秒から2分58秒へ約37%削減できました。実行時間は、変更前後でそれぞれ複数回計測した結果から代表的な値になります。 本記事では、GitHub Actionsのparallelを使ってPHPUnitを並列化した方法と、並列化する過程で発生した問題についてご紹介します。 【GitHub Actionsのparallelとは】 GitHub Actionsの... -
Amazon ECS のデプロイをCloudWatch Alarm で自動ロールバックする
開発
こんにちは、PR TIMESでインターンをしている河野拓真です。 今回は、PR TIMESのサービスで一部使用しているAmazon ECS on Fargateに、CloudWatch Alarmと連携した自動ロールバックと、ロールバックに気づくためのSlack通知を導入したので、その仕組みと実際にハマったポイントを紹介します。 【背景】 PR TIMESでは、一部のサービスをAmazon ECS on Fargate上で運用しています。 これまでの運用には課題がありました。ECSのデプロイが確認するのは「新しいタスクが起動し、ヘルスチェックに通ること」までであり... -
PR TIMESはフロントエンドカンファレンス福岡2026に協賛します! #fec_fukuoka
カンファレンス
こんにちは。フロントエンドエンジニアの白濱(@shiraha_maru)です。 PR TIMESは、2026年9月12日(土)に開催される「フロントエンドカンファレンス福岡2026」にGold Sponsorとして協賛いたします。 【フロントエンドカンファレンス福岡2026について】 フロントエンドカンファレンス福岡2026は、Webフロントエンドに関わるさまざまなテーマを扱う技術カンファレンスです。 2019年以来、7年ぶりの開催となる今回は、「未来のフロントエンドと徹底的に向き合う」をテーマに、九州産業大学で開催されます。 開催概要... -
静的アセットの配信URLにバージョンを含めてアップデート時のキャッシュ不整合を防ぐ
開発
こんにちは。フロントエンドエンジニアの白濱(@shiraha_maru)です。 PR TIMESではプレスキット用PDFのサムネイル生成や、FAX原稿用PDFのページ数取得に PDF.js を利用しています。PDF.jsを使ってサムネイル画像を生成する方法については、過去の記事で紹介していますのでご覧ください。 サムネイル画像をPDFの1ページ目から自動生成する PDF.jsを利用するにあたり、Worker用JavaScriptやCMapなどのアセットはアプリケーション本体とは別に静的ファイルとして配信しています。今回は、この pdfjs-dist の静的ア... -
素材ダウンロード負荷軽減のためにApache – PHP から切り離し、Fastly – S3 経由で配信するようにしました
開発
こんにちは。PR TIMESでエンジニアをしている田中 (@Romira915)です。 この記事では、認可をアプリケーション側に残したまま、素材ダウンロード用ZIPの配信をApache・PHPからFastly・S3へ切り出した方法と、実装時に遭遇したキャッシュ制御の問題を紹介します。 【はじめに】 PR TIMESでは、企業が投稿したプレスリリースに含まれる画像を、まとめてZIPでダウンロードできる「素材ダウンロード」という機能を提供しています。 ZIPファイルは一度生成されるとリリースが更新されるまでEC2ローカルに保持され、配信... -
PR TIMESの認証認可を再設計するときに考えたこと
開発
PR TIMESでCTOをやっている金子 (@catatsuy) です。 2023年に、PR TIMESのログインシステムへJWTを導入したことを開発者ブログで紹介しました。 https://developers.prtimes.com/2023/12/26/implemented-login-system-using-jwt/ この記事では、JWTの仕様や移行の進め方など、実装した仕組みを中心に説明しています。一方で、なぜこの構成を選んだのかについては、あまり触れていませんでした。 本記事では、PR TIMESの認証認可を再設計するときに何を考えていたのか、その設計が現在の構成にどうつながっているの...
