<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JavaScript – AichiLog</title>
	<atom:link href="https://aichi.blog/category/programming/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://aichi.blog</link>
	<description>学びて富み　富みて学ぶ</description>
	<lastBuildDate>Sat, 29 Mar 2025 15:18:49 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://aichi.blog/wp-content/uploads/2021/12/cropped-915AB649-D1E9-4810-9658-CB8CE1B605FD.JPEG-2-32x32.jpeg</url>
	<title>JavaScript – AichiLog</title>
	<link>https://aichi.blog</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://aichi.blog/category/programming/javascript/feed/"/>
	<item>
		<title>ReactのuseStateとuseEffectの基本</title>
		<link>https://aichi.blog/react%e3%81%aeusestate%e3%81%a8useeffect%e3%81%ae%e5%9f%ba%e6%9c%ac/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=react%25e3%2581%25aeusestate%25e3%2581%25a8useeffect%25e3%2581%25ae%25e5%259f%25ba%25e6%259c%25ac</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Tue, 07 Nov 2023 02:10:20 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[next.js]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[文法]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3350</guid>

					<description><![CDATA[<p>Reactは、ユーザーインターフェースを構築するためのJavaScriptライブラリです。その中核をなす概念の一つが「状態（state）」です。 useStateとuseEffectは、Reactのフックと呼ばれる機能で [&#8230;]</p>
<p>The post <a href="https://aichi.blog/react%e3%81%aeusestate%e3%81%a8useeffect%e3%81%ae%e5%9f%ba%e6%9c%ac/">ReactのuseStateとuseEffectの基本</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Reactは、ユーザーインターフェースを構築するためのJavaScriptライブラリです。その中核をなす概念の一つが「状態（state）」です。</p>



<p>useStateとuseEffectは、Reactのフックと呼ばれる機能で、状態管理と副作用の管理を行います。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">useStateがない場合</a></li><li><a href="#toc2" tabindex="0">useStateを使う場合</a></li><li><a href="#toc3" tabindex="0">useEffectの使い方</a><ol><li><a href="#toc4" tabindex="0">マウント時に一度だけ実行</a></li><li><a href="#toc5" tabindex="0">依存配列の変数が変わった時に発火</a></li><li><a href="#toc6" tabindex="0">無限ループの危険性</a></li></ol></li><li><a href="#toc7" tabindex="0">おわり</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">useStateがない場合</span></h2>



<pre class="wp-block-code javascript"><code>function App() {
  let count = 0;

  const handleClick = () =&gt; {
    count++;
    console.log(count);
  };

  return (
    &lt;&gt;
      &lt;h1&gt;普通のカウント&lt;/h1&gt;
      &lt;button onClick={handleClick}&gt;Click Me!&lt;/button&gt;
      &lt;p&gt;{count}&lt;/p&gt;
    &lt;/&gt;
  );
}</code></pre>



<p>上記のコードでは、<code>count</code>はただの変数です。</p>



<p>ボタンをクリックすると<code>count</code>の値は増加しますが、これはReactのレンダリングシステムとは独立しています。そのため、画面上のカウントは更新されず、常に0が表示されます。</p>



<h2 class="wp-block-heading"><span id="toc2">useStateを使う場合</span></h2>



<pre class="wp-block-code"><code>import { useState } from "react";

function App() {
  const &#91;count, setCount] = useState(0);

  const handleClick = () =&gt; {
    setCount(count + 1);
  };

  return (
    &lt;&gt;
      &lt;h1&gt;UseState&lt;/h1&gt;
      &lt;button onClick={handleClick}&gt;Click Me!&lt;/button&gt;
      &lt;p&gt;{count}&lt;/p&gt;
    &lt;/&gt;
  );
}</code></pre>



<p>useStateを使うと、<code>count</code>は状態として管理され、<code>setCount</code>関数によって更新されます。これにより、状態が変更されるとReactはコンポーネントを再レンダリングし、画面上のカウントが実際の値に更新されます。</p>



<h2 class="wp-block-heading"><span id="toc3">useEffectの使い方</span></h2>



<p>useEffectは、コンポーネントのライフサイクルに応じた副作用（データの取得、購読の設定など）を扱います。</p>



<h3 class="wp-block-heading"><span id="toc4">マウント時に一度だけ実行</span></h3>



<pre class="wp-block-code"><code>import { useEffect } from "react";

function App() {
  useEffect(() =&gt; {
    console.log("マウント時に一度だけ実行");
  }, &#91;]);

  return (
    &lt;&gt;
      &lt;h1&gt;UseEffect：デフォルト（マウント時に一度だけ実行）&lt;/h1&gt;
    &lt;/&gt;
  );
}</code></pre>



<p>上記のコードでは、空の依存配列（<code>[]</code>）を渡すことで、コンポーネントがマウントされた時に一度だけ副作用が実行されます。</p>



<h3 class="wp-block-heading"><span id="toc5">依存配列の変数が変わった時に発火</span></h3>



<pre class="wp-block-code"><code>import { useEffect, useState } from "react";

function App() {
  const &#91;count, setCount] = useState(0);

  const handleClick = () =&gt; {
    setCount(count + 1);
  };

  useEffect(() =&gt; {
    console.log("countが変更されました");
  }, &#91;count]);

  return (
    &lt;&gt;
      &lt;h1&gt;UseEffect：変数が変更された時に実行&lt;/h1&gt;
      &lt;button onClick={handleClick}&gt;+1&lt;/button&gt;
      &lt;p&gt;count: {count}&lt;/p&gt;
    &lt;/&gt;
  );
}</code></pre>



<p>ここでは、<code>count</code>が更新されるたびに副作用が実行されます。これは、<code>count</code>を依存配列に含めることで実現されます。</p>



<h3 class="wp-block-heading"><span id="toc6">無限ループの危険性</span></h3>



<pre class="wp-block-code"><code>import { useEffect, useState } from "react";

function App() {
  const &#91;count, setCount] = useState(0);

  useEffect(() =&gt; {
    console.log("NG：countが永遠に変更されるので、無限ループになる");
    setCount(count + 1);
  }, &#91;count]);

  return (
    &lt;&gt;
      &lt;h1&gt;UseEffect：無限ループ&lt;/h1&gt;
      &lt;button onClick={handleClick}&gt;+1&lt;/button&gt;
      &lt;p&gt;count: {count}&lt;/p&gt;
    &lt;/&gt;
  );
}</code></pre>



<p>上記のコードは、<code>count</code>が更新されるたびに<code>setCount</code>を呼び出しているため、無限ループに陥ります。これは避けるべきです。</p>



<h2 class="wp-block-heading"><span id="toc7">おわり</span></h2>



<p>以上がuseStateとuseEffectの基本的な使い方と、それらを使ってReactでの状態管理と副作用を扱う方法です。</p>



<p>これらのフックを適切に使うことで、効率的で再利用可能なコンポーネントを作成することができます。</p><p>The post <a href="https://aichi.blog/react%e3%81%aeusestate%e3%81%a8useeffect%e3%81%ae%e5%9f%ba%e6%9c%ac/">ReactのuseStateとuseEffectの基本</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>なぜフロントエンド開発にNode.jsが必要なのか</title>
		<link>https://aichi.blog/why-nodejs-is-necessary-for-frontend-development/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-nodejs-is-necessary-for-frontend-development</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Fri, 01 Sep 2023 09:28:41 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[node.js]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3183</guid>

					<description><![CDATA[<p>目次 はじめに1. パッケージ管理の効率化例1: npm（Node Package Manager）例2: yarn2. 開発環境の構築と最適化例1: Webpack例2: Babel3. 開発効率の向上例1: ESLi [&#8230;]</p>
<p>The post <a href="https://aichi.blog/why-nodejs-is-necessary-for-frontend-development/">なぜフロントエンド開発にNode.jsが必要なのか</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">1. パッケージ管理の効率化</a><ol><li><a href="#toc3" tabindex="0">例1: npm（Node Package Manager）</a></li><li><a href="#toc4" tabindex="0">例2: yarn</a></li></ol></li><li><a href="#toc5" tabindex="0">2. 開発環境の構築と最適化</a><ol><li><a href="#toc6" tabindex="0">例1: Webpack</a></li><li><a href="#toc7" tabindex="0">例2: Babel</a></li></ol></li><li><a href="#toc8" tabindex="0">3. 開発効率の向上</a><ol><li><a href="#toc9" tabindex="0">例1: ESLint</a></li><li><a href="#toc10" tabindex="0">例2: Prettier</a></li></ol></li><li><a href="#toc11" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>Node.jsは、JavaScriptをサーバーサイドで動かすための環境として広く知られています。しかし、フロントエンド開発においてもNode.jsは欠かせない存在です。この記事では、Node.jsがフロントエンド開発でなぜ必要なのか、その理由と具体例を通じて解説します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">1. パッケージ管理の効率化</span></h2>



<h3 class="wp-block-heading"><span id="toc3">例1: npm（Node Package Manager）</span></h3>



<p>Node.jsをインストールすると、npmというパッケージ管理ツールも同時にインストールされます。npmを使うことで、ライブラリやフレームワークのインストールが簡単になります。</p>



<pre class="wp-block-code"><code>// Reactをインストールするコマンド
npm install react
</code></pre>



<h3 class="wp-block-heading"><span id="toc4">例2: yarn</span></h3>



<p>npmの代わりにyarnを使うこともあります。yarnはFacebookによって開発されたパッケージ管理ツールで、npmよりも高速です。</p>



<pre class="wp-block-code"><code>// Reactをインストールするコマンド
yarn add react
</code></pre>



<h2 class="wp-block-heading"><span id="toc5">2. 開発環境の構築と最適化</span></h2>



<h3 class="wp-block-heading"><span id="toc6">例1: Webpack</span></h3>



<p>Webpackは、JavaScriptやCSS、画像などのアセットを一つのファイルにまとめる（バンドルする）ツールです。これにより、ページの読み込み速度が向上します。</p>



<pre class="wp-block-code"><code>// webpack.config.js
module.exports = {
  // コンフィグ設定
};
</code></pre>



<h3 class="wp-block-heading"><span id="toc7">例2: Babel</span></h3>



<p>Babelは、新しいバージョンのJavaScriptを古いバージョンにトランスパイルするツールです。これにより、古いブラウザでも新しいJavaScriptの機能を使えます。</p>



<pre class="wp-block-code"><code>// .babelrc
{
  "presets": &#91;"@babel/preset-env"]
}
</code></pre>



<h2 class="wp-block-heading"><span id="toc8">3. 開発効率の向上</span></h2>



<h3 class="wp-block-heading"><span id="toc9">例1: ESLint</span></h3>



<p>ESLintは、コードの品質を保つためのリンティングツールです。コードのスタイルや構文に問題がないか自動でチェックします。</p>



<pre class="wp-block-code"><code>// .eslintrc
{
  "rules": {
    "no-console": "off"
  }
}
</code></pre>



<h3 class="wp-block-heading"><span id="toc10">例2: Prettier</span></h3>



<p>Prettierは、コードのフォーマットを自動で整えるツールです。これにより、コードの読みやすさが向上します。</p>



<pre class="wp-block-code"><code>// .prettierrc
{
  "singleQuote": true
}
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc11">まとめ</span></h2>



<p>Node.jsは、フロントエンド開発においても多くの利点を提供します。パッケージ管理の効率化、開発環境の最適化、開発効率の向上など、Node.jsを使うことでフロントエンド開発が格段に楽になります。是非とも、Node.jsをフロントエンド開発に活用してみてください。</p><p>The post <a href="https://aichi.blog/why-nodejs-is-necessary-for-frontend-development/">なぜフロントエンド開発にNode.jsが必要なのか</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>なぜasdfがプログラミング言語のバージョン管理に最適なのか？</title>
		<link>https://aichi.blog/why-asdf-is-best-for-programming-language-version-management/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-asdf-is-best-for-programming-language-version-management</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Fri, 01 Sep 2023 09:52:28 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3186</guid>

					<description><![CDATA[<p>目次 はじめに複数の言語を一括管理：asdfの強みasdfの基本コマンド事前準備：.default-npm-packagesファイルを作成しようこのファイルの役割とは？他のプログラミング言語でも同じような機能がある実際に [&#8230;]</p>
<p>The post <a href="https://aichi.blog/why-asdf-is-best-for-programming-language-version-management/">なぜasdfがプログラミング言語のバージョン管理に最適なのか？</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">複数の言語を一括管理：asdfの強み</a></li><li><a href="#toc3" tabindex="0">asdfの基本コマンド</a></li><li><a href="#toc4" tabindex="0">事前準備：.default-npm-packagesファイルを作成しよう</a><ol><li><a href="#toc5" tabindex="0">このファイルの役割とは？</a></li><li><a href="#toc6" tabindex="0">他のプログラミング言語でも同じような機能がある</a></li></ol></li><li><a href="#toc7" tabindex="0">実際にNode.jsをインストールしてみよう</a></li><li><a href="#toc8" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>プログラミングにおいて、言語のバージョン管理は非常に重要な作業です。特に、複数のプロジェクトを同時に管理する場合、それぞれで必要な言語のバージョンが異なることがよくあります。この記事では、そんな課題を解決する万能ツール<code>asdf</code>について詳しく解説します。</p>



<h2 class="wp-block-heading"><span id="toc2">複数の言語を一括管理：asdfの強み</span></h2>



<ul class="wp-block-list">
<li><strong>プラグイン形式で拡張性が高い</strong>
<ul class="wp-block-list">
<li><code>asdf</code>はプラグイン形式で、Node.jsからRuby、Pythonまで500近くの言語環境をサポートしています。</li>
</ul>
</li>



<li><strong>最新バージョンへの対応が早い</strong>
<ul class="wp-block-list">
<li><code>asdf</code>は各言語の最新バージョンに迅速に対応しています。これにより、常に最新の環境で開発を進めることができます。</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading"><span id="toc3">asdfの基本コマンド</span></h2>



<ul class="wp-block-list">
<li><code>asdf plugin list</code>：インストール済みのプラグイン一覧を表示</li>



<li><code>asdf install &lt;PLUGIN_NAME&gt; &lt;VERSION&gt;</code>：指定したプラグインとバージョンをインストール</li>



<li><code>asdf global &lt;PLUGIN_NAME&gt; &lt;VERSION&gt;</code>：グローバルに使うパッケージのバージョンを設定</li>
</ul>



<h2 class="wp-block-heading"><span id="toc4">事前準備：.default-npm-packagesファイルを作成しよう</span></h2>



<p>次に、<code>asdf</code>でNode.jsをインストールする前に、一つ大事な手続きがあります。それは、ホームディレクトリに<code>.default-npm-packages</code>というファイルを作成することです。このファイルには以下の内容を書き込んでください。</p>



<pre class="wp-block-code"><code># .default-npm-packages ファイルの内容
yarn
typescript
ts-node
typesync
npm-check-updates
</code></pre>



<h3 class="wp-block-heading"><span id="toc5">このファイルの役割とは？</span></h3>



<p>この<code>.default-npm-packages</code>ファイルは、Node.jsの新しいバージョンをインストールする際に、自動的に一緒にインストールされるnpmパッケージを指定できる非常に便利なファイルです。これにより、毎回必要なnpmパッケージを手動でインストールする手間が省けます。</p>



<h3 class="wp-block-heading"><span id="toc6">他のプログラミング言語でも同じような機能がある</span></h3>



<p>RubyやPythonでも、同じような機能が利用できます。Rubyでは<code>.default-gems</code>、Pythonでは<code>.default-python-packages</code>というファイルで、それぞれの言語でデフォルトでインストールしたいパッケージを指定できます。</p>



<h2 class="wp-block-heading"><span id="toc7">実際にNode.jsをインストールしてみよう</span></h2>



<pre class="wp-block-code"><code># 1. Homebrewを使ってasdfをインストール
# Homebrewがインストールされていない場合は、先にそれをインストールしてください。
brew install asdf

# 2. Node.jsのプラグインを追加
# asdfにNode.jsのプラグインを追加します。
asdf plugin add nodejs

# 3. 最新バージョンのNode.jsをインストール
# Node.jsの最新バージョンをインストールします。
asdf install nodejs latest

# 4. グローバルに使うNode.jsのバージョンを設定
# インストールしたNode.jsのバージョンをグローバルで使用するように設定します。
asdf global nodejs latest
</code></pre>



<h2 class="wp-block-heading"><span id="toc8">まとめ</span></h2>



<p><code>asdf</code>はその拡張性と多言語対応により、プログラミング言語のバージョン管理において非常に優れたツールです。特に複数のプロジェクトを管理する開発者にとっては、その効率と便利さは計り知れません。</p><p>The post <a href="https://aichi.blog/why-asdf-is-best-for-programming-language-version-management/">なぜasdfがプログラミング言語のバージョン管理に最適なのか？</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Viteで効率的なReactプロジェクト構築: 高速、多言語対応、簡単設定</title>
		<link>https://aichi.blog/efficient-react-project-setup-with-vite/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=efficient-react-project-setup-with-vite</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Fri, 01 Sep 2023 10:37:22 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[Vite]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3193</guid>

					<description><![CDATA[<p>目次 はじめにViteの特長ViteでのReactプロジェクトの作成手順まとめ はじめに ReactはUI構築に特化したライブラリであり、新規プロジェクトのスケルトンを生成するコマンドが存在しないため、設定が複雑になりが [&#8230;]</p>
<p>The post <a href="https://aichi.blog/efficient-react-project-setup-with-vite/">Viteで効率的なReactプロジェクト構築: 高速、多言語対応、簡単設定</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">Viteの特長</a></li><li><a href="#toc3" tabindex="0">ViteでのReactプロジェクトの作成手順</a></li><li><a href="#toc4" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>ReactはUI構築に特化したライブラリであり、新規プロジェクトのスケルトンを生成するコマンドが存在しないため、設定が複雑になりがちです。そこで、この記事ではReactプロジェクトの構築と運用を効率化するツール、Viteについて詳しく解説します。</p>



<h2 class="wp-block-heading"><span id="toc2">Viteの特長</span></h2>



<ul class="wp-block-list">
<li><strong>速度</strong>: Viteはフランス語で「速い」という意味であり、その名の通り非常に高速です。</li>



<li><strong>多言語対応</strong>: ViteはReactだけでなく、Vue.jsや他のフレームワークにも対応しています。</li>



<li><strong>簡単な設定</strong>: Viteを使用すると、複雑な設定なしでプロジェクトをすぐに始められます。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc3">ViteでのReactプロジェクトの作成手順</span></h2>



<p>① <strong>プロジェクトの作成</strong></p>



<pre class="wp-block-code"><code># ViteでReact&amp;TypeScriptのテンプレートを使用してプロジェクトを作成
yarn create vite hello-world --template=react-ts
</code></pre>



<p>このコマンドで<code>hello-world</code>という名前のプロジェクトが作成され、必要なファイルが配置されます。</p>



<p>② <strong>依存パッケージのインストール</strong></p>



<pre class="wp-block-code"><code># プロジェクトディレクトリに移動
cd hello-world
# 依存パッケージをインストール
yarn install
</code></pre>



<p>これで<code>node_modules/</code>に依存パッケージがインストールされ、<code>yarn.lock</code>にバージョン情報が保存されます。</p>



<p>③ <strong>開発サーバの起動</strong></p>



<pre class="wp-block-code"><code># 開発サーバを起動
yarn dev
</code></pre>



<p>これでローカル環境に開発サーバが起動します。デフォルトでは5173番ポートで立ち上がります。</p>



<h2 class="wp-block-heading"><span id="toc4">まとめ</span></h2>



<p>Viteはその速度と多言語対応、簡単な設定により、Reactプロジェクトの構築と運用を大いに効率化します。特にReactで複数のプロジェクトを管理する開発者にとって、その便利さは計り知れません。</p><p>The post <a href="https://aichi.blog/efficient-react-project-setup-with-vite/">Viteで効率的なReactプロジェクト構築: 高速、多言語対応、簡単設定</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Yarn vs npm: なぜ開発者はYarnを選ぶのか？</title>
		<link>https://aichi.blog/why-developers-choose-yarn-over-npm/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-developers-choose-yarn-over-npm</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Fri, 01 Sep 2023 10:50:44 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[yarn]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3198</guid>

					<description><![CDATA[<p>目次 はじめにYarnが生まれた背景Yarnの特長とその魅力1. バージョン固定機能（yarn.lock）2. 高速なパフォーマンス3. WorkspaceのサポートYarnの使い方：主要なコマンド結論：Yarnはnpm [&#8230;]</p>
<p>The post <a href="https://aichi.blog/why-developers-choose-yarn-over-npm/">Yarn vs npm: なぜ開発者はYarnを選ぶのか？</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">Yarnが生まれた背景</a></li><li><a href="#toc3" tabindex="0">Yarnの特長とその魅力</a><ol><li><a href="#toc4" tabindex="0">1. バージョン固定機能（yarn.lock）</a></li><li><a href="#toc5" tabindex="0">2. 高速なパフォーマンス</a></li><li><a href="#toc6" tabindex="0">3. Workspaceのサポート</a></li></ol></li><li><a href="#toc7" tabindex="0">Yarnの使い方：主要なコマンド</a></li><li><a href="#toc8" tabindex="0">結論：Yarnはnpmの強力な代替品</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>Node.jsの世界では、npm（Node Package Manager）が長い間、唯一無二のパッケージ管理ツールでした。しかし、2016年に登場したYarnは、その新機能と高速性で多くの開発者の心をつかみました。この記事では、Yarnがどれほど魅力的なのか、その特長と利点について詳しく解説します。</p>



<h2 class="wp-block-heading"><span id="toc2">Yarnが生まれた背景</span></h2>



<p>Yarnは、Facebook（現在はMeta）が主導して2016年に公開されました。当時、npmには依存関係の管理が煩雑である、パフォーマンスが遅いなどの問題がありました。Yarnはこれらの問題を解決するために設計され、短期間で多くの開発者に受け入れられました。</p>



<h2 class="wp-block-heading"><span id="toc3">Yarnの特長とその魅力</span></h2>



<h3 class="wp-block-heading"><span id="toc4">1. バージョン固定機能（yarn.lock）</span></h3>



<p>Yarnの一番の特長は、<code>yarn.lock</code>というロックファイルを生成することで、依存パッケージのバージョンを固定する能力です。</p>



<h4 class="wp-block-heading">なぜこれが素晴らしいのか？</h4>



<ul class="wp-block-list">
<li><strong>安定性</strong>: 同じプロジェクトで複数の開発者が作業する場合でも、<code>yarn.lock</code>があれば全員が同じバージョンの依存パッケージを使用することが保証されます。</li>



<li><strong>予測可能性</strong>: バージョンが固定されているため、未知のバグや非互換性の問題を防ぐことができます。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc5">2. 高速なパフォーマンス</span></h3>



<p>Yarnは、npmよりも高速にパッケージをダウンロードとインストールができます。</p>



<h4 class="wp-block-heading">なぜこれが素晴らしいのか？</h4>



<ul class="wp-block-list">
<li><strong>効率性</strong>: 高速なインストールは、開発プロセスをスムーズにし、時間を節約します。</li>



<li><strong>CI/CDの高速化</strong>: 継続的インテグレーションと継続的デリバリー（CI/CD）の速度も向上します。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc6">3. Workspaceのサポート</span></h3>



<p>Yarnは、複数のプロジェクトやパッケージを一つのリポジトリ内で管理する「Workspace」という機能を提供しています。</p>



<h4 class="wp-block-heading">なぜこれが素晴らしいのか？</h4>



<ul class="wp-block-list">
<li><strong>一元管理</strong>: モノリポジトリの管理が容易になります。</li>



<li><strong>依存関係の整合性</strong>: Workspaceを使用すると、プロジェクト間での依存関係が一元管理され、その整合性が保たれます。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc7">Yarnの使い方：主要なコマンド</span></h2>



<p>Yarnは、npmと非常に似たコマンドラインインターフェースを持っていますが、いくつか独自の便利なコマンドもあります。</p>



<ul class="wp-block-list">
<li><code>yarn install</code>: 依存関係を解決し、パッケージをインストールします。</li>



<li><code>yarn add &lt;PACKAGE_NAME&gt;</code>: 新しいパッケージを追加します。</li>



<li><code>yarn remove &lt;PACKAGE_NAME&gt;</code>: 不要なパッケージを削除します。</li>



<li><code>yarn upgrade</code>: 既存のパッケージを最新バージョンにアップグレードします。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc8">結論：Yarnはnpmの強力な代替品</span></h2>



<p>Yarnは、npmに対して多くの優れた特長を持っています。特に、依存関係の管理、高速なパフォーマンス、そしてWorkspaceのサポートは、大規模なプロジェクトやプロフェッショナルな開発環境で非常に役立ちます。どちらのツールを選ぶかは、プロジェクトのニーズやチームの好みによるところが大きいですが、Yarnは多くの面で優れた選択肢と言えるでしょう。</p>



<p>この記事が、Yarnを採用するかどうかを検討している開発者の皆さんにとって、参考になれば幸いです。</p><p>The post <a href="https://aichi.blog/why-developers-choose-yarn-over-npm/">Yarn vs npm: なぜ開発者はYarnを選ぶのか？</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Yarnとnpmのスクリプト管理：package.jsonのscriptsエントリを理解する</title>
		<link>https://aichi.blog/yarn-npm-script-management-package-json/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=yarn-npm-script-management-package-json</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Fri, 01 Sep 2023 10:56:02 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[yarn]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3201</guid>

					<description><![CDATA[<p>目次 はじめにscriptsエントリの基本予約キーワードと特別な挙動フックとしての予約キーワードまとめ参考文献 はじめに 開発プロジェクトでよく使われるパッケージマネージャー、Yarnとnpm。どちらもpackage.j [&#8230;]</p>
<p>The post <a href="https://aichi.blog/yarn-npm-script-management-package-json/">Yarnとnpmのスクリプト管理：package.jsonのscriptsエントリを理解する</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">scriptsエントリの基本</a></li><li><a href="#toc3" tabindex="0">予約キーワードと特別な挙動</a></li><li><a href="#toc4" tabindex="0">フックとしての予約キーワード</a></li><li><a href="#toc5" tabindex="0">まとめ</a></li><li><a href="#toc6" tabindex="0">参考文献</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>開発プロジェクトでよく使われるパッケージマネージャー、Yarnとnpm。どちらも<code>package.json</code>の<code>scripts</code>エントリを活用して、様々なコマンドを簡単に実行できます。この記事では、この<code>scripts</code>エントリがどのように動作するのか、そしてそれがどれだけ便利なのかを詳しく解説します。</p>



<h2 class="wp-block-heading"><span id="toc2">scriptsエントリの基本</span></h2>



<p><code>package.json</code>の中には<code>scripts</code>というエントリがあります。このエントリにコマンドを登録しておくと、Yarnやnpmで簡単にそのコマンドを実行できます。例えば、以下のような設定があった場合、</p>



<pre class="wp-block-code"><code>"scripts": {
  "dev": "vite",
  "build": "tsc &amp;&amp; vite build",
  "preview": "vite preview"
}
</code></pre>



<p>Yarnでは<code>yarn dev</code>、npmでは<code>npm run dev</code>といった形で、<code>vite</code>コマンドが実行されます。</p>



<h2 class="wp-block-heading"><span id="toc3">予約キーワードと特別な挙動</span></h2>



<p><code>scripts</code>エントリには予約キーワードがあり、特別な挙動が設定されています。以下はその例です。</p>



<ul class="wp-block-list">
<li><code>start</code>: 開発用サーバの起動</li>



<li><code>restart</code>: 開発用サーバの再起動</li>



<li><code>stop</code>: 開発用サーバの停止</li>



<li><code>test</code>: テストの実行</li>
</ul>



<p>これらのキーワードは、特定のnpmコマンドや他の<code>scripts</code>エントリの前後で自動的に実行される場合もあります。</p>



<h2 class="wp-block-heading"><span id="toc4">フックとしての予約キーワード</span></h2>



<p>さらに、<code>pre</code>や<code>post</code>をキーワードの前につけることで、特定の処理の前後にスクリプトを実行できます。例えば、</p>



<ul class="wp-block-list">
<li><code>preinstall</code>, <code>postinstall</code>: パッケージインストールの前後</li>



<li><code>preuninstall</code>, <code>postuninstall</code>: パッケージアンインストールの前後</li>



<li><code>prestart</code>, <code>poststart</code>: <code>start</code>スクリプトの前後</li>



<li><code>pretest</code>, <code>posttest</code>: <code>test</code>スクリプトの前後</li>



<li><code>prepare</code>: インストール後の最終処理</li>
</ul>



<p>これらは、開発フローをよりスムーズにするために非常に便利です。</p>



<h2 class="wp-block-heading"><span id="toc5">まとめ</span></h2>



<p><code>package.json</code>の<code>scripts</code>エントリは、Yarnとnpmでプロジェクトを効率よく管理するための強力なツールです。予約キーワードやフックを活用することで、より高度なスクリプト管理が可能になります。この機能を最大限に活用して、開発プロセスを効率化しましょう。</p>



<h2 class="wp-block-heading"><span id="toc6">参考文献</span></h2>



<ul class="wp-block-list">
<li><a href="https://docs.npmjs.com/cli/v8/using-npm/scripts#life-cycle-operation-order">LifeCycleOperationOrder-scripts|npmDocs</a></li>
</ul>



<p>この記事が役立ったと感じたら、ぜひシェアをお願いします！</p><p>The post <a href="https://aichi.blog/yarn-npm-script-management-package-json/">Yarnとnpmのスクリプト管理：package.jsonのscriptsエントリを理解する</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>App Routerの安定とReact Server Componentsの全て</title>
		<link>https://aichi.blog/app-router-stability-and-react-server-components/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=app-router-stability-and-react-server-components</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Sun, 10 Sep 2023 16:06:02 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[next.js]]></category>
		<category><![CDATA[文法]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3249</guid>

					<description><![CDATA[<p>こんにちは。 今回は、Next.js 13.4のアップデートをふまえ、App Routerの安定化とReact Server Componentsの導入に焦点を当て、実践的な利用例を交えながら詳しく見ていきましょう。 目 [&#8230;]</p>
<p>The post <a href="https://aichi.blog/app-router-stability-and-react-server-components/">App Routerの安定とReact Server Componentsの全て</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。</p>



<p>今回は、Next.js 13.4のアップデートをふまえ、App Routerの安定化とReact Server Componentsの導入に焦点を当て、実践的な利用例を交えながら詳しく見ていきましょう。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">App Routerの安定</a></li><li><a href="#toc2" tabindex="0">React Server Componentsの導入</a></li><li><a href="#toc3" tabindex="0">実践的な利用シーン</a><ol><li><a href="#toc4" tabindex="0">動的ルーティングの最適化</a></li><li><a href="#toc5" tabindex="0">サーバーコンポーネントでのデータ取得</a></li></ol></li><li><a href="#toc6" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">App Routerの安定</span></h2>



<p>Next.js 13.4では、App Routerがさらに安定し、ウェブアプリケーションのルーティングをより効率的に行えるようになりました。</p>



<p>以下の例は、新しいルーティングシステムを利用して、特定のページへのナビゲーションを簡素化したものです。</p>



<pre class="wp-block-syntaxhighlighter-code">// pages/_app.js
import { useRouter } from 'next/router'
function MyApp({ Component, pageProps }) {
  const router = useRouter() // useRouterフックを利用
  return (
    &lt;Component {...pageProps} /> // ページコンポーネントにpagePropsを渡す
  )
}
export default MyApp</pre>



<p>このコードでは、<code>useRouter</code>フックを利用してNext.jsのルーティングシステムにアクセスし、ページコンポーネントに<code>pageProps</code>を渡しています。</p>



<p>これにより、アプリケーションのどのページでもルーティング情報に簡単にアクセスできます。</p>



<h2 class="wp-block-heading"><span id="toc2">React Server Componentsの導入</span></h2>



<p>React Server Componentsは、サーバーサイドでレンダリングされる新しいタイプのReactコンポーネントです。</p>



<p>これにより、クライアントサイドのJavaScriptの量を削減しながら、高性能なウェブアプリケーションを構築できます。</p>



<p>以下の例は、サーバーコンポーネントを利用してデータをフェッチする方法を示しています。</p>



<pre class="wp-block-syntaxhighlighter-code">// components/ServerComponent.react.server.js
import { fetchUserData } from '../api/user'
function ServerComponent({ userId }) {
  const data = fetchUserData(userId) // ユーザーデータをフェッチ
  return (
    &lt;div>
      &lt;p>User Name: {data.name}&lt;/p> // ユーザー名を表示
      &lt;p>Email: {data.email}&lt;/p> // メールアドレスを表示
    &lt;/div>
  )
}
export default ServerComponent
</pre>



<p>このコードでは、サーバーコンポーネントを利用してAPIからユーザーデータをフェッチし、そのデータを表示しています。</p>



<p>サーバーコンポーネントは、クライアントサイドのコードを削減し、ページのロード時間を短縮することができます。</p>



<p>このように、App Routerの安定化とReact Server Componentsの導入により、開発者はより高速で効率的なウェブアプリケーションを構築できるようになりました。</p>



<h2 class="wp-block-heading"><span id="toc3">実践的な利用シーン</span></h2>



<p>Next.js 13.4のアップデートを最大限に活用するためには、実際のプロジェクトにどのように取り入れるかを理解することが重要です。</p>



<p>以下、具体的な利用シーンをいくつか挙げてみましょう。</p>



<h3 class="wp-block-heading"><span id="toc4">動的ルーティングの最適化</span></h3>



<p>新しいApp Routerを利用して、動的ルーティングをさらに効率的に行うことが可能です。</p>



<p>例えば、ユーザーごとのプロフィールページを作成する際に、以下のようなコードを利用できます。</p>



<pre class="wp-block-syntaxhighlighter-code">// pages/user/[id].js
import { useRouter } from 'next/router'
function UserProfile() {
  const router = useRouter() // useRouterを利用
  const { id } = router.query // ルートパラメータを取得
  return (
    &lt;div>
      User Profile: {id} // プロフィールページを表示
    &lt;/div>
  )
}
export default UserProfile
</pre>



<p>このコードでは、動的なルートパラメータ<code>id</code>を利用して、ユーザーごとのプロフィールページを簡単に作成できます。</p>



<h3 class="wp-block-heading"><span id="toc5">サーバーコンポーネントでのデータ取得</span></h3>



<p>React Server Componentsを利用して、サーバーサイドでデータを取得し、クライアントサイドでのJavaScriptの量を削減することができます。</p>



<p>以下の例では、サーバーコンポーネントを利用してデータベースからデータを取得しています。</p>



<pre class="wp-block-syntaxhighlighter-code javascript">// components/ServerComponent.react.server.js
import { fetchProductData } from '../api/product'
function ServerComponent({ productId }) {
  const data = fetchProductData(productId) // 商品データをフェッチ
  return (
    &lt;div>
      &lt;p>Product Name: {data.name}&lt;/p> // 商品名を表示
      &lt;p>Price: {data.price}&lt;/p> // 価格を表示
    &lt;/div>
  )
}
export default ServerComponent
</pre>



<p>このコードでは、サーバーコンポーネントを利用してAPIから商品データを取得し、そのデータを表示しています。</p>



<h2 class="wp-block-heading"><span id="toc6">まとめ</span></h2>



<p>App Routerの安定化とReact Server Componentsの導入により、ウェブアプリケーションの開発がさらに効率的かつ高性能になりました。</p>



<p>今回の記事で紹介した具体的な利用シーンを参考にして、あなたのプロジェクトにNext.js 13.4の新機能を取り入れてみてください。</p>



<h4 class="wp-block-heading">参考文献</h4>



<p><a href="https://nextjs.org/docs">Next.jsのドキュメント</a></p>



<p><a href="https://nextjs.org/docs/getting-started/react-essentials">Next.js Reactの要点</a></p>



<p><a href="https://legacy.reactjs.org/blog/2020/12/21/data-fetching-with-react-server-components.html">ゼロバンドルサイズのReactサーバーコンポーネント</a></p>



<figure class="wp-block-embed is-type-rich is-provider-amazon wp-block-embed-amazon"><div class="wp-block-embed__wrapper">
<iframe title="TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発" type="text/html" width="1276" height="550" frameborder="0" allowfullscreen style="max-width:100%" src="https://read.amazon.com.au/kp/card?preview=inline&#038;linkCode=ll1&#038;ref_=k4w_oembed_a2fzWlkUtwfweo&#038;asin=B0B74C3TNQ&#038;tag=shinzo10100d-22"></iframe>
</div></figure>



<p></p><p>The post <a href="https://aichi.blog/app-router-stability-and-react-server-components/">App Routerの安定とReact Server Componentsの全て</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Next.js 13の新ディレクティブ解析: 「use client」 と 「use server」 の使い方</title>
		<link>https://aichi.blog/nextjs-13-directives-use-client-use-server/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nextjs-13-directives-use-client-use-server</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Sat, 16 Sep 2023 06:56:54 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[next.js]]></category>
		<category><![CDATA[文法]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3281</guid>

					<description><![CDATA[<p>こんにちは。 今日はNext.js 13の新ディレクティブ解析における、「use client」と「use server」の使い方について深掘りしていきます。 Next.js 13は、Reactフレームワークの最新バージ [&#8230;]</p>
<p>The post <a href="https://aichi.blog/nextjs-13-directives-use-client-use-server/">Next.js 13の新ディレクティブ解析: 「use client」 と 「use server」 の使い方</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。</p>



<p>今日はNext.js 13の新ディレクティブ解析における、「use client」と「use server」の使い方について深掘りしていきます。</p>



<p>Next.js 13は、Reactフレームワークの最新バージョンであり、これによりサーバーサイドとクライアントサイドのレンダリングを更に効果的に行えるようになりました。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">1. 「use server」ディレクティブの基本的な使い方</a></li><li><a href="#toc2" tabindex="0">2. 「use client」ディレクティブの基本的な使い方</a></li><li><a href="#toc3" tabindex="0">3. 「use server」と「use client」の組み合わせ</a></li><li><a href="#toc4" tabindex="0">4. さらなる応用: 条件付きレンダリングとエラーハンドリング</a></li><li><a href="#toc5" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">1. 「use server」ディレクティブの基本的な使い方</span></h2>



<p>まずは「use server」ディレクティブから見ていきましょう。このディレクティブは、サーバーサイドでのみ実行されるコードを指定するために使用されます。</p>



<p>具体例1: データフェッチング</p>



<pre class="wp-block-syntaxhighlighter-code">import { useServer } from 'next/directives'
export default function ServerComponent() {
  useServer();
  // サーバーサイドでデータをフェッチする
  const data = fetchDataFromServer(); // fetchDataFromServerは外部APIからデータを取得する関数
  return &lt;div>{data}&lt;/div>;
}
</pre>



<p>このコードでは、<code>useServer</code>ディレクティブを使用して、サーバーサイドでデータをフェッチする処理を行っています。<code>fetchDataFromServer</code>関数は外部APIからデータを取得する関数としています。</p>



<h2 class="wp-block-heading"><span id="toc2">2. 「use client」ディレクティブの基本的な使い方</span></h2>



<p>次に、「use client」ディレクティブを見ていきましょう。このディレクティブは、クライアントサイドでのみ実行されるコードを指定するために使用されます。</p>



<p>具体例2: クライアントサイドでの状態管理</p>



<pre class="wp-block-syntaxhighlighter-code">import { useClient } from 'next/directives'
import { useState } from 'react';
export default function ClientComponent() {
  useClient();
  // クライアントサイドで状態を管理する
  const [count, setCount] = useState(0);
  return (
    &lt;div>
      &lt;p>Count: {count}&lt;/p>
      &lt;button onClick={() => setCount(count + 1)}>Increment&lt;/button>
    &lt;/div>
  );
}
</pre>



<p>このコードでは、「use client」ディレクティブを使用してクライアントサイドで状態管理を行っています。useStateフックを使用してカウント状態を管理し、ボタンをクリックすることでカウントを増加させる処理を行っています。</p>



<p>以上で、「use server」と「use client」ディレクティブの基本的な使い方について説明しました。次に、これらのディレクティブを組み合わせて使用する方法について見ていきましょう。</p>



<h2 class="wp-block-heading"><span id="toc3">3. 「use server」と「use client」の組み合わせ</span></h2>



<p>Next.js 13では、「use server」と「use client」ディレクティブを組み合わせて使用することで、サーバーサイドとクライアントサイドの両方で動作する高度なコンポーネントを作成することが可能になりました。</p>



<p>ここでは、その組み合わせ方について具体的な例を挙げて説明します。</p>



<p>具体例3: サーバーサイドとクライアントサイドのハイブリッドコンポーネント</p>



<pre class="wp-block-syntaxhighlighter-code">import { useServer, useClient } from 'next/directives'
import { useState, useEffect } from 'react';
export default function HybridComponent() {
  const [data, setData] = useState(null);
  useServer(() => {
    // サーバーサイドでデータをフェッチする
    const serverData = fetchDataFromServer(); // fetchDataFromServerは外部APIからデータを取得する関数
    setData(serverData);
  });
  useClient(() => {
    // クライアントサイドでデータをフェッチする
    useEffect(() => {
      const fetchData = async () => {
        const clientData = await fetchClientData(); // fetchClientDataはクライアントサイドでデータを取得する関数
        setData(clientData);
      };
      fetchData();
    }, []);
  });
  return &lt;div>{data}&lt;/div>;
}
</pre>



<p>このコードでは、「use server」と「use client」ディレクティブを組み合わせて、サーバーサイドとクライアントサイドの両方でデータをフェッチするハイブリッドコンポーネントを作成しています。</p>



<p>サーバーサイドでは<code>fetchDataFromServer</code>関数を使用してデータをフェッチし、クライアントサイドでは<code>useEffect</code>フック内で<code>fetchClientData</code>関数を使用してデータをフェッチしています。</p>



<p>このように、「use server」と「use client」ディレクティブを組み合わせることで、サーバーサイドとクライアントサイドの両方で動作する高度なコンポーネントを作成することができます。</p>



<h2 class="wp-block-heading"><span id="toc4">4. さらなる応用: 条件付きレンダリングとエラーハンドリング</span></h2>



<p>Next.js 13の「use server」および「use client」ディレクティブを利用することで、条件付きレンダリングやエラーハンドリングも効果的に行うことが可能です。</p>



<p>ここでは、それらの応用例をいくつか挙げてみましょう。</p>



<p>具体例4: 条件付きレンダリング</p>



<pre class="wp-block-syntaxhighlighter-code">import { useServer, useClient } from 'next/directives'
import { useState } from 'react';
export default function ConditionalRenderingComponent() {
  const [isServer, setIsServer] = useState(false);
  useServer(() => {
    setIsServer(true);
  });
  useClient(() => {
    setIsServer(false);
  });
  return (
    &lt;div>
      {isServer ? &lt;p>サーバーサイドでレンダリングされました&lt;/p> : &lt;p>クライアントサイドでレンダリングされました&lt;/p>}
    &lt;/div>
  );
}
</pre>



<p>このコードでは、<code>useServer</code>と<code>useClient</code>ディレクティブを使用して、どちらのサイドでレンダリングが行われたかを示すメッセージを条件付きで表示しています。</p>



<p>これにより、レンダリングの挙動を視覚的に確認することができます。</p>



<p>具体例5: エラーハンドリング</p>



<pre class="wp-block-syntaxhighlighter-code">import { useServer } from 'next/directives'
import { useState } from 'react';
export default function ErrorHandlingComponent() {
  const [data, setData] = useState(null);
  const [error, setError] = useState(null);
  useServer(() => {
    try {
      // サーバーサイドでデータをフェッチする
      const serverData = fetchDataFromServer(); // fetchDataFromServerは外部APIからデータを取得する関数
      setData(serverData);
    } catch (err) {
      setError('データの取得に失敗しました');
    }
  });
  return (
    &lt;div>
      {error ? &lt;p>Error: {error}&lt;/p> : &lt;p>Data: {data}&lt;/p>}
    &lt;/div>
  );
}
</pre>



<p>このコードでは、「use server」ディレクティブを使用してサーバーサイドでデータをフェッチする際にエラーハンドリングを行っています。</p>



<p>データの取得に失敗した場合は、エラーメッセージを表示します。</p>



<h2 class="wp-block-heading"><span id="toc5">まとめ</span></h2>



<p>Next.js 13の「use server」と「use client」ディレクティブは、サーバーサイドとクライアントサイドのレンダリングを効果的に制御する強力なツールです。これにより、パフォーマンスの向上やコードの整理が容易になります。</p>



<p>今回は基本的な使い方から、サーバーとクライアントを組み合わせた高度な使い方などを解説しました。</p>



<p>Next.js 13を使用することで、あなたのウェブアプリケーション開発がさらに効率的になれば幸いです。</p>



<h4 class="wp-block-heading">参考文献</h4>



<p><a href="https://nextjs.org/docs">Next.jsのドキュメント</a></p>



<p><a href="https://nextjs.org/docs/getting-started/react-essentials">Next.js Reactの要点</a></p>



<p><a href="https://legacy.reactjs.org/blog/2020/12/21/data-fetching-with-react-server-components.html">ゼロバンドルサイズのReactサーバーコンポーネント</a></p>



<figure class="wp-block-embed is-type-rich is-provider-amazon wp-block-embed-amazon"><div class="wp-block-embed__wrapper">
<iframe title="TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発" type="text/html" width="1276" height="550" frameborder="0" allowfullscreen style="max-width:100%" src="https://read.amazon.com.au/kp/card?preview=inline&#038;linkCode=ll1&#038;ref_=k4w_oembed_vq8MuzOAJYkYaI&#038;asin=B0B74C3TNQ&#038;tag=shinzo10100d-22"></iframe>
</div></figure><p>The post <a href="https://aichi.blog/nextjs-13-directives-use-client-use-server/">Next.js 13の新ディレクティブ解析: 「use client」 と 「use server」 の使い方</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>サーバーコンポーネントがデフォルトに！　3つの具体例で見るメリット</title>
		<link>https://aichi.blog/server-components-default-benefits/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=server-components-default-benefits</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Mon, 18 Sep 2023 14:12:47 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[next.js]]></category>
		<category><![CDATA[文法]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3291</guid>

					<description><![CDATA[<p>こんにちは。 今回は、Next.js 13の最新アップデートに焦点を当て、サーバーコンポーネントがデフォルトになったことについて深掘りしていきます。 この変更がどのように開発者の生活を変えるのか、具体的なコードとともに解 [&#8230;]</p>
<p>The post <a href="https://aichi.blog/server-components-default-benefits/">サーバーコンポーネントがデフォルトに！　3つの具体例で見るメリット</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。</p>



<p>今回は、Next.js 13の最新アップデートに焦点を当て、サーバーコンポーネントがデフォルトになったことについて深掘りしていきます。</p>



<p>この変更がどのように開発者の生活を変えるのか、具体的なコードとともに解説していきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-18" checked><label class="toc-title" for="toc-checkbox-18">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">具体例1 : データフェッチングの最適化</a></li><li><a href="#toc2" tabindex="0">具体例2 : サーバーサイドレンダリング(SSR)の効率向上</a></li><li><a href="#toc3" tabindex="0">具体例3: ダイナミックルーティングの最適化</a></li><li><a href="#toc4" tabindex="0">まとめ : Next.js 13のサーバーコンポーネントがもたらす革新</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">具体例1 : データフェッチングの最適化</span></h2>



<p>Next.js 13では、サーバーコンポーネントを利用することで、データフェッチングをより効率的に行うことが可能になりました。</p>



<p>以下のコードは、サーバーコンポーネントを利用してデータをフェッチするシンプルな例です。</p>



<pre class="wp-block-syntaxhighlighter-code">// pages/ServerComponent.jsx
import { useState, useEffect } from 'react';
function ServerComponent() {
  const [data, setData] = useState(null);
  useEffect(() => {
    // サーバーからデータをフェッチする
    fetch('/api/data')
      .then(response => response.json())
      .then(data => setData(data));
  }, []);
  if (!data) {
    return &lt;div>Loading...&lt;/div>;
  }
  return &lt;div>Data: {JSON.stringify(data)}&lt;/div>;
}
export default ServerComponent;
</pre>



<p>このコードでは、<code>useEffect</code> フックを使用してコンポーネントがマウントされた時にデータをフェッチしています。</p>



<p>サーバーコンポーネントの導入により、データフェッチングが簡単かつ効率的に行えるようになりました。</p>



<h2 class="wp-block-heading"><span id="toc2">具体例2 : サーバーサイドレンダリング(SSR)の効率向上</span></h2>



<p>Next.js 13のサーバーコンポーネントは、サーバーサイドレンダリング(SSR)の効率を向上させることが可能です。</p>



<p>以下のコードは、サーバーコンポーネントを利用してSSRを行う例です。</p>



<pre class="wp-block-syntaxhighlighter-code">// pages/SSRComponent.jsx
import { getServerSideProps } from 'next';
function SSRComponent({ data }) {
  return &lt;div>Data: {JSON.stringify(data)}&lt;/div>;
}
export async function getServerSideProps(context) {
  const response = await fetch('&lt;https://api.example.com/data>');
  const data = await response.json();
  return {
    props: {
      data,
    },
  };
}
export default SSRComponent;
</pre>



<p>このコードでは、<code>getServerSideProps</code>関数を使用してサーバーサイドでデータをフェッチし、そのデータをコンポーネントに渡しています。</p>



<p>これにより、ページのロード時間を短縮し、ユーザー体験を向上させることが可能です。</p>



<h2 class="wp-block-heading"><span id="toc3">具体例3: ダイナミックルーティングの最適化</span></h2>



<p>Next.js 13のサーバーコンポーネントを利用することで、ダイナミックルーティングも一層効率的に行えるようになりました。</p>



<p>以下のコードは、サーバーコンポーネントを利用してダイナミックルーティングを行う例です。</p>



<pre class="wp-block-syntaxhighlighter-code">// pages/posts/[id].jsx
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
function Post() {
  const router = useRouter();
  const { id } = router.query;
  const [data, setData] = useState(null);
  useEffect(() => {
    if (id) {
      // IDに基づいてデータをフェッチする
      fetch(`/api/posts/${id}`)
        .then(response => response.json())
        .then(data => setData(data));
    }
  }, [id]);
  if (!data) {
    return &lt;div>Loading...&lt;/div>;
  }
  return &lt;div>Post ID: {id}, Data: {JSON.stringify(data)}&lt;/div>;
}
export default Post;
</pre>



<p>このコードでは、<code>useRouter</code> フックを使用してルーティングのパラメータを取得し、そのパラメータを基にデータをフェッチしています。</p>



<p>これにより、ダイナミックルーティングを行う際のコードが簡潔になり、開発効率が向上します。</p>



<h2 class="wp-block-heading"><span id="toc4">まとめ : Next.js 13のサーバーコンポーネントがもたらす革新</span></h2>



<p>Next.js 13のアップデートにより、サーバーコンポーネントがデフォルトとなりました。</p>



<p>これにより、データフェッチング、サーバーサイドレンダリング(SSR)、ダイナミックルーティングといった機能が一層効率的に行えるようになりました。</p>



<p>今回の記事では、Next.js 13のサーバーコンポーネントの利点を3つの具体例を通じて解説しました。</p>



<p>Next.js 13のアップデートを活用して、より高品質なウェブアプリケーションの開発を行いましょう！</p>



<h4 class="wp-block-heading">参考文献</h4>



<p><a href="https://nextjs.org/docs">Next.jsのドキュメント</a></p>



<p><a href="https://nextjs.org/docs/getting-started/react-essentials">Next.js Reactの要点</a></p>



<p><a href="https://legacy.reactjs.org/blog/2020/12/21/data-fetching-with-react-server-components.html">ゼロバンドルサイズのReactサーバーコンポーネント</a></p>



<figure class="wp-block-embed is-type-rich is-provider-amazon wp-block-embed-amazon"><div class="wp-block-embed__wrapper">
<iframe title="TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発" type="text/html" width="1276" height="550" frameborder="0" allowfullscreen style="max-width:100%" src="https://read.amazon.com.au/kp/card?preview=inline&#038;linkCode=ll1&#038;ref_=k4w_oembed_NfbZi8EvaIP0Gp&#038;asin=B0B74C3TNQ&#038;tag=shinzo10100d-22"></iframe>
</div></figure><p>The post <a href="https://aichi.blog/server-components-default-benefits/">サーバーコンポーネントがデフォルトに！　3つの具体例で見るメリット</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>サーバーとクライアントコンポーネントの高度な相互運用性を徹底解説</title>
		<link>https://aichi.blog/server-client-components-interoperability/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=server-client-components-interoperability</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Mon, 18 Sep 2023 14:33:45 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[next.js]]></category>
		<category><![CDATA[文法]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3295</guid>

					<description><![CDATA[<p>こんにちは。 Next.jsの最新アップデート、バージョン13がリリースされましたね。今回は、この新バージョンにおけるサーバーとクライアントコンポーネントの高度な相互運用性に焦点を当てて、その特徴と利用方法を深堀りしてい [&#8230;]</p>
<p>The post <a href="https://aichi.blog/server-client-components-interoperability/">サーバーとクライアントコンポーネントの高度な相互運用性を徹底解説</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。</p>



<p>Next.jsの最新アップデート、バージョン13がリリースされましたね。今回は、この新バージョンにおけるサーバーとクライアントコンポーネントの高度な相互運用性に焦点を当てて、その特徴と利用方法を深堀りしていきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-20" checked><label class="toc-title" for="toc-checkbox-20">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">1. サーバーコンポーネントとクライアントコンポーネントの基本</a><ol><li><a href="#toc2" tabindex="0">具体例1: サーバーコンポーネントの利用</a></li></ol></li><li><a href="#toc3" tabindex="0">2. サーバーとクライアントコンポーネントの相互運用性</a><ol><li><a href="#toc4" tabindex="0">具体例2: クライアントコンポーネントの利用</a></li></ol></li><li><a href="#toc5" tabindex="0">3. サーバーとクライアントコンポーネントの組み合わせ</a><ol><li><a href="#toc6" tabindex="0">具体例3: サーバーとクライアントコンポーネントの組み合わせ</a></li></ol></li><li><a href="#toc7" tabindex="0">4. Next.js 13の新機能を利用した最適化のポイント</a></li><li><a href="#toc8" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">1. サーバーコンポーネントとクライアントコンポーネントの基本</span></h2>



<p>まずは基本から。</p>



<p>Next.js 13では、サーバーコンポーネントとクライアントコンポーネントが更に密接に連携できるようになりました。</p>



<p>これにより、開発者はサーバーサイドとクライアントサイドの最適なバランスを取りながら、高性能なウェブアプリケーションを構築できます。</p>



<h3 class="wp-block-heading"><span id="toc2">具体例1: サーバーコンポーネントの利用</span></h3>



<pre class="wp-block-syntaxhighlighter-code">// server/Profile.js
import { useUser } from '../lib/hooks';
function Profile() {
  const user = useUser();
  return &lt;div>{user ? user.name : 'Loading...'}&lt;/div>;
}
export default Profile;
</pre>



<p>上記のコードはサーバーコンポーネントを示しています。</p>



<p><code>useUser</code>フックを利用してユーザー情報を取得し、ユーザー名を表示しています。</p>



<p>サーバーコンポーネントはサーバーサイドでのみ実行されるため、クライアントサイドのバンドルには含まれません。</p>



<h2 class="wp-block-heading"><span id="toc3">2. サーバーとクライアントコンポーネントの相互運用性</span></h2>



<p>Next.js 13では、サーバーとクライアントコンポーネントの相互運用性が向上しています。</p>



<p>これにより、一部のコンポーネントをサーバーサイドで実行しながら、他のコンポーネントをクライアントサイドで実行することが可能になりました。</p>



<h3 class="wp-block-heading"><span id="toc4">具体例2: クライアントコンポーネントの利用</span></h3>



<pre class="wp-block-syntaxhighlighter-code">// client/Counter.js
import { useState } from 'react';
function Counter() {
  const [count, setCount] = useState(0);
  return (
    &lt;div>
      Count: {count}
      &lt;button onClick={() => setCount(count + 1)}>Increment&lt;/button>
    &lt;/div>
  );
}
export default Counter;
</pre>



<p>上記のコードはクライアントコンポーネントを示しており、状態を持つカウンターを実装しています。</p>



<p>このコンポーネントはクライアントサイドで実行され、ユーザーがボタンをクリックするたびにカウントが増加します。</p>



<p>ここまでがNext.js 13の新機能に関する基本的な解説となります。</p>



<p>次に、これらのコンポーネントを組み合わせて一緒に利用する方法について解説していきます。続きを書いてと言っていただければ幸いです。</p>



<h2 class="wp-block-heading"><span id="toc5">3. サーバーとクライアントコンポーネントの組み合わせ</span></h2>



<p>Next.js 13では、サーバーとクライアントコンポーネントを組み合わせて利用することで、更に効率的なウェブアプリケーションの開発が可能になりました。</p>



<p>それでは、サーバーとクライアントコンポーネントを組み合わせた具体的な例を見ていきましょう。</p>



<h3 class="wp-block-heading"><span id="toc6">具体例3: サーバーとクライアントコンポーネントの組み合わせ</span></h3>



<pre class="wp-block-syntaxhighlighter-code">// pages/Index.js
import Profile from '../server/Profile';
import Counter from '../client/Counter';
function IndexPage() {
  return (
    &lt;div>
      &lt;Profile />
      &lt;Counter />
    &lt;/div>
  );
}
export default IndexPage;
</pre>



<p>上記のコードは、サーバーとクライアントコンポーネントを組み合わせて利用する例を示しています。</p>



<p><code>IndexPage</code>コンポーネント内で、<code>Profile</code>と<code>Counter</code>コンポーネントをインポートして利用しています。</p>



<p>これにより、ユーザープロフィールの表示とカウンター機能を同一ページ内で効率的に実装できます。</p>



<h2 class="wp-block-heading"><span id="toc7">4. Next.js 13の新機能を利用した最適化のポイント</span></h2>



<p>Next.js 13のこの新機能を利用することで、ウェブアプリケーションのパフォーマンス最適化や開発効率の向上が期待できます。</p>



<p>以下のポイントで、その利点を最大限に引き出すことが可能です。</p>



<ol class="wp-block-list">
<li><strong>コード分割</strong>: サーバーとクライアントコンポーネントを適切に分割することで、コードベースが整理され、メンテナンスが容易になります。</li>



<li><strong>パフォーマンス最適化</strong>: サーバーコンポーネントはクライアントバンドルに含まれないため、クライアントサイドのパフォーマンスが向上します。</li>



<li><strong>セキュリティ向上</strong>: サーバーコンポーネントを利用することで、セキュリティのリスクを減らすことが可能です。</li>
</ol>



<h2 class="wp-block-heading"><span id="toc8">まとめ</span></h2>



<p>以上がNext.js 13の新機能に関する解説となります。この新機能を利用することで、Next.jsでのウェブアプリケーション開発が更にパワフルかつ効率的になります。</p>



<p>Next.js 13の新機能を活用して、素晴らしいウェブアプリケーションを開発してください！</p>



<p>また次の記事でお会いしましょう！</p><p>The post <a href="https://aichi.blog/server-client-components-interoperability/">サーバーとクライアントコンポーネントの高度な相互運用性を徹底解説</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
