開発– category –
-
Fluentdプラグインの暴走でストレージが枯渇しかけた話
開発こんにちは、インフラチームテックリードの櫻井です。 今回はFluentdプラグインの暴走によってサーバーのストレージが枯渇しかけた話について紹介したいと思います。 【アラート通知は突然に】 とある土曜日の夕方ごろ、1件のアラート通知がスマホに届きました。 “Filesystem % 90.19% > 90%” どうやら本番環境のバッチサーバーのストレージ使用率が90%を超えてしまったようです。 直近のストレージ使用量の推移を見てみると、朝の10時ごろからものすごいペースで増え続けており、あと30分ほどでストレージが枯... -
PHPUnitを用いたDBテストを改善した話
開発こんにちは。PR TIMES開発本部でインターンをしている笹山雷雅です。 PHPUnitを用いたDBテストを改善したのでブログにします。 【改善前のDBテストについて】 新規コードに関してはSQL呼び出しのルールが決まっています。しかし、過去の問題があるコードを全部新しいルールで書き直すのは現実的ではありません。 そこで、過去のSQLの呼び出しのコードだけを書き換える目的で、LegacyDAOというシンプルな仕組みに移行している最中です。 LegacyDAOを追加するときにUnit Testを追加するルールにしていますが、元々Un... -
うるう日に特定の条件下で起こったバグ事例
開発こんにちは。開発本部で主にバックエンドの開発をしている 宮崎(@sucalul) です。 今回は2024年2月29日に発生したバグ事例について紹介します。 【実際のバグ事例】 社内のソースコード上で、ある機能を判定する条件の1つである「会社設立年月から2年以内であること」を判定するロジックにうるう日のパターンが考慮されていなかったためバグが発生しました。 実際の関数内のコードがこちら。(一部省略・値を直接入力しています。) list($current_date_year, $current_date_month, $current_date_day) = explod... -
Amazon EC2 で構築された MongoDB を DocumentDB へ移行しました!
開発こんにちは。開発本部で主にバックエンドの開発をしている ueeda です。 PR TIMES Webクリッピングというサービスで使用していた MongoDB を AWS のマネージドサービスである Amazon DocumentDB(以降 DocumentDB) に移行させるプロジェクトを進めていたのですが、先日移行が終了したので、紹介したいと思います。 PR TIMES Webクリッピング(以降クリッピング)とは様々なサイトから記事をクロールし、その記事にユーザーが設定したキーワードが含まれていればクリップしたりなど、メディア露出の調査・分析など... -
PHPStanのカスタムルールを導入しました
開発こんにちは。開発本部でインターンをしている笹山 雷雅です。 今回はPHPStanを用いて独自のLintRuleを導入したので紹介します。 【PHPStanとは】 PHPStanとはPHPのLinterの一つで、静的解析ツールです。 コードの書き方を分析し、潜在的なバグのある書き方を検知できます。 導入がしやすく、Zero Configでもかなり高度な解析ができるのが特徴です。 https://phpstan.org なぜLintが必要なのか エラーだけでは検出できない脆弱性の潜む「疑わしい」コードを検知するために、Lintが必要です。PHPのような書き方の自... -
素朴なSeederを作成してUnitテストの実装効率を上げた話
開発こんにちは、フロントエンドエンジニアのやなぎ( @apple_yagi )です。 先日、バックエンドで行っているUnitテストの実装効率を上げるために簡単なSeeder(テストデータを作成するツール)を実装したのでご紹介します。 【前提】 PR TIMESのバックエンドはノンフレームワークのPHPで実装されています。また、ORM(Object-Relational Mapping)ツールなども使用しておらず、PDO と TetoSQL を利用して社内で開発した PrSQL という class を用いてデータベースを操作しています。 Unitテストは、PHPUnit ... -
フロントエンドのGitHub Actions実行時間を削減するために取り組んだこと
開発こんにちは、フロントエンドエンジニアの小張です。GitHub Actionsの実行時間を削減するために取り組んだことについて紹介します。 【経緯】 PR TIMESではReactに関するコードを、monorepoとしてprtimes-frontendという1つのリポジトリで管理しています。 GitHub Enterprise Cloudプランでは月50,000分のGitHub Actionsを無料で実行することができますが、prtimes-frontendだけで7割近い時間を消費してしまっていました。またCIに時間がかかることで、Pull Requestを作成した後、10分近く待たないとコードレビュー... -
Renovateを使ってフロントエンドのバージョンアップを改善した話
開発こんにちは、フロントエンドエンジニアの小張です。Renovateを使ってフロントエンドのパッケージやライブラリのバージョンアップを改善したことについて紹介します。 PR TIMESではReactに関するコードを、monorepoとしてprtimes-frontendという1つのリポジトリで管理しています。 このリポジトリは作成されてから2年ほどしか経っておらず、使っているライブラリも比較的新しいため、今までバージョンアップの仕組みを特に整備していませんでした。 ただフロントエンドのライブラリはバージョンアップの頻度が多く... -
フロントエンドのLintツールをXOに統一した話
開発こんにちは、フロントエンドエンジニアのやなぎ( @apple_yagi )です。 PR TIMESではこれまでLintツールとしてESLintを使用していましたが、2023年9月からXOを使うようにし始めました。本エントリーでは、XOを導入した経緯や進め方、そして導入した結果についてご紹介します。 【導入をした経緯】 これまでPR TIMESでは .eslintrc.jsを自分たちで一から作り、ESLintルールを運用していました。しかし、その設定は最初期の環境構築時に色々なドキュメントを見ながら、つぎはぎで作成したものになってお... -
private-isuのベンチマーカーをLambdaで実行する仕組みを公開しました
開発こんにちは、PR TIMESでバックエンド開発をしている宮崎(@sucalul)です。 先日、private-isuのベンチマーカーをLambdaで実行する仕組みを公開したので、そちらの紹介をします。 【公開リポジトリ】 https://github.com/PRTIMES/private-isu-bench-lambda 使い方についてはGitHubのREADMEを参照してください。 https://github.com/PRTIMES/private-isu-bench-lambda?tab=readme-ov-file#使い方 【背景】 private-isuのベンチマーカーはREADMEにEC2を起動する方法が書いてありますが、Lambdaで立ち上げる方が比較的...