<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ttskchさんのフィード]]></title><description><![CDATA[Zennのttskchさん（@ttskch）のRSSフィードです]]></description><link>https://zenn.dev/ttskch</link><image><url>https://storage.googleapis.com/zenn-user-upload/avatar/dacf6ffc07.jpeg</url><title>ttskchさんのフィード</title><link>https://zenn.dev/ttskch</link></image><generator>zenn.dev</generator><lastBuildDate>Wed, 15 Apr 2026 09:13:57 GMT</lastBuildDate><atom:link href="https://zenn.dev/ttskch/feed" rel="self" type="application/rss+xml"/><language><![CDATA[ja]]></language><item><title><![CDATA[Symfony + Ray.MediaQueryという可能性]]></title><description><![CDATA[Symfony Advent Calendar 2025 の1日目の記事です！🎄✨

Twitter (X) でもちょいちょいSymfonyネタを呟いてます。よろしければ フォロー お願いします🤲


 はじめに
Ray.MediaQuery は、Javaの Doma に似たコンセプト（だそうです）のデータベースアクセスフレームワークです。
先日 PHPカンファレンス香川2025 の懇親会で、作者である @koriym さんによる紹介LTを拝聴し、そのコンセプトに強く興味を持ったので、普段使っているSymfonyとの統合について軽くPoCしてみました。
本稿では、その内容と率直な感想をシ...]]></description><link>https://zenn.dev/ttskch/articles/d43ba2eb8748d7</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/d43ba2eb8748d7</guid><pubDate>Mon, 01 Dec 2025 18:01:27 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--PQaz6iyU--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Symfony%2520%252B%2520Ray.MediaQuery%25E3%2581%25A8%25E3%2581%2584%25E3%2581%2586%25E5%258F%25AF%25E8%2583%25BD%25E6%2580%25A7%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[Laravel版のAPI PlatformでSystem ProviderやSystem Processorをデコレートするのが難しかった話]]></title><description><![CDATA[
 3行で

Laravel版の API Platofrm でSystem Processorをデコレートしようとしたら循環依存が発生した
LLMや @fuwasegu さんに相談 しつつ調べたら、現状のAPI Platformの内部構造ではSystem ProviderやSystem Processorを適切な方法でデコレートすることができないということが分かった
ので改善案を PR してみた


 詳細
Laravelのサービスコンテナでは、extend() を使ってサービスをデコレートすることができます。
この方法で、API PlatformのSystem Processor であ...]]></description><link>https://zenn.dev/ttskch/articles/40e2e3252a7152</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/40e2e3252a7152</guid><pubDate>Sat, 18 Oct 2025 09:55:39 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--HfikzZe2--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Laravel%25E7%2589%2588%25E3%2581%25AEAPI%2520Platform%25E3%2581%25A7System%2520Provider%25E3%2582%2584System%2520Processor%25E3%2582%2592%25E3%2583%2587%25E3%2582%25B3...%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[[Symfony][Doctrine] OneToOneのエンティティの削除が上手くいかなかったけど解決した]]></title><description><![CDATA[
 起きたこと


User エンティティが Profile エンティティをOneToOneで所持している

User::$profile はnullableだが、Profile::$user はnon-nullable（DBレイヤーで）

という構成のエンティティがありました。（例であり、実際とは異なります）

