開発– tag –
-
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... -
合同会社DMM.com ✖️ 株式会社PR TIMES 合同勉強会を開催しました
勉強会こんにちは、フロントエンドエンジニアの桐澤(@kiririLee)です。先日、合同会社DMM.comとの合同勉強会を行いました。 【経緯】 今回の合同勉強会は先日開催されたPHPカンファレンス北海道2024がきっかけとなり開催される運びとなりました。 これまでの合同勉強会ではWebアプリケーションに付随する様々な内容のLTが発表されてきましたが、各社フロントエンドの知見を共有したいという思いがあり、今回はフロントエンドがテーマの勉強会を開催しました。 【弊社メンバーの発表内容】 今回もLTの発表順は当日その... -
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 ... -
フロントエンドのLintツールをXOに統一した話
開発こんにちは、フロントエンドエンジニアのやなぎ( @apple_yagi )です。 PR TIMESではこれまでLintツールとしてESLintを使用していましたが、2023年9月からXOを使うようにし始めました。本エントリーでは、XOを導入した経緯や進め方、そして導入した結果についてご紹介します。 【導入をした経緯】 これまでPR TIMESでは .eslintrc.jsを自分たちで一から作り、ESLintルールを運用していました。しかし、その設定は最初期の環境構築時に色々なドキュメントを見ながら、つぎはぎで作成したものになってお... -
PR TIMES のフロントエンドを支える技術 2023
開発こんにちは。PR TIMES でエンジニアをしている岩元 (@yoiwamoto) です! プレスリリース配信サイト PR TIMES のフロントエンドは、一昨年ごろまでほぼ全てのページが Smarty + jQuery on PHP で実装されており、直近1、2年は機能追加・改修に合わせてこれらを順次 React 実装にリプレイスを進めています。 このような取り組みをどのような技術構成で行っているか、2023年の振り返りの意味も込めてざっくりと紹介します! 【リポジトリ構成】 React 実装は、これまでメインのバックエンドサーバーとのモノリスで構... -
プレスリリースのエディタにサニタイザーを導入した話
開発こんにちは。フロントエンドエンジニアの桐澤(@kiririLee)です。PHPのアプリケーションから配信されるプレスリリースがサニタイザーを通るようにしたため、導入するまでに取り組んだことを書きます。 【サニタイザーとは】 HTMLにスクリプトを埋め込んでユーザーのブラウザ上で実行する方法としてまず思い浮かぶのはscriptタグを使用する方法かと思います。ですがこれ以外にもimgタグのonerror属性を使用する方法などHTMLでスクリプト実行する方法は意外と多く存在しています。 悪意のあるスクリプトや不正な HT... -
MySQLのCharsetをutf8mb3からutf8mb4に移行した話
開発こんにちは。開発本部の23卒の松浦です。今回は、WebClippingで使用しているテーブルの一部のカラムのCharsetをutf8mb3からutf8mb4に移行した話について書こうと思います。 【何が問題か】 前提として移行前の多くのテーブル構成は下記の通りでした。 Charset: utf8mb3 Collation: utf8mb3_general_ci 上記の構成では絵文字(🍣、😭、🍺など)や、特殊文字(𠀋、𠮷など)のUTF-8で1文字4バイトになる文字を保存することができません。上記の設定で保存できるのは1文字3バイト以下の文字のみです。 WebClippingでは、...