<?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[プログラミングをするパンダさんのフィード]]></title><description><![CDATA[Zennのプログラミングをするパンダさん（@panda_program）のRSSフィードです]]></description><link>https://zenn.dev/panda_program</link><image><url>https://static.zenn.studio/user-upload/avatar/fd103e0bcc.jpeg</url><title>プログラミングをするパンダさんのフィード</title><link>https://zenn.dev/panda_program</link></image><generator>zenn.dev</generator><lastBuildDate>Wed, 20 May 2026 23:21:36 GMT</lastBuildDate><atom:link href="https://zenn.dev/panda_program/feed" rel="self" type="application/rss+xml"/><language><![CDATA[ja]]></language><item><title><![CDATA[TypeScriptでクリーンアーキテクチャを実践する - WebでもCLIでも使えるアプリケーションの作り方]]></title><description><![CDATA[
 概要
本記事は、スクラムを管理するアプリケーションをクリーンアーキテクチャの考え方で実装し、WebからもCLIからも動かせるようにしたという実践を紹介するものです。学習のための個人開発で作成したサンプルアプリケーションの設計と実装を適宜紹介することで、クリーンアーキテクチャに対する理解を深めることが目的です。

 モチベーション
なぜ現代の開発現場で定着しているクリーンアーキテクチャのアプリを手元で実装してみようと思ったかというと、私自身Webエンジニアとして働く中で、クリーンアーキテクチャの実践例は入出力をWebに限定したものばかりだったからです。
しかし、「詳細に依存せず抽象に依...]]></description><link>https://zenn.dev/panda_program/articles/clean-architecture-application</link><guid isPermaLink="true">https://zenn.dev/panda_program/articles/clean-architecture-application</guid><pubDate>Thu, 29 Feb 2024 17:08:30 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--9PxQz1X1--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:TypeScript%25E3%2581%25A7%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25A2%25E3%2583%25BC%25E3%2582%25AD%25E3%2583%2586%25E3%2582%25AF%25E3%2583%2581%25E3%2583%25A3%25E3%2582%2592%25E5%25AE%259F%25E8%25B7%25B5%25E3%2581%2599%25E3%2582%258B%2520-%2520Web%25E3%2581%25A7%25E3%2582%2582CLI%25E3%2581%25A7%25E3%2582%2582%25E4%25BD%25BF%25E3%2581%2588%25E3%2582%258B%25E3%2582%25A2%25E3%2583%2597%25E3%2583%25AA%25E3%2582%25B1%25E3%2583%25BC%25E3%2582%25B7%25E3%2583%25A7%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:%25E3%2583%2597%25E3%2583%25AD%25E3%2582%25B0%25E3%2583%25A9%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2582%2592%25E3%2581%2599%25E3%2582%258B%25E3%2583%2591%25E3%2583%25B3%25E3%2583%2580%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyL2ZkMTAzZTBiY2MuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>プログラミングをするパンダ</dc:creator></item><item><title><![CDATA[サイトのOGP画像を自動生成する]]></title><description><![CDATA[最近、個人の技術ブログをリニューアルしました（パンダのプログラミングブログ）。 リニューアルの際に、念願だった OG 画像の自動生成を実装してみたところ、意外と簡単にできたのでその方法を紹介します。

 OGP画像とは何か
OGP 画像の OGPとは Open Graph Protocol の略語で、ある URL のページをリッチなコンテンツで紹介できるというものです。 サイトのタイトルやページのコンテンツをイメージさせる画像などを meta タグを使って HTML に埋め込みページの内容を表現できます。