src/Entity/User.php
#[ORM\Entity(repositoryClass: UserRepository::class)]
class User
{
    #[ORM\OneToOne(inversedBy: 'user', cascade: ['re...]]></description><link>https://zenn.dev/ttskch/articles/dfcdfcaf50c403</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/dfcdfcaf50c403</guid><pubDate>Wed, 23 Apr 2025 16:44:49 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--ktlkt2Sl--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%255BSymfony%255D%255BDoctrine%255D%2520OneToOne%25E3%2581%25AE%25E3%2582%25A8%25E3%2583%25B3%25E3%2583%2586%25E3%2582%25A3%25E3%2583%2586%25E3%2582%25A3%25E3%2581%25AE%25E5%2589%258A%25E9%2599%25A4%25E3%2581%258C%25E4%25B8%258A%25E6%2589%258B%25E3%2581%258F%25E3%2581%2584%25E3%2581%258B%25E3%2581%25AA%25E3%2581%258B%25E3%2581%25A3%25E3%2581%259F%25E3%2581%2591%25E3%2581%25A9%25E8%25A7%25A3%25E6%25B1%25BA%25E3%2581%2597%25E3%2581%259F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[Symfony UX Autocomplete（というかTom Select）でreadonlyを実現する（超簡単）]]></title><description><![CDATA[
 課題
誰もが一度は &lt;select&gt; タグに readonly 属性が欲しいと思ったことがあるはずです。
disabled 属性を付与すれば操作できなくすることはできますが、それだとフォーム送信時に値が送られなくなってしまうという問題があります。


「顧客が本当に必要だったもの」ことSymfony UX Autocomplete では、フロントエンド側の実装に Tom Select というライブラリが使用されていますが、Tom Selectでは readonly 的な挙動を実現するための lock() というメソッドが提供されています。
https://tom-sele...]]></description><link>https://zenn.dev/ttskch/articles/dfc9b66bbcce47</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/dfc9b66bbcce47</guid><pubDate>Tue, 01 Apr 2025 08:29:26 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--CicxGT-U--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Symfony%2520UX%2520Autocomplete%25EF%25BC%2588%25E3%2581%25A8%25E3%2581%2584%25E3%2581%2586%25E3%2581%258BTom%2520Select%25EF%25BC%2589%25E3%2581%25A7readonly%25E3%2582%2592%25E5%25AE%259F%25E7%258F%25BE%25E3%2581%2599%25E3%2582%258B%25EF%25BC%2588%25E8%25B6%2585%25E7%25B0%25A1%25E5%258D%2598%25EF%25BC%2589%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[Render.comのPostgreSQLのダンプをS3に毎日バックアップして直近1ヶ月分だけを残す]]></title><description><![CDATA[
 Render.comのPostgreSQLの自動バックアップ機能
https://render.com/docs/postgresql-backups
こちらの公式ドキュメントで説明されているとおり、Render.comのPostgreSQLには自動でバックアップを保持し、Web UIから簡単にリカバリーを実行できる機能が搭載されています。
ただし、この機能はHobbyプランでは直近3日分のみ、Professional以上のプランでも直近7日分のみしか保持してくれず、やや心許ないです。

 pg_dumpによるバックアップをS3に毎日自動で保存させる
長期間のバックアップの保持が必要...]]></description><link>https://zenn.dev/ttskch/articles/90d8122e940c46</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/90d8122e940c46</guid><pubDate>Tue, 01 Apr 2025 06:56:11 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--hE4Bs86e--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Render.com%25E3%2581%25AEPostgreSQL%25E3%2581%25AE%25E3%2583%2580%25E3%2583%25B3%25E3%2583%2597%25E3%2582%2592S3%25E3%2581%25AB%25E6%25AF%258E%25E6%2597%25A5%25E3%2583%2590%25E3%2583%2583%25E3%2582%25AF%25E3%2582%25A2%25E3%2583%2583%25E3%2583%2597%25E3%2581%2597%25E3%2581%25A6%25E7%259B%25B4%25E8%25BF%25911%25E3%2583%25B6%25E6%259C%2588%25E5%2588%2586%25E3%2581%25A0%25E3%2581%2591%25E3%2582%2592%25E6%25AE%258B%25E3%2581%2599%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[Symfonyで複数言語に"いい感じに"対応したWebサイトを作る]]></title><description><![CDATA[メリークリスマス！Symfony Advent Calendar 2024 の25日目の記事です！🎄✨

