JavaScriptでJSON.stringifyを使って関数をシリアライズする方法
JavaScriptでオブジェクトをJSON化する際、JSON.stringify を使うと、関数を含むオブジェクトをシリアライズしようとしたときに関数が自動的に削除される という仕様になっています。 JSON.stringify の仕様と関数の省略 JSON.stringify はデフォルトでは関数をJSONに含めま…
700 件の記事
JavaScriptでオブジェクトをJSON化する際、JSON.stringify を使うと、関数を含むオブジェクトをシリアライズしようとしたときに関数が自動的に削除される という仕様になっています。 JSON.stringify の仕様と関数の省略 JSON.stringify はデフォルトでは関数をJSONに含めま…
PHPでJSONを扱う際に、json_encode() 関数を使うとマルチバイト文字が \uXXXX 形式にエスケープされてしまう ことがあります。この挙動を理解し、適切に対処する方法について解説します。 json_encode でマルチバイト文字がエスケープされる問題 通常、PHPの json_encode() 関数…
SymfonyでTailwind CSSを導入する際、便利なバンドルとしてsymfonycasts/tailwind-bundleを利用することができます。このバンドルを使うことで、Tailwind CSSを簡単にビルドし、Symfonyのアセット管理と統合できます。 しかし、ある日 tailwind:build コマ…
GuzzleはPHPでよく使われるHTTPクライアントの一つです。 しかし、Guzzleを使う際に base_uri に関連するトラブルに頻繁に遭遇することがあります。この問題を解決するために、base_uriの使い方と、その際に注意すべき点をこの記事でまとめます。 base_uriの使い方 Guzzleのクライアント…
Vercelは、Next.jsなどのフロントエンドアプリケーションのproduction環境としてよく使われますが、実はPHPも動かすことができます。 vercel-community/php PHPerとしては、何かPHPのアプリケーションをVercelで動かしたいと思い、今回はBEAR SundayをVercelで…
WordPressをHeadlessCMSとして使いたいと思い、WordPressが用意しているREST APIではなく、独自のエンドポイントを作りたいと考えました。 通常、独自のエンドポイントを設定する場合は rest_api_initのアクションフックを使用します。 WP REST API を使って独自エンドポイン…
Dockerで用意した環境のphpでbasename関数をつかって日本語文字が消えてしまう問題が発生していました。 Googleで検索すると大体は setlocale(LC_ALL, 'ja_JP.UTF-8'); すればいいと書いてあったので脳死で設定してみましたが、ダメでした。 setlocale(LC_ALL, …
同じURIのリンクなのに aria-currentの属性がつく場合とつかない場合があって結構悩んだのでそのメモ。 どのような問題が発生していたのか? よくあるページネーションの実装で、1ページ目の/hoge?page=1はクエリを削除してリンクを表示していた。 ページ番号を削除したNuxtLinkにおいて aria-c…
最近はHTTP Cacheまわりにかなり興味がでてきたので、久しぶりにBEAR.Sundayを触っています。 全く覚えていなかったので、素振りをしようと思ってとりあえずチケットチュートリアルをやりました。 無事に素振りが終わって実際に趣味のアプリケーションのコードを書き始めようと思いましたが、データベースのマイグレーシ…
VercelでホストされているNext.jsアプリケーションのレスポンス時間が600msに達していました。 特にローカル環境では遅い印象はなくて、なぜかvercel上で動かしているときだけ遅いという謎現象。 Edge Middlewareがロンドンで実行されていた レスポンスが遅い原因を調べるためにVercelのログを…
Dockerのマルチステージビルド(Multi-stage builds)で複数のステージを用意する場合があります。 マルチステージビルドを使うことで、一つのDockerfile内で複数のビルドステージを管理し、最終的なイメージサイズを小さく保つことができます。 今回はstaging, production環境でステー…
PHPUnit11でProphecyを使おうと思ったら使えなかったのが事の発端です。 https://twitter.com/polidog/status/1762843240515199213 ただし、現在はphpspec/prophecy-phpunitのv2.2.0が出たのでphpunit11でもProphecy…
turborepo + pnpmを使う際に欠かせないpnpmのfilterオプション。 addやtestやlintなど結構必要な場合が多いと思います。 特に、GitHub ActionsなどのCI環境でテストやLintを実行する場合、依存関係に含まれるすべてのパッケージをチェックしたいことがあります。 もちろん、複数の…
年末にPCを買い替えてM1 mac miniからM3 MacBookProになりました。 今年こそはHaskellを覚えたいという気持ちからPHP環境よりも先にHaskellの環境を用意しました。 homebrewでインストールする brewの場合はGHCupを入れてしまうのが楽ぽいのでGHCupを入れるようにする $…
ReDos脆弱性ってなかなか気づかないなぁと思っていて、なにかいい方法がないかなと思っていたらeslintのpluginがあったので試してみました。 見つけたきっかけ zodのemailのバリデーションの正規表現でReDos脆弱性があるという指摘を頂いたので、zodのプロジェクトのPRを見てたら以下のようなPRを見つけ…
Auth0で認証周りを作ってて独自のユーザーIDの定義をどう扱うかを結構なやみました。 Firebase Authの場合はFirebase側でユーザーUIDを生成してくれますが、Auth0の場合は生成してくれない。 まあ、sub クレームの値を使えばいいといえばいいし複数のSocial Provider使われた場合でも…
ZodのEmailバリデーションでとくに問題ないメールアドレスなのにエラーっていわれてしまった。 Zodのバージョンは [email protected] なので 2023/08/01時点で最新かと思います。 そのようなメールアドレスが問題なのか? [email protected] 上記のメールアドレスにおいて…
ちょっと古いプロジェクトで、SymfonyのバージョンやPHPのバージョンを上げたいと思いましたがテストがないのでこわいなということで、テストを書き始めました。 nelmio/aliceを使ってテスト用のダミーデータを作っていましたが current まわりでちょっとつまずいてしまいました。 どのような問題が起きたのか…
Github Actionsの設定って年に数回ぐらいしかしないので、毎回timeoutの設定を忘れてググっている...。 わすれないようにこのブログ記事でメモしておこうと思う。 デフォルトのタイムアウト時間は? 公式ドキュメントを確認したところデフォルトだと 360分 らしいです。 Github Actionsの課金に…
前に Turborepo + PNPM + Remixで構成されたアプリケーションをFly.ioにデプロイする という記事を書きました。 今回はその続きというかNextで動かす場合に苦労したのでここに記録を残していきます。 Dockefileを自分で作る必要がある flyctl launchでNextをビルドするための…
前回「PostgreSQLの配列型JSONでLIKE検索をする」という記事を書きました。 今回はこれをDoctrineで検索させるかというお話です。 前回調べた内容で発行するクエリ JSONB型のデータに対してLIKE検索したい場合はサブクエリを使えば解決できました。 SELECT id, tags FROM tags…
PostgreSQLの配列型のJSONで検索したい人生でしたが無理っぽいということがわかって悲しみにくれています。 たとえばこんな感じのテーブル id tags ---- ------------------------------ 1 ["静岡", "沼津"] 2 ["相模大野", "東静岡"] 3 ["静修学園前"…
Prismaを使おうと思ってDockerでMySQLを用意したらprisma migrate devでエラーが発生しました。 エラーメッセージ $ npx prisma migrate dev --name init Error: P3014 Prisma Migrate could not create the sh…
Turborepoでmonorepo構成で、パッケージマネージャーはpnpm、アプリケーションのフレームワークにはRemixを採用したアプリケーションをFly.ioにデプロイするのに苦労しました。 Fly.ioのRun a Remix Appや、Monorepo and Multi-Environment Deploy…
Remixアプリを作って実際にサーバにデプロイし始めてから、コンテンツに変更ないほぼ静的なページなのに、ステータスコードが200でレスポンスされていたのでちょっと嫌だなと思って、ETagで304レスポンス返せるようにしてみました。 ETagとはなにか? まずそもそもとしてETagとはなにか? ブラウザキャッシュを利用す…