Twitter や Slack、Line で URL を貼り付けると URL と...]]></description><link>https://zenn.dev/panda_program/articles/generate-og-image</link><guid isPermaLink="true">https://zenn.dev/panda_program/articles/generate-og-image</guid><pubDate>Wed, 02 Feb 2022 15:09:46 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--WTb8mH0C--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2582%25B5%25E3%2582%25A4%25E3%2583%2588%25E3%2581%25AEOGP%25E7%2594%25BB%25E5%2583%258F%25E3%2582%2592%25E8%2587%25AA%25E5%258B%2595%25E7%2594%259F%25E6%2588%2590%25E3%2581%2599%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E3%2583%2597%25E3%2583%25AD%25E3%2582%25B0%25E3%2583%25A9%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2582%2592%25E3%2581%2599%25E3%2582%258B%25E3%2583%2591%25E3%2583%25B3%25E3%2583%2580%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyL2ZkMTAzZTBiY2MuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>プログラミングをするパンダ</dc:creator></item><item><title><![CDATA[TypeScript Compiler API で型を自動生成する仕組みを TDD で実装する]]></title><description><![CDATA[
 Compiler API で yaml から型を自動生成する
この記事は TypeScript Compiler API を実際に使って TypeScript の型を自動生成する方法を紹介しています。
記事内では Google Analytics のイベントの型の自動生成にトライしています。
題材として GA を選んだのは、以前 Next.js に Google Analytics（GA） を導入する方法を紹介した記事でGA のイベントで使う型を yaml から自動生成するのはどうか と書いていたからです。
正直なところ、GA のイベントに馴染みのない方もいらっしゃると思うので、最初...]]></description><link>https://zenn.dev/panda_program/articles/typescript-compiler-api</link><guid isPermaLink="true">https://zenn.dev/panda_program/articles/typescript-compiler-api</guid><pubDate>Thu, 16 Sep 2021 02:00:57 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--AlsIXDtZ--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:TypeScript%2520Compiler%2520API%2520%25E3%2581%25A7%25E5%259E%258B%25E3%2582%2592%25E8%2587%25AA%25E5%258B%2595%25E7%2594%259F%25E6%2588%2590%25E3%2581%2599%25E3%2582%258B%25E4%25BB%2595%25E7%25B5%2584%25E3%2581%25BF%25E3%2582%2592%2520TDD%2520%25E3%2581%25A7%25E5%25AE%259F%25E8%25A3%2585%25E3%2581%2599%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E3%2583%2597%25E3%2583%25AD%25E3%2582%25B0%25E3%2583%25A9%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2582%2592%25E3%2581%2599%25E3%2582%258B%25E3%2583%2591%25E3%2583%25B3%25E3%2583%2580%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyL2ZkMTAzZTBiY2MuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>プログラミングをするパンダ</dc:creator></item><item><title><![CDATA[Tailwind CSS でダークモードを実装する（React での切り替えボタンの実装コード例あり）]]></title><description><![CDATA[
 Tailwind CSS でダークモードを実装する
Tailwind CSS でダークモードを実装する方法を紹介します。Tailwind CSS は v2 からダークモード用の CSS を簡単に適用できるようになりました。
この記事では、以前私が個人開発で作成した note PDFy というサイトを例に、ダークモードの作成方法と Tailwind CSS でのダークモードの実装方法を解説します。

このサイトは note の URL を入力するだけで記事を PDF 化できるツールです。これを使うと note の記事をオフラインで読むことができます。
なお、本記事は私の所属する BAS...]]></description><link>https://zenn.dev/panda_program/articles/tailwindcss-darkmode</link><guid isPermaLink="true">https://zenn.dev/panda_program/articles/tailwindcss-darkmode</guid><pubDate>Fri, 20 Aug 2021 14:27:46 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--Pix9VRSm--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Tailwind%2520CSS%2520%25E3%2581%25A7%25E3%2583%2580%25E3%2583%25BC%25E3%2582%25AF%25E3%2583%25A2%25E3%2583%25BC%25E3%2583%2589%25E3%2582%2592%25E5%25AE%259F%25E8%25A3%2585%25E3%2581%2599%25E3%2582%258B%25EF%25BC%2588React%2520%25E3%2581%25A7%25E3%2581%25AE%25E5%2588%2587%25E3%2582%258A%25E6%259B%25BF%25E3%2581%2588%25E3%2583%259C%25E3%2582%25BF%25E3%2583%25B3%25E3%2581%25AE%25E5%25AE%259F%25E8%25A3%2585%25E3%2582%25B3%25E3%2583%25BC%25E3%2583%2589%25E4%25BE%258B%25E3%2581%2582%25E3%2582%258A%25EF%25BC%2589%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E3%2583%2597%25E3%2583%25AD%25E3%2582%25B0%25E3%2583%25A9%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2582%2592%25E3%2581%2599%25E3%2582%258B%25E3%2583%2591%25E3%2583%25B3%25E3%2583%2580%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyL2ZkMTAzZTBiY2MuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>プログラミングをするパンダ</dc:creator></item><item><title><![CDATA[React を深く知るための入り口]]></title><description><![CDATA[
 Reactに対する見方をアップデートする