Twitter (X) でもちょいちょいSymfonyネタを呟いてます。よろしければ フォロー お願いします🤲


 はじめに
最近、お仕事で久しぶりに多言語対応のサービスを作る機会がありました。
Symfonyでは Translationコンポーネント を導入すれば基本的な多言語対応はとても簡単に実装できるわけですが、実は 色々いい感じに 対応しようとすると意外と考えることがたくさんあります。
そこでこの記事では、私が現時点で「まあこんな感じでやるのがええんちゃうか」と考えている方...]]></description><link>https://zenn.dev/ttskch/articles/b748e3d10b60b6</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/b748e3d10b60b6</guid><pubDate>Wed, 25 Dec 2024 08:02:21 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--Jk2BvsQT--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Symfony%25E3%2581%25A7%25E8%25A4%2587%25E6%2595%25B0%25E8%25A8%2580%25E8%25AA%259E%25E3%2581%25AB%2522%25E3%2581%2584%25E3%2581%2584%25E6%2584%259F%25E3%2581%2598%25E3%2581%25AB%2522%25E5%25AF%25BE%25E5%25BF%259C%25E3%2581%2597%25E3%2581%259FWeb%25E3%2582%25B5%25E3%2582%25A4%25E3%2583%2588%25E3%2582%2592%25E4%25BD%259C%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[Symfony+TwigでTailwind CSS]]></title><description><![CDATA[Symfony Advent Calendar 2024 の6日目の記事です！🎄✨

Twitter (X) でもちょいちょいSymfonyネタを呟いてます。よろしければ フォロー お願いします🤲


 symfonycasts/tailwind-bundle を使えばOK
あとで付随的なことを色々書きますが、とりあず結論としては symfonycasts/tailwind-bundle を使えばOKです。
ただし、このバンドルは Asset Mapper との併用が前提なので、Webpack Encore を使っているという方は、このドキュメント を参照するか Asset Mapper...]]></description><link>https://zenn.dev/ttskch/articles/0b8fdaa0a91c6c</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/0b8fdaa0a91c6c</guid><pubDate>Thu, 05 Dec 2024 22:00:02 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--j8YWOF-F--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_72:Symfony%252BTwig%25E3%2581%25A7Tailwind%2520CSS%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[DATABASE_URL環境変数に付加するserverVersionとは何なのか、省略するとどんな影響があるのか]]></title><description><![CDATA[Symfony Advent Calendar 2024 の2日目の記事です！🎄✨

Twitter (X) でもちょいちょいSymfonyネタを呟いてます。よろしければ フォロー お願いします🤲

昨日は @ippey_s さんの Symfonyのアトリビュートを使って、依存をいろいろ注入しまくる でした✨

 何の話？
Symfonyアプリケーションに doctrine/doctrine-bundle をインストールすると、Flexレシピ（参考）によって .env に以下のような設定値の雛形が自動で挿入されます。
# DATABASE_URL="sqlite:///%kernel.p...]]></description><link>https://zenn.dev/ttskch/articles/a21abe732716bb</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/a21abe732716bb</guid><pubDate>Mon, 02 Dec 2024 01:43:23 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--hQc9X9zK--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:DATABASE_URL%25E7%2592%25B0%25E5%25A2%2583%25E5%25A4%2589%25E6%2595%25B0%25E3%2581%25AB%25E4%25BB%2598%25E5%258A%25A0%25E3%2581%2599%25E3%2582%258BserverVersion%25E3%2581%25A8%25E3%2581%25AF%25E4%25BD%2595%25E3%2581%25AA%25E3%2581%25AE%25E3%2581%258B%25E3%2580%2581%25E7%259C%2581%25E7%2595%25A5%25E3%2581%2599%25E3%2582%258B%25E3%2581%25A8%25E3%2581%25A9%25E3%2582%2593%25E3%2581%25AA%25E5%25BD%25B1%25E9%259F%25BF%25E3%2581%258C%25E3%2581%2582%25E3%2582%258B%25E3%2581%25AE%25E3%2581%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[AST（抽象構文木）を構築せず文字列ベースの加工だけを行うPrettierプラグインの作り方]]></title><description><![CDATA[
 はじめに
