<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Web on Efo's Sandbox</title><link>https://efo-yu.github.io/tags/web/</link><description>Recent content in Web on Efo's Sandbox</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 01 Nov 2025 13:34:53 +0900</lastBuildDate><atom:link href="https://efo-yu.github.io/tags/web/index.xml" rel="self" type="application/rss+xml"/><item><title>ViteでReact+Tailwind+TSをサクッと構成する</title><link>https://efo-yu.github.io/post/tech/vite-react-tailwind-ts-swc/</link><pubDate>Sat, 01 Nov 2025 13:34:53 +0900</pubDate><guid>https://efo-yu.github.io/post/tech/vite-react-tailwind-ts-swc/</guid><description>&lt;h1 id="repository"&gt;Repository&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://github.com/Efo-YU/vite-react-tailwind-ts-swc"&gt;https://github.com/Efo-YU/vite-react-tailwind-ts-swc&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="motivation"&gt;Motivation&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/"&gt;Next.js&lt;/a&gt;では&lt;a href="https://www.typescriptlang.org/"&gt;TypeScript&lt;/a&gt;と&lt;a href="https://tailwindcss.com/"&gt;Tailwind CSS&lt;/a&gt;(とベースたる&lt;a href="https://react.dev/"&gt;React&lt;/a&gt;)が標準的な構成として用いられる(&lt;a href="https://nextjs.org/docs/app/getting-started/installation#automatic-installation"&gt;&lt;code&gt;create-next-app&lt;/code&gt;時に自動でsetupできる&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Next.jsはReactの代表的な &lt;em&gt;full-stack framework&lt;/em&gt; とされるため，Reactを用いる際は上記の構成を真似したい&lt;/li&gt;
&lt;li&gt;だがNext.js自体は超クソデカframeworkであるため，この構成を使うためだけにNext.jsを用いるのは無駄が多い&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vite.dev/"&gt;Vite&lt;/a&gt;なら簡単かつminimalにReact+Tailwind+TSを構成できる&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;h1 id="procedure"&gt;Procedure&lt;/h1&gt;
&lt;h2 id="initialize-project"&gt;Initialize project&lt;/h2&gt;
&lt;p&gt;Commit: &lt;a href="https://github.com/Efo-YU/vite-react-tailwind-ts-swc/commit/7d4de5eb7ac7561dc163684a4ccc556c874b6d94"&gt;https://github.com/Efo-YU/vite-react-tailwind-ts-swc/commit/7d4de5eb7ac7561dc163684a4ccc556c874b6d94&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下記を実行：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pnpm create vite
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;dialogで以下のように選択：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;◇ Project name:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ foo-bar-project &lt;span style="color:#75715e"&gt;# 任意にキーボード入力，Enterで決定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;◇ Select a framework:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ React &lt;span style="color:#75715e"&gt;# 十字キーで選択，Enterで決定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;◇ Select a variant:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ TypeScript + SWC &lt;span style="color:#75715e"&gt;# 十字キーで選択，Enterで決定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; &lt;a href="https://swc.rs/"&gt;SWC&lt;/a&gt;はNext.jsでも用いられているとのこと．&lt;/p&gt;
&lt;h2 id="add-tailwindcss-and-tailwindcssvite-dependencies"&gt;Add tailwindcss and @tailwindcss/vite dependencies&lt;/h2&gt;
&lt;p&gt;Commit: &lt;a href="https://github.com/Efo-YU/vite-react-tailwind-ts-swc/commit/e9eda14599f8ef6cf8fd082c6611686abbebf1c0"&gt;https://github.com/Efo-YU/vite-react-tailwind-ts-swc/commit/e9eda14599f8ef6cf8fd082c6611686abbebf1c0&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pnpm i tailwindcss @tailwindcss/vite
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configure-tailwind-css"&gt;Configure Tailwind CSS&lt;/h2&gt;
&lt;p&gt;Commit: &lt;a href="https://github.com/Efo-YU/vite-react-tailwind-ts-swc/commit/42633c835ac2f62520d83d1b2d50a5c5da79a237"&gt;https://github.com/Efo-YU/vite-react-tailwind-ts-swc/commit/42633c835ac2f62520d83d1b2d50a5c5da79a237&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;src/App.css&lt;/code&gt;を削除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;src/index.css&lt;/code&gt;を&lt;code&gt;@import &amp;quot;tailwindcss&amp;quot;&lt;/code&gt;ただ一行だけにする&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#66d9ef"&gt;import&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;tailwindcss&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vite.config.ts&lt;/code&gt;にtailwindcssを追加&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-ts" data-lang="ts"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;import&lt;/span&gt; { &lt;span style="color:#a6e22e"&gt;defineConfig&lt;/span&gt; } &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;vite&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;import&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;react&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;@vitejs/plugin-react-swc&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;import&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;tailwindcss&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;@tailwindcss/vite&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// https://vite.dev/config/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;export&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;default&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;defineConfig&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;plugins&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; [&lt;span style="color:#a6e22e"&gt;react&lt;/span&gt;(), &lt;span style="color:#a6e22e"&gt;tailwindcss&lt;/span&gt;()],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="edit-srcapptsx"&gt;Edit &lt;code&gt;src/App.tsx&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;前節までで構成は完了．ただし，&lt;code&gt;pnpm create vite&lt;/code&gt;時に生成された&lt;code&gt;src/App.tsx&lt;/code&gt;はTailwindを用いておらず，もはや使えなくなっているため，Tailwindを用いたものに変える必要がある．&lt;/p&gt;</description></item></channel></rss>