国内外の優れた開発者の方による React の各論の記事は枚挙にいとまがありません。しかし、React の入門を一通り終えた方に向けの浅く広い総論はあまり見かけません。
React の公式ドキュメントのトップページに掲載されている短い3つの文章があります。この React の本質を表現した文章を掘り下げることが、初学者のステップアップにつながるのではないかと考え、各章に対して注釈を加えました。
React について少し深く知ることで、さらに React を好きになったという方を一人でも多く増やしたい。その思いから本記事を執筆しました。
本記事...]]></description><link>https://zenn.dev/panda_program/articles/deep-dive-into-react</link><guid isPermaLink="true">https://zenn.dev/panda_program/articles/deep-dive-into-react</guid><pubDate>Sun, 07 Mar 2021 04:09:08 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--YyY_lYzz--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:React%2520%25E3%2582%2592%25E6%25B7%25B1%25E3%2581%258F%25E7%259F%25A5%25E3%2582%258B%25E3%2581%259F%25E3%2582%2581%25E3%2581%25AE%25E5%2585%25A5%25E3%2582%258A%25E5%258F%25A3%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E3%2583%2597%25E3%2583%25AD%25E3%2582%25B0%25E3%2583%25A9%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2582%2592%25E3%2581%2599%25E3%2582%258B%25E3%2583%2591%25E3%2583%25B3%25E3%2583%2580%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyL2ZkMTAzZTBiY2MuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>プログラミングをするパンダ</dc:creator></item><item><title><![CDATA[Next.jsに「できるだけ」依存しないReactアプリケーションの構成]]></title><description><![CDATA[
 TL;DR
本記事で紹介するのは、Redux や React Router を使った React アプリケーション構築時のベストプラクティスを Next.js に適用した考え方です。

Next.js を外部モジュールと考え、Container/Presentation の Container を Adapter 層と見なす考え方
next/router などの Next.js の組み込みモジュール、Store、SWR（React Query） は Container（Pages） 層で利用する
Storybook でコンポーネントを表示する際、Next.js 等のモックをできるだけ...]]></description><link>https://zenn.dev/panda_program/articles/nextjs-architecture</link><guid isPermaLink="true">https://zenn.dev/panda_program/articles/nextjs-architecture</guid><pubDate>Sat, 16 Jan 2021 22:54:29 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--dPuPBVb_--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Next.js%25E3%2581%25AB%25E3%2580%258C%25E3%2581%25A7%25E3%2581%258D%25E3%2582%258B%25E3%2581%25A0%25E3%2581%2591%25E3%2580%258D%25E4%25BE%259D%25E5%25AD%2598%25E3%2581%2597%25E3%2581%25AA%25E3%2581%2584React%25E3%2582%25A2%25E3%2583%2597%25E3%2583%25AA%25E3%2582%25B1%25E3%2583%25BC%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%25B3%25E3%2581%25AE%25E6%25A7%258B%25E6%2588%2590%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E3%2583%2597%25E3%2583%25AD%25E3%2582%25B0%25E3%2583%25A9%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2582%2592%25E3%2581%2599%25E3%2582%258B%25E3%2583%2591%25E3%2583%25B3%25E3%2583%2580%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyL2ZkMTAzZTBiY2MuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>プログラミングをするパンダ</dc:creator></item><item><title><![CDATA[Next.jsのルーティングにTypeScriptで型をつけたい]]></title><description><![CDATA[
 動機と目的