https://zenn.dev/ttskch/articles/db73d0703f93dc
こちらの記事で、拙作の @ttskch/prettier-plugin-tailwindcss-anywhere というPrettierプラグインをご紹介しました。
このプラグインは、多くのPrettierプラグインとは異なり、コードをパースしてASTを構築するということをしていません。
コード全体の文字列のうち必要な箇所を文字列ベースで加工しているのみなので、実装コード を見ていただくと分かるように、コード量はごくわずかです。
私はこのプラグインを作るまで、Prettierプラ...]]></description><link>https://zenn.dev/ttskch/articles/52d9713011fd03</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/52d9713011fd03</guid><pubDate>Mon, 11 Nov 2024 08:27:29 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--cbZSDhC3--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:AST%25EF%25BC%2588%25E6%258A%25BD%25E8%25B1%25A1%25E6%25A7%258B%25E6%2596%2587%25E6%259C%25A8%25EF%25BC%2589%25E3%2582%2592%25E6%25A7%258B%25E7%25AF%2589%25E3%2581%259B%25E3%2581%259A%25E6%2596%2587%25E5%25AD%2597%25E5%2588%2597%25E3%2583%2599%25E3%2583%25BC%25E3%2582%25B9%25E3%2581%25AE%25E5%258A%25A0%25E5%25B7%25A5%25E3%2581%25A0%25E3%2581%2591%25E3%2582%2592%25E8%25A1%258C%25E3%2581%2586Prettier%25E3%2583%2597%25E3%2583%25A9%25E3%2582%25B0%25E3%2582%25A4%25E3%2583%25B3%25E3%2581%25AE%25E4%25BD%259C%25E3%2582%258A%25E6%2596%25B9%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[Twigなど任意のテンプレート言語でTailwindCSSのクラスをソートできるPrettierプラグインを作った]]></title><description><![CDATA[
 作ったもの
https://github.com/ttskch/prettier-plugin-tailwindcss-anywhere/
ファイル内の class="..." に合致する部分だけに prettier-plugin-tailwindcss による自動整形を適用してくれる、つまり class="..." の部分以外には何の整形もせず、クラス名のソートだけをしてくれる Prettierプラグインです。
正確には、マッチさせるパターンは class="..." に限らず自由に正規表現を設定できるようにしてあるので、理論上は 任意のテンプレート言語に対応できるはず です。

...]]></description><link>https://zenn.dev/ttskch/articles/db73d0703f93dc</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/db73d0703f93dc</guid><pubDate>Mon, 11 Nov 2024 08:26:28 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--ST1RUPMX--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Twig%25E3%2581%25AA%25E3%2581%25A9%25E4%25BB%25BB%25E6%2584%258F%25E3%2581%25AE%25E3%2583%2586%25E3%2583%25B3%25E3%2583%2597%25E3%2583%25AC%25E3%2583%25BC%25E3%2583%2588%25E8%25A8%2580%25E8%25AA%259E%25E3%2581%25A7TailwindCSS%25E3%2581%25AE%25E3%2582%25AF%25E3%2583%25A9%25E3%2582%25B9%25E3%2582%2592%25E3%2582%25BD%25E3%2583%25BC%25E3%2583%2588%25E3%2581%25A7%25E3%2581%258D%25E3%2582%258BPrettier%25E3%2583%2597%25E3%2583%25A9%25E3%2582%25B0%25E3%2582%25A4%25E3%2583%25B3%25E3%2582%2592%25E4%25BD%259C%25E3%2581%25A3%25E3%2581%259F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[Symfony UX Autocompleteで、選択肢にない値を手入力もできる選択式のフォーム項目の作り方]]></title><description><![CDATA[
 やりたいこと
