PHP– tag –
-
素朴なSeederを作成してUnitテストの実装効率を上げた話
開発
こんにちは、フロントエンドエンジニアのやなぎ( @apple_yagi )です。 先日、バックエンドで行っているUnitテストの実装効率を上げるために簡単なSeeder(テストデータを作成するツール)を実装したのでご紹介します。 【前提】 PR TIMESのバックエンドはノンフレームワークのPHPで実装されています。また、ORM(Object-Relational Mapping)ツールなども使用しておらず、PDO と TetoSQL を利用して社内で開発した PrSQL という class を用いてデータベースを操作しています。 Unitテストは、PHPUnit ... -
GitHub Actionsで実行されるPHPStanを改善した話
開発
新卒一年目の永井です。今回はGitHub Actionsで実行されるPHPStanについて、レガシーなソースコードで改善されずにいたエラーを改善し、キャッシュを使えるようにして実行時間を大幅に削減できたことを書いていきます。 【はじめに】 弊社ではPHPStanをGitHub Actionsで回しています。タイミングはPull Requestにpushした時やPull Requestをメインブランチにマージした時です。これにより、通常は静的解析をしてコードの品質を維持してPull Requestをマージすることができます。しかし、これにはいくつか問題点が... -
PR TIMESはPHPカンファレンス北海道 2024に協賛・登壇します
カンファレンス
サーバーサイドエンジニアのshun (@shunsock)です。いよいよ、PHPカンファレンス北海道2024まであと二週間となりました。私shunは、本編最後に登壇予定ですので、準備を進めております。本日は、PR TIMESのPHPカンファレンス北海道2024への協賛と登壇についてお伝えします。 PR TIMESは、PHPカンファレンス北海道2024にGold Sponsorとして協賛いたします。また、同イベントに社内から過去最多の4人のエンジニアが登壇予定です。 【PHPカンファレンス北海道2024の紹介】 北海道から発信するPHPやWeb技術等に関心の... -
プレスリリースのエディタにサニタイザーを導入した話
開発
こんにちは。フロントエンドエンジニアの桐澤(@kiririLee)です。PHPのアプリケーションから配信されるプレスリリースがサニタイザーを通るようにしたため、導入するまでに取り組んだことを書きます。 【サニタイザーとは】 HTMLにスクリプトを埋め込んでユーザーのブラウザ上で実行する方法としてまず思い浮かぶのはscriptタグを使用する方法かと思います。ですがこれ以外にもimgタグのonerror属性を使用する方法などHTMLでスクリプト実行する方法は意外と多く存在しています。 悪意のあるスクリプトや不正な HT... -
PR TIMESのログインシステムにJWTを導入しました
開発
こんにちは、開発本部でインターンをしている田中 湧大です。 今回は認証機能をPR TIMES上で実装し、企業・事業主ユーザーとメディアユーザーでログインするときにJWTを発行するようにしたのでその紹介をします。 【JWT(JSON Web Token)とは】 JSON Web Tokenは以下のようなドットで結合された文字列です。${HEADER}.${PAYLOAD}.${SIGNATURE}で構成されており、それぞれbase64エンコードされています。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IlRhbmFrYSIsInVybCI6InBydGl... -
New Relic CodeStream を使ってエラーを迅速に改修しよう
開発
この記事は、New Relic Advent Calendar 2023 シリーズ3の20日目の記事となります。 こんにちは、バックエンドエンジニアで PHPer の江間です。 この記事では、New Relic は導入されていて使ったことがあるけど、普段インフラをあまり触らないアプリケーションエンジニアに向けて「New Relic CodeStream」を使った開発(特にエラーの改修)について紹介します。 【New Relic CodeStreamとは】 New Relic CodeStream は、New Relic のメトリクスやエラーなどの機能をコードレベルで確認できる IDE の拡張機能です。... -
認証プロバイダーのパスワードカラムマイグレーション: MySQLからPostgreSQLへの移行の記録
開発
こんにちは、開発本部でインターンをしている田中です。 今回は企業ユーザーの認証を担っている認証プロバイダーのMySQLから、PR TIMESのPostgreSQLにパスワードカラムをマイグレーションしたので紹介します。 【経緯】 PR TIMESでは企業ユーザーの認証を行う認証プロバイダー(auth.prtimes.jp)が独自のMySQLを持っており、一部のデータがMySQLに保存されていました。 この認証プロバイダーはいくつかの問題から廃止を予定しています。 なのでまず認証プロバイダーのMySQLからPR TIMESのPostgreSQLにデータをマ... -
“Logs in Context + Infinite Tracing + カスタム属性”でNew RelicのObservabilityを爆上げする
開発
こんにちは、インフラチーム テックリードの櫻井です。 今回はアプリケーションモニタリングのために導入しているNew RelicにLogs in ContextとInfinite Tracingとカスタム属性を導入して、システムのObservabilityを向上させたことについて紹介したいと思います。 【Observability(可観測性)とは】 まずObservability(可観測性)とは処理時間やエラーなどシステム内部の状態がどれだけ可視化されているかを示す指標です。 Observabilityが高ければボトルネック解消や障害発生時の迅速な対応が可能になり、より... -
proc_open()の標準入出力を使ってコンテナ上でコマンドを実行する
開発
新卒1年目、バックエンドを担当している永井です。最近色々学ぶことができたのでここに共有したいと思います。また、このブログで少しでも誰かの役に立てたら嬉しいです。 (本ブログに出てくるコードは正しく動かないです。説明用に伝えたいことしか書いていないのでご了承ください。) 【背景】 SSRF対策の一環でコンテナ上でコマンドを実行するようにしていました。そこで、コンテナ経由で実行したコマンドの標準入出力を扱ったので、その手法を紹介します。 https://developers.prtimes.com/2023/06/13/preven... -
JWTに用いる署名アルゴリズムは何が適切かPHPで検証してみた
開発
こんにちは、PR TIMESで学生インターンをしている田中湧大です。 今回は、PHPでパフォーマンスの観点から署名アルゴリズムについて検証してみたのでその紹介をしたいと思います。 【検証しようと思った背景】 現在、PR TIMESでは各マイクロサービスが独自のsessionを発行しており、様々な問題が発生しているため、認証基盤をJWTを用いたものに置き換えようと改善を進めています。 その過程でJWTに署名するアルゴリズムを選択する必要がありました。 PR TIMESのサービスはPHPで実装されています。なのでPHP上で候補...