普段、Next.jsでアプリケーションを開発しています。当初は Next.js にも TypeScript にも慣れていなかったため、ページのパスを定数で定義し、Link コンポーネントで呼び出していました。
// constants/path.ts
export const TOP_PATH = '/'
export const USERS_PATH = '/users'
// ...
&lt;Link href={`${USERS_PATH}/${userId}`}&gt;
  &lt;a&gt;ユーザー詳細へ&lt;/a&gt;
&lt;/Link&gt;
幸い大規...]]></description><link>https://zenn.dev/panda_program/articles/typescript-nextjs-routing</link><guid isPermaLink="true">https://zenn.dev/panda_program/articles/typescript-nextjs-routing</guid><pubDate>Wed, 30 Dec 2020 13:43:19 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--Mh27twmW--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Next.js%25E3%2581%25AE%25E3%2583%25AB%25E3%2583%25BC%25E3%2583%2586%25E3%2582%25A3%25E3%2583%25B3%25E3%2582%25B0%25E3%2581%25ABTypeScript%25E3%2581%25A7%25E5%259E%258B%25E3%2582%2592%25E3%2581%25A4%25E3%2581%2591%25E3%2581%259F%25E3%2581%2584%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E3%2583%2597%25E3%2583%25AD%25E3%2582%25B0%25E3%2583%25A9%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2582%2592%25E3%2581%2599%25E3%2582%258B%25E3%2583%2591%25E3%2583%25B3%25E3%2583%2580%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyL2ZkMTAzZTBiY2MuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>プログラミングをするパンダ</dc:creator></item><item><title><![CDATA[Reactコンポーネントの抽象化とインターフェースのリファクタリング]]></title><description><![CDATA[
 記事の概要と動機
Takepepeさんの「AtomicDesign 境界線のひき方」という記事を読んでいて、はたと気づいた。「限定的コンポーネントを横断的なものに移行する」という箇所は、SOLID原則のISPとそのリファクタリングの話だ。ISP（Interface Segregation Principle）とはインターフェース分離原則である。

コンポーネントは、はじめは限定的コンテキストで実装するべきでしょう。共通利用される頃合いに、リファクタリングすれば十分です。その際に忘れてはならないことが「抽象化」です。

この記事は、Takepepeさんの記事中の以下の一文に対して、イン...]]></description><link>https://zenn.dev/panda_program/articles/interface-and-refactoring</link><guid isPermaLink="true">https://zenn.dev/panda_program/articles/interface-and-refactoring</guid><pubDate>Mon, 21 Sep 2020 14:59:59 GMT</pubDate><enclosure url="https://res.cloudinary.com/zenn/image/upload/s--9qQoODEa--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:React%25E3%2582%25B3%25E3%2583%25B3%25E3%2583%259D%25E3%2583%25BC%25E3%2583%258D%25E3%2583%25B3%25E3%2583%2588%25E3%2581%25AE%25E6%258A%25BD%25E8%25B1%25A1%25E5%258C%2596%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%25E3%2583%25AA%25E3%2583%2595%25E3%2582%25A1%25E3%2582%25AF%25E3%2582%25BF%25E3%2583%25AA%25E3%2583%25B3%25E3%2582%25B0%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E3%2583%2597%25E3%2583%25AD%25E3%2582%25B0%25E3%2583%25A9%25E3%2583%259F%25E3%2583%25B3%25E3%2582%25B0%25E3%2582%2592%25E3%2581%2599%25E3%2582%258B%25E3%2583%2591%25E3%2583%25B3%25E3%2583%2580%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyL2ZkMTAzZTBiY2MuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT" length="0" type="false"/><dc:creator>プログラミングをするパンダ</dc:creator></item></channel></rss>