「選択肢から選ぶこともできるし、選択肢にない値を手入力もできる」ようなフォーム項目は、単一入力ならHTMLの datalist を使えばよいと思うのですが、datalistを使いつつ複数入力できるものを作るとなると、（Symfony Formなら CollectionType を使って）入力欄自体を増やせるようにする必要があり、あまりUXがよくありません。
そこで、Symfony UX Autocomplete を使って、下図のような「選択または入力」ができるフォーム項目を作ります🙆‍♂️


 概要
Symfony UX Autocompleteは、とりあえずSymf...]]></description><link>https://zenn.dev/ttskch/articles/69c783d37ba3ab</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/69c783d37ba3ab</guid><pubDate>Fri, 04 Oct 2024 05:03:33 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--EG6wkKcx--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Symfony%2520UX%2520Autocomplete%25E3%2581%25A7%25E3%2580%2581%25E9%2581%25B8%25E6%258A%259E%25E8%2582%25A2%25E3%2581%25AB%25E3%2581%25AA%25E3%2581%2584%25E5%2580%25A4%25E3%2582%2592%25E6%2589%258B%25E5%2585%25A5%25E5%258A%259B%25E3%2582%2582%25E3%2581%25A7%25E3%2581%258D%25E3%2582%258B%25E9%2581%25B8%25E6%258A%259E%25E5%25BC%258F%25E3%2581%25AE%25E3%2583%2595%25E3%2582%25A9%25E3%2583%25BC%25E3%2583%25A0%25E9%25A0%2585%25E7%259B%25AE%25E3%2581%25AE%25E4%25BD%259C%25E3%2582%258A%25E6%2596%25B9%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[抽象クラスとインターフェースの違い]]></title><description><![CDATA[
 免責
以前、未経験エンジニアさんにPHPによるOOPをお教えするお仕事をしたことがありました。その中で、抽象クラスとインターフェースの違いをテキストで説明したのですが、本稿はそのときのテキストをほぼそのまま掲載したものです。クラスの継承という概念はすでに（おおよそ）理解した上で、抽象クラスとインターフェースの違い、使い分けにフォーカスして解説した文章になります。
初学者向けに、おおまかな理解と納得感を得てもらうことを目的として書いた文章なので、厳密さを欠いている点にはどうぞ目を瞑ってください🙏
また、シニアOOPerに嫌われがちな（？）「犬猫」の例えを使った解説なので、その点もあらか...]]></description><link>https://zenn.dev/ttskch/articles/80d7d7473344c7</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/80d7d7473344c7</guid><pubDate>Fri, 16 Aug 2024 03:45:20 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--wuoahRpV--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E6%258A%25BD%25E8%25B1%25A1%25E3%2582%25AF%25E3%2583%25A9%25E3%2582%25B9%25E3%2581%25A8%25E3%2582%25A4%25E3%2583%25B3%25E3%2582%25BF%25E3%2583%25BC%25E3%2583%2595%25E3%2582%25A7%25E3%2583%25BC%25E3%2582%25B9%25E3%2581%25AE%25E9%2581%2595%25E3%2581%2584%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[Symfony Messengerのmessage:consumeコマンドをcronで手軽に擬似常駐]]></title><description><![CDATA[小ネタです。

 Symfony Messenger
symfony/messenger はメッセージキュー機構を導入するためのSymfonyコンポーネントです。
キューに溜められたメッセージ（ジョブ）は messenger:consume コマンドを常駐させることで実際に処理されるようになります（messenger:consume コマンドが起動されていない限りはキューに溜まるばかりで実際には処理されません）。
messenger:consume コマンドを常駐させる方法は色々あり、例えばSymfonyの公式ドキュメントでは Supervisorなどを使う場合の設定方法が紹介されていま...]]></description><link>https://zenn.dev/ttskch/articles/e63b6e734c0d5f</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/e63b6e734c0d5f</guid><pubDate>Fri, 16 Aug 2024 02:42:50 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--GNEBWn8D--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Symfony%2520Messenger%25E3%2581%25AEmessage%253Aconsume%25E3%2582%25B3%25E3%2583%259E%25E3%2583%25B3%25E3%2583%2589%25E3%2582%2592cron%25E3%2581%25A7%25E6%2589%258B%25E8%25BB%25BD%25E3%2581%25AB%25E6%2593%25AC%25E4%25BC%25BC%25E5%25B8%25B8%25E9%25A7%2590%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[Symfonyのバージョンを4.4から6.4に上げたらgoogle/authが環境変数を読み込んでくれなくなった（解決済み）]]></title><description><![CDATA[
 備忘録です
google/auth を使っているSymfonyプロジェクトで、Symfonyのバージョンを4.4から6.4に上げたところ、.env(.local) に記載している GOOGLE_APPLICATION_CREDENTIALS 環境変数 での認証ができなくなる問題が発生しました。
調べると、symfony/dotenv の5.0.0で usePutenv のデフォルト値が true から false に変わっていて、google/authの環境変数の読み込み箇所 が機能しなくなっていました。
SymfonyRuntime の実装を見ると、use_putenv というオプ...]]></description><link>https://zenn.dev/ttskch/articles/69f507b23e4bf0</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/69f507b23e4bf0</guid><pubDate>Thu, 06 Jun 2024 00:35:08 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--W5BAvFHV--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Symfony%25E3%2581%25AE%25E3%2583%2590%25E3%2583%25BC%25E3%2582%25B8%25E3%2583%25A7%25E3%2583%25B3%25E3%2582%25924.4%25E3%2581%258B%25E3%2582%25896.4%25E3%2581%25AB%25E4%25B8%258A%25E3%2581%2592%25E3%2581%259F%25E3%2582%2589google%252Fauth%25E3%2581%258C%25E7%2592%25B0%25E5%25A2%2583%25E5%25A4%2589%25E6%2595%25B0%25E3%2582%2592%25E8%25AA%25AD%25E3%2581%25BF%25E8%25BE%25BC%25E3%2582%2593%25E3%2581%25A7%25E3%2581%258F%25E3%2582%258C%25E3%2581%25AA%25E3%2581%258F%25E3%2581%25AA%25E3%2581%25A3%25E3%2581%259F%25EF%25BC%2588...%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[無料で商用にも使える日本の郵便番号APIをリリースしました]]></title><description><![CDATA[
 jp-postal-code-api
https://github.com/ttskch/jp-postal-code-api

日本の郵便番号から住所のデータを取得できるWeb APIです。
GitHub Pagesを使用して静的なJSONファイルとして配信している ため、可用性が高いのが特徴です。また、オープンソースなのでクライアントワークでも安心してご使用いただけます。もしリポジトリの永続性や GitHub Pagesの利用制限 が心配な場合は、ご自由にフォークしてご利用ください。
日本郵便によって公開されているデータ を元に住所データのJSONファイルを生成して配信しています...]]></description><link>https://zenn.dev/ttskch/articles/309423d26a1aaa</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/309423d26a1aaa</guid><pubDate>Mon, 27 May 2024 23:22:30 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--lkxY_1Al--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E7%2584%25A1%25E6%2596%2599%25E3%2581%25A7%25E5%2595%2586%25E7%2594%25A8%25E3%2581%25AB%25E3%2582%2582%25E4%25BD%25BF%25E3%2581%2588%25E3%2582%258B%25E6%2597%25A5%25E6%259C%25AC%25E3%2581%25AE%25E9%2583%25B5%25E4%25BE%25BF%25E7%2595%25AA%25E5%258F%25B7API%25E3%2582%2592%25E3%2583%25AA%25E3%2583%25AA%25E3%2583%25BC%25E3%2582%25B9%25E3%2581%2597%25E3%2581%25BE%25E3%2581%2597%25E3%2581%259F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[nelmio/aliceのcurrentの使い方まとめ]]></title><description><![CDATA[
 nelmio/aliceのcurrent
nelmio/alice を使ってYAML形式でテストデータを記述する際、&lt;current()&gt; という組み込み関数を使うと繰り返しをシンプルに記述できて便利です。
App\Entity\Foo:
  foo{1..2}:
    currentValue: &lt;current()&gt; # '1', '2'
このように単純にインデックスの値をそのまま使いたい場合はよいのですが、インデックスの値を何かしら加工して使いたい場合には少し工夫が必要です。

 intにキャストする
&lt;current()&gt; 関数は現在のイ...]]></description><link>https://zenn.dev/ttskch/articles/efc2eb7a88fb62</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/efc2eb7a88fb62</guid><pubDate>Fri, 16 Feb 2024 02:32:03 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--7QyxIxsV--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:nelmio%252Falice%25E3%2581%25AEcurrent%25E3%2581%25AE%25E4%25BD%25BF%25E3%2581%2584%25E6%2596%25B9%25E3%2581%25BE%25E3%2581%25A8%25E3%2582%2581%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[API Platformの始め方（非Symfonyユーザー向け丁寧バージョン）]]></title><description><![CDATA[メリークリスマス！🎅🎁
API Platform Advent Calendar 2023 の25日目の記事です！🎄✨

Twitter (X) でもちょいちょいAPI Platformネタを呟いてます！よろしければ フォロー お願いします！

こんな本も書いてます！よろしくお願いします！
https://zenn.dev/ttskch/books/a3800fc0912fbb

 はじめに
勢いで作ってしまったAPI Platformアドベントカレンダー、作ったときは僕以外誰も書く人いないかな・・と思っていたんですが、最終的には僕以外にも何人かの方にご参加いただけて、とても嬉しかったで...]]></description><link>https://zenn.dev/ttskch/articles/7b21145615a1cf</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/7b21145615a1cf</guid><pubDate>Sun, 24 Dec 2023 15:00:01 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--7jjcIiuT--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:API%2520Platform%25E3%2581%25AE%25E5%25A7%258B%25E3%2582%2581%25E6%2596%25B9%25EF%25BC%2588%25E9%259D%259ESymfony%25E3%2583%25A6%25E3%2583%25BC%25E3%2582%25B6%25E3%2583%25BC%25E5%2590%2591%25E3%2581%2591%25E4%25B8%2581%25E5%25AF%25A7%25E3%2583%2590%25E3%2583%25BC%25E3%2582%25B8%25E3%2583%25A7%25E3%2583%25B3%25EF%25BC%2589%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[シンプルでカスタマイズしやすい最強のページネーションバンドル ttskch/paginator-bundle のご紹介 2023]]></title><description><![CDATA[メリークリスマスイブ！🎅🎁
Symfony Advent Calendar 2023 の24日目の記事です！🎄✨

Twitter (X) でもちょいちょいSymfonyネタを呟いてます。よろしければ フォロー お願いします🤲


 ttskch/paginator-bundle
ダイマです。拙作のシンプルでカスタマイズしやすい最強のページネーションバンドル ttskch/paginator-bundle を紹介させてください。
https://github.com/ttskch/TtskchPaginatorBundle

こんな感じの美しいページネーションが簡単に実装できます。
僕自...]]></description><link>https://zenn.dev/ttskch/articles/c9467909b1154b</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/c9467909b1154b</guid><pubDate>Sat, 23 Dec 2023 15:00:00 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--VL35JGFi--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2582%25B7%25E3%2583%25B3%25E3%2583%2597%25E3%2583%25AB%25E3%2581%25A7%25E3%2582%25AB%25E3%2582%25B9%25E3%2582%25BF%25E3%2583%259E%25E3%2582%25A4%25E3%2582%25BA%25E3%2581%2597%25E3%2582%2584%25E3%2581%2599%25E3%2581%2584%25E6%259C%2580%25E5%25BC%25B7%25E3%2581%25AE%25E3%2583%259A%25E3%2583%25BC%25E3%2582%25B8%25E3%2583%258D%25E3%2583%25BC%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%25B3%25E3%2583%2590%25E3%2583%25B3%25E3%2583%2589%25E3%2583%25AB%2520ttskch%252Fpaginator-bundle%2520%25E3%2581%25AE%25E3%2581%2594...%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[典型的な対策はしているのに MySQL server has gone away が頻発し、よくよく調べたらメモリ不足が原因だった件]]></title><description><![CDATA[MySQL Advent Calendar 2023 の22日目の記事です。

 タイトルで全部言ってますが
とあるPHP + MySQLのWebシステムにて、ある日を境に突然 MySQL server has gone away が頻発するようになりました。
このシステムは古き良きVPS上で動いている（同一サーバー上でPHPとMySQLをホストしている）のですが、たまたま最近とある事情でこのVPSにOSを再インストールしてプロビジョニングし直したばかりだったため、何か設定ミスが原因に違いないと思い込んでしまったのですが、ググって見つけられる典型的な対策をやってみても一向に状況が改善せず...]]></description><link>https://zenn.dev/ttskch/articles/b7dd323be9c4c4</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/b7dd323be9c4c4</guid><pubDate>Thu, 21 Dec 2023 15:00:00 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--xe2WJsSY--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E5%2585%25B8%25E5%259E%258B%25E7%259A%2584%25E3%2581%25AA%25E5%25AF%25BE%25E7%25AD%2596%25E3%2581%25AF%25E3%2581%2597%25E3%2581%25A6%25E3%2581%2584%25E3%2582%258B%25E3%2581%25AE%25E3%2581%25AB%2520MySQL%2520server%2520has%2520gone%2520away%2520%25E3%2581%258C%25E9%25A0%25BB%25E7%2599%25BA%25E3%2581%2597%25E3%2580%2581%25E3%2582%2588%25E3%2581%258F%25E3%2582%2588%25E3%2581%258F%25E8%25AA%25BF%25E3%2581%25B9%25E3%2581%259F%25E3%2582%2589%25E3%2583%25A1%25E3%2583%25A2%25E3%2583%25AA...%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item><item><title><![CDATA[Macで複数バージョンのPHPを楽に使い分ける]]></title><description><![CDATA[PHP Advent Calendar 2023 の15日目の記事です！🎄✨

 はじめに
Macで複数バージョンのPHPを使い分けるのって意外と難しくないですか？
Docker経由でしかPHPを使わないみたいな猛者スタイルで行ければいいのかもしれませんが、パフォーマンスや開発体験の問題からローカルのPHPを使いたい事情もあると思います。
phpenv と .phpenv-version ファイルを併用すればディレクトリごとに使用するPHPバージョンを指定することもできますが、このソリューションはいざ導入しようとすると Yak Shavingの嵐が待っていて（実体験） 非常に面倒だったり...]]></description><link>https://zenn.dev/ttskch/articles/e6f6b2af2972ab</link><guid isPermaLink="true">https://zenn.dev/ttskch/articles/e6f6b2af2972ab</guid><pubDate>Thu, 14 Dec 2023 15:00:01 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--1xPmBkpo--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Mac%25E3%2581%25A7%25E8%25A4%2587%25E6%2595%25B0%25E3%2583%2590%25E3%2583%25BC%25E3%2582%25B8%25E3%2583%25A7%25E3%2583%25B3%25E3%2581%25AEPHP%25E3%2582%2592%25E6%25A5%25BD%25E3%2581%25AB%25E4%25BD%25BF%25E3%2581%2584%25E5%2588%2586%25E3%2581%2591%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:ttskch%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2RhY2Y2ZmZjMDcuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>ttskch</dc:creator></item></channel></rss>