<?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>Web開発 | ビズドットオンライン</title>
	<atom:link href="https://it-biz.online/tag/web%E9%96%8B%E7%99%BA/feed/" rel="self" type="application/rss+xml" />
	<link>https://it-biz.online</link>
	<description></description>
	<lastBuildDate>Wed, 07 May 2025 02:01:13 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://it-biz.online/wp-content/uploads/2019/10/cropped-4a332f05ade4ac7bb3c46c472cb5eac8-32x32.png</url>
	<title>Web開発 | ビズドットオンライン</title>
	<link>https://it-biz.online</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【JavaScript】関数：functionの使い方とコツを３分でわかりやすく</title>
		<link>https://it-biz.online/web-design/function/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Tue, 28 Jan 2020 12:00:00 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WEBデザイン]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=3439</guid>

					<description><![CDATA[関数とは特定のタスクを実行するためのコードのまとまりで、必要に応じて何度でも再利用できる部品のこと。関数を使用することで、コードの重複を避け、プログラムをより読みやすく、保守しやすいものにすることができます。 この記事で [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>関数とは特定のタスクを実行するためのコードのまとまりで、必要に応じて何度でも再利用できる<strong>部品</strong>のこと。関数を使用することで、コードの重複を避け、プログラムをより読みやすく、保守しやすいものにすることができます。</p>



<figure class="wp-block-image aligncenter is-resized"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2020/01/image-47.png" alt="JavaScript 関数" style="aspect-ratio:1.7020408163265306;width:519px;height:auto"/><figcaption class="wp-element-caption">図1：関数のイメージ</figcaption></figure>



<p>この記事では、<strong>①JavaScriptで関数を定義する方法</strong>、<strong>②関数に情報（引数）を渡す方法</strong>、<strong>③関数から結果（戻り値）を受け取る方法</strong>を、初心者でも理解しやすいように順を追って１から解説します。</p>



<p class="has-text-align-center"><span class="badge-blue">サンプルコード</span>　<strong>JavaScriptの関数の基本</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 2つの数値を受け取り、それらの和を返す関数
function add(a, b) {
    return a + b;
}

// 関数の使用例
let sum = add(5, 3);
console.log(sum); // 出力: 8</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>実際のプログラミングで関数がどのように役立つかについて、具体的な使用例を通じて紹介します。</p>
</div></div>



<div class="wp-block-cocoon-blocks-label-box-1 label-box block-box cocoon-block-label-box"><div class="label-box-label block-box-label box-label"><span class="label-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="label-box-content block-box-content box-content">
<ul class="wp-block-list">
<li>JavaScriptにおける「function（関数）」とは何か？</li>



<li>function（関数）の定義方法と呼び出し方</li>



<li>function（関数）とのパラメータのやり取りについて</li>



<li>関数のスコープについて―ローカル変数と外部変数</li>
</ul>
</div></div>



<p>Webエンジニア/Webデザイナーを目指す方であれば<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つ</span></strong>です。是非最後までご覧ください。</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">JavaScript：関数の基本</a><ol><li><a href="#toc2" tabindex="0">関数とは？</a></li></ol></li><li><a href="#toc3" tabindex="0">JavaScript：関数宣言（function）</a><ol><li><a href="#toc4" tabindex="0">パターン１：関数宣言（Function Declarations）</a></li><li><a href="#toc5" tabindex="0">パターン２：関数式（Function Expressions）</a></li></ol></li><li><a href="#toc6" tabindex="0">JavaScript：関数の呼び出し・実行</a><ol><li><a href="#toc7" tabindex="0">パターン１：基本的な関数の呼び出し</a></li><li><a href="#toc8" tabindex="0">パターン２：引数を複数持つ関数の呼び出し</a></li><li><a href="#toc9" tabindex="0">パターン３：関数を変数に割り当ててから呼び出す</a></li><li><a href="#toc10" tabindex="0">パターン４：コールバック関数としての関数の呼び出し</a></li></ol></li><li><a href="#toc11" tabindex="0">JavaScript：関数を利用する際の注意点</a><ol><li><a href="#toc12" tabindex="0">1. スコープの理解</a></li><li><a href="#toc13" tabindex="0">2. 巻き上げ（Hoisting）</a></li><li><a href="#toc14" tabindex="0">3. 再帰関数の使用</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">JavaScript：関数の基本</span></h2>



<p>関数はプログラミングにおいて非常に重要な概念です。関数は特定のタスクを実行するコードの集まり（<strong>＝部品</strong>）であり、コードの再利用性を高めつつプログラムの構造を明確にし保守を容易にする役割があります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>はじめに関数の基本的な概念についておさらいしておきます。<strong><span class="marker-under">「関数」の基礎理解はある！という方はこの章は読み飛ばしてください。</span></strong></p>
</div></div>



<h3 class="wp-block-heading"><span id="toc2">関数とは？</span></h3>



<p><strong>関数とは一連の処理をまとめたコードのブロック（＝部品）</strong>です。関数を使うことで、同じコードを何度も書く必要がなくなり、コードの重複を避けることができます。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/it-skills/function-abc/">プログラミングにおける「関数」とは？</a></p>



<p>例えば、１つの「メッセージを表示」させたり「ポップアップ」を表示させたり「日付を計算したり」という共通的な処理については、１つの機能の中で何度も登場します。このとき、毎回同じコードを都度記述していくのは大変です。そんなときに予め関数を定義しておいて、必要なタイミングでその関数を呼び出すような形にすることで、必要最低限のコード分量で開発が完了します。</p>



<figure class="wp-block-image aligncenter is-resized"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2020/01/image-47.png" alt="JavaScript 関数" style="aspect-ratio:1.7020408163265306;width:519px;height:auto"/><figcaption class="wp-element-caption">（再掲）：関数のイメージ</figcaption></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>関数を使用することで、プログラムを小さな単位に分割し、各部分を独立させることが可能になります。</p>
</div></div>



<p class="has-text-align-center"><span class="badge-green">ポイント</span>　<strong>関数を利用するメリット</strong></p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li><strong>再利用性</strong>
<ul class="wp-block-list">
<li>一度定義した関数は、プログラムのどこからでも何度でも呼び出すことができる。</li>
</ul>
</li>



<li><strong>構造化</strong>
<ul class="wp-block-list">
<li>関数を使用することで、コードを小さな単位に分割し、プログラムの構造を明確にすることができる。</li>
</ul>
</li>



<li><strong>保守性の向上</strong>
<ul class="wp-block-list">
<li>プログラムを関数に分割することで、特定の機能を修正する際に影響を受ける範囲を限定し、保守性を向上させることができます。</li>
</ul>
</li>
</ol>



<p>関数はJavaScriptプログラミングの基礎を形成し、効率的で読みやすいコードを書くために必要不可欠。ここからは本編、関数の定義方法について詳しくご説明します。。</p>



<h2 class="wp-block-heading"><span id="toc3">JavaScript：関数宣言（function）</span></h2>



<p>JavaScriptにおける関数の定義方法は主に2つあります。<br>→<strong>①関数宣言（Function Declarations）</strong>と<strong>②関数式（Function Expressions）</strong>。</p>



<p>この章では、これらの定義方法をそれぞれサンプルコード付きで解説します。関数の呼び出し方も紹介します。</p>



<h3 class="wp-block-heading"><span id="toc4">パターン１：関数宣言（Function Declarations）</span></h3>



<p>この方法はJavaScriptにおける最も基本的な関数の定義方法です。この方法で関数を定義すると、<strong>関数名</strong>を指定してコードブロックをグループ化→その関数名を使っていつでもそのコードブロックを実行できるようになります。関数宣言は<code><span class="bold-blue">function</span></code>キーワードで始まり、以下の要素で構成されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function functionName(parameters) {
    // 関数の本体
    // ここに実行するコードを記述します
}</pre>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li><strong><code><span class="bold-blue">function</span></code></strong>
<ul class="wp-block-list">
<li>このキーワードは、JavaScriptにおいて関数を定義する際に使用。<br>→関数を定義しますよ！という意味だと理解すればOK。</li>
</ul>
</li>



<li><strong><code><span class="bold-blue">functionName</span></code></strong>
<ul class="wp-block-list">
<li><strong>関数名</strong>。この名前を使って後から関数を呼び出せます。（呼び出し方は後述）</li>
</ul>
</li>



<li><strong><code><span class="bold-blue">parameters</span></code></strong>
<ul class="wp-block-list">
<li>関数に渡される引数のリスト。引数はコンマ(,)で区切られます。関数に引数が必要ない場合は、このカッコは空にする。</li>
</ul>
</li>



<li><strong><span class="bold-green">関数の本体</span></strong>
<ul class="wp-block-list">
<li>中括弧<code>{}</code>で囲まれた部分。この中には、関数が呼び出されたときに実行されるコードが含まれます。</li>
</ul>
</li>
</ol>



<p class="has-text-align-center"><span class="badge-blue">サンプルコード</span>　<strong>関数宣言と呼び出し</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 2つの数値を受け取り、その和を返す関数
function add(a, b) {
    return a + b;
}

// 関数の呼び出し
const sum = add(5, 7);
console.log(sum); // 出力: 12</pre>



<p>↑の例では、<code><span class="bold-blue">add</span></code>という関数が定義されています。この関数は2つの<strong>引数</strong><code>a</code>と<code>b</code>を受け取りその和を返します。関数を呼び出すときは、関数名<code>add</code>の後にカッコを付けその中に引数<code>5</code>と<code>7</code>を渡します。そして、この関数は2つの引数の和<code>12</code>を返し、それが変数<code>sum</code>に格納され、最後にコンソールに出力されます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここで、関数の基本である「引数」と「戻り値」について解説します。</p>
</div></div>



<h4 class="wp-block-heading">引数（Parameters）</h4>



<p>引数（またはパラメータ）は<strong><span class="marker-under">関数に渡される情報</span></strong>であり、関数がその操作を行うために必要なデータです。引数は関数の定義部分にリストされ、関数が呼び出される際に実際の値（引数値またはアーギュメント）として渡されます。</p>



<ul class="wp-block-list">
<li><strong>定義時の引数（パラメータ）</strong>：関数定義においてカッコ<code>()</code>内に指定される変数。これにより、関数は外部からのデータを受け取ることができる。</li>



<li><strong>呼び出し時の引数（アーギュメント）</strong>：関数が実行される際に関数に渡される具体的な値。</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function sample() {
    //処理
    return 式
}</pre>



<h4 class="wp-block-heading">戻り値（Return Value）</h4>



<p>戻り値は、<strong><span class="marker-under">関数がその処理を完了した後に「返す」データ</span></strong>です。<code>return</code>文を使用して関数から値を返すことができます。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img fetchpriority="high" decoding="async" width="595" height="315" src="https://it-biz.online/wp-content/uploads/2024/02/image-13.png" alt="関数の引数と戻り値" class="wp-image-8883" style="width:595px;height:auto" srcset="https://it-biz.online/wp-content/uploads/2024/02/image-13.png 595w, https://it-biz.online/wp-content/uploads/2024/02/image-13-500x265.png 500w, https://it-biz.online/wp-content/uploads/2024/02/image-13-300x159.png 300w" sizes="(max-width: 595px) 100vw, 595px" /><figcaption class="wp-element-caption">図2：関数の引数と戻り値</figcaption></figure>



<p class="has-text-align-center"><span class="badge-blue">サンプルコード</span>　<strong>引数と戻り値</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 引数として2つの数値を受け取り、その和を戻り値として返す関数
function add(a, b) {
    return a + b;
}

// 関数を呼び出し、引数に5と7を渡す
const sum = add(5, 7);

// 戻り値をコンソールに出力
console.log(sum); // 出力: 12</pre>



<p>↑の例では、<code>add</code>関数は2つの引数<code>a</code>と<code>b</code>を受け取りその和を計算して戻り値として返します。この関数を呼び出す際に<code>5</code>と<code>7</code>を引数として渡すと、関数はこれらの値の和<code>12</code>を返します。この戻り値は変数<code>sum</code>に格納され、コンソールに出力されています。</p>



<h3 class="wp-block-heading"><span id="toc5">パターン２：関数式（Function Expressions）</span></h3>



<p>関数式はJavaScriptにおける便利な機能の１つで、<strong>関数を変数に割り当てる</strong>ことができる表現方法です。関数式を使用すると、<strong>無名関数（匿名関数）</strong>を作成することが可能となり、これにより即時実行関数や高階関数（他の関数を引数として受け取る関数や関数を戻り値として返す関数）などの高度なプログラミングパターンを実装することができます。</p>



<p class="has-text-align-center"><span class="badge-blue">ポイント</span>　<strong>関数式の基本構文</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const myFunction = function(parameters) {
    // 関数の本体
};</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p><code><span class="bold-blue">myFunction</span></code>は関数を参照する変数名。<code><span class="bold-blue">function</span></code>キーワードの後ろに続くのは関数のパラメータと本体です。</p>
</div></div>



<p class="has-text-align-center"><span class="badge-blue">サンプルコード</span>　<strong>関数式</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 関数式を使用して関数を定義
const greet = function(name) {
    console.log(`こんにちは、${name}さん!`);
};

// 関数を呼び出す
greet('太郎'); // 出力: こんにちは、太郎さん!</pre>



<p>↑の例では、<code>greet</code>変数に関数式を割り当て。関数は<code>name</code>という引数を受け取り、挨拶のメッセージをコンソールに出力しています。</p>



<h4 class="wp-block-heading">無名関数<strong>（匿名関数）</strong></h4>



<p><strong>関数式</strong>には２つの形式があります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 名前付き関数式
const myNamedFunction = function namedFunction() {
    console.log('名前付き関数式');
};

// 無名関数式
const myAnonymousFunction = function() {
    console.log('無名関数式');
};</pre>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li>通常の関数式（名前付き関数式）</li>



<li>無名関数（匿名関数式）</li>
</ol>



<p>この２つの違いは関数に名前が付けられているか否か。以下では、それぞれの構文の違いと使い分けを解説します。</p>



<p class="has-text-align-center is-style-border-left-box has-box-style"><span class="badge-green">ポイント１</span>　<strong>通常の関数式（名前付き関数式）</strong></p>



<p>通常の関数式では関数に名前を付けます。これにより、関数内部から自身を参照することが可能になり、再帰呼び出しやデバッグが容易になります。名前付き関数式の構文は以下の通りです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const myFunction = function functionName(parameters) {
    // 関数の本体
};</pre>



<p><strong><code><span class="bold-red">functionName</span></code></strong>：関数の名前。この名前を使用して関数自身を関数の本体内部で参照することができるようになります。</p>



<p class="has-text-align-center is-style-border-left-box has-box-style"><span class="badge-green">ポイント２</span>　<strong>無名関数（匿名関数式）</strong></p>



<p>無名関数では、関数に名前を付けません。これは一度きりの使用や、即時実行関数、コールバック関数などに便利です。無名関数式の構文は以下の通りです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const myFunction = function(parameters) {
    // 関数の本体
};</pre>



<p>↑の形式では関数は名前を持たず直接変数に割り当てられます。この関数を呼び出すには、変数名（この例では<code>myFunction</code>）を使用します。</p>



<h2 class="wp-block-heading"><span id="toc6">JavaScript：関数の呼び出し・実行</span></h2>



<p>ここからは定義した関数を呼び出す方法・実行する方法をいくつかのサンプルコード付きでご説明していきます。</p>



<h3 class="wp-block-heading"><span id="toc7">パターン１：基本的な関数の呼び出し</span></h3>



<p>関数を呼び出す基本的な方法は、関数名の後に<strong><span class="marker-under">カッコ<code>()</code></span></strong>を付ける方法です。必要に応じてカッコ内で引数を指定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 関数の定義
function sayHello(name) {
    console.log(`こんにちは、${name}さん!`);
}

// 関数の呼び出し
sayHello('太郎');</pre>



<p>この例では、<code>sayHello</code>関数が定義されており、<code><span class="bold-blue">'太郎'</span></code>という引数を渡して呼び出されています。結果として、<code><span class="bold-blue">こんにちは、太郎さん!</span></code>というメッセージがコンソールに出力されます。</p>



<h3 class="wp-block-heading"><span id="toc8">パターン２：引数を複数持つ関数の呼び出し</span></h3>



<p>関数は複数の引数を受け取ることができます。関数を呼び出す際には、それらの引数をカンマで区切って渡します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 関数の定義
function add(a, b) {
    return a + b;
}

// 関数の呼び出し
const sum = add(5, 3);
console.log(sum); // 出力: 8</pre>



<p>この例では、2つの数値を引数として受け取り、それらの和を返す<code>add</code>関数を呼び出しています。</p>



<h3 class="wp-block-heading"><span id="toc9">パターン３：関数を変数に割り当ててから呼び出す</span></h3>



<p>関数式を使用して関数を変数に割り当て、その変数を通じて関数を呼び出すことができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const multiply = function(x, y) {
    return x * y;
};

const product = multiply(4, 5);
console.log(product); // 出力: 20</pre>



<p>この例では、<code>multiply</code>変数に割り当てられた関数を使用して、2つの数値の積を計算しています。</p>



<h3 class="wp-block-heading"><span id="toc10">パターン４：コールバック関数としての関数の呼び出し</span></h3>



<p>関数を別の関数の引数として渡し、その関数内で呼び出すことができます。これは、非同期処理やイベント処理などで一般的に使用されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function processUserInput(callback) {
    const name = prompt('名前を入力してください:');
    callback(name);
}

processUserInput(sayHello);</pre>



<p>この例では、<code>processUserInput</code>関数に<code>sayHello</code>関数をコールバックとして渡し、ユーザーからの入力に基づいて<code>sayHello</code>関数を呼び出しています。</p>



<h2 class="wp-block-heading"><span id="toc11">JavaScript：関数を利用する際の注意点</span></h2>



<p>JavaScriptで関数を利用する際には、いくつかの重要な注意点があります。これらを理解し、適切に対処することで、より効率的かつエラーの少ないコーディングが可能になります。</p>



<h3 class="wp-block-heading"><span id="toc12">1. スコープの理解</span></h3>



<p>JavaScriptでは、関数はそれ自身のスコープを持ちます。これは、関数内で宣言された変数は関数の外部からはアクセスできないことを意味します。しかし、関数内からは外部スコープの変数にアクセスすることができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">let globalVar = "外部変数";

function testScope() {
    let localVar = "内部変数";
    console.log(globalVar); // アクセス可能
}

testScope();
console.log(localVar); // ReferenceError: localVar is not defined</pre>



<h3 class="wp-block-heading"><span id="toc13">2. 巻き上げ（Hoisting）</span></h3>



<p>JavaScriptでは、関数宣言と変数宣言は巻き上げられます。つまり、コードの実行前に関数と変数がそのスコープの先頭に移動するような振る舞いをします。ただし、関数式は巻き上げの対象ではないため、宣言前に関数式を呼び出そうとするとエラーになります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">console.log(declaredLater); // undefined（巻き上げによりundefinedが返される）
var declaredLater = "宣言後に定義される変数";

declaredFunction(); // 正常に実行される

function declaredFunction() {
    console.log("関数宣言は巻き上げられる");
}

undeclaredFunction(); // TypeError: undeclaredFunction is not a function

var undeclaredFunction = function() {
    console.log("関数式は巻き上げられない");
};</pre>



<h3 class="wp-block-heading"><span id="toc14">3. 再帰関数の使用</span></h3>



<p>再帰関数は自分自身を呼び出す関数です。無限ループに陥らないように終了条件を正しく設定することが重要です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function countDown(number) {
    if (number &lt;= 0) {
        console.log("完了");
        return;
    }
    console.log(number);
    countDown(number - 1);
}

countDown(3);</pre>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><span class="badge-green">まとめ</span>　<strong>JavaScript：関数の基本</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 関数宣言
function greet(name) {
    console.log(`こんにちは、${name}さん!`);
}

// 関数式（無名関数を使用）
const sayGoodbye = function(name) {
    console.log(`さようなら、${name}さん!`);
};


// 関数の呼び出し
greet('太郎');
sayGoodbye('花子');
console.log(add(5, 3));</pre>



<ul class="wp-block-list">
<li><strong>関数宣言</strong>：<code>function</code>キーワードを使って関数を宣言し、名前を付けて定義します。</li>



<li><strong>関数式</strong>：無名関数を変数に割り当てる方法で、関数を定義します。これにより、関数を値として扱うことができます。</li>



<li><strong>関数の呼び出し</strong>：定義した関数を実行するには、関数名の後にカッコを付けて引数を渡します（必要な場合）。</li>
</ul>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【JavaScript】イベントリスナーとは？３分でわかりやすく解説</title>
		<link>https://it-biz.online/web-design/event-listner/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Mon, 05 Feb 2024 00:00:00 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WEBデザイン]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8867</guid>

					<description><![CDATA[Webページ上のユーザーアクション（クリックやキーワード操作）をキャッチしそれに反応して特定の動作を実行する仕組みがイベントリスナーです。わかりやすく言えば、Webページがユーザーの行動やブラウザの変化に耳を傾け、その変 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Webページ上のユーザーアクション（クリックやキーワード操作）をキャッチし<strong>それに反応して特定の動作を実行する仕組み</strong>が<strong><span class="marker-under">イベントリスナー</span></strong>です。わかりやすく言えば、Webページがユーザーの行動やブラウザの変化に耳を傾け、その変化に応じて指定された反応をする仕組みのようなもの。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>具体的には、ユーザーがページ上の要素をクリックしたり、キーボードを操作したりするたびにイベントリスナーはこれらのアクションを「聞き」プログラムされたタスクを実行するということです。</p>
</div></div>



<p>イベントリスナーを適切に利用することにより、Webサイトやアプリケーションに対してインタラクティブな体験を提供することが可能になります。この記事では、イベントリスナーの基本から、具体的な使用方法・コーディング方法まで、初心者でも理解しやすいように段階的に解説していきます。</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box cocoon-block-tab-caption-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li>イベントとは</li>



<li>イベントリスナーの基本</li>



<li>イベントリスナーの追加方法：<code><strong>addEventListener</strong></code>メソッド
<ul class="wp-block-list">
<li>クリックイベントのリスナーを追加</li>
</ul>
</li>



<li>イベントリスナーの削除</li>
</ul>
</div>
</div></div>



<p>Webエンジニア/Webデザイナーを目指す方であれば<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つ</span></strong>です。是非最後までご覧ください。</p>




  <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">イベントリスナーとは？</a><ol><li><a href="#toc3" tabindex="0">イベントリスナーの仕組み</a></li><li><a href="#toc4" tabindex="0">イベントリスナーの使用例</a></li></ol></li><li><a href="#toc5" tabindex="0">イベントリスナーの追加：addEventListener</a></li><li><a href="#toc6" tabindex="0">イベントリスナーの削除：removeEventListener</a><ol><li><a href="#toc7" tabindex="0">イベントリスナーの削除：具体例</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">イベントとは？</span></h2>



<p>イベントとはユーザーがマウスやブラウザから<strong>特定のアクションを行うこと</strong>です。マウスをクリックしたり、キーボードのキーを押したり。また、ページが読み込まれたり、ウインドウ（画面サイズ）がリサイズされるといったブラウザの動作などがその一例です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>以下に代表的なイベントを記載します。</p>
</div></div>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>イベントの種類</th><th>イベント名</th><th>説明</th></tr></thead><tbody><tr><td>ユーザーイベント</td><td>クリックイベント</td><td>ユーザーがマウスでページ上の要素をクリックしたとき。</td></tr><tr><td>ユーザーイベント</td><td>キーボードイベント</td><td>ユーザーがキーボードのキーを押下または解放したとき。</td></tr><tr><td>ユーザーイベント</td><td>フォームイベント</td><td>フォームが送信されたり、入力フィールドの値が変更されたりしたとき。</td></tr><tr><td>ブラウザイベント</td><td>ロードイベント</td><td>ページや画像が完全に読み込まれたとき。</td></tr><tr><td>ブラウザイベント</td><td>リサイズイベント</td><td>ウィンドウのサイズが変更されたとき。</td></tr><tr><td>ブラウザイベント</td><td>スクロールイベント</td><td>ユーザーがページをスクロールしたとき。</td></tr></tbody></table></div></figure>



<p>これらのイベントは、Webページ上で発生する様々なユーザー行動やブラウザ状態の変化を表します。JavaScriptを使ってこれらのイベントを検出し、適切な応答をプログラムすることで、Webページをよりインタラクティブでユーザーフレンドリーなものにすることが可能です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ザックリいえば、JavaScriptではユーザが起こしたアクションによって、様々な処理ができる！ということ。「〇〇をクリックしたら、表示を△△に変える」というようなことです。</p>



<p>このクリックなどの操作を「<strong>イベント</strong>」と呼ぶということをおさえておければOKです。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc2">イベントリスナーとは？</span></h2>



<p>イベントリスナーとは、<strong><span class="marker-under">特定のイベントが発生したときに実行される関数や処理のこと・その仕組み</span></strong>を指します。経てばユーザが「クリック」したら、入力チェックを行う・・・というような仕組みのこと。</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="673" height="341" src="https://it-biz.online/wp-content/uploads/2024/02/image-8.png" alt="イベントリスナーとは" class="wp-image-8872" srcset="https://it-biz.online/wp-content/uploads/2024/02/image-8.png 673w, https://it-biz.online/wp-content/uploads/2024/02/image-8-500x253.png 500w, https://it-biz.online/wp-content/uploads/2024/02/image-8-300x152.png 300w" sizes="(max-width: 673px) 100vw, 673px" /><figcaption class="wp-element-caption">図1：イベントリスナーとは</figcaption></figure>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/function/">JavaScriptの関数</a></p>



<p>イベントリスナーはWebページ上の動的なインタラクションを可能にする概念の１つで、ユーザーがページ上で行う様々なアクション（例えば、クリックやキーボードの入力など）を捉え、それに応じた特定の反応をプログラムすることができます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>「ユーザがクリックしたら、関数〇〇を実行する」というような処理があるとすると、<strong>ユーザーがクリックするかどうかを見張っているのがイベントリスナー</strong>と言えます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc3">イベントリスナーの仕組み</span></h3>



<p>イベントリスナーは、以下のような手順で機能します。詳しい仕組み後ほど解説するので、ここではイベントリスナーという仕組みの動作原理についての概要を押さえておきましょう。</p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li><strong>イベントリスナーの登録</strong>
<ul class="wp-block-list">
<li>まずは、特定のイベントに反応するようにイベントリスナーを登録します。これは、対象となる要素に対して、監視したいイベントタイプと、そのイベントが発生したときに呼び出されるコールバック関数を指定します。</li>
</ul>
</li>



<li><strong>イベントの監視</strong>
<ul class="wp-block-list">
<li>イベントリスナーが登録されると、ブラウザは指定されたタイプのイベントがその要素で発生するのを監視し始めます。</li>
</ul>
</li>



<li><strong>イベントの発生と処理の実行</strong>
<ul class="wp-block-list">
<li>対象のイベントが発生すると、ブラウザは事前に登録されたコールバック関数を呼び出し、プログラムされた処理を実行します。</li>
</ul>
</li>
</ol>



<h3 class="wp-block-heading"><span id="toc4">イベントリスナーの使用例</span></h3>



<p>JavaScriptでは、<strong><span class="marker-under"><code>addEventListener</code>メソッド</span></strong>を使用するのがイベントリスナーを登録する基本的な方法の１つです。このメソッドは、対象の要素、イベントタイプ、そしてイベントが発生した際に実行される関数を引数に取ります。例えば、ボタンがクリックされたときにアラートを表示するイベントリスナーは次のように書くことができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">document.getElementById('myButton').addEventListener('click', function() {
    alert('ボタンがクリックされました！');
});</pre>



<p>↑のコードは、<a href="https://it-biz.online/web-design/id-class/">ID</a>：<code>myButton</code>の要素に対して<strong>クリックイベントリスナ</strong>ーを追加しています。ボタンがクリックされると、アラートが表示されるというシンプルな処理を行っています。</p>



<p>このように、ユーザの何か特定の処理を「イベント」として検知し、そのイベントに対応する処理を記述することで様々な動的な画面制御を行うことができるようになるのが、このイベントリスナーという仕組み・概念です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここから、より実践的にイベントリスナーの定義方法・コーディング方法を詳しく解説していきます。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc5">イベントリスナーの追加：addEventListener</span></h2>



<p>イベントリスナーを追加するためのメソッドは<code><strong><span class="marker-under">addEventListener</span></strong></code>です。このメソッドを使用することで、特定の要素にイベントを監視するリスナーを登録できます。</p>



<p class="has-text-align-center"><span class="badge-blue">ポイント</span>　<strong><code>addEventListener</code>メソッドの構文</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">element.addEventListener(event, function, useCapture);</pre>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>element</strong>: イベントリスナーを追加したい<a href="https://it-biz.online/web-design/dom/">DOM要素</a></li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>event</strong>: 監視するイベントの名前（例: <code>'click'</code>, <code>'mouseover'</code>）</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>function</strong>: イベントが発生したときに実行されるコールバック関数</li>



<li><strong>useCapture</strong> (オプション): イベントキャプチャを使用するかどうかのブール値。デフォルトは<code>false</code>で、イベントバブリングのフェーズでリスナーが動作</li>
</ol>



<p>さっそく具体的に１からイベントリスナーを登録する方法を見ていきましょう。</p>



<p><span class="badge-green">ステップ1</span>　<strong>対象となる要素を選択する</strong></p>



<p>まず、イベントリスナーを追加したい<a href="https://it-biz.online/web-design/html-basic/">HTML要素</a>をJavaScriptを使って選択します。例えば、IDが<code>myButton</code>のボタン要素を選択するには、次のようにします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">var button = document.getElementById('myButton');</pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/var-let/">JavaScript変数：var</a></p>



<p><span class="badge-green">ステップ2</span>　<strong><code>addEventListener</code>メソッドを使用してイベントリスナーを追加する</strong></p>



<p>次に、<code>addEventListener</code>メソッドを使用して選択した要素にイベントリスナーを追加します。例えば、ボタンがクリックされたときにアラートを表示するには、次のように記述します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">button.addEventListener('click', function() {
    alert('ボタンがクリックされました！');
});</pre>



<p>↑のコードは、<code>myButton</code>IDを持つボタンがクリックされたときに、アラートを表示するイベントリスナーを追加します。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box comment-box">
<p>以下のコードをHTMLファイルに保存して実行してみましょう。イベントとイベントリスナーの動きがより視覚的に理解できると思います。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html lang="ja">
&lt;head>
  &lt;meta charset="UTF-8">
  &lt;title>クリックイベントデモ&lt;/title>
  &lt;style>
    #myButton {
      padding: 12px 24px;
      font-size: 16px;
      border: 2px solid #333;
      border-radius: 8px;
      cursor: pointer;
      background-color: #f0f0f0;
    }

    #myButton:hover {
      background-color: #d0e6ff;
    }
  &lt;/style>
&lt;/head>
&lt;body>

  &lt;h2>ボタンをクリックしてください&lt;/h2>
  &lt;button id="myButton">クリック&lt;/button>

  &lt;script>
    var button = document.getElementById('myButton');
    button.addEventListener('click', function() {
      alert('ボタンがクリックされました！');
    });
  &lt;/script>

&lt;/body>
&lt;/html>
</pre>



<figure class="wp-block-image size-large"><img decoding="async" width="800" height="170" src="https://it-biz.online/wp-content/uploads/2024/02/image-23-800x170.png" alt="" class="wp-image-10377" srcset="https://it-biz.online/wp-content/uploads/2024/02/image-23-800x170.png 800w, https://it-biz.online/wp-content/uploads/2024/02/image-23-500x107.png 500w, https://it-biz.online/wp-content/uploads/2024/02/image-23-300x64.png 300w, https://it-biz.online/wp-content/uploads/2024/02/image-23-768x164.png 768w, https://it-biz.online/wp-content/uploads/2024/02/image-23-1536x327.png 1536w, https://it-biz.online/wp-content/uploads/2024/02/image-23.png 1905w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>



<p class="has-text-align-left"><span class="badge-blue">サンプルコード</span>　<strong>マウスオーバーイベントの追加</strong></p>



<p>マウスが特定の要素の上に移動したときに反応するイベントリスナーを追加する例を見てみましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">var myElement = document.getElementById('myElement');

myElement.addEventListener('mouseover', function() {
    myElement.style.backgroundColor = 'yellow';
});</pre>



<p>↑のコードは、IDが<code>myElement</code>の要素にマウスが乗ると、その要素の背景色を黄色に変更します。</p>



<p class="has-text-align-left"><span class="badge-blue">サンプルコード</span>　<strong>フォーム送信イベントの追加</strong></p>



<p><a href="https://it-biz.online/web-design/form/">フォーム</a>が送信されたときにカスタム処理を実行するイベントリスナーを追加する例です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">var myForm = document.getElementById('myForm');

myForm.addEventListener('submit', function(event) {
    event.preventDefault(); // デフォルトのフォーム送信を防止
    alert('フォームが送信されました！');
});</pre>



<p>↑の例では、フォーム送信イベントが発生した際に、ブラウザによるデフォルトの送信処理を<code>preventDefault</code>メソッドでキャンセルし、代わりにアラートを表示しています。</p>



<p><code>addEventListener</code>メソッドを使用することで、様々なイベントに対して柔軟に対応することができます。イベントリスナーの追加は、Webページをよりインタラクティブでユーザーフレンドリーにする上で重要な役割を果たします。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記の例を参考に、様々なイベントに対応するイベントリスナーの追加を試してみてください。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc6">イベントリスナーの削除：removeEventListener</span></h2>



<p>イベントリスナーの追加と同様に重要なのが<strong>不要になったイベントリスナーを削除すること</strong>です。イベントリスナーが不要になるのは、例えばユーザーが特定の操作を完了した後や、ページの特定の部分が非表示になった時などです。イベントリスナーを削除することで、メモリリークを防ぎ、アプリケーションのパフォーマンスを維持することが可能になります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>特に大規模で複雑なWebアプリケーションを開発する際にはこの点も重要となるのでこの章で詳しく解説しておきます。</p>
</div></div>



<p class="has-text-align-center"><span class="badge-blue">ポイント</span>　<strong><code>removeEventListener</code>メソッド</strong></p>



<p>イベントリスナーを削除するためには、<code>removeEventListener</code>メソッドを使用します。このメソッドの構文は<code>addEventListener</code>に似ていますが、イベントを削除するだけです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">element.removeEventListener(event, function, useCapture);</pre>



<ol class="wp-block-list">
<li><strong>element</strong>: イベントリスナーを削除したいDOM要素</li>



<li><strong>event</strong>: 削除したいイベントの名前</li>



<li><strong>function</strong>: 削除したいイベントリスナーに紐づけられている関数</li>



<li><strong>useCapture</strong>: イベントリスナーがキャプチャフェーズで登録されているか、バブリングフェーズで登録されているかを示すブール値。<code>addEventListener</code>と同じ値を指定する必要があります。</li>
</ol>



<h3 class="wp-block-heading"><span id="toc7">イベントリスナーの削除：具体例</span></h3>



<p>イベントリスナーを削除する際には、<code>addEventListener</code>で指定したのと同じ関数を<code>removeEventListener</code>に渡す必要があります。これは、無名関数を直接<code>addEventListener</code>に渡す代わりに、関数を変数に割り当てておくとよいでしょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">var button = document.getElementById('myButton');
var handleClick = function() {
    alert('ボタンがクリックされました！');
};

// イベントリスナーを追加
button.addEventListener('click', handleClick);

// イベントリスナーを削除
button.removeEventListener('click', handleClick);</pre>



<p>↑の例では、<code>handleClick</code>関数がクリックイベントのコールバックとして使用されています。イベントリスナーを削除する際も、同じ<code>handleClick</code>関数を<code>removeEventListener</code>メソッドに渡しています。これにより、正確に特定のイベントリスナーを削除することができます。</p>



<p>イベントリスナーの追加だけでなく、適切なタイミングでの削除もWebアプリケーションの効率的な動作には不可欠です。<code>addEventListener</code>と<code>removeEventListener</code>を適切に使用することで、ユーザーインターフェースのコントロールを精密に行い、リソースを効率的に管理することが可能になります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>イベントリスナーのライフサイクル管理を意識することは、ウェブ開発のスキルを向上させる上で重要なポイントです。</p>
</div></div>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><span class="badge-green">まとめ</span>　<strong>イベントリスナーとは？</strong></p>



<ul class="wp-block-list">
<li><strong>イベントリスナーとは</strong>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-0em has-bottom-margin">特定のイベント（ユーザーアクションやブラウザの動作など）が発生した際に実行される関数やプロセスのこと。</li>



<li class="is-style-bottom-margin-1em has-bottom-margin">イベントリスナーを使用することで、Webページ上でのインタラクティブなユーザー体験を作り出すことが可能になる。</li>
</ul>
</li>



<li><strong><code>addEventListener</code>メソッド</strong>
<ul class="wp-block-list">
<li>DOM要素にイベントリスナーを追加し、特定のイベントに対して反応する処理を記述できる。</li>



<li class="is-style-bottom-margin-1em has-bottom-margin">イベントリスナーは、クリックやマウスオーバー、キーボード入力、フォームの送信など、さまざまなイベントに対応可能。</li>
</ul>
</li>



<li>不要になったイベントリスナーは、<strong><code>removeEventListener</code>メソッド</strong>を使用して削除する。</li>
</ul>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JSPファイル超入門 – 0 → 現場で“JSPの人”になるまで</title>
		<link>https://it-biz.online/web-design/html/java-server-pages/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Tue, 06 May 2025 05:51:29 +0000</pubDate>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=10372</guid>

					<description><![CDATA[JSP（Java Server Pages）は HTMLにJavaコードを差し込み、動的ページを生成する仕組み です。 まず最初にお伝えしたいのは、JSPは決して難しいものではありません。むしろ、「ちょっと動きのあるWe [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>JSP（Java Server Pages）は <strong><a href="https://it-biz.online/web-design/html-basic/">HTML</a>にJavaコードを差し込み、動的ページを生成する仕組み</strong> です。</p>



<p>まず最初にお伝えしたいのは、<strong>JSPは決して難しいものではありません。</strong>むしろ、「ちょっと動きのあるWebページを、できるだけ簡単に作りたい！」という人のために生まれたものなのです。近年では他の技術に取って代わられた印象が否めないJSPですが、昔からある巨大なレガシーシステムなどでは現役で、システムの更改案件などではよく目にすることがあります。</p>



<p>このページでは「JSPってそもそも何？」という一番大事な部分から、初心者向けに順を追って１からわかりやすく専門用語を避けて解説します。</p>




  <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">JSPとは何か？</a><ol><li><a href="#toc2" tabindex="0">【前提１】静的なページと動的なページ</a></li><li><a href="#toc3" tabindex="0">JSPとはどのような技術か</a></li><li><a href="#toc4" tabindex="0">JSPの動作のしくみ</a></li></ol></li><li><a href="#toc5" tabindex="0">JSPを動かすための準備</a><ol><li><a href="#toc6" tabindex="0">JSPの動作に必要なもの</a></li></ol></li><li><a href="#toc7" tabindex="0">最初のJSPファイルを作ってみよう</a><ol><li><a href="#toc8" tabindex="0">JSPファイルとはどんなファイルか</a></li><li><a href="#toc9" tabindex="0">ブラウザで表示してみる</a></li></ol></li><li><a href="#toc10" tabindex="0">JSPの基本構文</a><ol><li><a href="#toc11" tabindex="0">JSPの構成要素</a></li><li><a href="#toc12" tabindex="0">ディレクティブ</a></li><li><a href="#toc13" tabindex="0">スクリプトレット</a></li><li><a href="#toc14" tabindex="0">式（Expression）</a></li><li><a href="#toc15" tabindex="0">宣言</a></li><li><a href="#toc16" tabindex="0">コメントの書き方</a></li><li><a href="#toc17" tabindex="0">スクリプトレットはなるべく使わない</a></li></ol></li><li><a href="#toc18" tabindex="0">ELとJSTLでスクリプトレットのないJSPへ</a><ol><li><a href="#toc19" tabindex="0">EL（式言語）とは</a></li><li><a href="#toc20" tabindex="0">JSTL（JSP標準タグライブラリ）とは</a></li><li><a href="#toc21" tabindex="0">JSPをすっきり保つために</a></li></ol></li><li><a href="#toc22" tabindex="0">フォームからデータを受け取る</a><ol><li><a href="#toc23" tabindex="0">フォーム送信の流れ</a></li><li><a href="#toc24" tabindex="0">フォームを作るJSP（entry.jsp）</a></li><li><a href="#toc25" tabindex="0">データを受け取るJSP（result.jsp）</a></li><li><a href="#toc26" tabindex="0">ELを使って書き換える</a></li></ol></li><li><a href="#toc27" tabindex="0">セッションとCookieでデータを保持する</a><ol><li><a href="#toc28" tabindex="0">セッションの基本操作</a></li><li><a href="#toc29" tabindex="0">Cookieとは</a></li><li><a href="#toc30" tabindex="0">Cookieの基本操作</a></li><li><a href="#toc31" tabindex="0">セッションとCookieの使い分け</a></li></ol></li><li><a href="#toc32" tabindex="0">JSPで簡単なアンケートアプリを作ろう</a><ol><li><a href="#toc33" tabindex="0">アプリの構成と目的</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">JSPとは何か？</span></h2>



<p><strong>JSP（Java Server Pages）</strong>は、Javaを使ってWebページを動的に生成するための技術で、通常のHTMLファイルにJavaのコードを埋め込むことで、アクセスするたびに内容が変化するページを作成することを可能にします。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>そのため、JSPはJavaをベースとしていますが、HTMLの知識があれば、基本的な使い方は十分に理解することができます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc2">【前提１】静的なページと動的なページ</span></h3>



<p>Webページには、大きく分けて2種類あります。<br>1つは「<strong>静的なページ</strong>」、もう1つは「<strong>動的なページ</strong>」です。</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/it-skills/static-dynamic/" title="静的コンテンツ/動的コンテンツの違いを１分で解説【初心者向け】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2019/09/746394eb4d9cc08edc56e7be8fffc150-320x180.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2019/09/746394eb4d9cc08edc56e7be8fffc150-320x180.jpg 320w, https://it-biz.online/wp-content/uploads/2019/09/746394eb4d9cc08edc56e7be8fffc150-240x135.jpg 240w, https://it-biz.online/wp-content/uploads/2019/09/746394eb4d9cc08edc56e7be8fffc150-640x360.jpg 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">静的コンテンツ/動的コンテンツの違いを１分で解説【初心者向け】</div><div class="blogcard-snippet internal-blogcard-snippet">【初心者向け】「動的」「静的」という言葉の意味とその違いを端的に解説します。本で学習したがイマイチ理解できない、、、結局一言でいうと違いは何？という疑問をお持ちの方に具体例を用いながら分かりやすく解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.05.15</div></div></div></div></a>
</div></figure>



<p>静的なページとは、内容があらかじめ決まっていて、アクセスするたびに同じ内容が表示されるページです。たとえば、自己紹介だけが書かれた会社のホームページや、お知らせ一覧だけが載っているページなどが該当します。</p>



<p>一方、動的なページは、アクセスした時点の情報や、閲覧しているユーザーの状態に応じて内容が変わります。たとえば、ショッピングサイトで商品が表示されたり、ログイン中のユーザー名が画面に表示されたりするページがそうです。</p>



<p><strong><span class="marker-under">静的なページはHTMLだけで作成できますが、動的なページを作るには、プログラムによってページの内容を生成する仕組みが必要</span></strong>です。JSPは、そのような仕組みの一つです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>もちろんJSP以外にも同じようなことを実現することが可能で、現代ではほとんどJSP以外が主役です。なのですが、レガシーシステムでは今でも現役で動いていることが多いので「まあ知っておいて損はないかな」というのがJSPの位置づけです。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc3">JSPとはどのような技術か</span></h3>



<p>JSPは、<strong>JavaのコードをHTMLに埋め込むことで</strong>、Webサーバー上で動的にHTMLを生成する技術です。拡張子が <code><span class="blue">.jsp</span></code> であるファイルを使ってページを作成します。</p>



<p>JSPファイルは、<a href="https://it-biz.online/it-skills/web-server/">Webサーバー</a>（通常は<strong>Tomcat</strong>）に配置され、ユーザーがアクセスすると、サーバー側でJavaのコードが実行されます。その結果として生成されたHTMLが、ブラウザに送信され、画面に表示されます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>つまり、JSPは「動的にHTMLを生成する仕組み」であり、「HTMLの中にJavaの処理を一部書き足せる形式のファイル」と言えます。</p>
</div></div>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>JSPは、以下のような場面でよく利用されます。</p>



<ul class="wp-block-list">
<li>ユーザーの入力に応じて表示内容を変えたいとき</li>



<li>データベースから取得した情報を一覧表示したいとき</li>



<li>フォーム送信結果を別の画面に反映したいとき</li>



<li>ログインしたユーザーごとにページの表示内容を切り替えたいとき</li>
</ul>



<p>このような場合、HTMLだけでは対応が難しくなりますが、JSPを使えば、これらの処理をサーバー側で実現できます。</p>
</div>



<h3 class="wp-block-heading"><span id="toc4">JSPの動作のしくみ</span></h3>



<p>JSPファイルは、ユーザーがアクセスしたときに、サーバー側で一度「Javaのクラス（Servlet）」に変換されます。変換されたクラスはコンパイルされ、Javaプログラムとして実行されます。このとき、JSPファイルに書かれたHTMLの部分はそのままHTMLとして出力され、Javaのコード部分は処理されて結果が埋め込まれます。最終的に生成されたHTMLがブラウザに送信され、ユーザーに表示されます。</p>



<p>このしくみによって、JSPは1枚のファイルで「HTMLの見た目」と「動的な処理」を両立させることができます。</p>



<p class="has-text-align-center"><strong>JSPの動き方の流れ</strong></p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-1em has-bottom-margin">ユーザーが <code>.jsp</code> ファイルをリクエストする（例：<code>hello.jsp</code>）</li>



<li class="is-style-bottom-margin-1em has-bottom-margin">Tomcat がその <code>.jsp</code> を読んで、中の Java を実行</li>



<li class="is-style-bottom-margin-1em has-bottom-margin">結果として HTML を作り出し、ブラウザに返す</li>



<li>ブラウザには、あたかも普通のHTMLのように見える</li>
</ol>



<p>この一連の流れによって、「動きのあるページ」がリクエスト元に返却されることになります。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><span class="badge-green">まとめ１</span>　<strong>JSPファイルとは？</strong></p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin">HTMLだけでは静的なページしか作れない。<br>→JSPを使うことで動的なページが作成できます。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">JSPは、JavaのコードをHTMLに埋め込むことで、アクセスごとに変化するページを生成。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">JSPは、Webサーバー上で実行され、結果がHTMLとしてブラウザに表示される。</li>
</ol>
</div>



<h2 class="wp-block-heading"><span id="toc5">JSPを動かすための準備</span></h2>



<p>JSPファイルは、<strong>通常のHTMLファイルと違い、単独では動作しません。</strong>JSPはサーバー側でJavaのコードを実行する仕組みのため、その処理を受け持つ「Webサーバー」や「Javaの開発環境」が必要です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この章では、JSPを動かすために必要なソフトウェアや環境を、1つずつ順を追って準備していきます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc6">JSPの動作に必要なもの</span></h3>



<p>JSPを動作させるには、次の3つが必要です。<strong>ここでは、それってそもそも何？みたいな説明＋実際にあなたのPCにインストールする手順をメモ程度に記載しておきますので、この辺の知識がすでにあるよ！という方は読み飛ばしてください。</strong></p>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>項目</th><th>説明</th></tr></thead><tbody><tr><td>JDK（Java Development Kit）</td><td>Javaのプログラムを実行するために必要なソフトウェアです。JSPはJavaで動作するため、必ず必要になります。</td></tr><tr><td>Tomcat（トムキャット）</td><td>JSPファイルを処理し、Javaのコードを実行してHTMLに変換するWebサーバーです。</td></tr><tr><td>エディタ（テキスト編集ソフト）</td><td>JSPファイルを作成するための道具です。Visual Studio Code（VS Code）やIntelliJ IDEAなどが便利です。</td></tr></tbody></table></div></figure>



<h4 class="wp-block-heading">JDKのインストール</h4>



<p>まず、Javaの開発環境であるJDKをインストールします。JDKがインストールされていないと、JSPも動作しません。</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/java/java-setup/" title="Javaの開発環境構築の３ステップ解説（JDK/JRE/JVMの仕組みを１から解説）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2024/05/image-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2024/05/image-320x180.png 320w, https://it-biz.online/wp-content/uploads/2024/05/image-240x135.png 240w, https://it-biz.online/wp-content/uploads/2024/05/image-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Javaの開発環境構築の３ステップ解説（JDK/JRE/JVMの仕組みを１から解説）</div><div class="blogcard-snippet internal-blogcard-snippet">【超・初心者向け】Javaの開発環境を初心者向けに簡単に設定する方法をわかりやすく解説します。JDKのインストール、IDEの選択、開発のスタートまで、スムーズにJavaプログラミングを始める方法をご説明します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.03.05</div></div></div></div></a>
</div></figure>



<p class="has-text-align-center"><span class="inline-button-green">手順</span></p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin">Oracleの公式サイトまたはOpenJDKのサイトから、JDKをダウンロード。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">お使いのOSに合ったインストーラを選び、画面の指示に従ってインストール。</li>



<li>インストール後、コマンドプロンプト（またはターミナル）を開き、↓のコマンドを入力。</li>
</ol>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">java -version
</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>バージョンが表示されれば、正常にインストールされています。</p>
</div></div>



<h4 class="wp-block-heading">Tomcatのインストール</h4>



<p>JSPファイルを処理するために、Tomcatをインストールします。<strong><span class="marker-under">TomcatはJavaで動作するWebサーバー</span></strong>で、JSPの実行に適した軽量なサーバーです。</p>



<p class="has-text-align-center"><span class="inline-button-green">手順</span></p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin">Apache Tomcat の公式サイトにアクセス。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">zip ファイル（Windows の場合）または tar.gz ファイル（Mac/Linux の場合）をダウンロード。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">ダウンロードしたファイルを任意の場所に展開（解凍）。<br>→<code>C:\tomcat</code> や <code>~/tomcat</code> などが一般的ですが、どこでもOK。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><code>bin</code>フォルダにある <code>startup.bat</code>（Windows）または <code>startup.sh</code>（Mac/Linux）を実行。</li>



<li>ブラウザを開き、次のURLにアクセスします：</li>
</ol>




<a rel="noopener" href="http://localhost:8080/" title="&#28961;&#21177;&#12394;URL&#12391;&#12377;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/http%3A%2F%2Flocalhost%3A8080%2F?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#28961;&#21177;&#12394;URL&#12391;&#12377;</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=http://localhost:8080/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">localhost</div></div></div></div></a>
</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Tomcatのトップページが表示されれば、インストールは成功です。</p>
</div></div>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>注意：すでに他のアプリケーションがポート8080を使っている場合、Tomcatが起動できないことがあります。その場合は、設定ファイル（server.xml）でポート番号を変更してください。</p>
</div>



<h4 class="wp-block-heading">JSP用のフォルダを作る</h4>



<p>Tomcatでは、<code><span class="bold-blue">webapps</span></code> フォルダの中にあるプロジェクトが自動的に読み込まれます。自分でJSPファイルを作って表示するには、ここに新しいフォルダを作成します。</p>



<p class="has-text-align-center"><span class="inline-button-green">手順</span></p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin">Tomcatフォルダ内の <code>webapps</code> に移動。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">新しくフォルダを作成し、たとえば <code>jsp-demo</code> という名前をつける。</li>



<li><code>jsp-demo</code> フォルダの中に、最初のJSPファイルを作成します。ファイル名は <code>hello.jsp</code> など。</li>
</ol>



<h4 class="wp-block-heading">エディタの準備</h4>



<p>JSPファイルは、普通のテキストファイルとして作成できますが、プログラミングに適したエディタを使うと効率が上がります。以下のいずれかのエディタを使用するのが一般的です。</p>



<ul class="wp-block-list">
<li>Visual Studio Code（無料で軽量、拡張機能が豊富）</li>



<li>IntelliJ IDEA（Javaに特化した統合開発環境）</li>



<li>Eclipse（Java開発で定番のIDE）</li>
</ul>



<p>初心者の方には、<strong>Visual Studio Codeが扱いやすくおすすめ</strong>です。必要に応じて「Java Extension Pack」などを追加すると、補完機能や構文チェックも利用できます。</p>



<h2 class="wp-block-heading"><span id="toc7">最初のJSPファイルを作ってみよう</span></h2>



<p>前の章で、JSPを動かすための準備が整いました。この章では、実際にJSPファイルを1つ作成し、それをブラウザで表示するところまで進めます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここでは、「JSPとはどういうものか」を実際に体験しながら、基本的な書き方や仕組みを理解していきます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc8">JSPファイルとはどんなファイルか</span></h3>



<p>JSPファイルは、基本的にはHTMLっぽく見えるコードで、この中の必要な部分にJavaのコードを差し込むことで、表示内容を動的に変えることができるようにしています。たとえば、「現在の日時を表示する」などの処理が可能になります。</p>



<p>JSPファイルの拡張子は <code><span class="bold-blue">.jsp</span></code> です。ファイルの中には、通常のHTMLタグと、Javaのコードが組み合わさって記述されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%@ page contentType="text/html; charset=UTF-8" %>
&lt;!DOCTYPE html>
&lt;html>
&lt;head>
  &lt;meta charset="UTF-8">
  &lt;title>Hello JSP&lt;/title>
&lt;/head>
&lt;body>
  &lt;h1>こんにちは、JSPの世界へようこそ！&lt;/h1>
  &lt;p>現在の時刻は：&lt;%= java.time.LocalDateTime.now() %>&lt;/p>
&lt;/body>
&lt;/html>
</pre>



<p>上記のJSPファイルの中では、JavaのコードとHTMLが組み合わさっています。それぞれの部分について説明します。</p>



<ul class="wp-block-list is-style-icon-list-circle has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin"><code>&lt;%@ page contentType="text/html; charset=UTF-8" %></code><br>→ この行は「ページ全体の設定」です。文字コードをUTF-8にすることで、文字化けを防ぎます。</li>



<li><code>&lt;%= java.time.LocalDateTime.now() %></code><br>→ この部分がJSPの特徴です。「現在の時刻を表示する」Javaのコードが入っています。<br><code>&lt;%=</code> と <code>%></code> で囲まれた中はJavaの「式」として実行され、結果がそのままHTMLに差し込まれます。</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記のファイルをブラウザで表示するためにエディタで編集して保存しましょう。</p>
</div></div>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin">Tomcatの <code>webapps</code> フォルダの中にある、前章で作成した <code>jsp-demo</code> フォルダに移動。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><code>hello.jsp</code> という名前の新しいファイルを作成。</li>



<li>ファイルをエディタで開き、↑の内容を記述し保存！</li>
</ol>



<h3 class="wp-block-heading"><span id="toc9">ブラウザで表示してみる</span></h3>



<p>ファイルを保存したら、Tomcatが起動していることを確認し、ブラウザで次のURLにアクセスしてみましょう。</p>




<a rel="noopener" href="http://localhost:8080/jsp-demo/hello.jsp" title="&#28961;&#21177;&#12394;URL&#12391;&#12377;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/http%3A%2F%2Flocalhost%3A8080%2Fjsp-demo%2Fhello.jsp?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#28961;&#21177;&#12394;URL&#12391;&#12377;</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=http://localhost:8080/jsp-demo/hello.jsp" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">localhost</div></div></div></div></a>
</pre>



<p>画面に「こんにちは、JSPの世界へようこそ！」という見出しと、現在の時刻が表示されていれば成功です。</p>



<p>ブラウザでページを更新するたびに、時刻が変化するはずです。これは、<strong>JSPがアクセスされるたびにJavaのコードを実行して、ページの中身を動的に作っている</strong>ということを意味します。</p>



<h2 class="wp-block-heading"><span id="toc10">JSPの基本構文</span></h2>



<p>前の章では、JSPファイルを作成し、Javaのコードを埋め込むことで「現在の時刻を表示する」ページを作成しました。ここからは、JSPファイルで使われる代表的な構文について解説します。どのようにJavaのコードをHTMLに差し込むのか、そしてJSP特有の書き方にはどんな種類があるのかを、順を追って学習していきましょう。</p>



<h3 class="wp-block-heading"><span id="toc11">JSPの構成要素</span></h3>



<p>JSPでは、<strong>以下の4種類の記述形式が用意されています</strong>。これらを使い分けることで、Javaの処理とHTMLの表示を同時に扱うことができます。</p>



<figure class="wp-block-table aligncenter"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>種類</th><th>記述方法</th><th>役割</th></tr></thead><tbody><tr><td>ディレクティブ</td><td><code>&lt;%<span class="bold-red">@</span> ... %></code></td><td>ページ全体の設定を行う（文字コードなど）</td></tr><tr><td>スクリプトレット</td><td><code>&lt;% ... %&gt;</code></td><td>Javaの処理（変数の定義や条件分岐など）を書く</td></tr><tr><td>式（Expression）</td><td><code>&lt;%<span class="bold-red">=</span> ... %></code></td><td>Javaの値をそのままHTMLに出力する</td></tr><tr><td>宣言</td><td><code>&lt;%<span class="bold-red">!</span> ... %></code></td><td>メソッドやフィールドを定義する（あまり使われない）</td></tr></tbody></table></div></figure>



<h3 class="wp-block-heading"><span id="toc12">ディレクティブ</span></h3>



<p>ディレクティブは、JSPファイル全体に関する設定を行うものです。最もよく使われるのは <code>page</code> ディレクティブです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%@ page contentType="text/html; charset=UTF-8" %>
</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この記述によって、出力するHTMLの文字コードがUTF-8になります。日本語を正しく表示するために必須です。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc13">スクリプトレット</span></h3>



<p>スクリプトレットは、JSPファイル内にJavaの処理を書くための領域です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%
  int year = java.time.LocalDate.now().getYear();
  String message = "今年は " + year + " 年です。";
%>
&lt;p>&lt;%= message %>&lt;/p>
</pre>



<p>この例では、Javaで現在の年を取得し、それを文字列として作成しています。そして <code>&lt;%= ... %&gt;</code> を使って、結果をHTMLに出力しています。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>スクリプトレットの中ではJavaの文法がそのまま使えます。ただし、後述するように<strong>スクリプトレットは新しい開発ではなるべく使わない方向にあります</strong>。</p>
</blockquote>



<h3 class="wp-block-heading"><span id="toc14">式（Expression）</span></h3>



<p>式は、値をそのままHTMLとして出力したいときに使います。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;p>こんにちは、&lt;%= "JSPユーザー" %>さん！&lt;/p>
</pre>



<p>上の例では、<code>"JSPユーザー"</code> という文字列がHTMLに挿入され、ブラウザには次のように表示されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">こんにちは、JSPユーザーさん！
</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この書き方は非常にシンプルで、<strong>値を表示するだけ</strong>であれば便利ですが、複雑な処理は向きません。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc15">宣言</span></h3>



<p>宣言は、JSPファイルの中で<strong>メソッドや変数を定義したい場合</strong>に使います。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%! 
  private String getGreeting(String name) {
    return "こんにちは、" + name + "さん！";
  }
%>
&lt;p>&lt;%= getGreeting("太郎") %>&lt;/p>
</pre>



<p>このように、JSPファイルの中で小さな関数を定義して、それを式の中で呼び出すこともできます。<strong>ただし、JSPファイルに処理を詰め込みすぎると保守が難しくなるため、このような記述はできるだけ避け、外部のJavaクラスに処理を分けることが望まれます。</strong></p>



<h3 class="wp-block-heading"><span id="toc16">コメントの書き方</span></h3>



<p>JSPには、HTMLのコメントと、JSP用のコメントの2種類があります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- これはHTMLのコメントです（ブラウザの「ページのソース」に表示されます） -->

&lt;%-- これはJSPのコメントです（ブラウザには一切表示されません） --%>
</pre>



<p>HTMLのコメントはWebページに送信されるため、内容を見られる可能性があります。<br>一方、JSPのコメントはサーバー側で処理が止まるため、セキュリティ的に重要なコメントや開発者向けのメモはJSPのコメントで書くのが安全です。</p>



<h3 class="wp-block-heading"><span id="toc17">スクリプトレットはなるべく使わない</span></h3>



<p>JSPの構文として紹介しましたが、<strong>スクリプトレット（<code>&lt;% ... %></code>）の使用は、今では非推奨</strong>とされています。理由は以下の通り。</p>



<ul class="wp-block-list is-style-icon-list-cross has-list-style">
<li>HTMLとJavaのロジックが混ざることで、読みづらくなる</li>



<li>保守性が下がり、エラーが起きやすくなる</li>



<li>JSTL（JSP標準タグライブラリ）やEL（式言語）の方がシンプルで安全に書ける</li>
</ul>



<p>そのため、今後はJSTLやELを使って、できるだけ「Javaコードを書かずに表示を制御する方法」を覚えていくことが大切です。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><span class="badge-green">まとめ</span>　<strong>JSPの基本構文</strong></p>



<ul class="wp-block-list">
<li>JSPには、ディレクティブ・スクリプトレット・式・宣言という4種類の書き方がある。</li>



<li>スクリプトレットや宣言ではJavaの文法をそのまま使うことができるが、使いすぎは避けるべし。</li>



<li>式（<code>&lt;%= ... %></code>）は、値を簡単に出力するのに便利です。</li>



<li>コメントは、必要に応じてJSPコメント（<code>&lt;%-- --%></code>）を使いましょう。</li>
</ul>
</div>



<p>次の章では、<strong>JSTLとEL（式言語）を使った“スクリプトレットを使わない”JSPの書き方</strong>を学びます。より読みやすく、安全なJSPの記述方法を習得していきましょう。</p>



<h2 class="wp-block-heading"><span id="toc18">ELとJSTLでスクリプトレットのないJSPへ</span></h2>



<p>ここまでの解説では、JSPの基本構文としてスクリプトレット（<code>&lt;% ... %></code>）などを紹介しました。<br>しかし近年のJSP開発では、<strong>スクリプトレットを使わない記述スタイル</strong>が主流となっています。</p>



<p>この章では、<strong>EL（Expression Language）とJSTL（JSP Standard Tag Library）</strong>という2つの仕組みを使って、<strong>JSPファイルの中にJavaコードを書かずに動的な表示を行う方法</strong>を学んでいきます。</p>



<h3 class="wp-block-heading"><span id="toc19">EL（式言語）とは</span></h3>



<p>EL（Expression Language）は、JSPの中で<strong>Javaの値を簡潔に記述するための言語</strong>です。<br>スクリプトレットのように <code>&lt;%=</code> で囲む必要がなく、シンプルに <code>${変数名}</code> と書くだけで値を出力できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;p>こんにちは、${userName} さん。&lt;/p>
</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このコードでは、Javaのサーバー側で <code>userName</code> という名前のデータ（属性）が用意されていれば、自動的にその値が表示されます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc20">JSTL（JSP標準タグライブラリ）とは</span></h3>



<p>JSTLとは、JSP上で使える<strong>共通の処理をあらかじめタグ化したライブラリ</strong>です。<br>たとえば、以下のような処理が可能です。</p>



<ul class="wp-block-list">
<li>条件分岐（if）</li>



<li>繰り返し処理（forEach）</li>



<li>値のフォーマット（日付や数値）</li>



<li>URLの生成</li>
</ul>



<p>JSTLを使うことで、<strong>複雑なJavaの処理をわかりやすいタグで書くことができる</strong>ようになります。</p>



<h4 class="wp-block-heading">JSTLを使う準備</h4>



<p>JSTLを使うには、JSTLライブラリの <code>.jar</code> ファイルを JSPプロジェクトの中に追加する必要があります。</p>



<p class="has-text-align-center"><span class="inline-button-green">手順</span></p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin">JSTLの最新版（Jakarta標準）をダウンロード<br>→ <a>https://jakarta.ee/specifications/tags/</a></li>



<li class="is-style-bottom-margin-2em has-bottom-margin">ダウンロードした <code>jakarta.servlet.jsp.jstl-api-x.x.x.jar</code> などの <code>.jar</code> ファイルを、Tomcatの <code>lib</code> フォルダ、またはプロジェクトの <code>WEB-INF/lib</code> フォルダにコピーします。</li>



<li>JSPファイルの先頭に、以下のようにタグライブラリを読み込む宣言を記述します。</li>
</ol>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%@ taglib prefix="c" uri="https://jakarta.ee/taglibs/core" %>
</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この設定により、<code>&lt;c:if></code> や <code>&lt;c:forEach></code> などのJSTLタグが使えるようになります。</p>
</div></div>



<h4 class="wp-block-heading">JSTLで条件分岐をする</h4>



<p>スクリプトレットで <code>if</code> 文を書かなくても、JSTLの <code>&lt;c:if&gt;</code> タグを使うことで簡単に条件分岐ができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%@ taglib prefix="c" uri="https://jakarta.ee/taglibs/core" %>
&lt;c:if test="${loginUser != null}">
  &lt;p>ようこそ、${loginUser.name} さん&lt;/p>
&lt;/c:if>
</pre>



<p>このように、<code>loginUser</code> という属性が <code>null</code> でなければ、挨拶文が表示されます。</p>



<h4 class="wp-block-heading">JSTLで繰り返し表示をする</h4>



<p>リストや配列の内容を繰り返し表示するには、<code>&lt;c:forEach&gt;</code> を使います。</p>



<p>サーバー側で、次のようにリストをセットしておきます（Servletなどで）：</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">List&lt;String> names = List.of("太郎", "花子", "次郎");
request.setAttribute("nameList", names);
</pre>



<p>JSPファイルでは、次のように記述します：</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%@ taglib prefix="c" uri="https://jakarta.ee/taglibs/core" %>
&lt;ul>
  &lt;c:forEach var="name" items="${nameList}">
    &lt;li>${name}&lt;/li>
  &lt;/c:forEach>
&lt;/ul>
</pre>



<p>このコードにより、以下のようなHTMLが生成されます：</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;ul>
  &lt;li>太郎&lt;/li>
  &lt;li>花子&lt;/li>
  &lt;li>次郎&lt;/li>
&lt;/ul>
</pre>



<h3 class="wp-block-heading"><span id="toc21">JSPをすっきり保つために</span></h3>



<p>ELとJSTLを使うことで、JSPファイル内にJavaのコードを書く必要がなくなり、<strong>HTMLに近い構造を保ちながら動的な処理を行うことができます。</strong><br>これは、JSPを読みやすく・保守しやすくする上でも非常に重要です。</p>



<p>また、デザイナーと共同で作業するようなプロジェクトでも、HTMLに近い見た目を保つことで、分業がしやすくなります。</p>



<h2 class="wp-block-heading"><span id="toc22">フォームからデータを受け取る</span></h2>



<p>JSPを使ってWebアプリケーションを作成する際、ユーザーの入力に応じて処理を行うことは非常に重要です。この章では、<strong>HTMLのフォームを使って入力されたデータを、JSPで受け取って表示する方法</strong>を学びます。</p>



<h3 class="wp-block-heading"><span id="toc23">フォーム送信の流れ</span></h3>



<p>フォームを使った処理は、次のような流れで行われます。</p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li>入力フォームのあるページ（JSP）を表示する</li>



<li>ユーザーが名前などの情報を入力し、送信ボタンを押す</li>



<li>入力内容がサーバーに送られる</li>



<li>受け取ったJSPファイルがその情報を読み取り、画面に表示する</li>
</ol>



<p>JSPではこの一連の流れを、HTMLとJavaの仕組みで簡単に実現できます。</p>



<h3 class="wp-block-heading"><span id="toc24">フォームを作るJSP（entry.jsp）</span></h3>



<p>まずは、名前を入力するための簡単なフォームを作成します。</p>



<h4 class="wp-block-heading">entry.jsp</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html>
&lt;html>
&lt;head>
  &lt;meta charset="UTF-8">
  &lt;title>名前の入力&lt;/title>
&lt;/head>
&lt;body>
  &lt;h2>お名前を入力してください&lt;/h2>
  &lt;form action="result.jsp" method="post">
    &lt;label>名前：&lt;input type="text" name="username" />&lt;/label>
    &lt;input type="submit" value="送信" />
  &lt;/form>
&lt;/body>
&lt;/html>
</pre>



<p>このページでは、名前を入力して「送信」ボタンを押すと、<code>result.jsp</code> にPOSTリクエストでデータが送信されます。</p>



<h3 class="wp-block-heading"><span id="toc25">データを受け取るJSP（result.jsp）</span></h3>



<p>次に、送信されたデータを受け取って表示するためのJSPファイルを作成します。</p>



<h4 class="wp-block-heading">result.jsp</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%@ page contentType="text/html; charset=UTF-8" %>
&lt;!DOCTYPE html>
&lt;html>
&lt;head>
  &lt;meta charset="UTF-8">
  &lt;title>入力結果&lt;/title>
&lt;/head>
&lt;body>
  &lt;h2>ようこそ！&lt;/h2>
  &lt;p>あなたの名前は &lt;strong>&lt;%= request.getParameter("username") %>&lt;/strong> さんですね。&lt;/p>
&lt;/body>
&lt;/html>
</pre>



<p>ここでは、<code>request.getParameter("username")</code> というコードで、フォームから送られたデータを取得しています。</p>



<ul class="wp-block-list">
<li><code>request</code> はJSPに自動で用意されているオブジェクト。</li>



<li><code>getParameter("username")</code> は、フォームの<code>name="username"</code> に対応した値を取得するメソッド。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc26">ELを使って書き換える</span></h3>



<p>JSTLやELを使えば、<code>result.jsp</code> をもっとすっきり書くこともできます。以下のようにリクエスト属性に値をセットしてから表示することで、式言語を活用できます。</p>



<h4 class="wp-block-heading">Servlet側（例）</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">String name = request.getParameter("username");
request.setAttribute("username", name);
request.getRequestDispatcher("/result.jsp").forward(request, response);
</pre>



<h4 class="wp-block-heading">result.jsp：</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%@ taglib prefix="c" uri="https://jakarta.ee/taglibs/core" %>
&lt;p>こんにちは、${username} さん！&lt;/p>
</pre>



<p>ただし、Servletを使う方法はこのガイドの後半で詳しく扱いますので、今はまず <code>request.getParameter()</code> による受け取りに慣れることをおすすめします。</p>



<h2 class="wp-block-heading"><span id="toc27">セッションとCookieでデータを保持する</span></h2>



<p>JSPでは、ユーザーが入力した情報を「別のページでも使いたい」という場面がよくあります。<br>たとえば、ログイン状態を維持したり、前の画面で入力された名前を次の画面でも表示したりする場合です。</p>



<p>そのようなときに役立つのが <strong>セッション（Session）</strong> と <strong>クッキー（Cookie）</strong> です。<br>この章では、それぞれの役割と使い方を学びます。</p>



<h3 class="wp-block-heading"><span id="toc28">セッションの基本操作</span></h3>



<h4 class="wp-block-heading">データの保存：</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%
  String name = request.getParameter("username");
  session.setAttribute("userName", name);
%>
</pre>



<p>このコードは、<code>userName</code> という名前でセッションに値を保存します。</p>



<h4 class="wp-block-heading">データの取得：</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%
  String name = (String) session.getAttribute("userName");
%>
&lt;p>ようこそ、&lt;%= name %> さん&lt;/p>
</pre>



<p>このようにすれば、<strong>前のページで保存した値を、別のページで取り出して使うことができます。</strong></p>



<h4 class="wp-block-heading">セッションの有効期間と注意点</h4>



<p>セッションは、ユーザーがブラウザを閉じるか、一定時間操作をしないと自動的に無効になります。Tomcatの初期設定では、30分間操作がないとセッションが切れます。</p>



<p>また、<strong>多くの情報をセッションに保存しすぎると、サーバーのメモリを圧迫する可能性がある</strong>ため、用途を絞って使うことが大切です。</p>



<h3 class="wp-block-heading"><span id="toc29">Cookieとは</span></h3>



<p>Cookie（クッキー）は、<strong>情報をユーザーのブラウザに保存する仕組み</strong>です。<br>サーバー側から「この情報を保存しておいてください」と指示すると、ブラウザがその内容を保持し、次回以降のアクセス時にその情報を自動的に送信してきます。</p>



<h3 class="wp-block-heading"><span id="toc30">Cookieの基本操作</span></h3>



<h4 class="wp-block-heading">Cookieの作成と送信：</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%
  String name = request.getParameter("username");
  Cookie cookie = new Cookie("userName", name);
  cookie.setMaxAge(60 * 60); // 1時間（秒単位）
  response.addCookie(cookie);
%>
</pre>



<h4 class="wp-block-heading">Cookieの取得：</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%
  String name = "";
  Cookie[] cookies = request.getCookies();
  if (cookies != null) {
    for (Cookie c : cookies) {
      if ("userName".equals(c.getName())) {
        name = c.getValue();
      }
    }
  }
%>
&lt;p>こんにちは、&lt;%= name %> さん&lt;/p>
</pre>



<p>このように、Cookieを使えば、ブラウザに保存された情報を次回のアクセス時にも利用できます。</p>



<h3 class="wp-block-heading"><span id="toc31">セッションとCookieの使い分け</span></h3>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table class="has-fixed-layout"><thead><tr><th>比較項目</th><th>セッション</th><th>Cookie</th></tr></thead><tbody><tr><td>保存場所</td><td>サーバー側</td><td>ブラウザ側</td></tr><tr><td>有効期間</td><td>ログアウトや時間切れまで</td><td>明示的に期限を設定できる</td></tr><tr><td>データの大きさ</td><td>比較的大きなデータがOK</td><td>少量（4KBまで）</td></tr><tr><td>セキュリティ</td><td>比較的安全（外部に見えない）</td><td>攻撃に注意が必要（盗聴・改ざん）</td></tr></tbody></table></div></figure>



<p><strong>一時的な状態保持（ログイン情報など）にはセッション</strong>、<br><strong>ユーザーに関連する設定（言語選択やテーマなど）にはCookie</strong>がよく使われます。</p>



<h2 class="wp-block-heading"><span id="toc32">JSPで簡単なアンケートアプリを作ろう</span></h2>



<p>JSPを使ってWebアプリケーションを作るには、「複数ページにまたがる処理」を整理することが大切です。<br>この章では、<strong>3画面構成のアンケートアプリ</strong>を作り、情報の受け渡し、表示の切り替え、セッションの活用を総合的に体験します。</p>



<h3 class="wp-block-heading"><span id="toc33">アプリの構成と目的</span></h3>



<p>このアプリでは、以下のような流れでユーザーにアンケートに答えてもらい、最終画面でまとめて表示します。</p>



<ol class="wp-block-list">
<li><strong>入力画面</strong>：名前と好きな色を入力（form）</li>



<li><strong>確認画面</strong>：入力された内容を表示（セッションで一時保持）</li>



<li><strong>完了画面</strong>：ありがとうメッセージと入力内容の最終確認</li>
</ol>



<p class="has-text-align-center"><strong>プロジェクト構造</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">jsp-demo/
├─ input.jsp     （入力画面）
├─ confirm.jsp   （確認画面）
└─ thanks.jsp    （完了画面）
</pre>



<h4 class="wp-block-heading">入力画面：input.jsp</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%@ page contentType="text/html; charset=UTF-8" %>
&lt;!DOCTYPE html>
&lt;html>
&lt;head>&lt;meta charset="UTF-8">&lt;title>アンケート入力&lt;/title>&lt;/head>
&lt;body>
  &lt;h2>アンケートにご協力ください&lt;/h2>
  &lt;form action="confirm.jsp" method="post">
    &lt;p>お名前：&lt;input type="text" name="userName" />&lt;/p>
    &lt;p>好きな色：
      &lt;select name="favoriteColor">
        &lt;option value="赤">赤&lt;/option>
        &lt;option value="青">青&lt;/option>
        &lt;option value="緑">緑&lt;/option>
      &lt;/select>
    &lt;/p>
    &lt;input type="submit" value="確認画面へ" />
  &lt;/form>
&lt;/body>
&lt;/html>
</pre>



<h4 class="wp-block-heading">確認画面：confirm.jsp</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%@ page contentType="text/html; charset=UTF-8" %>
&lt;%
  String userName = request.getParameter("userName");
  String favoriteColor = request.getParameter("favoriteColor");

  session.setAttribute("userName", userName);
  session.setAttribute("favoriteColor", favoriteColor);
%>
&lt;!DOCTYPE html>
&lt;html>
&lt;head>&lt;meta charset="UTF-8">&lt;title>確認画面&lt;/title>&lt;/head>
&lt;body>
  &lt;h2>以下の内容でよろしいですか？&lt;/h2>
  &lt;p>お名前：&lt;%= userName %>&lt;/p>
  &lt;p>好きな色：&lt;%= favoriteColor %>&lt;/p>
  &lt;form action="thanks.jsp" method="post">
    &lt;input type="submit" value="送信する" />
  &lt;/form>
&lt;/body>
&lt;/html>
</pre>



<h4 class="wp-block-heading">完了画面：thanks.jsp</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;%@ page contentType="text/html; charset=UTF-8" %>
&lt;%
  String name = (String) session.getAttribute("userName");
  String color = (String) session.getAttribute("favoriteColor");

  // 必要があればセッションのデータを破棄
  session.invalidate();
%>
&lt;!DOCTYPE html>
&lt;html>
&lt;head>&lt;meta charset="UTF-8">&lt;title>送信完了&lt;/title>&lt;/head>
&lt;body>
  &lt;h2>ご協力ありがとうございました！&lt;/h2>
  &lt;p>&lt;strong>&lt;%= name %>&lt;/strong> さんの好きな色は &lt;strong>&lt;%= color %>&lt;/strong> ですね。&lt;/p>
&lt;/body>
&lt;/html>
</pre>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center">&#x2705; まとめ</p>



<ul class="wp-block-list">
<li><strong>JSPとは何か</strong>
<ul class="wp-block-list">
<li>HTMLにJavaの処理を埋め込んで、動的なWebページを作成できる技術</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">サーバー側で処理され、HTMLとしてブラウザに返される</li>
</ul>
</li>



<li><strong>JSPの実行に必要な環境</strong>
<ul class="wp-block-list">
<li>JDKとTomcatが必須（Java実行環境とWebサーバー）</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">JSPファイルはTomcatの<code>webapps</code>内に配置することで動作する</li>
</ul>
</li>



<li><strong>JSPファイルの基本構文</strong>
<ul class="wp-block-list">
<li><code>&lt;%@ page %></code>：ページ全体の設定</li>



<li><code>&lt;%= ... %></code>：Javaの値をHTMLに出力</li>



<li><code>&lt;% ... %></code>：処理を書く（スクリプトレット）</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><code>&lt;%! ... %></code>：変数やメソッドの宣言</li>
</ul>
</li>



<li><strong>スクリプトレットの非推奨と代替方法</strong>
<ul class="wp-block-list">
<li>EL（式言語）で<code>${変数名}</code>と書くと簡単に出力可能</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">JSTLで<code>&lt;c:if></code>や<code>&lt;c:forEach></code>などの制御構文を記述可能</li>
</ul>
</li>



<li><strong>フォームデータの送受信</strong>
<ul class="wp-block-list">
<li><code>&lt;form></code>タグでデータをPOST送信し、<code>request.getParameter()</code>で取得</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">データをセッションに保存して複数ページで利用可能</li>
</ul>
</li>



<li><strong>セッションとCookieの使い分け</strong>
<ul class="wp-block-list">
<li>セッション：サーバー側に一時的に情報を保持（ログイン状態など）</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">Cookie：ブラウザに保存し、次回アクセス時に自動送信（言語設定など）</li>
</ul>
</li>
</ul>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Angular】ルーティングの仕組みを１からわかりやすく</title>
		<link>https://it-biz.online/web-design/angular-routing/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Mon, 18 Mar 2024 08:19:12 +0000</pubDate>
				<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[WEBデザイン]]></category>
		<category><![CDATA[Angular]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=9010</guid>

					<description><![CDATA[Angularのルーティングは、シングルページアプリケーション（SPA）でのページ遷移を管理する重要な機能です。 目次 Angular：ルーティングとは？Angularでのルーティング設定Angular：&#60;rout [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://it-biz.online/web-design/what-is-angular/">Angular</a>のルーティングは、シングルページアプリケーション（SPA）での<strong><span class="marker-under">ページ遷移を管理する重要な機能</span></strong>です。</p>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">Angularにおける「ルーティング」とは？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>Angularにおけるルーティングとはアプリケーション内でユーザーが異なるページやセクションに移動する際の道案内のようなもの。Angularでは実際にページを「移動する」のではなく「<strong>ページの内容を書き換える</strong>」ことでページが遷移したかのように見せる技術を採用しています。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>？？？となってしまった方でも１から理解できるように前提の前提から理解できるようにわかりやすく解説します。</p>
</div></div>




  <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">Angular：ルーティングとは？</a></li><li><a href="#toc2" tabindex="0">Angularでのルーティング設定</a></li><li><a href="#toc3" tabindex="0">Angular：&lt;router-outlet&gt;とは何か？</a></li><li><a href="#toc4" tabindex="0">ナビゲーションとリンク</a><ol><li><a href="#toc5" tabindex="0">ナビゲーションリンク（routerLinkディレクティブ）</a></li><li><a href="#toc6" tabindex="0">プログラムによるナビゲーション（Routerサービス）</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Angular：ルーティングとは？</span></h2>



<p>Angularのルーティングは、<strong>Webアプリケーション内でのページ遷移（＝実際にはページを遷移するのではなく、今見ているページの内容を書き換える）を制御する仕組み</strong>。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="643" height="478" src="https://it-biz.online/wp-content/uploads/2024/03/image-20.png" alt="Angular ルーティング" class="wp-image-9022" srcset="https://it-biz.online/wp-content/uploads/2024/03/image-20.png 643w, https://it-biz.online/wp-content/uploads/2024/03/image-20-500x372.png 500w, https://it-biz.online/wp-content/uploads/2024/03/image-20-300x223.png 300w" sizes="(max-width: 643px) 100vw, 643px" /><figcaption class="wp-element-caption">図1：ルーティングイメージ</figcaption></figure>



<p>通常のWebアプリケーションでは複数のページ（ユーザ情報表示用ページ、トップページ、レポートページなど）があり、リンクをたどることでそれぞれのページに遷移していくのですが、AngularはSPA（<strong>シングルページ</strong>アプリケーション）なのでそのような動作はしません。</p>



<p>シングルページアプリケーション（SPA）では、従来のWebサイトのようにページを全て読み込み直して表示するのではなく、必要なデータやコンポーネントのみを動的に読み込むことでページの内容を更新します。つまり、ここでいう「ページ遷移」とは、実際にはページをまたいで移動するのではなく、<strong><span class="marker-under">単一のページ内で表示内容を切り替えることを指します。</span></strong></p>



<p>この方法を採用することで、リンクをクリックするたびに発生する全画面の読み込みを待つことなく、<strong>ほぼ即座に新しいコンテンツを見ることができるようになります</strong>。また、このページ遷移のプロセスはブラウザの履歴管理と連携しているので、ユーザーがブラウザの「戻る」や「進む」ボタンを使用しても、適切なコンテンツが表示されるようにできている点が特徴です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Angularでは別のページに移動しているわけではなく、１つのページ内で表示を変えている！ってのを理解できればOKです。</p>
</div></div>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box not-nested-style cocoon-block-tab-caption-box"><div class="tab-caption-box-label block-box-label box-label fab-lightbulb"><span class="tab-caption-box-label-text block-box-label-text box-label-text">ネットワークのルーティングとの違い</span></div><div class="tab-caption-box-content block-box-content box-content">
<p>ネットワークのルーティングはインターネットやその他のネットワーク上でデータパケットが目的地に到達するための最適な経路を選択するプロセス。</p>



<p>これに対して、Angularのルーティングは、Webアプリケーション内の異なるビュー間の移動を管理するためのもので、主にクライアントサイド（ユーザーのブラウザ上）で処理されます。</p>
</div></div>



<p>それでは、ここから具体的な実装方法を見ていきます。Angularではどのようにページ遷移を実現しているのか？という点に注目してください。</p>



<h2 class="wp-block-heading"><span id="toc2">Angularでのルーティング設定</span></h2>



<p>Angularでのルーティング設定を４ステップにわけて説明します。ざっくり言うと、ルーティング用のモジュール（ここにはURLと表示するコンポーネントの紐づけ情報を保持）を作って、そのモジュールをアプリケーションモジュールにImportするという手順です。</p>



<p class="is-style-border-left-box has-box-style"><span class="badge-green">ステップ１</span>　<strong>ルーティングモジュールの作成</strong></p>



<p>Angular CLIを使用して、ルーティングモジュールを作成します。このモジュールは、ルート（<strong>URLパターンとそれに対応する<a href="https://it-biz.online/web-design/ng-generate-component/">Angularコンポーネント</a>のマッピング</strong>）の定義を保持します。</p>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">Angular CLIとは？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>Angularアプリケーションの開発を助けるためのコマンドラインツール。Angular CLIは、新しいプロジェクトの生成、アプリケーションの開発サーバーの起動、コードのテスト、アプリケーションのビルドやデプロイなど、開発プロセスの多くの側面を自動化し、簡単に行えるように設計されています。</p>
</div></dd></dl></div>



<p>コマンドは以下の通り。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">ng generate module app-routing --flat --module=app</pre>



<ol class="wp-block-list">
<li><span class="bold-blue"><code>--flat</code>フラグ</span>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-1em has-bottom-margin">新しいフォルダを作成せずにファイルをプロジェクトのルートに直接置くことを指定。</li>
</ul>
</li>



<li><code><span class="bold-blue">--module=app</span></code>
<ul class="wp-block-list">
<li>新しく生成されたルーティングモジュールをアプリケーションのルートモジュールに自動的にインポートするように指定。</li>
</ul>
</li>
</ol>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このフラグは必要に応じて書き換えてください。</p>
</div></div>



<p class="is-style-border-left-box has-box-style"><span class="badge-green">ステップ２</span>　<strong>ルートの定義</strong></p>



<p>ルーティングモジュール（例: <code>app-routing.module.ts</code>）内で、<code><span class="blue">Routes</span></code>型の配列を定義し、各ルートを設定します。<code><span class="blue">Routes</span></code>型は<code><strong><span class="marker-under">@angular/router</span></strong></code>からインポートされます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component'; // 例としてHomeComponentをインポート
import { AboutComponent } from './about/about.component'; // AboutComponentも例として

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'about', component: AboutComponent },
  // その他のルート定義...
];</pre>



<p>↑の配列は<code><span class="blue">path</span></code>と<code><span class="blue">component</span></code>プロパティを持ちます。<code><span class="blue">path</span></code>はURLの一部。<code><span class="blue">component</span></code>にはそのURLが指定されたときに表示されるコンポーネントを指定します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>/home を含むURLを押したときに「HomeComponent」を表示するよ！ということ。</p>
</div></div>



<p class="is-style-border-left-box has-box-style"><span class="badge-green">ステップ３</span>　<strong>RouterModuleのインポートと設定</strong></p>



<p>次に、<code><span class="blue">RouterModule</span></code>をルーティングモジュールにインポートし、<code>forRoot()</code>メソッドを使ってアプリケーションのルートルートを設定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }</pre>



<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin"><code><span class="blue">imports</span></code>配列で<code><span class="blue">RouterModule.forRoot(routes)</span></code>を呼び出すことにより、先ほど定義したルートがアプリケーションに登録されます。</li>



<li><code><span class="blue">exports</span></code>配列に<code><span class="blue">RouterModule</span></code>を含めることで、ルーティング機能がアプリケーションの他の部分から利用可能になります。</li>
</ul>



<p class="is-style-border-left-box has-box-style"><span class="badge-green">ステップ４</span>　<strong>アプリケーションモジュールにルーティングモジュールをインポート</strong></p>



<p>最後に、<code><span class="blue">AppRoutingModule</span></code>をアプリケーションのルートモジュール（通常は<code>app.module.ts</code>）にインポートします。これは、Angular CLIを使用してルーティングモジュールを生成した場合、自動的に行われることが多いですが、手動で行う必要がある場合もあります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import { AppRoutingModule } from './app-routing.module'; // AppRoutingModuleのインポート

@NgModule({
  // ...
  imports: [
    // ...
    AppRoutingModule // ルーティングモジュールをインポート
  ],
  // ...
})
export class AppModule { }</pre>



<p>これで、ルーティングの基本設定は完了。実はそんなに難しいことはしていません。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>が、Angularのルーティングはここからが本番です。ページを切り替えたときにどのコンポーネントを表示するか？は決まったものの、どこに表示するか？を決められていません。</p>
</div></div>



<p>続いては、ルーターアウトレット（<code><strong><span class="marker-under">router-outlet</span></strong></code>）についてご説明します。</p>



<h2 class="wp-block-heading"><span id="toc3">Angular：&lt;router-outlet&gt;とは何か？</span></h2>



<p><code>&lt;router-outlet&gt;</code>は、テンプレート内に配置されるディレクティブ（指示子）で、<strong><span class="marker-under">Angularが動的にコンポーネントを表示する場所</span></strong>を表します。</p>



<p>つまり、URLに基づいて、コンポーネントをこの<code>&lt;router-outlet&gt;</code>の場所に読み込む役割を持ちます。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="560" height="342" src="https://it-biz.online/wp-content/uploads/2024/03/image-21.png" alt="Angular router-outlet" class="wp-image-9023" srcset="https://it-biz.online/wp-content/uploads/2024/03/image-21.png 560w, https://it-biz.online/wp-content/uploads/2024/03/image-21-500x305.png 500w, https://it-biz.online/wp-content/uploads/2024/03/image-21-300x183.png 300w" sizes="(max-width: 560px) 100vw, 560px" /><figcaption class="wp-element-caption">図2：Angular router-outlet</figcaption></figure>



<p class="has-text-align-center"><span class="badge-blue">サンプルコード</span>　<strong>router-outlet</strong></p>



<p><code><span class="blue">app-routing.module.ts</span></code>に、2つのコンポーネントへのルートを定義。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'about', component: AboutComponent },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }</pre>



<p><code><span class="blue">app.component.html</span></code>（または任意のテンプレートファイル）に<code><span class="blue">&lt;router-outlet&gt;</span></code>を配置。これにより、ルートに応じてコンポーネントがこの場所に表示されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- ナビゲーションリンク -->
&lt;nav>
  &lt;ul>
    &lt;li>&lt;a routerLink="/home">Home&lt;/a>&lt;/li>
    &lt;li>&lt;a routerLink="/about">About&lt;/a>&lt;/li>
  &lt;/ul>
&lt;/nav>

&lt;!-- ルートコンポーネントが表示される場所 -->
&lt;router-outlet>&lt;/router-outlet></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記の例では、ブラウザで<code>/home</code>や<code>/about</code>にアクセスすると、<code>&lt;router-outlet&gt;</code>の位置に対応するコンポーネントが表示されるということです。</p>
</div></div>



<p><code>&lt;router-outlet&gt;</code>がAngularアプリケーションにおけるルーティングとビューの管理の中心であることが理解できましたか？実際には、さらに多くのルートや複雑なナビゲーション構造を設定することができますが、基本的な考え方は同じ。</p>



<p><code>&lt;router-outlet&gt;</code>は、Angularでのルーティングシステムにおいて、動的にコンポーネントを表示する場所を指定するディレクティブ。アプリケーションのナビゲーションに従って、指定されたコンポーネントをこの場所に読み込み、表示します。</p>



<h2 class="wp-block-heading"><span id="toc4">ナビゲーションとリンク</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後にリンクの設定方法を解説します。</p>
</div></div>



<p>ルーティングモジュール（コンポーネントとURLの紐づけ）、ルーターアウトレット（コンポーネントの表示領域）の設定が完了したら、あとは画面上に上記のURLを配置していくだけ。ただし、普通にHTMLの<a href="https://it-biz.online/web-design/link/">aタグ</a>を配置するだけでは不十分です。</p>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">なぜ、aタグでリンクを貼るだけではだめなのでしょうか。</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>従来の<code>&lt;a&gt;</code>タグを使用してWebページ間でリンクを作成すると、リンク先のページへ移動する際にブラウザは現在のページをアンロードし、<span class="marker-under">新しいページを完全に読み込むため</span>。（＝SPAとしてのメリットが享受できない）</p>
</div></dd></dl></div>



<p>Angularでは、ページ遷移を実現するために、ディレクティブとプログラム的な方法の両方を提供しています。ここでは、両方の方法を使ってナビゲーションを実装する方法について詳しく見ていきましょう。</p>



<h3 class="wp-block-heading"><span id="toc5">ナビゲーションリンク（routerLinkディレクティブ）</span></h3>



<p>Angularでは、テンプレート内で<code><span class="blue">&lt;a&gt;</span></code>タグに<code><span class="blue">routerLink</span></code>ディレクティブを使用して、ナビゲーションリンクを簡単に作成することができます。<code>routerLink</code>は、<strong><span class="marker-under">ユーザーがリンクをクリックしたときに遷移するパスを指定</span></strong>します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;nav>
  &lt;ul>
    &lt;li>&lt;a routerLink="/home">Home&lt;/a>&lt;/li>
    &lt;li>&lt;a routerLink="/about">About&lt;/a>&lt;/li>
  &lt;/ul>
&lt;/nav></pre>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/nav/">navタグ</a> / <a href="https://it-biz.online/web-design/list/">リストタグ</a></p>



<p>このサンプルコードでは、ホームページ(<code>/home</code>)と詳細ページ(<code>/about</code>)へのリンクを含むナビゲーションバーを作成しています。ユーザーがこれらのリンクのいずれかをクリックすると、指定されたパスに対応するコンポーネントを<code>&lt;router-outlet&gt;</code>に表示します。</p>



<h3 class="wp-block-heading"><span id="toc6">プログラムによるナビゲーション（Routerサービス）</span></h3>



<p>Angularでは、<code><span class="blue">Router</span></code>サービスをインジェクトしてプログラムによるナビゲーションを実装することもできます。これは、ユーザーがフォームを送信した後や、特定のイベントが発生したときなど、コード内から直接ページ遷移をトリガーする場合に便利です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ちょっと難しいですが、実際のコードを見てみましょう。コンポーネントクラス内で<code>Router</code>サービスを使う方法は以下の通り。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import { Component } from '@angular/core';
import { Router } from '@angular/router';

@Component({
  selector: 'app-example',
  templateUrl: './example.component.html',
})
export class ExampleComponent {
  constructor(private router: Router) {}

  navigateToHome() {
    this.router.navigate(['/home']);
  }
}</pre>



<p>そして、テンプレート内で、このメソッドをイベント（例えば、ボタンクリック）にバインドします。↓の例では、<code><span class="blue">navigateToHome</span></code>メソッドがボタンクリックイベントにバインドされているので、このメソッドが実行されると、アプリケーションは<code>/home</code>パスに遷移させます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;button (click)="navigateToHome()">Go to Home&lt;/button></pre>



<p>最後にAngularにおけるルーティングの基本知識を表形式で整理します。自分の理解が十分であるかどうか？チェックしておきましょう。</p>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>項目</th><th>説明</th></tr></thead><tbody><tr><td><strong>ルーティングとは</strong></td><td>URLとコンポーネントをマッピングし、アプリケーション内のナビゲーションを管理する仕組み。</td></tr><tr><td><strong>RouterModule</strong></td><td>Angularのルーティングを管理するためのモジュール。<code>@angular/router</code>からインポートする。</td></tr><tr><td><strong>Routes</strong></td><td>アプリケーション内の各ルート（パスとコンポーネントのマッピング）を定義する配列。</td></tr><tr><td><strong>routerLink</strong></td><td>テンプレート内でリンクを作成し、ユーザーが異なるコンポーネント間をナビゲートできるようにするディレクティブ。</td></tr><tr><td><strong>&lt;router-outlet&gt;</strong></td><td>ルートに応じてコンポーネントが表示される場所をテンプレート内に指定するディレクティブ。</td></tr><tr><td><strong>Router</strong></td><td>プログラムによるナビゲーションを実行するためのサービス。コンポーネント内で<code>navigate</code>や<code>navigateByUrl</code>メソッドを使用。</td></tr></tbody></table></div></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Angular：モジュール@NgModuleの基本を１からわかりやすく</title>
		<link>https://it-biz.online/web-design/ngmodule/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Mon, 11 Mar 2024 09:47:12 +0000</pubDate>
				<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[WEBデザイン]]></category>
		<category><![CDATA[Angular]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8995</guid>

					<description><![CDATA[@NgModuleはAngularでモジュールを作成する際の宣言文のような役割を果たすデコレータです。@NgModuleを用いることで指定したクラスがモジュールであることを明示的に宣言します。 このページでは、Angul [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><code><span class="bold-blue">@NgModule</span></code>はAngularで<strong><span class="marker-under">モジュールを作成する際の宣言文のような役割を果たすデコレータ</span></strong>です。<code><span class="bold-blue">@NgModule</span></code>を用いることで指定したクラスがモジュールであることを明示的に宣言します。</p>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">モジュールとは？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>モジュールとは関連するコードの集まりのこと。Angularにおけるモジュールは、<a href="https://it-biz.online/web-design/ng-generate-component/">コンポーネント</a>、サービス、ディレクティブ、パイプなど、アプリケーションを構成する部品をまとめる役割を担います。</p>
</div></dd></dl></div>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 必要なAngularのコアモジュールをインポート
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

// アプリケーションが使用するコンポーネントをインポート
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent // アプリケーションのコンポーネントを宣言
  ],
  imports: [
    BrowserModule // ブラウザで動作するアプリケーションに必要なモジュールをインポート
  ],
  providers: [], // サービスプロバイダー
  bootstrap: [AppComponent] // アプリケーションのルートコンポーネントを指定
})
export class AppModule { }</pre>



<p>このページでは、Angular初心者の方向けにそもそもモジュールとは何か？という初歩の初歩から解説し、<code><span class="bold-blue">@NgModule</span></code>の意味と基本的な使い方を１からわかりやすくサンプルコード付きで解説します。</p>




  <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">Angularのモジュールとは？</a><ol><li><a href="#toc2" tabindex="0">モジュールの必要性</a></li></ol></li><li><a href="#toc3" tabindex="0">Angular：@NgModuleデコレータ</a><ol><li><a href="#toc4" tabindex="0">@NgModuleの構文ルール</a></li><li><a href="#toc5" tabindex="0">@NgModuleデコレータのプロパティ</a></li></ol></li><li><a href="#toc6" tabindex="0">モジュールの使用</a><ol><li><a href="#toc7" tabindex="0">ステップ1: 機能モジュールの作成</a></li><li><a href="#toc8" tabindex="0">ステップ2: モジュールの利用</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Angularのモジュールとは？</span></h2>



<p>Angularのモジュールは、<strong>レゴブロックのセット</strong>のようなものです。</p>



<p>レゴは１つひとつの小さなブロックを組み合わせて様々なものを組み立てていきますよね。たとえば、家を作る時には、窓のブロック、ドアのブロック、屋根のブロックなど、それぞれのパーツを組み合わせることで１つの家を作り上げることができます。<br>レゴブロックに家を組み立てるためのブロックセットがあるように、Webページの一部分を作るために必要な「コンポーネント」や「サービス」などのパーツを１つにまとめたものとして、Angularの<strong>モジュール</strong>が存在します。</p>



<p>例えば、「プロフィールページ」というモジュールがあるとすると、このモジュールには「ユーザーの写真を表示するパーツ」「ユーザーの名前を表示するパーツ」「連絡先を表示するパーツ」などが含まれるかもしれません。これらのパーツを１つにまとめたものが「プロフィールページモジュール」です。</p>



<h3 class="wp-block-heading"><span id="toc2">モジュールの必要性</span></h3>



<p>大きなレゴの城を組み立てるとき、0から100までの全部を一度に組み立てようとすると大変です。（土台から天守閣までの一度に作成しようとすると、作業中に「いまは何をしていたっけ？」というように混乱してしまう・・・）</p>



<p>しかし、城の一部分ごとにセットを分けて、それぞれのセットを別々に組み立ててから、最後に全部をつなげるともっと簡単にできます。まずは、土台を作り、次に1階部分、2階部分として作成し、最後にそれぞれのブロックを連結させて作った方が簡単です。</p>



<p>Angularのモジュールも同じで、Webアプリケーションをいろいろなモジュール（セット）に分けることで、ひとつひとつをシンプルに作っていくことができます。そして、全部のモジュールが完成したら、それをつなげて一つの大きなWebアプリケーションを完成させるようなイメージです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このモジュールを作成するために利用するのが<code><span class="bold-blue">@NgModule</span></code>です。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc3">Angular：@NgModuleデコレータ</span></h2>



<p><code><strong><span class="bold-blue">@NgModule</span></strong></code>はAngularの<strong>デコレータ</strong>の一種で、<strong><span class="marker-under">指定したクラスをAngularモジュールとして識別</span></strong>する役割を担います。モジュールのメタデータをAngularフレームワークに提供するために使用され、モジュールの振る舞いを定義します。</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/web-design/typescript-decorator/" title="【TypeScript】デコレータ＠とは？1分でわかりやすく解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2025/04/image-17-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2025/04/image-17-320x180.png 320w, https://it-biz.online/wp-content/uploads/2025/04/image-17-240x135.png 240w, https://it-biz.online/wp-content/uploads/2025/04/image-17-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【TypeScript】デコレータ＠とは？1分でわかりやすく解説</div><div class="blogcard-snippet internal-blogcard-snippet">Angularのデコレータは、コードをより宣言的で簡潔にし、フレームワークの機能を効果的に活用するための強力なツールです。この記事で紹介した主要なデコレータを理解することで、Angularアプリケーションの開発がよりスムーズに進むはずです。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.04.23</div></div></div></div></a>
</div></figure>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">モジュールのメタデータとは？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>メタデータには、モジュールに属するコンポーネント、インポートされる他のモジュール、提供するサービス、アプリケーションの起動時に最初にロードするコンポーネントなどが含まれます。<code>@NgModule</code>を使用することで、アプリケーションの構造をAngularに伝え、依存関係の注入、コンポーネントのスコープ、再利用可能な機能のグループ化などを実現します。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ひとまずここでは「<strong>モジュールはいろんな部品をまとめた１つの箱</strong>」のようなイメージを持てればOK。</p>
</div></div>



<p>言葉だけで説明されても、中々イメージは湧かないと思いますので、早速モジュールの作成方法～利用方法までをサンプルコード付きで解説していきます。</p>



<h3 class="wp-block-heading"><span id="toc4">@NgModuleの構文ルール</span></h3>



<p><code>@NgModule</code>デコレータは、クラス定義の直前に配置。デコレータは次のように使用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@NgModule({
  // プロパティ: 値
})
export class MyModule {}</pre>



<h3 class="wp-block-heading"><span id="toc5">@NgModuleデコレータのプロパティ</span></h3>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>プロパティ</th><th>説明</th></tr></thead><tbody><tr><td><code>declarations</code></td><td>モジュール内で使用されるコンポーネント、ディレクティブ、パイプを宣言。<br>これらはモジュール内でのみ参照可能。</td></tr><tr><td><code>imports</code></td><td>現在のモジュールで必要とされる他のモジュールを指定。<br>→インポートされたモジュールのコンポーネント、ディレクティブなどを使用できるようになる。</td></tr><tr><td><code>exports</code></td><td>他のモジュールで使用できるようにするコンポーネント、ディレクティブ、パイプを指定。<br>これらは<code>declarations</code>で宣言されたもののサブセット。</td></tr><tr><td><code>providers</code></td><td>モジュールで使用されるサービスのプロバイダーを指定。→サービスがモジュール内のすべてのコンポーネントで利用可能になります。</td></tr><tr><td><code>bootstrap</code></td><td>アプリケーションの起動時にインスタンス化されるルートコンポーネントを指定。このプロパティは主にルートモジュールで使用される。</td></tr><tr><td><code>schemas</code></td><td>テンプレートで使用されるカスタム要素や属性を許可するために使用。例えば、<code>NO_ERRORS_SCHEMA</code>や<code>CUSTOM_ELEMENTS_SCHEMA</code>があります。</td></tr><tr><td><code>id</code></td><td>モジュールのIDを指定します。これは通常、遅延ロードされるモジュールに使用されます。</td></tr></tbody></table></div></figure>



<p>これらのプロパティを使用して、Angularモジュールを定義し、アプリケーションの構造を整理することができます。</p>



<p class="has-text-align-center"><span class="badge-green">サンプルコード</span>　<strong>Angularモジュールの作成例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 必要なAngularのコアモジュールをインポート
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

// アプリケーションが使用するコンポーネントをインポート
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent // アプリケーションのコンポーネントを宣言
  ],
  imports: [
    BrowserModule // ブラウザで動作するアプリケーションに必要なモジュールをインポート
  ],
  providers: [], // サービスプロバイダー（ここでは空）
  bootstrap: [AppComponent] // アプリケーションのルートコンポーネントを指定
})
export class AppModule { }</pre>



<p><code>AppModule</code>はAngularのルートモジュールとして機能し、アプリケーションで最初にロードされるモジュールです。<code>declarations</code>には、このモジュールが直接使用する<code>AppComponent</code>が含まれています。<code>imports</code>には、アプリケーションがブラウザで動作するために必要な<code>BrowserModule</code>が含まれています。<code>bootstrap</code>には、アプリケーションの起動時に最初にロードされるコンポーネントが指定されています。</p>



<h2 class="wp-block-heading"><span id="toc6">モジュールの使用</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここからは、具体的な例を用いて実際にモジュールを定義する方法を見ていきましょう。</p>
</div></div>



<p class="has-text-align-center is-style-clip-box has-box-style"><strong>サンプルシナリオ</strong></p>



<p>アプリケーションに「ユーザー管理機能」と「注文管理機能」があるとします。これらの機能をそれぞれ別のモジュールで管理することにしました。<code><span class="bold-blue">UserModule</span></code>と<code><span class="bold-blue">OrderModule</span></code>を作成し、それぞれに関連するコンポーネントやサービスをグループ化します。</p>



<h3 class="wp-block-heading"><span id="toc7">ステップ1: 機能モジュールの作成</span></h3>



<p><code>UserModule</code>には、ユーザー一覧を表示する<code><span class="bold-blue">UserListComponent</span></code>とユーザーの詳細を表示する<code><span class="bold-blue">UserDetailComponent</span></code>を含めます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// src/app/user/user.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { UserListComponent } from './user-list.component';
import { UserDetailComponent } from './user-detail.component';

@NgModule({
  declarations: [UserListComponent, UserDetailComponent],
  imports: [CommonModule],
  exports: [UserListComponent] // UserListComponentを外部に公開
})
export class UserModule {}</pre>



<p>同様に、<code><span class="bold-blue">OrderModule</span></code>には注文一覧を表示する<code><span class="bold-blue">OrderListComponent</span></code>を含めます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// src/app/order/order.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { OrderListComponent } from './order-list.component';

@NgModule({
  declarations: [OrderListComponent],
  imports: [CommonModule],
  exports: [OrderListComponent] // OrderListComponentを外部に公開
})
export class OrderModule {}</pre>



<h3 class="wp-block-heading"><span id="toc8">ステップ2: モジュールの利用</span></h3>



<p><code>AppModule</code>（ルートモジュール）で<code>UserModule</code>と<code>OrderModule</code>を利用することにします。これにより、アプリケーション全体でユーザー管理と注文管理の機能が使えるようになります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// src/app/app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { UserModule } from './user/user.module'; // UserModuleをインポート
import { OrderModule } from './order/order.module'; // OrderModuleをインポート

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    UserModule, // AppModuleにUserModuleを追加
    OrderModule // AppModuleにOrderModuleを追加
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }</pre>



<p>このように、<strong>Angularモジュールは「呼び出し」されるものではなく</strong>、アプリケーションの構造を定義し、コードを機能単位で整理するために「利用」されます。ルートモジュール（<code>AppModule</code>）または他の機能モジュール内でモジュールをインポートすることにより、そのモジュールが提供する機能（コンポーネント、サービスなど）をアプリケーションの他の部分で使用できるようになります。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><span class="badge-green">まとめ</span>　<strong>モジュールとは？</strong></p>



<ul class="wp-block-list">
<li>アプリケーションの一部を機能ごとにまとめたコードの集合体。</li>



<li>コンポーネント、サービス、ディレクティブ、パイプなどをグループ化し、機能単位で管理する。</li>



<li>アプリケーションの構造を整理し、コードの再利用性とメンテナンス性を向上させる。</li>
</ul>



<p class="has-text-align-center"><span class="badge-green">まとめ</span>　<strong><code>@NgModule</code>とは？</strong></p>



<ul class="wp-block-list">
<li>Angularのデコレーターで、クラスをAngularモジュールとして識別する。</li>



<li>モジュールのメタデータを定義し、コンポーネントのスコープや依存関係の注入を管理する。</li>



<li>アプリケーションの起動時に最初にロードするコンポーネント（bootstrap）、他のモジュールから利用可能にするエクスポート（exports）など、モジュールの振る舞いをAngularに伝える。</li>
</ul>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【TypeScript】デコレータ＠とは？1分でわかりやすく解説</title>
		<link>https://it-biz.online/web-design/typescript-decorator/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Wed, 23 Apr 2025 06:30:25 +0000</pubDate>
				<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[WEBデザイン]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=10364</guid>

					<description><![CDATA[TypeScriptにおけるデコレータは、クラスやそのメンバーに対し、宣言的にメタデータを付与する機能です。このメタデータは、クラスの特性や振る舞いを外部から修飾するために利用されます。このページでは、TypeScrip [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>TypeScriptにおけるデコレータは、<strong><span class="marker-under">クラスやそのメンバーに対し、宣言的にメタデータを付与する機能</span></strong>です。このメタデータは、クラスの特性や振る舞いを外部から修飾するために利用されます。このページでは、TypeScriptのデコレータの基本概念から応用までを解説し、コードの柔軟性と表現力を高める可能性を探ります。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p>ざっくり説明すると「デコレータ」とは・・・</p>



<p><strong>「データについてのデータ」</strong> を付加するための仕組み。もう少し具体的に言うと、</p>



<ul class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin">クラスやメソッド、プロパティといったコードの要素が、<strong>どのような特性を持つか</strong>（例えば、読み取り専用である、特定のイベントをリッスンする、Angularのコンポーネントであるなど）</li>



<li>それらが<strong>どのように振る舞うべきか</strong>（例えば、特定の処理を行う前にログを出力する、親コンポーネントからデータを受け取るなど）</li>
</ul>



<p>といった情報をコード自身に付加するものです。デコレータは、このメタデータをコードに付与するための仕組み、と考えると良いでしょう。</p>
</div>




  <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><ol><li><a href="#toc2" tabindex="0">TypeScriptにおけるデコレータの利点：表現力と保守性の向上</a></li></ol></li><li><a href="#toc3" tabindex="0">TypeScriptの主要なデコレータの種類と機能</a><ol><li><a href="#toc4" tabindex="0">1. クラスデコレータ</a></li><li><a href="#toc5" tabindex="0">2. メソッドデコレータ</a></li><li><a href="#toc6" tabindex="0">3. プロパティデコレータ</a></li><li><a href="#toc7" tabindex="0">4. パラメータデコレータ</a></li></ol></li><li><a href="#toc8" tabindex="0">デコレータの動作原理：メタデータの利用</a></li><li><a href="#toc9" tabindex="0">Angularにおけるデコレータの応用：フレームワークの基礎構造</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">デコレータとは？コードへの注釈による機能拡張</span></h2>



<p>デコレータは、クラス、メソッド、プロパティ、パラメータに対して付与される特殊な構文です。<code><span class="bold-blue">@</span></code> 記号に続いてデコレータ名を記述することで、<strong><span class="marker-under">対象となるコード要素に対する注釈</span></strong>として機能し、TypeScriptコンパイラや関連フレームワークに対し、その要素の特性や振る舞いに関する情報を提供することになります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function sealed(constructor: Function) {
  Object.seal(constructor);
  Object.seal(constructor.prototype);
}

// ↓がデコレータ
@sealed
class MyClass {
  constructor(public name: string) {}
  greet() {
    console.log(`Hello, ${this.name}!`);
  }
}</pre>



<h3 class="wp-block-heading"><span id="toc2">TypeScriptにおけるデコレータの利点：表現力と保守性の向上</span></h3>



<p>TypeScriptでデコレータを活用することには、複数の利点があります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>使いこなしていくうちに徐々にメリットを感じていけると思いますが、事前に簡単に利点を整理しておきます。</p>
</div></div>



<ul class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>メタプログラミングの実現</strong><br>プログラム自身がその構造や実行時の振る舞いを操作するメタプログラミングを可能にする。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>関心事の分離</strong><br>ログ記録、認証、トランザクション管理といった横断的な関心事を、主要なビジネスロジックから分離し、コードの可読性と保守性を高めることができる。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>コードの再利用性</strong><br>一度定義されたデコレータは、複数のクラスやメンバーに適用でき、重複したコードを削減できる。</li>



<li><strong>フレームワークとの統合</strong><br><a href="https://it-biz.online/web-design/what-is-angular/">Angular</a>などのフレームワークは、デコレータを基盤としており、フレームワークの機能利用を簡潔化します。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc3">TypeScriptの主要なデコレータの種類と機能</span></h2>



<p>TypeScriptは、デコレータが適用される対象に応じて、以下の種類を提供します。</p>



<h3 class="wp-block-heading"><span id="toc4">1. クラスデコレータ</span></h3>



<p>クラス定義の直前に記述され、クラス全体の振る舞いを変更、またはメタデータを付与します。クラスデコレータは、クラスのコンストラクタ関数を引数として受け取ります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function sealed(constructor: Function) {
  Object.seal(constructor);
  Object.seal(constructor.prototype);
}

@sealed
class MyClass {
  constructor(public name: string) {}
  greet() {
    console.log(`Hello, ${this.name}!`);
  }
}

const instance = new MyClass("TypeScript");
instance.greet(); // 出力結果：Hello, TypeScript!</pre>



<h3 class="wp-block-heading"><span id="toc5">2. メソッドデコレータ</span></h3>



<p>メソッド定義の直前に記述され、メソッドの振る舞いを修飾、またはメタデータを付与します。メソッドデコレータは、ターゲットオブジェクト、メソッド名、プロパティ記述子を引数として受け取ります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function logMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;
  descriptor.value = function(...args: any[]) {
    console.log(`メソッド '${propertyKey}' が引数 ${JSON.stringify(args)} で呼び出されました。`);
    const result = originalMethod.apply(this, args);
    console.log(`メソッド '${propertyKey}' の実行結果: ${result}`);
    return result;
  };
  return descriptor;
}

class Calculator {
  @logMethod
  add(a: number, b: number): number {
    return a + b;
  }
}

const calc = new Calculator();
const sum = calc.add(5, 3);
console.log(`合計: ${sum}`);
// 出力結果：
// メソッド 'add' が引数 [5,3] で呼び出されました。
// メソッド 'add' の実行結果: 8
// 合計: 8</pre>



<h3 class="wp-block-heading"><span id="toc6">3. プロパティデコレータ</span></h3>



<p>プロパティ定義の直前に記述され、プロパティのメタデータを付与、またはアクセス時の振る舞いを変更します。プロパティデコレータは、ターゲットオブジェクトとプロパティ名を引数として受け取ります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function readonly(target: any, propertyKey: string) {
  Object.defineProperty(target, propertyKey, {
    writable: false
  });
}

class Person {
  @readonly
  name: string = "John Doe";

  constructor() {}
}

const person = new Person();
console.log(person.name); // 出力結果：John Doe
// person.name = "Jane Doe"; // コンパイルエラーが発生します</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function readonly(target: any, propertyKey: string) {
  Object.defineProperty(target, propertyKey, {
    writable: false
  });
}

class Person {
  @readonly
  name: string = "John Doe";

  constructor() {}
}</pre>



<h3 class="wp-block-heading"><span id="toc7">4. パラメータデコレータ</span></h3>



<p>メソッドのパラメータ定義の直前に記述され、パラメータに関するメタデータを付与します。パラメータデコレータは、ターゲットオブジェクト、メソッド名、パラメータのインデックスを引数として受け取ります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function paramInfo(target: any, methodKey: string, parameterIndex: number) {
  console.log(`クラス '${target.constructor.name}' のメソッド '${methodKey}' のインデックス ${parameterIndex} 番目のパラメータです。`);
}

class Greeter {
  greet(@paramInfo message: string) {
    console.log(`Greeting: ${message}`);
  }
}

const greeter = new Greeter();
greeter.greet("Hello!");
// 出力結果：
// クラス 'Greeter' のメソッド 'greet' のインデックス 0 番目のパラメータです。
// Greeting: Hello!</pre>



<h2 class="wp-block-heading"><span id="toc8">デコレータの動作原理：メタデータの利用</span></h2>



<p>TypeScriptコンパイラは、デコレータを<strong>特別な関数として処理</strong>し、デコレートされた要素に関する情報を引数としてデコレータ関数に渡します。</p>



<p>デコレータ関数は、この情報に基づいて、クラスやメンバーの振る舞いを変更したり、メタデータを格納したりします。このメタデータは、TypeScriptランタイムやフレームワークがコードの構造と意図を解釈し、適切な処理を実行するために利用されます。</p>



<h2 class="wp-block-heading"><span id="toc9">Angularにおけるデコレータの応用：フレームワークの基礎構造</span></h2>



<p>Angularフレームワークは、TypeScriptのデコレータ機能を広範に活用しています。</p>



<p><code>@Component</code>、<code>@Directive</code>、<code>@Injectable</code>、<code>@Input</code>、<code>@Output</code> などのAngularデコレータは、クラスに特定の役割と機能を持たせるための重要なメカニズムです。例えば、<code>@Component</code> デコレータは、TypeScriptクラスをUIコンポーネントとして定義し、テンプレートやスタイルといった関連情報をAngularに提供します。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TypeScript超入門：本当に最初の第１歩から</title>
		<link>https://it-biz.online/web-design/typescript-start/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Tue, 22 Apr 2025 12:00:00 +0000</pubDate>
				<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[WEBデザイン]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=10352</guid>

					<description><![CDATA[この記事では、プログラミング言語「TypeScript」の基本的な文法を、プログラミング自体が初めての方や、まだ慣れていない方にもわかるように、本当に基本的なところから順を追って解説します。 目次 プログラミングの超基本 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>この記事では、プログラミング言語「<a href="https://it-biz.online/web-design/typescript-abc/">TypeScript</a>」の基本的な文法を、プログラミング自体が初めての方や、まだ慣れていない方にもわかるように、本当に基本的なところから順を追って解説します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>深堀りしていくと、深い話も尽きないのがどのプログラミング言語にも共通する特徴ですが、まずはその土台としての解説ページです！是非最後までご覧ください。</p>
</div></div>




  <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">プログラミングの超基本：「文」と「セミコロン」</a><ol><li><a href="#toc2" tabindex="0">セミコロン ; の役割</a></li><li><a href="#toc3" tabindex="0">Tips：セミコロンは省略できる？</a></li></ol></li><li><a href="#toc4" tabindex="0">TypeScriptとは？</a><ol><li><a href="#toc5" tabindex="0">なぜ型が必要なの？</a></li></ol></li><li><a href="#toc6" tabindex="0">基本的な「値」と「型」</a></li><li><a href="#toc7" tabindex="0">値を覚えておく：「変数」</a><ol><li><a href="#toc8" tabindex="0">型推論 (Type Inference)</a></li></ol></li><li><a href="#toc9" tabindex="0">値を作り出す：「式」</a><ol><li><a href="#toc10" tabindex="0">文と式の違い</a></li></ol></li><li><a href="#toc11" tabindex="0">処理をまとめる：「関数」</a><ol><li><a href="#toc12" tabindex="0">アロー関数</a></li></ol></li><li><a href="#toc13" tabindex="0">オブジェクトの形を決める：「インターフェース」</a></li><li><a href="#toc14" tabindex="0">オブジェクトの設計図と機能：「クラス」</a></li><li><a href="#toc15" tabindex="0">型に別名を付ける：「型エイリアス」</a></li><li><a href="#toc16" tabindex="0">型を引数にする：「ジェネリクス」</a></li><li><a href="#toc17" tabindex="0">コードの説明書き：「コメント」</a></li><li><a href="#toc18" tabindex="0">TypeScript：文法まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">プログラミングの超基本：「文」と「セミコロン」</span></h2>



<p>どんなプログラミング言語にも共通しますが、プログラムはコンピューターに対する<strong>指示の集まり</strong>でできています。この１つ１つの指示のことを<strong>文 (Statement)</strong> と呼びます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// これは「変数 message を宣言し、"Hello" という文字列を代入する」という１つの文
let message: string = "Hello";

// これも「変数 year を宣言し、2025 という数値を代入する」という別の１つの文
let year: number = 2025;

// これも「コンソールに message 変数の内容を表示する」という文
console.log(message);
</pre>



<p>プログラムは、これらの文が上から順に実行されることで動きます。</p>



<h3 class="wp-block-heading"><span id="toc2">セミコロン ; の役割</span></h3>



<p>多くのプログラミング言語では、文の終わりを明確にするために<strong>セミコロン (<code>;</code>)</strong> を付けます。TypeScript（および元になったJavaScript）でも、文の終わりにはセミコロンを付けるのが基本的なルールです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">let greeting: string = "Good morning"; // 文の終わりにセミコロン
let count: number = 10;             // 文の終わりにセミコロン
console.log(greeting);             // 文の終わりにセミコロン
</pre>



<h3 class="wp-block-heading"><span id="toc3">Tips：セミコロンは省略できる？</span></h3>



<p>実は、TypeScript (JavaScript) では、多くの場合、行の終わりが文の終わりであると自動的に判断してくれるため、セミコロンを省略しても動くことがあります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">let city: string = "Tokyo" // セミコロンなしでもOK
let population: number = 14000000 // セミコロンなしでもOK
console.log(city)           // セミコロンなしでもOK
</pre>



<p>しかし、以下のような理由から、<strong>基本的にはセミコロンを付けることが推奨</strong>されています。</p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>意図しない動作を防ぐ</strong><br>特定の状況では、セミコロンがないとコードが予期せぬ形で結合され、エラーやバグの原因になることがあります。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>コードの明確性</strong><br>文の終わりが明確になり、コードが読みやすくなります。</li>



<li><strong>チーム開発での一貫性</strong><br>複数人で開発する場合、セミコロンを付けるか付けないかのルールを統一しておくと、コードのスタイルが揃います。</li>
</ol>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p><strong>上記を踏まえ、この入門記事では原則として文の終わりにはセミコロンを付けるようにします。</strong></p>
</div>



<h2 class="wp-block-heading"><span id="toc4">TypeScriptとは？</span></h2>



<p>さて、本題のTypeScriptです。<br>TypeScriptは、Microsoftによって開発された、JavaScriptを拡張して作られたプログラミング言語です。一番大きな特徴は<strong>静的型付け</strong>ができることです。</p>



<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>JavaScriptのスーパーセット</strong><br>TypeScriptは<a href="https://it-biz.online/web-design/js-rule/">JavaScript</a>の機能をすべて含んでいます。つまり、JavaScriptを知っていれば、TypeScriptは比較的スムーズに学べます！</li>



<li><strong>静的型付け</strong><br>プログラムを実行する前に、データ（後述する「値」や「変数」）に「型」（種類）を指定することで、型の間違いを早期に発見できます。これがコードの品質を高め、開発を助けてくれます。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc5">なぜ型が必要なの？</span></h3>



<p>コンピューターは、「数値」と「文字列（文字の並び）」を区別します。<br>例えば、<code><span class="blue">100</span></code> は数値、<code><span class="green">"100"</span></code> は文字列です。</p>



<p>JavaScriptでは、実行時に型が決まるため、意図せず数値と文字列を足し合わせてしまうようなミスが起こりえます（例: <code>1 + "0"</code> が <code>"10"</code> になる）。TypeScriptでは、あらかじめ「これは数値だよ」「これは文字列だよ」と宣言することで、そのようなミスを防ぎます。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/it-skills/data_type/">「データ型」とは？</a></p>



<h2 class="wp-block-heading"><span id="toc6">基本的な「値」と「型」</span></h2>



<p>プログラムが扱うデータの基本的な単位を<strong>値 (Value)</strong> と呼びます。値には様々な種類があり、その種類のことを<strong>型 (Type)</strong> と言います。</p>



<p>TypeScriptでよく使う基本的な型を見ていきましょう。</p>



<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong><code>string</code> (文字列型)</strong><br>文字や文章を表す値の型です。ダブルクォーテーション <code>"</code> またはシングルクォーテーション <code>'</code> で囲みます。
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">値の例: <code>"こんにちは"</code>, <code>'TypeScript'</code>, <code>"123"</code> (これは数値ではなく文字列)</li>
</ul>
</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong><code>number</code> (数値型)</strong><br>整数や小数を表す値の型です。
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">値の例: <code>100</code>, <code>0</code>, <code>-5</code>, <code>3.14</code></li>
</ul>
</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong><code>boolean</code> (真偽値型)</strong><br>「正しい (<code>true</code>)」か「間違っている (<code>false</code>)」かの二択を表す値の型です。
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">値の例: <code>true</code>, <code>false</code></li>
</ul>
</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong><code>Array</code> (配列型)</strong><br>同じ型の値を複数まとめて順番に格納する型です。角括弧 <code>[]</code> を使います。
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">値の例: <code>[1, 2, 3]</code> (数値の配列), <code>["apple", "banana"]</code> (文字列の配列)</li>
</ul>
</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong><code>null</code></strong><br>「何もない」ことを意図的に示す特殊な値。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong><code>undefined</code></strong><br>値が「未定義」であることを示す特殊な値。変数を宣言しただけで、まだ値を入れていない状態など。</li>



<li><strong><code>any</code> (任意型)</strong><br>どんな型の値でも入る特殊な型。<br>便利ですが、TypeScriptの型チェックの恩恵を受けられなくなるため、<strong><span class="marker-under">使用は慎重に</span></strong>。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc7">値を覚えておく：「変数」</span></h2>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="658" height="282" src="https://it-biz.online/wp-content/uploads/2019/12/image-73.png" alt="プログラミング 変数とは" class="wp-image-2917" srcset="https://it-biz.online/wp-content/uploads/2019/12/image-73.png 658w, https://it-biz.online/wp-content/uploads/2019/12/image-73-300x129.png 300w, https://it-biz.online/wp-content/uploads/2019/12/image-73-500x214.png 500w, https://it-biz.online/wp-content/uploads/2019/12/image-73-304x130.png 304w" sizes="(max-width: 658px) 100vw, 658px" /><figcaption class="wp-element-caption">図1：変数とは？</figcaption></figure>



<p>プログラムの中で、値を一時的に保存しておくための「名前付きの箱」のようなものが<strong>変数 (Variable)</strong> です。変数を使うことで、値に名前を付けて何度も利用したり、値を変更したりできます。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/it-skills/variable/">プログラミングの変数とは？１分でわかりやすく</a></p>



<p>変数を使うには、まず<strong>宣言 (Declaration)</strong> が必要です。TypeScriptでは <code><span class="blue">let</span></code> または <code><span class="blue">const</span></code> を使って変数を宣言します。</p>



<ul class="wp-block-list">
<li><strong><code>let</code>:</strong> 値を後から<strong>変更可能</strong>な変数を宣言します。</li>



<li><strong><code>const</code>:</strong> 値を後から<strong>変更不可能</strong>な（<strong>定数</strong> Constant）変数を宣言します。基本的には <code>const</code> を使い、値の変更が必要な場合のみ <code>let</code> を使うのが良い習慣です。</li>
</ul>



<p>宣言の際には、変数名の後に <span class="bold-blue"><code>:</code> </span>(コロン) と<strong>型名</strong>を指定しその変数にどんな型の値を入れるかを指定します（<strong>型注釈</strong> Type Annotation）。そして <span class="bold-blue"><code>=</code> </span>の後に、その変数に入れる最初の値（<strong>初期値</strong>）を書きます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// string 型の変数 message を宣言し、初期値として "Hello, TypeScript!" を入れる
let message: string = "Hello, TypeScript!";

// number 型の定数 year を宣言し、初期値として 2025 を入れる
const year: number = 2025;

// boolean 型の変数 isActive を宣言し、初期値として true を入れる
let isActive: boolean = true;

// number 型の配列 scores を宣言
const scores: number[] = [80, 95, 72];

// message 変数の中身を "Hi!" に変更する (let なので変更可能)
message = "Hi!";

// year 変数の中身を変更しようとするとエラーになる (const なので変更不可)
// year = 2026; // エラー!

// 型が違う値を入れようとするとエラーになる
// message = 100; // エラー! message は string 型
</pre>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/web-design/variavle-type/" title="TypeScript：変数と基本的な型を３分でわかりやすく解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2024/03/image-8-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2024/03/image-8-320x180.png 320w, https://it-biz.online/wp-content/uploads/2024/03/image-8-240x135.png 240w, https://it-biz.online/wp-content/uploads/2024/03/image-8-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">TypeScript：変数と基本的な型を３分でわかりやすく解説</div><div class="blogcard-snippet internal-blogcard-snippet">TypeScriptの変数宣言、基本的なデータ型（number, string, boolean, null, undefined, array, tuple, enumなど）の概要と使用方法を3分で簡潔に解説します。TypeScriptでの型注釈と型推論の基本もカバーし、初心者がTypeScriptの型システムを効果的に活用するための入門ガイド。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.03.08</div></div></div></div></a>
</div></figure>



<h3 class="wp-block-heading"><span id="toc8">型推論 (Type Inference)</span></h3>



<p>実は多くの場合、TypeScriptは初期値から変数の型を自動的に推測してくれます。これを<strong>型推論</strong>と呼びます。型推論が可能な場合は、型注釈を省略できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">let user = "Alice"; // 初期値が文字列なので string 型と推論される
const pi = 3.14;    // 初期値が数値なので number 型と推論される

// user = 123; // エラー! user は string 型と推論されている
</pre>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>型推論は便利ですが、以下のような場合に意図しない型が付与されたり、開発者の意図が明確に伝わりにくくなることがあります。</p>



<ul class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>初期化されていない変数</strong><br><code>let message;</code> のように初期値がない場合、<code>any</code> 型と推論されます。これは型チェックの恩恵を受けられない状態です。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>複雑な条件分岐や関数</strong><br>返り値の型が複雑になる場合、型推論が期待通りにならないことがあります。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>コードの可読性</strong><br>型が明示されている方が、変数や関数の役割が一目で理解しやすくなります。</li>



<li><strong>リファクタリング時の安全性</strong><br>型が明示されていることで、変更による影響範囲が明確になり、より安全にリファクタリングを進められます。</li>
</ul>



<p>そのため、特に<strong>関数の引数と返り値、複雑な処理を行う変数は、明示的に型注釈をつける</strong>ことが推奨されます。一方で、単純な変数の初期化時など、型推論が明確で意図通りに働く場合は、必ずしも型注釈が必要というわけではありません。</p>



<p><strong>バランスとしては、コードの可読性、保守性、安全性を考慮しつつ、型推論を適切に活用する</strong>のが良いでしょう。チーム開発においては、型付けのルールを統一することも重要になります。</p>
</div>



<h2 class="wp-block-heading"><span id="toc9">値を作り出す：「式」</span></h2>



<p>プログラムの中で、計算や処理を実行して<strong>最終的に１つの値になるもの</strong>を<strong><span class="marker-under">式 (Expression)</span></strong> と呼びます。</p>



<ul class="wp-block-list">
<li><code>1 + 2</code> は、計算されて <code>3</code> という値になるので式。</li>



<li><code>year</code> （上で宣言した変数）は、その中に入っている <code>2025</code> という値になるので式。</li>



<li><code>message</code> は、その中に入っている <code>"Hi!"</code> という値になるので式。</li>



<li><code>scores[0]</code> は、配列 <code>scores</code> の最初の要素である <code>80</code> という値になるので式。</li>



<li><code>isActive === true</code> は、比較の結果 <code>true</code> または <code>false</code> という値になるので式。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc10">文と式の違い</span></h3>



<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>文 (Statement)</strong><br>コンピューターへの指示。何かを実行させる。<br>例: <span class="blue"><code>let x = 10;</code>, <code>console.log("OK");</code></span></li>



<li><strong>式 (Expression)</strong><br>評価されると１つの値になるもの。<br>例: <span class="blue"><code>10</code>, <code>x</code>, <code>10 + 5</code>, <code>x &gt; 5</code></span></li>
</ul>



<p>文の中に式が含まれていることがよくあります。例えば、<code><span class="blue">let x = 10 + 5;</span></code> という文には、<code><span class="green">10 + 5</span></code> という式が含まれています。この式が評価されて <code>15</code> という値になり、その値が変数 <code>x</code> に代入されます。</p>



<h2 class="wp-block-heading"><span id="toc11">処理をまとめる：「関数」</span></h2>



<p>一連の処理をまとめて名前を付け、繰り返し呼び出せるようにしたものが<strong>関数 (Function)</strong> です。関数を使うことで、同じようなコードを何度も書く手間が省け、プログラムが整理されます。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/it-skills/function-abc/">プログラミングの「関数」とは？</a></p>



<p>関数を定義するには <code><span class="blue">function</span></code> キーワードを使います。関数には<strong>引数 (Argument/Parameter)</strong> を渡すことができ、処理の結果として<strong>戻り値 (Return Value)</strong> を返すことができます。</p>



<p>TypeScriptでは、関数の引数と戻り値にも型注釈を付けます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 関数宣言の基本形
// function 関数名(引数1: 型, 引数2: 型, ...): 戻り値の型 {
//   // 関数の処理
//   return 戻り値; // 戻り値がある場合
// }

// ２つの数値を受け取り、合計を返す関数
function add(a: number, b: number): number {
  const result: number = a + b; // a + b は式
  return result;             // result を戻り値として返す文
}

// 戻り値がない (何かを表示するだけなど) 関数の戻り値の型は `void`
function printMessage(message: string): void {
  console.log(message); // message を表示する文
  // return 文がない、または return; だけ
}

// 関数を呼び出す (実行する)
const sum: number = add(5, 3); // add関数を呼び出し、戻り値 (8) を変数 sum に代入する文
console.log(sum); // 出力: 8

printMessage("関数のテスト"); // printMessage関数を呼び出す文 (出力: 関数のテスト)
</pre>



<h3 class="wp-block-heading"><span id="toc12">アロー関数</span></h3>



<p>JavaScriptでお馴染みの、より簡潔に関数を書く方法である<strong>アロー関数</strong>も使えます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// アロー関数の基本形
// const 関数名 = (引数1: 型, 引数2: 型, ...): 戻り値の型 => {
//   // 関数の処理
//   return 戻り値;
// };

const multiply = (x: number, y: number): number => {
  return x * y;
};

// 処理が1行で終わる場合は {} と return を省略可
const difference = (a: number, b: number): number => a - b;

const resultMultiply: number = multiply(4, 6); // 24
const resultDifference: number = difference(10, 7); // 3

console.log(resultMultiply);
console.log(resultDifference);
</pre>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/web-design/typescript-function/" title="TypeScript：関数宣言/関数式の基本を１分でわかりやすく" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2024/03/image-9-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2024/03/image-9-320x180.png 320w, https://it-biz.online/wp-content/uploads/2024/03/image-9-240x135.png 240w, https://it-biz.online/wp-content/uploads/2024/03/image-9-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">TypeScript：関数宣言/関数式の基本を１分でわかりやすく</div><div class="blogcard-snippet internal-blogcard-snippet">TypeScriptでの関数の基本的な定義方法、実行方法、さらにジェネリック型、高階関数、オーバーロード、タプルとデストラクチャリングを使った応用的な使い方までをわかりやすく解説しています。TypeScriptの型安全性を活かした関数の使いこなし方を学び、より安全で再利用可能なコードの書き方をマスターしましょう。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.01.10</div></div></div></div></a>
</div></figure>



<h2 class="wp-block-heading"><span id="toc13">オブジェクトの形を決める：「インターフェース」</span></h2>



<p>複数の値をまとめて、１つの意味のあるデータとして扱いたい場合があります。例えば、「ユーザー」を表すデータとして、ID、名前、メールアドレスなどをまとめたい、といった場合です。このようなデータのまとまりを<strong>オブジェクト (Object)</strong> と呼びます。（オブジェクトについては、次の章で解説します。）</p>



<p><strong>インターフェース (Interface)</strong> は、オブジェクトがどのようなプロパティ（オブジェクト内の個々のデータのこと）を持つべきか、その「形」や「構造」を定義するための設計図のようなものです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// User というインターフェース (設計図) を定義
interface User {
  id: number;     // id という名前のプロパティがあり、その型は number
  name: string;    // name という名前のプロパティがあり、その型は string
  isAdmin: boolean; // isAdmin という名前のプロパティがあり、その型は boolean
  email?: string; // ? を付けると、あってもなくても良いプロパティ (オプショナル)
}

// User インターフェースに従ったオブジェクトを作成
// このオブジェクトは User の設計図通りに作られている
let user1: User = {
  id: 1,
  name: "David",
  isAdmin: true,
  email: "david@example.com"
};

// email プロパティがなくても User インターフェースを満たす
let user2: User = {
  id: 2,
  name: "Eve",
  isAdmin: false
};

// インターフェースで定義されていないプロパティを持っていたり、
// 必須のプロパティがなかったりするとエラーになる
// let user3: User = {
     id: 3, 
     username: "Frank"
}; // エラー: nameがない、username は未定義

// 関数が User 型のオブジェクトを受け取ることを明示できる
function displayUserName(user: User): void {
  console.log(user.name);
}

displayUserName(user1); // 出力: David
displayUserName(user2); // 出力: Eve
</pre>



<p>インターフェースを使うことで、「このオブジェクトには必ず <code>id</code> と <code>name</code> が <code>number</code> 型と <code>string</code> 型で存在する」といったルールを明確にでき、コードの安全性が高まります。</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://it-biz.online/web-design/interface/" title="TypeScript：interface（インターフェース）の基本を３分で解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="180" src="https://it-biz.online/wp-content/uploads/2024/03/image-12-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2024/03/image-12-320x180.png 320w, https://it-biz.online/wp-content/uploads/2024/03/image-12-240x135.png 240w, https://it-biz.online/wp-content/uploads/2024/03/image-12-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">TypeScript：interface（インターフェース）の基本を３分で解説</div><div class="blogcard-snippet internal-blogcard-snippet">TypeScriptのインターフェースの基本から応用までを徹底解説。初心者でも理解しやすいように、インターフェースの定義方法、利点、関数やクラスとの連携、さらには宣言のマージについても具体的な例を交えて紹介。TypeScriptでの型安全なコーディングをマスターしたい方必見の内容です。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://it-biz.online" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">it-biz.online</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.01.17</div></div></div></div></a>
</div></figure>



<h2 class="wp-block-heading"><span id="toc14">オブジェクトの設計図と機能：「クラス」</span></h2>



<p>インターフェースがオブジェクトの「形」だけを定義するのに対し、<strong>クラス (Class)</strong> はオブジェクトの「形」（プロパティ）に加えて、そのオブジェクトが持つ「機能」（<strong>メソッド</strong> Method と呼ばれる関数）も一緒に定義できる、より高機能な設計図です。オブジェクト指向プログラミングの中心的な概念です。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/typescript-calss/">Typescriptのオブジェクトとは？</a></p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">class Product {
  // プロパティ (クラスが持つデータ)
  name: string;
  price: number;
  readonly id: number; // readonly: 一度設定したら変更できない

  // コンストラクタ: クラスからオブジェクトを生成するときに自動的に呼ばれる特殊なメソッド
  // プロパティの初期化などを行う
  constructor(id: number, name: string, price: number) {
    this.id = id; // this は生成されるオブジェクト自身を指す
    this.name = name;
    this.price = price;
    console.log(`商品「${this.name}」が生成されました。`);
  }

  // メソッド (クラスが持つ機能・関数)
  getPriceWithTax(taxRate: number): number {
    // 税込み価格を計算して返す
    return this.price * (1 + taxRate);
  }
}

// クラス (設計図) から実際のオブジェクト (インスタンス) を生成する
const productA = new Product(101, "高機能マウス", 5000); // コンストラクタが呼ばれる
const productB = new Product(102, "キーボード", 8000);

// オブジェクトのプロパティにアクセス
console.log(productA.name); // 出力: 高機能マウス
console.log(productB.price); // 出力: 8000

// オブジェクトのメソッドを呼び出す
const priceAWithTax = productA.getPriceWithTax(0.1); // 税率10%
console.log(`商品Aの税込価格: ${priceAWithTax}円`); // 出力: 商品Aの税込価格: 5500円

// readonly なプロパティは変更できない
// productA.id = 200; // エラー!
</pre>



<p>クラスを使うと、関連するデータ（プロパティ）と処理（メソッド）をひとまとめにして管理できるため、複雑なプログラムを構造化しやすくなります。</p>



<h2 class="wp-block-heading"><span id="toc15">型に別名を付ける：「型エイリアス」</span></h2>



<p>複雑な型や何度も使う型に、分かりやすい別名を付けることができるのが<strong>型エイリアス (Type Alias)</strong> です。<code>type</code> キーワードを使って定義します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 文字列リテラルの組み合わせに 'Status' という別名を付ける
type Status = "pending" | "processing" | "completed" | "failed";
// Status 型の変数は、上記4つの文字列のどれかしか受け付けない

let orderStatus: Status = "processing";
console.log(orderStatus);

orderStatus = "completed";
// orderStatus = "shipped"; // エラー! Status 型には 'shipped' は含まれない

// オブジェクトの型にも別名を付けられる (インターフェースと似ている)
type Point = {
  x: number;
  y: number;
};

function distance(p1: Point, p2: Point): number {
  const dx = p1.x - p2.x;
  const dy = p1.y - p2.y;
  return Math.sqrt(dx * dx + dy * dy); // Math.sqrt は平方根を計算する組み込み関数
}

const point1: Point = { x: 0, y: 0 };
const point2: Point = { x: 3, y: 4 };
console.log(distance(point1, point2)); // 出力: 5

// 関数型に別名を付ける
type StringFormatter = (input: string) => string;

const toUpperCase: StringFormatter = (str) => str.toUpperCase();
const addGreeting: StringFormatter = (str) => `Hello, ${str}!`;

console.log(toUpperCase("test")); // 出力: TEST
console.log(addGreeting("World")); // 出力: Hello, World!
</pre>



<p>型エイリアスを使うと、コードが読みやすく、意図が伝わりやすくなります。</p>



<h2 class="wp-block-heading"><span id="toc16">型を引数にする：「ジェネリクス」</span></h2>



<p><strong>ジェネリクス (Generics)</strong> は、関数やクラスを定義するときに、そこで使われる型を固定せず、後から指定できるようにする仕組みです。→型を関数の引数のように扱えます。</p>



<p>これにより、様々な型に対応できる、再利用性の高いコードを書くことができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// この関数は、呼び出すときに指定された型 T の配列を受け取り、
// その型の要素を返す（もし配列が空なら undefined を返す）
function getFirstItem&lt;T>(items: T[]): T | undefined {
  // T は型引数と呼ばれる。呼び出し時に具体的な型が決まる。
  return items.length > 0 ? items[0] : undefined;
}

// number 型を指定して呼び出す
const numbers: number[] = [10, 20, 30];
const firstNum: number | undefined = getFirstItem&lt;number>(numbers);
console.log(firstNum); // 出力: 10

// string 型を指定して呼び出す
const colors: string[] = ["red", "green", "blue"];
const firstColor: string | undefined = getFirstItem&lt;string>(colors);
console.log(firstColor); // 出力: red

// 型を省略すると、TypeScriptが推論してくれる場合もある
const flags = [true, false, true];
const firstFlag = getFirstItem(flags); // boolean 型だと推論される
console.log(firstFlag); // 出力: true

// 空の配列の場合
const emptyArray: any[] = [];
const firstEmpty = getFirstItem(emptyArray);
console.log(firstEmpty); // 出力: undefined
</pre>



<p>ジェネリクスは少し高度な概念ですが、ライブラリなどでは頻繁に使われているため、覚えておくと役立ちます。</p>



<h2 class="wp-block-heading"><span id="toc17">コードの説明書き：「コメント」</span></h2>



<p>コードの中に、プログラムの動作には影響しない説明文を書き残すことができます。これを<strong>コメント</strong>と呼びます。後で自分が見返したときや、他の人がコードを読むときに、処理内容を理解しやすくするために使います。</p>



<p>TypeScript (JavaScript) では、コメントの書き方は主に2種類あります。</p>



<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>一行コメント:</strong> <code><span class="bold-blue">//</span></code> から行末までがコメントになります。 TypeScript<code>// これは一行コメントです let price: number = 100; // 税抜き価格</code></li>



<li><strong>複数行コメント:</strong> <code><span class="bold-blue">/*</span></code> と <code><span class="bold-blue">*/</span></code> で囲まれた範囲がコメントになります。 TypeScript<code>/* これは複数行コメントです。 複数行にわたって説明を記述できます。 関数やクラスの説明などによく使われます。 */ function calculateTotal(price: number, quantity: number): number { // 消費税率 (10%) const taxRate = 0.1; const subTotal = price * quantity; const tax = subTotal * taxRate; return subTotal + tax; // 合計金額を返す }</code></li>
</ul>



<p>コメントのルールはJavaと同一です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>適切なコメントは、コードの可読性を大きく向上させます。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc18">TypeScript：文法まとめ</span></h2>



<p>今回は、プログラミングの本当に基本的な「文」や「値」から始まり、TypeScriptのコアとなる「型」「変数」「関数」「インターフェース」「クラス」などの概念を駆け足で見てきました。</p>



<ul class="wp-block-list">
<li>プログラムは<strong>文</strong>の集まり。文末には<strong>セミコロン</strong> <code>;</code> を付けるのが基本。</li>



<li>データには<strong>値</strong>があり、その種類が<strong>型</strong>。</li>



<li>値を保存するのが<strong>変数</strong> (<code>let</code>, <code>const</code>)。型注釈と型推論がある。</li>



<li>値を生成するのが<strong>式</strong>。</li>



<li>処理をまとめるのが<strong>関数</strong>。引数と戻り値に型を付ける。</li>



<li>オブジェクトの形を定義するのが<strong>インターフェース</strong>。</li>



<li>形と機能を定義するのが<strong>クラス</strong>。</li>



<li>型に別名を付けるのが<strong>型エイリアス</strong>。</li>



<li>型を柔軟に扱うのが<strong>ジェネリクス</strong>。</li>



<li>コードの説明は<strong>コメント</strong>で。</li>
</ul>



<p>TypeScriptは、JavaScriptに「型」という強力な武器を与えてくれます。最初は覚えることが多く感じるかもしれませんが、型があることでエラーが減り、コードが読みやすくなり、安心して開発を進められるようになります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ぜひ、ご自身の環境でTypeScriptをセットアップして、実際にコードを書いて動かしてみてください。公式ドキュメントや様々なチュートリアルも素晴らしい学習リソースです。</p>
</div></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【HTML】tableタグ：テーブル（表）の作成方法を３分でわかりやすく</title>
		<link>https://it-biz.online/web-design/table/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Thu, 03 Jan 2019 00:00:00 +0000</pubDate>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[WEBデザイン]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=2825</guid>

					<description><![CDATA[HTMLでテーブル（表）を作成するtableタグ（&#60;table&#62;タグ・&#60;tr&#62;タグ・&#60;th&#62;タグ・&#60;td&#62;タグ）の基本・意味・使い方を初心者向けにわかりやすく解説します。  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>HTMLでテーブル（表）を作成するtableタグ（<strong>&lt;table&gt;タグ・&lt;tr&gt;タグ・&lt;th&gt;タグ・&lt;td&gt;タグ</strong>）の基本・意味・使い方を初心者向けにわかりやすく解説します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table>
  &lt;tr>
    &lt;th>見出し1&lt;/th>
    &lt;th>見出し2&lt;/th>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ1&lt;/td>
    &lt;td>データ2&lt;/td>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ3&lt;/td>
    &lt;td>データ4&lt;/td>
  &lt;/tr>
&lt;/table></pre>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="604" height="225" src="https://it-biz.online/wp-content/uploads/2023/12/image-19.png" alt="HTML tableタグ" class="wp-image-8683" srcset="https://it-biz.online/wp-content/uploads/2023/12/image-19.png 604w, https://it-biz.online/wp-content/uploads/2023/12/image-19-500x186.png 500w, https://it-biz.online/wp-content/uploads/2023/12/image-19-300x112.png 300w" sizes="(max-width: 604px) 100vw, 604px" /><figcaption class="wp-element-caption">図1:HTML tableタグ</figcaption></figure>



<p>tableタグはデータを行と列の形式で整理し、表示するために使用されるHTML要素。テーブルは、情報を視覚的に整理して比較しやすくすることができ、一般的には数値データや、関連する項目のリストなどを表示するのに適しています。</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box cocoon-block-tab-caption-box"><div class="tab-caption-box-label block-box-label box-label fab-edit"><span class="tab-caption-box-label-text block-box-label-text box-label-text">このページで学べる内容</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-hand-o-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li>HTMLのtableタグの使い方（テーブル・表の作成方法）
<ul class="wp-block-list">
<li><strong>&lt;table&gt;タグ・&lt;tr&gt;タグ・&lt;th&gt;タグ・&lt;td&gt;タグ</strong></li>
</ul>
</li>



<li>テーブル・表のデザイン方法</li>
</ul>
</div>
</div></div>



<p>Webエンジニアを目指す方であれば<strong><span class="marker-under">知らないと恥ずかしい超・基本知識の１つ</span></strong>です。是非最後までご覧ください。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/html-rule/">HTMLの基本構文ルール</a></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">HTML：テーブル（表）の定義方法</a><ol><li><a href="#toc2" tabindex="0">HTML：&lt;table&gt;タグの使い方</a></li><li><a href="#toc3" tabindex="0">HTML：&lt;tr&gt;タグの使い方</a></li><li><a href="#toc4" tabindex="0">HTML：&lt;th&gt;タグの使い方</a></li><li><a href="#toc5" tabindex="0">HTML：&lt;td&gt;タグの使い方</a></li></ol></li><li><a href="#toc6" tabindex="0">現代のWeb環境におけるテーブル（表）の重要性</a><ol><li><a href="#toc7" tabindex="0">限定的な使用</a></li><li><a href="#toc8" tabindex="0">最適な使用</a></li></ol></li><li><a href="#toc9" tabindex="0">HTML：テーブルのデザイン</a><ol><li><a href="#toc10" tabindex="0">テーブルに罫線をつける方法（border属性）</a></li><li><a href="#toc11" tabindex="0">枠線の色を変える（bordercolor）</a></li><li><a href="#toc12" tabindex="0">背景色を変更する方法（bgcolor属性）</a></li><li><a href="#toc13" tabindex="0">セル間のスペースを指定（cellspacing属性）</a></li><li><a href="#toc14" tabindex="0">セル内のスペースを指定（cellpadding属性）</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">HTML：テーブル（表）の定義方法</span></h2>



<p>tableタグを使ってテーブルを作成する際には、次のようなタグを組み合わせて使用します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>テーブルを作るには、tableタグだけではなく、その要素を表す <strong>&lt;tr&gt;タグ・&lt;th&gt;タグ・&lt;td&gt;タグ</strong>が必要になります。</p>
</div></div>



<p>全てを暗記する必要はありませんが、それぞれのタグがどのように利用され、どのような意味を持つのか？をまずは頭に入れておきましょう。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="859" height="399" src="https://it-biz.online/wp-content/uploads/2019/12/image-52.png" alt="html table" class="wp-image-2834" srcset="https://it-biz.online/wp-content/uploads/2019/12/image-52.png 859w, https://it-biz.online/wp-content/uploads/2019/12/image-52-300x139.png 300w, https://it-biz.online/wp-content/uploads/2019/12/image-52-500x232.png 500w, https://it-biz.online/wp-content/uploads/2019/12/image-52-768x357.png 768w, https://it-biz.online/wp-content/uploads/2019/12/image-52-800x372.png 800w, https://it-biz.online/wp-content/uploads/2019/12/image-52-304x141.png 304w" sizes="(max-width: 859px) 100vw, 859px" /><figcaption class="wp-element-caption">図2：tableタグ</figcaption></figure>



<ul class="wp-block-list is-style-icon-list-circle has-list-style">
<li><code><span class="bold-blue">&lt;table&gt;</span></code>
<ul class="wp-block-list">
<li><strong>テーブル<span class="bold-blue">全体</span>を定義</strong>します。テーブルはこのタグで始まり、<code>&lt;/table&gt;</code>で終わります。</li>
</ul>
</li>



<li><code><span class="bold-blue">&lt;tr&gt;</span></code>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>テーブルの<span class="bold-blue">行</span>を定義</strong>するために使用されるタグです。<br>→<strong>Table Row</strong> (テーブルの行) の略です。「ここから新しい行が始まりますよ」という意味。</li>
</ul>
</li>



<li><code><span class="bold-blue">&lt;th&gt;</span></code>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>テーブルの<span class="bold-blue">見出しセル</span>を定義</strong>するために使用されるタグで、通常は行や列のラベルに使用されます。<br>→<strong>Table Header</strong> (テーブルの見出し) の略です。行の中でも「見出し」となるセルに使います。</li>
</ul>
</li>



<li><code><span class="bold-blue">&lt;td&gt;</span></code>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong>テーブルの<span class="bold-blue">データセル</span>を定義</strong>するために使用されるタグで、実際のデータを表します。<br>→<strong>Table Data</strong> (テーブルのデータ) の略です。行の中でも「データ」となるセルに使います。<br></li>
</ul>
</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最初のうちはちょっと複雑に感じるかもしれません。順を追って理解していきましょう。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc2">HTML：&lt;table&gt;タグの使い方</span></h3>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="848" height="388" src="https://it-biz.online/wp-content/uploads/2019/12/image-53.png" alt="html table" class="wp-image-2835" srcset="https://it-biz.online/wp-content/uploads/2019/12/image-53.png 848w, https://it-biz.online/wp-content/uploads/2019/12/image-53-300x137.png 300w, https://it-biz.online/wp-content/uploads/2019/12/image-53-500x229.png 500w, https://it-biz.online/wp-content/uploads/2019/12/image-53-768x351.png 768w, https://it-biz.online/wp-content/uploads/2019/12/image-53-800x366.png 800w, https://it-biz.online/wp-content/uploads/2019/12/image-53-304x139.png 304w" sizes="(max-width: 848px) 100vw, 848px" /><figcaption class="wp-element-caption">図3:HTML tableタグ</figcaption></figure>



<p>&lt;table&gt;タグは、テーブル（表）を作成するタグです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>イメージとして<strong>「ここにテーブル（表）を作成しますよ！」という宣言</strong>をするだけの役割を担っていると考えてOK。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table>
&lt;!-- ここに行数や見出しなどを定義していく -->
&lt;/table></pre>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box cocoon-block-tab-caption-box"><div class="tab-caption-box-label block-box-label box-label fab-lightbulb"><span class="tab-caption-box-label-text block-box-label-text box-label-text">tableタグの基本</span></div><div class="tab-caption-box-content block-box-content box-content">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title"></div>
<ul class="wp-block-list">
<li><span class="bold-blue">tableタグの基本構造</span>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-1em has-bottom-margin">HTMLテーブルは、&lt;table&gt;タグで始まり、&lt;/table&gt;タグで終わります。テーブル内には、行と列を定義するためのタグが必要。</li>
</ul>
</li>



<li><span class="bold-blue">行と列の定義</span>
<ul class="wp-block-list">
<li>行: &lt;tr&gt;タグ (table row) を使って、テーブルの行を定義します。</li>



<li>列: &lt;td&gt;タグ (table data) または &lt;th&gt;タグ (table header) を使って、テーブルの列を定義します。通常、&lt;td&gt;タグはデータセルを、&lt;th&gt;タグは見出しセルを表します。</li>
</ul>
</li>
</ul>
</div>
</div></div>



<h3 class="wp-block-heading"><span id="toc3">HTML：&lt;tr&gt;タグの使い方</span></h3>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="850" height="367" src="https://it-biz.online/wp-content/uploads/2019/12/image-55.png" alt="html tr" class="wp-image-2837" style="width:840px;height:auto" srcset="https://it-biz.online/wp-content/uploads/2019/12/image-55.png 850w, https://it-biz.online/wp-content/uploads/2019/12/image-55-300x130.png 300w, https://it-biz.online/wp-content/uploads/2019/12/image-55-500x216.png 500w, https://it-biz.online/wp-content/uploads/2019/12/image-55-768x332.png 768w, https://it-biz.online/wp-content/uploads/2019/12/image-55-800x345.png 800w, https://it-biz.online/wp-content/uploads/2019/12/image-55-304x131.png 304w" sizes="(max-width: 850px) 100vw, 850px" /><figcaption class="wp-element-caption">図4：HTML tr</figcaption></figure>



<p>&lt;tr&gt;タグは<strong><span class="marker-under">テーブルの行数を指定するタグ</span></strong>です。&lt;tr&gt;タグを設置した分だけ、行数が増えていくことになります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記の例で言えば、<strong>&lt;tr&gt;タグは4つ</strong>（＝４行あるので）設置していることになります。必要に応じて、何個でも設置することが可能です。</p>
</div></div>



<p>trとは「<big><span style="color:#cf2e2e" class="color">T</span></big>able <big><span style="color:#cf2e2e" class="color">R</span></big>ow」の略です。Rowとは、行という意味を持つため迷ったときは略す前の名称を思い出すと良いでしょう。&lt;tr>タグは、&lt;table>タグの中にネストして利用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table>
  &lt;tr>
&lt;!-- ここに表の値などを定義していく -->
  &lt;/tr>
  &lt;tr>
&lt;!-- ここに表の値などを定義していく -->
  &lt;/tr>
&lt;/table></pre>



<h3 class="wp-block-heading"><span id="toc4">HTML：&lt;th&gt;タグの使い方</span></h3>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="844" height="370" src="https://it-biz.online/wp-content/uploads/2019/12/image-56.png" alt="html th" class="wp-image-2838" srcset="https://it-biz.online/wp-content/uploads/2019/12/image-56.png 844w, https://it-biz.online/wp-content/uploads/2019/12/image-56-300x132.png 300w, https://it-biz.online/wp-content/uploads/2019/12/image-56-500x219.png 500w, https://it-biz.online/wp-content/uploads/2019/12/image-56-768x337.png 768w, https://it-biz.online/wp-content/uploads/2019/12/image-56-800x351.png 800w, https://it-biz.online/wp-content/uploads/2019/12/image-56-304x133.png 304w" sizes="(max-width: 844px) 100vw, 844px" /><figcaption class="wp-element-caption">図5：HTML th</figcaption></figure>



<p>&lt;th&gt;タグは、テーブルの見出しやタイトルを定義します。</p>



<p>&lt;th&gt;タグは「<big><strong>T</strong></big>able <strong><big>H</big></strong>eader」の略であり、&lt;tr&gt;タグの中にネストして利用します。なお、&lt;th&gt;タグは見出し・タイトルを定義するタグであるため、テキストは<strong>太字</strong>かつ<strong>中央寄せ</strong>で表示されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table>
  &lt;tr>
    &lt;th>国&lt;/th>
    &lt;th>通貨&lt;/th>
    &lt;th>言語&lt;/th>
  &lt;/tr>
  &lt;tr>
&lt;!-- ここに表の値を定義していく -->
  &lt;/tr>
&lt;/table></pre>



<h3 class="wp-block-heading"><span id="toc5">HTML：&lt;td&gt;タグの使い方</span></h3>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="852" height="377" src="https://it-biz.online/wp-content/uploads/2019/12/image-57.png" alt="HTML td" class="wp-image-2840" srcset="https://it-biz.online/wp-content/uploads/2019/12/image-57.png 852w, https://it-biz.online/wp-content/uploads/2019/12/image-57-300x133.png 300w, https://it-biz.online/wp-content/uploads/2019/12/image-57-500x221.png 500w, https://it-biz.online/wp-content/uploads/2019/12/image-57-768x340.png 768w, https://it-biz.online/wp-content/uploads/2019/12/image-57-800x354.png 800w, https://it-biz.online/wp-content/uploads/2019/12/image-57-304x135.png 304w" sizes="(max-width: 852px) 100vw, 852px" /><figcaption class="wp-element-caption">図6：HTML td</figcaption></figure>



<p><strong>&lt;td&gt;タグ</strong>は「Table Data」の略で、テーブルセルの内容を定義します。&lt;tr&gt;タグの中にネストして利用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table>
  &lt;tr>
    &lt;th>国&lt;/th>
    &lt;th>通貨&lt;/th>
    &lt;th>言語&lt;/th>
  &lt;/tr>
  &lt;tr>
    &lt;td>日本&lt;/td>
    &lt;td>円&lt;/td>
    &lt;td>言語&lt;/td>
  &lt;/tr>
  &lt;tr>
    &lt;td>アメリカ&lt;/td>
    &lt;td>＄&lt;/td>
    &lt;td>英語&lt;/td>
  &lt;/tr>
  &lt;tr>
    &lt;td>イギリス&lt;/td>
    &lt;td>￡&lt;/td>
    &lt;td>英語&lt;/td>
  &lt;/tr>
&lt;/table></pre>



<p>こちらのコードを実行した結果がこちら。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="244" height="180" src="https://it-biz.online/wp-content/uploads/2019/12/image-58.png" alt="" class="wp-image-2842" srcset="https://it-biz.online/wp-content/uploads/2019/12/image-58.png 244w, https://it-biz.online/wp-content/uploads/2019/12/image-58-214x158.png 214w" sizes="(max-width: 244px) 100vw, 244px" /><figcaption class="wp-element-caption">図7：テーブル（表）の表示結果</figcaption></figure>



<p>このように、<strong>&lt;table&gt;タグ・&lt;tr&gt;タグ・&lt;th&gt;タグ・&lt;td&gt;タグ</strong>の４つを利用することでHTMLでテーブル（表）を定義することが可能になります。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title">HTML：テーブル（表）の基本</div>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">HTMLのtableタグは、データを行と列の形式で整理し、表示するために使用されるHTML要素。</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">テーブルは、情報を視覚的に整理して比較しやすくすることができ、一般的には数値データや、関連する項目のリストなどを表示するのに適している。</li>



<li>tableタグを使ってテーブルを作成する際には、以下のタグを組み合わせて使用します。</li>
</ul>
</div>



<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-hand-o-right block-box"><div class="iconlist-title">テーブル定義を行う際の基本タグ</div>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-1em has-bottom-margin"><code><span class="bold-blue">&lt;table&gt;</span></code><br>テーブル全体を定義します。テーブルはこのタグで始まり、<code>&lt;/table&gt;</code>で終わります。</li>



<li class="is-style-bottom-margin-1em has-bottom-margin"><code><span class="bold-blue">&lt;tr&gt;</span></code><br>テーブルの行を定義するために使用されるタグです。</li>



<li class="is-style-bottom-margin-1em has-bottom-margin"><code><span class="bold-blue">&lt;th&gt;</span></code><br>テーブルの見出しセルを定義するために使用されるタグで、通常は行や列のラベルに使用されます。</li>



<li><code><span class="bold-blue">&lt;td&gt;</span></code><br>テーブルのデータセルを定義するために使用されるタグで、実際のデータを表します。</li>
</ul>
</div>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table>
  &lt;tr>
    &lt;th>見出し1&lt;/th>
    &lt;th>見出し2&lt;/th>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ1&lt;/td>
    &lt;td>データ2&lt;/td>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ3&lt;/td>
    &lt;td>データ4&lt;/td>
  &lt;/tr>
&lt;/table></pre>
</div>



<h2 class="wp-block-heading"><span id="toc6">現代のWeb環境におけるテーブル（表）の重要性</span></h2>



<p>たまに、現代のWeb環境においてはテーブル（tableタグ）はもはや不要である？という意見を見かけますが、以下のような観点を踏まえると依然として重要なタグの１つであると言えます。</p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li><strong>データの整理と表示</strong>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">HTMLの表はデータを整理し、読みやすい形式で表示するのに適しています。例えば、統計データ、スケジュール、比較リストなどが挙げられます。</li>
</ul>
</li>



<li><strong>アクセシビリティ</strong>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">正しくマークアップされた表は、スクリーンリーダーを使用する視覚障害者に対して、情報の構造を明確に伝えることができます。</li>
</ul>
</li>



<li><strong>互換性と標準化</strong>
<ul class="wp-block-list">
<li>ほとんどのブラウザでサポートされており、異なるデバイスやブラウザ間で一貫した表示を提供します。</li>
</ul>
</li>
</ol>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ちょっと寄り道的に解説すると、昔は<strong>テーブル要素をページのレイアウトを整えるために利用する</strong>手法が流行った時期があるのですが、もうその目的では利用しませんよ・・・！ということを勘違いしてしまうと不要論につながってしまいます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc7">限定的な使用</span></h3>



<ul class="wp-block-list">
<li><strong>レイアウトツールとしての使用の減少</strong>
<ul class="wp-block-list">
<li>過去にはWebページのレイアウト作成に広く使われていましたが、現在ではCSSフレックスボックスやグリッドレイアウトなどの技術が推奨されています。これらはレスポンシブデザインに適しており、より柔軟なレイアウトを可能にします。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><span id="toc8">最適な使用</span></h3>



<ul class="wp-block-list">
<li><strong>意図した目的での使用</strong>
<ul class="wp-block-list">
<li>テーブルは主にタブラー形式のデータ表示のために使用するべきです。レイアウト目的での使用は、セマンティック（意味論的）なWebデザインの原則に反しています。<br><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/semantic-html/">セマンティックHTMLとは？</a></li>
</ul>
</li>
</ul>



<p>HTMLの表は現代のWeb環境において、特定の用途、特にデータの整理とアクセス可能な表示において重要ですが、ページレイアウトのツールとしては他のより適した技術に取って代わられています。適切なコンテキストで使用される場合、表は効果的なツールであり続けます。</p>



<h2 class="wp-block-heading"><span id="toc9">HTML：テーブルのデザイン</span></h2>



<p>ここからは、HTMLでテーブルのデザイン変更を行う方法を解説していきます。CSSを使用してスタイルを指定する方が現代的で柔軟ですが、知識の１つとして知っておいて損はありません。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>代表的な以下の属性について解説します。</p>



<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-caret-right block-box"><div class="iconlist-title">tableタグで利用できる主な属性</div>
<ul class="wp-block-list">
<li>border属性</li>



<li>bordercolor属性</li>



<li>bgcolor属性</li>



<li>cellspacing属性</li>



<li>cellpadding属性</li>
</ul>
</div>
</div></div>



<h3 class="wp-block-heading"><span id="toc10">テーブルに罫線をつける方法（border属性）</span></h3>



<p>border属性（<span class="badge">参考</span> <a href="https://it-biz.online/web-design/attribute/">属性とは？</a>）は、HTMLのtableタグにおいて、<strong>テーブルやセルの境界線（ボーダー）の幅を指定</strong>するために使用される属性です。この属性に数値を指定することで、ボーダーの幅をピクセル単位で設定できます。</p>



<p>例えば、次のようにtableタグにborder属性を指定することで、テーブル全体に1ピクセル幅のボーダーを適用できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table border="1">
  ...
&lt;/table></pre>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>しかし、border属性はHTML4.01で非推奨となり、HTML5では完全に廃止されました。現代のWeb開発では、代わりにCSSを使用してテーブルやセルのボーダーをスタイルすることが一般的です。</p>



<p>例えば、次のようにCSSのborderプロパティを使用して、同様のボーダースタイルを適用できます。</p>
</div>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;style>
  table {
    border-collapse: collapse;
  }
  th, td {
    border: 1px solid black;
  }
&lt;/style>
&lt;table>
  &lt;tr>
    &lt;th>見出し1&lt;/th>
    &lt;th>見出し2&lt;/th>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ1&lt;/td>
    &lt;td>データ2&lt;/td>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ3&lt;/td>
    &lt;td>データ4&lt;/td>
  &lt;/tr>
&lt;/table></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>上記を実行した結果がこちら。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="478" height="142" src="https://it-biz.online/wp-content/uploads/2023/04/image-27.png" alt="" class="wp-image-7438" srcset="https://it-biz.online/wp-content/uploads/2023/04/image-27.png 478w, https://it-biz.online/wp-content/uploads/2023/04/image-27-300x89.png 300w" sizes="(max-width: 478px) 100vw, 478px" /><figcaption class="wp-element-caption">例：CSSで罫線を定義</figcaption></figure>
</div></div>



<h3 class="wp-block-heading"><span id="toc11">枠線の色を変える（bordercolor）</span></h3>



<p><code>bordercolor</code>属性は、HTMLのテーブルやセルの境界線（ボーダー）の色を指定するためにかつて使用されていた属性です。この属性に色名や16進カラーコードを指定することで、ボーダーの色を設定できました。</p>



<p>例えば、以下のようにtableタグに<code>bordercolor</code>属性を指定することで、ボーダーの色を赤に設定できました。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table border="1" bordercolor="red">
  ...
&lt;/table></pre>



<p><strong><span class="marker-under">しかし、<code>bordercolor</code>属性も非標準の属性であり、HTML標準仕様には含まれていません。そのため、現代のWeb開発では使用を避け</span></strong>、代わりにCSSを利用してボーダーの色をスタイルすることが推奨されています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、以下のようにCSSの<code>border</code>プロパティを使用して、同様のボーダーの色を適用できます。</p>
</div></div>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;style>
  table {
    border-collapse: collapse;
  }
  th, td {
    border: 1px solid red;
  }
&lt;/style>

&lt;table>
  &lt;tr>
    &lt;th>見出し1&lt;/th>
    &lt;th>見出し2&lt;/th>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ1&lt;/td>
    &lt;td>データ2&lt;/td>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ3&lt;/td>
    &lt;td>データ4&lt;/td>
  &lt;/tr>
&lt;/table></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この例では、<code>border-collapse: collapse;</code>を使ってテーブルのボーダーがつながるようにしています。また、<code>th</code>および<code>td</code>要素に対して、<code>border: 1px solid red;</code>を使って1ピクセル幅の赤いボーダーを適用しています。</p>



<p>CSSを使用することで、より柔軟で綺麗なデザインを実現できますし、標準仕様に準拠したコードを書くことができます。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="502" height="147" src="https://it-biz.online/wp-content/uploads/2023/04/image-28.png" alt="" class="wp-image-7439" srcset="https://it-biz.online/wp-content/uploads/2023/04/image-28.png 502w, https://it-biz.online/wp-content/uploads/2023/04/image-28-300x88.png 300w, https://it-biz.online/wp-content/uploads/2023/04/image-28-500x146.png 500w" sizes="(max-width: 502px) 100vw, 502px" /><figcaption class="wp-element-caption">例：CSSで罫線の色を定義</figcaption></figure>
</div></div>



<h3 class="wp-block-heading"><span id="toc12">背景色を変更する方法（bgcolor属性）</span></h3>



<p><code>bgcolor</code>属性は、HTMLの過去のバージョンで使用されていた属性で、テーブルやセルの背景色を指定するために使われていました。この属性に色名や16進カラーコードを指定することで、背景色を設定できました。</p>



<p>例えば、次のように<code>table</code>タグや<code>td</code>タグに<code>bgcolor</code>属性を指定することで、背景色を設定できました。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table bgcolor="#f2f2f2">
  &lt;tr>
    &lt;th>見出し1&lt;/th>
    &lt;th>見出し2&lt;/th>
  &lt;/tr>
  &lt;tr>
    &lt;td bgcolor="lightblue">データ1&lt;/td>
    &lt;td bgcolor="lightblue">データ2&lt;/td>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ3&lt;/td>
    &lt;td>データ4&lt;/td>
  &lt;/tr>
&lt;/table></pre>



<p class="has-text-align-left">しかし、<code>bgcolor</code>属性は<strong>HTML4.01で非推奨</strong>となり、<strong><span class="marker-under">HTML5では完全に廃止</span></strong>されました。現代のWeb開発では、代わりにCSSを使用してテーブルやセルの背景色をスタイルすることが一般的です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="494" height="158" src="https://it-biz.online/wp-content/uploads/2023/04/image-29.png" alt="" class="wp-image-7440" srcset="https://it-biz.online/wp-content/uploads/2023/04/image-29.png 494w, https://it-biz.online/wp-content/uploads/2023/04/image-29-300x96.png 300w" sizes="(max-width: 494px) 100vw, 494px" /><figcaption class="wp-element-caption">例：bgcolor属性</figcaption></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>例えば、次のようにCSSの<code>background-color</code>プロパティを使用して、同様の背景色を適用できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;style>
  table {
    background-color: #f2f2f2;
  }
  td:first-child {
    background-color: lightblue;
  }
&lt;/style>

&lt;table>
  &lt;tr>
    &lt;th>見出し1&lt;/th>
    &lt;th>見出し2&lt;/th>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ1&lt;/td>
    &lt;td>データ2&lt;/td>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ3&lt;/td>
    &lt;td>データ4&lt;/td>
  &lt;/tr>
&lt;/table></pre>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="538" height="152" src="https://it-biz.online/wp-content/uploads/2023/04/image-30.png" alt="" class="wp-image-7441" srcset="https://it-biz.online/wp-content/uploads/2023/04/image-30.png 538w, https://it-biz.online/wp-content/uploads/2023/04/image-30-300x85.png 300w, https://it-biz.online/wp-content/uploads/2023/04/image-30-500x141.png 500w" sizes="(max-width: 538px) 100vw, 538px" /><figcaption class="wp-element-caption">例：CSSでセルの色を変更する</figcaption></figure>
</div></div>



<h3 class="wp-block-heading"><span id="toc13">セル間のスペースを指定（cellspacing属性）</span></h3>



<p><code>cellspacing</code>属性は、HTMLのtableタグにおいて、<strong>テーブル内のセル間のスペース</strong>（セルスペーシング）を指定するために使用される属性です。この属性に数値を指定することで、セル間のスペースをピクセル単位で設定できます。</p>



<p>例えば、次のようにtableタグに<code>cellspacing</code>属性を指定することで、セル間に5ピクセルのスペースを設けることができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table cellspacing="5">
  ...
&lt;/table></pre>



<p>しかし、<code>cellspacing</code>属性も他の属性と同様に<strong><span class="marker-under">HTML5で非推奨</span></strong>となりました。代わりにCSSを使用してテーブルのセル間のスペースをスタイルすることが一般的です。</p>



<p>例えば、次のようにCSSの<code>border-spacing</code>プロパティを使用して、同様のセル間のスペースを設定できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;style>
  table {
    border-collapse: separate;
    border-spacing: 20px;
  }
&lt;/style>

&lt;table>
  &lt;tr>
    &lt;th>見出し1&lt;/th>
    &lt;th>見出し2&lt;/th>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ1&lt;/td>
    &lt;td>データ2&lt;/td>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ3&lt;/td>
    &lt;td>データ4&lt;/td>
  &lt;/tr>
&lt;/table></pre>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="587" height="256" src="https://it-biz.online/wp-content/uploads/2023/04/image-31.png" alt="" class="wp-image-7442" srcset="https://it-biz.online/wp-content/uploads/2023/04/image-31.png 587w, https://it-biz.online/wp-content/uploads/2023/04/image-31-300x131.png 300w, https://it-biz.online/wp-content/uploads/2023/04/image-31-500x218.png 500w" sizes="(max-width: 587px) 100vw, 587px" /><figcaption class="wp-element-caption">例：CSSでセル間のスペースを指定</figcaption></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この例では、<code>border-collapse: separate;</code>を使ってテーブルのボーダーが分離されるようにしています。また、<code>border-spacing: </code>20<code>px;</code>を使ってセル間のスペースを20ピクセルに設定しています</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc14">セル内のスペースを指定（cellpadding属性）</span></h3>



<p><code>cellpadding</code>属性は、HTMLのtableタグにおいて、テーブルのセル内の余白（セルパディング）を指定するために使用される属性です。この属性に数値を指定することで、セル内の余白をピクセル単位で設定できます。</p>



<p>例えば、次のようにtableタグに<code>cellpadding</code>属性を指定することで、セル内の余白を10ピクセルに設定することができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;table cellpadding="10">
  ...
&lt;/table></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>しかし、<code>cellpadding</code>属性についても<strong><span class="marker-under">HTML5で非推奨</span></strong>となりました。</p>
</div></div>



<p>代わりにCSSを使用してテーブルのセル内の余白をスタイルすることが一般的です。例えば、次のようにCSSの<code>padding</code>プロパティを使用して、同様のセル内の余白を設定できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;style>
  th, td {
    padding: 10px;
  }
&lt;/style>
&lt;table>
  &lt;tr>
    &lt;th>見出し1&lt;/th>
    &lt;th>見出し2&lt;/th>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ1&lt;/td>
    &lt;td>データ2&lt;/td>
  &lt;/tr>
  &lt;tr>
    &lt;td>データ3&lt;/td>
    &lt;td>データ4&lt;/td>
  &lt;/tr>
&lt;/table></pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TypeScript入門: 基礎から最初のステップまでを３分で</title>
		<link>https://it-biz.online/web-design/typescript-abc/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Thu, 07 Mar 2024 12:00:00 +0000</pubDate>
				<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[WEBデザイン]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=8961</guid>

					<description><![CDATA[TypeScriptはMicrosoftによって開発されたオープンソースのプログラミング言語で、JavaScriptに静的型付けを加えた上位互換言語です。JavaScriptのすべての機能に加えて、型アノテーションやコン [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>TypeScript</strong>はMicrosoftによって開発されたオープンソースのプログラミング言語で、<strong><span class="marker-under">JavaScriptに静的型付けを加えた上位互換言語</span></strong>です。JavaScriptのすべての機能に加えて、型アノテーションやコンパイル時の型チェック、インターフェース、ジェネリックス、名前空間、モジュールなどの機能を持っています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>なので、<a href="https://it-biz.online/web-design/js-rule/">JavaScript</a>に対する基礎知識を持っているとある程度楽に学習を進めることができます。</p>
</div></div>



<p>TypeScriptで書いたコードは、TypeScriptコンパイラまたはBabelなどの<strong>トランスパイラ</strong>を使用してJavaScriptに変換→任意のブラウザや<a href="https://it-biz.online/web-design/node-js/]">Node.js</a>環境で実行することができます。手軽さや移行のしやすさから、現在多くのWebサイトがTypeScriptを用いて構築されています。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function addNumbers(a: number, b: number): number {
    return a + b;
}

const sum = addNumbers(10, 5);
console.log(sum); // 出力: 15</pre>



<p>このページではTypeScriptの基本的な概念を解説します。<br>また、今後TypeScriptを使ってみたいと思う方のために、必要な環境設定から最初のTypeScriptファイルの作成方法に至るまで1個1個順を追ってご説明します。</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">TypeScriptとは</a><ol><li><a href="#toc2" tabindex="0">TypeScriptの特徴（Type：型）</a></li></ol></li><li><a href="#toc3" tabindex="0">TypeScriptの環境設定</a><ol><li><a href="#toc4" tabindex="0">Node.jsのインストール</a></li><li><a href="#toc5" tabindex="0">TypeScriptコンパイラのセットアップ</a></li><li><a href="#toc6" tabindex="0">IDEの設定</a></li></ol></li><li><a href="#toc7" tabindex="0">TypeScriptファイルの作成</a><ol><li><a href="#toc8" tabindex="0">TypeScriptファイルの作成</a></li><li><a href="#toc9" tabindex="0">tscコマンドによるトランスパイル</a></li><li><a href="#toc10" tabindex="0">実行結果の確認</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">TypeScriptとは</span></h2>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="681" height="272" src="https://it-biz.online/wp-content/uploads/2024/03/image-32.png" alt="" class="wp-image-10350" srcset="https://it-biz.online/wp-content/uploads/2024/03/image-32.png 681w, https://it-biz.online/wp-content/uploads/2024/03/image-32-500x200.png 500w, https://it-biz.online/wp-content/uploads/2024/03/image-32-300x120.png 300w" sizes="(max-width: 681px) 100vw, 681px" /></figure>



<p><strong>TypeScriptはJavaScriptの拡張版（＝進化版）</strong>としてMicrosoftにより開発されたプログラミング言語です。JavaScriptの弱点の一つであった「データ型」の問題を克服するために、<strong><span class="marker-under">静的型付け</span></strong>といった強力な型システムを加えることで、開発者がより安全に、かつ効率的にコードを記述できるようにすることを目的としています。</p>



<p>JavaScriptが、ブラウザやNode.jsなど広範囲にわたるプラットフォームでの動的なWebアプリケーション開発に不可欠な言語というのは変わりませんが、TypeScriptはその能力をさらに拡張し、大規模なアプリケーションの開発を容易にしているという点がポイントです。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/web-design/node-js/">Node.jsとは？</a></p>



<h3 class="wp-block-heading"><span id="toc2">TypeScriptの特徴（Type：型）</span></h3>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>TypeScriptの核心機能は、その名が示す通り「Type：<strong>型</strong>」にあります。</p>
</div></div>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p>静的型付け機能は、簡単に言えば、<strong>「この変数はこういう種類の値しか入れちゃダメだよ！」と事前に決めておくことで、間違いを防ぎ、より安全で分かりやすいコードを書けるようにする仕組み</strong>です。</p>
</div>



<p>この仕組みのおかげで、変数、関数の引数、戻り値などに<strong>明確な型を指定できる</strong>ため、開発の早い段階で型不一致やその他の一般的なエラーを検出することが可能になります。<strong><span class="marker-under">この型システムはオプショナル：任意の機能なので、JavaScriptのコードをそのままTypeScriptファイルにコピー＆ペーストして、段階的に型を導入することもできます。</span></strong></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>また、<a href="https://it-biz.online/it-skills/ide/">IDE</a>やエディタの強力なサポートがあるので、リアルタイムのエラーチェック、コード補完、リファクタリングが容易に。→開発プロセスの生産性を大幅に向上させることが可能になります。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc3">TypeScriptの環境設定</span></h2>



<p>TypeScriptを利用するためには、まず開発環境を適切にセットアップする必要があります。このセクションでは、TypeScript開発のための基本的な環境設定手順を説明します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>主に、Node.jsのインストール、TypeScriptコンパイラのセットアップ、そして開発効率を高めるための統合開発環境（IDE）の設定などをご説明します。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc4">Node.jsのインストール</span></h3>



<p>TypeScriptをコンパイルするには<a href="https://it-biz.online/web-design/node-js/">Node.js</a>が必要です。Node.jsは、サーバーサイドでJavaScriptを実行するためのランタイム環境であり、npm（Node Package Manager）が含まれています。npmとは、JavaScriptのライブラリやツールを管理するためのパッケージマネージャーのようなもの。</p>



<p>まずは、<a href="https://nodejs.org/">Node.jsの公式ウェブサイト</a>からインストーラをダウンロードし、指示に従ってNode.jsをインストールしてください。</p>



<h3 class="wp-block-heading"><span id="toc5">TypeScriptコンパイラのセットアップ</span></h3>



<p>Node.jsのインストールが完了したら、次はnpmを使用して<strong>TypeScriptコンパイラ</strong>をインストールします。コマンドラインまたはターミナルを開き、以下のコマンドを実行してください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">npm install -g typescript</pre>



<p>このコマンドにより、TypeScriptコンパイラがグローバルにインストールされ、任意のプロジェクトで使用できるようになります。インストールが完了したら、以下のコマンドを実行してTypeScriptのバージョンを確認し、正しくインストールされていることを確認します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">tsc --version</pre>



<h3 class="wp-block-heading"><span id="toc6">IDEの設定</span></h3>



<p>TypeScriptの開発には、Visual Studio Code（VS Code）などのTypeScriptに対応したIDEを使用することをお勧めします。VS Codeは無料で提供されており、TypeScriptのコード補完、リファクタリング、エラーチェックなどの強力な機能を備えています。VS Codeをまだお持ちでない場合は、<a>Visual Studio Codeの公式ウェブサイト</a>からダウンロードしてインストールしましょう。</p>



<p>インストール後、VS Codeで新しいプロジェクトを開き、<code><span class="bold-blue">.ts</span></code>拡張子を持つファイルを作成すると、自動的にTypeScriptのサポートが有効になります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで、TypeScriptの開発環境の基本的なセットアップが完了です。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc7">TypeScriptファイルの作成</span></h2>



<p>ここまでの章でTypeScriptの基本と環境設定の方法を解説してきました。ここからは、実際にTypeScriptを使って最初のファイルを作成し、それをJavaScriptに<strong>トランスパイル</strong>するプロセスを見ていきます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このステップでは、TypeScriptの基本的な使い方を理解し、TypeScriptプロジェクトでの作業フローを体験していきます。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc8">TypeScriptファイルの作成</span></h3>



<p>まず、任意のテキストエディタまたはIDE（前述のVisual Studio Codeがお勧め）を使用して、新しいファイルを作成します。ファイル名は<code><span class="bold-blue">hello.ts</span></code>としましょう。このファイルに以下のTypeScriptコードを記述してください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function sayHello(name: string): string {
    return `Hello, ${name}!`;
}

const message = sayHello('TypeScript');
console.log(message);</pre>



<p>このコードは、与えられた名前に挨拶を返すシンプルな関数<code>sayHello</code>を定義しています。ここで、引数<code>name</code>と戻り値に<strong><span class="marker-under">型アノテーション<code>string</code></span></strong>を使用しています。これにより、関数が文字列型の引数を受け取り、文字列型の値を返すことがTypeScriptによって保証されます。</p>



<h3 class="wp-block-heading"><span id="toc9">tscコマンドによるトランスパイル</span></h3>



<p>次に、コマンドラインまたはターミナルを開き、<code>hello.ts</code>ファイルが保存されているディレクトリに移動します。次のコマンドを実行して、TypeScriptファイルをJavaScriptにトランスパイルしてください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">tsc hello.ts</pre>



<p>このコマンドを実行すると、同じディレクトリに<code>hello.js</code>という新しいファイルが作成されます。このファイルには、<code>hello.ts</code>からトランスパイルされたJavaScriptコードが含まれています。TypeScriptコンパイラは、TypeScriptのコードを標準的なJavaScriptに変換することで、どのJavaScript環境でも実行できるようにします。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><span class="badge-green">ポイント</span>　<strong>トランスパイルとは？</strong></p>



<p><strong>トランスパイル（Transpile）</strong>は、ソースコードをあるプログラミング言語から別のプログラミング言語に変換するプロセスのこと。この用語は特に、互換性のある形式やより広範囲に対応するプラットフォーム向けにコードを変換する際に用いられます。</p>



<p>TypeScriptはJavaScriptに静的型付けやその他の機能を追加した上位集合言語ですが、ブラウザやNode.jsなどのJavaScript環境で実行するためには、標準的なJavaScriptコードに変換する必要があります。この変換プロセスを実行するのがTypeScriptコンパイラ（<code>tsc</code>コマンド）で、この作業をトランスパイルと呼びます。</p>
</div>



<h3 class="wp-block-heading"><span id="toc10">実行結果の確認</span></h3>



<p>最後に、トランスパイルされたJavaScriptファイルを実行してみましょう。次のコマンドを使用して、<code>hello.js</code>をNode.jsで実行します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">node hello.js</pre>



<p>コマンドを実行すると、コンソールに<code>Hello, TypeScript!</code>というメッセージが表示されます。これは、TypeScriptで書かれたコードが正しくJavaScriptに変換され、期待通りの結果を出力したことを意味します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで、あなたはTypeScriptの基本的な使い方をマスターできました。</p>
</div></div>



<p>TypeScriptファイルの作成、トランスパイル、そして実行のプロセスを通じて、TypeScriptがどのように機能するかの基本的な理解を深めることができたかと思います。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><span class="badge-green">まとめ</span>　<strong>TypeScriptとは？</strong></p>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-1em has-bottom-margin"><strong>上位互換言語</strong>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">TypeScriptはJavaScriptに対して上位互換性を持つプログラミング言語。</li>
</ul>
</li>



<li class="is-style-bottom-margin-1em has-bottom-margin"><strong>静的型付け</strong>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">コードの安全性と信頼性を高めるために、変数や関数の引数、戻り値に型を指定できる。</li>
</ul>
</li>



<li class="is-style-bottom-margin-1em has-bottom-margin"><strong>開発効率の向上</strong>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">IDEとの連携により、コード補完やエラーチェックがリアルタイムで行われ、開発プロセスがスムーズになる。</li>
</ul>
</li>



<li class="is-style-bottom-margin-1em has-bottom-margin"><strong>大規模開発向け</strong>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">型システムやモジュール管理などの機能により、大規模なアプリケーション開発が容易になる。</li>
</ul>
</li>



<li class="is-style-bottom-margin-1em has-bottom-margin"><strong>JavaScriptとの高い互換性</strong>
<ul class="wp-block-list">
<li class="is-style-bottom-margin-2em has-bottom-margin">既存のJavaScriptコードをTypeScriptに徐々に移行することが可能。</li>
</ul>
</li>



<li><strong>オープンソース</strong>
<ul class="wp-block-list">
<li>Microsoftによって開発され、コミュニティのサポートによって継続的に改善されています。</li>
</ul>
</li>
</ol>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Angular：パイプとは？初心者向けにわかりやすく３分で解説</title>
		<link>https://it-biz.online/web-design/angular-pipe/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Fri, 17 Jan 2025 15:57:42 +0000</pubDate>
				<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[WEBデザイン]]></category>
		<category><![CDATA[Angular]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=9585</guid>

					<description><![CDATA[パイプ (Pipe) とは何か？ Angularにおけるパイプ (Pipe) は、テンプレート内で表示するデータを「見た目」や「形式」の観点から変換・加工する仕組みです。このページでは、初心者向けのイメージと、仕組みの本 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>パイプ (Pipe) とは何か？</p>



<p>Angularにおけるパイプ (Pipe) は、テンプレート内で表示するデータを「見た目」や「形式」の観点から変換・加工する仕組みです。このページでは、初心者向けのイメージと、仕組みの本質的な部分を段階的に解説していきます。</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">パイプ (Pipe) とは何か？</a><ol><li><a href="#toc2" tabindex="0">パイプの目的・役割</a></li><li><a href="#toc3" tabindex="0">パイプを使うには</a></li></ol></li><li><a href="#toc4" tabindex="0">初心者がつかむべき「イメージ」と簡単な利用シーン</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">カスタムパイプの基本と概念</a><ol><li><a href="#toc8" tabindex="0">カスタムパイプの最小構成</a></li></ol></li><li><a href="#toc9" tabindex="0">Change Detection (変更検知) との関係</a><ol><li><a href="#toc10" tabindex="0">(1) Angular における変更検知</a></li><li><a href="#toc11" tabindex="0">(2) 純粋パイプと非純粋パイプ</a></li></ol></li><li><a href="#toc12" tabindex="0">具体的な利用シーンとコード例</a><ol><li><a href="#toc13" tabindex="0">シーン1: ユーザー一覧の表示をフィルタ/ソートしたい</a></li><li><a href="#toc14" tabindex="0">シーン2: 日付の差分を表示したい (たとえば「xx日前」「xx時間前」)</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">パイプ (Pipe) とは何か？</span></h2>



<h3 class="wp-block-heading"><span id="toc2">パイプの目的・役割</span></h3>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-2em has-bottom-margin"><strong><span class="marker-under">データ変換 (Formatting / Transforming)</span></strong><br>テンプレート (HTML) に表示する「直前」で、<a href="https://it-biz.online/web-design/ng-generate-component/">コンポーネント</a>から受け取った生データを、ユーザーが見やすい・使いやすい形に整形する。<br>例）日付の表示形式、数値の3桁区切り、文字列の大文字化など。</li>



<li><strong><span class="marker-under">テンプレートの可読性向上</span></strong><br>もしパイプがない場合、コンポーネントやテンプレート内にフォーマット用の複雑な処理が散らばるおそれがある。パイプを使うことで、
<ul class="wp-block-list">
<li>ビジネスロジック (コンポーネント) と表示用のフォーマット処理 (ビュー) を分離しやすい</li>



<li class="is-style-bottom-margin-2em has-bottom-margin">テンプレートは「必要な変換をパイプでつなぐ」だけになる<br>ため可読性が向上する。</li>
</ul>
</li>



<li><strong><span class="marker-under">Angular が提供するビルトイン機能との連携</span></strong><br>代表的なビルトインパイプ (<code>DatePipe</code>, <code>NumberPipe</code>, <code>CurrencyPipe</code>, <code>PercentPipe</code>, <code>UpperCasePipe</code> など) を利用することで、面倒なデータ変換の多くを少ないコードで実現できる。</li>
</ol>



<h3 class="wp-block-heading"><span id="toc3">パイプを使うには</span></h3>



<ul class="wp-block-list">
<li><strong>“|” (パイプ記号) を使う</strong><br>テンプレート内で <code>{{ 変数 | pipe名 }}</code> のように使います。複数のパイプをつなげて使うこともできます。</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- 例: 価格を3桁区切りにフォーマットし、通貨も付けて表示する -->
{{ price | number:'1.0-0' | currency:'JPY' }}
</pre>



<h2 class="wp-block-heading"><span id="toc4">初心者がつかむべき「イメージ」と簡単な利用シーン</span></h2>



<h3 class="wp-block-heading"><span id="toc5">単純なビルトインパイプの利用例</span></h3>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- コンポーネントのプロパティ -->
export class ExampleComponent {
  today = new Date();  // たとえば 2025-01-18
  price = 1234.5;
  userName = 'angular user';
}
</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- テンプレート -->
&lt;!-- ① 日付を表示 -->
&lt;p>Today: {{ today | date:'yyyy/MM/dd' }}&lt;/p>
&lt;!-- 出力例: Today: 2025/01/18 -->

&lt;!-- ② 価格を3桁区切りにして、通貨表記に -->
&lt;p>Price: {{ price | currency:'USD':'symbol':'1.0-2' }}&lt;/p>
&lt;!-- 出力例: Price: $1,234.50 -->

&lt;!-- ③ 文字列をすべて大文字に -->
&lt;p>User: {{ userName | uppercase }}&lt;/p>
&lt;!-- 出力例: User: ANGULAR USER -->
</pre>



<ul class="wp-block-list">
<li>このように、<code>{{ 変数 | pipe名:オプション }}</code> の形で、テンプレート上で値を変換するのがパイプの基本的な使い方です。</li>



<li><strong>利用シーン</strong>: ユーザーに見せたい情報があるとき、コンポーネント側のデータ構造や型はそのままで、最後の「表示」のタイミングだけパイプでスッキリ変換できる。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc6">複数パイプの連続利用</span></h3>



<p>1つの値に対して、パイプ記号 <code>|</code> を複数つなげることも可能です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- 価格を3桁区切り→JPY表記→大文字に -->
&lt;p>{{ price | number:'1.0-0' | currency:'JPY':'symbol' | uppercase }}&lt;/p>
</pre>



<ul class="wp-block-list">
<li><code>price</code> を整数表記にして (<code>number:'1.0-0'</code>)、</li>



<li><code>currency</code> で通貨（￥）を付与し (<code>currency:'JPY'</code>)、</li>



<li><code>uppercase</code> で最終的に大文字化したものが表示される。</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>データ変換が段階的に行われるため、一連のフォーマット処理をテンプレート上で可視化しやすいのが利点の１つです。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc7">カスタムパイプの基本と概念</span></h2>



<p>Angularで用意されているビルドインパイプでは要件を満たさない場合、自分でパイプを作成することもできます。</p>



<p>例）日付 +「何日前」「何時間前」といった表示形式にしたい、配列を特定の条件でフィルタリングしたい、など。</p>



<h3 class="wp-block-heading"><span id="toc8">カスタムパイプの最小構成</span></h3>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// ex-rate.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'exRate' // テンプレート上で使うパイプ名
})
export class ExRatePipe implements PipeTransform {
  // transformメソッドが肝。引数は自由に定義できる（最初が「値」、それ以降がパラメータ）
  transform(value: number, rate: number): number {
    return value * rate;
  }
}
</pre>



<ol class="wp-block-list">
<li><code>@Pipe()</code> デコレーターで、パイプであることとパイプ名を宣言。</li>



<li><code>PipeTransform</code> インターフェースの <code>transform</code> メソッドを実装する（必須）。</li>



<li>変換したい処理を <code>transform</code> で書き、戻り値を返す。</li>
</ol>



<p><strong>テンプレートでの使用例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- コンポーネントで amount = 100 として、1ドル=135円換算 で表示 -->
&lt;p>JPY: {{ amount | exRate:135 }}&lt;/p>
&lt;!-- 実行結果: 13500 -->
</pre>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-hint block-box">
<p>Angular のパイプ (Pipe) は <code>PipeTransform</code> インターフェースを実装しなければなりません。その必須メソッドが <code>transform</code> です。</p>



<ul class="wp-block-list">
<li><strong>役割</strong>: テンプレートから受け取った「変換元の値」と「パイプに与える引数 (オプション)」を受け取り、データ変換の結果を返却する。</li>



<li><strong>イメージ</strong>: 「生データ → <code>transform</code> → 表示用データ」の流れをになう変換ロジック本体。</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@Pipe({
  name: 'exRate'
})
export class ExRatePipe implements PipeTransform {
  transform(value: number, rate: number): number {
    return value * rate;
  }
}
</pre>



<p>上記の例では <code>transform(value, rate)</code> という形で「入力値とパラメータを受け取り、掛け算した結果」を返しています。テンプレートで <code>{{ amount | exRate:135 }}</code> と書くと、</p>



<ol class="wp-block-list">
<li><code>amount</code> が <code>value</code> に相当</li>



<li><code>135</code> が <code>rate</code> に相当</li>



<li><code>transform(100, 135)</code> → <code>13500</code> が戻り値<br>…という流れで表示に反映されます。</li>
</ol>
</div>



<h2 class="wp-block-heading"><span id="toc9">Change Detection (変更検知) との関係</span></h2>



<h3 class="wp-block-heading"><span id="toc10">(1) Angular における変更検知</span></h3>



<ul class="wp-block-list">
<li>Angular はコンポーネントのプロパティが変わったかどうかを監視 (Change Detection) し、変更があればテンプレートを再描画 (再評価) する仕組み。</li>



<li><strong>純粋パイプ (Pure Pipe)</strong> は「入力値 (およびその参照) が変わったときのみ」<code>transform</code> を再実行する。</li>



<li><strong>非純粋パイプ (Impure Pipe)</strong> は「変更検知サイクルごとに」<code>transform</code> を再実行する。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc11">(2) 純粋パイプと非純粋パイプ</span></h3>



<ol class="wp-block-list">
<li><strong>純粋パイプ (Pure Pipe)</strong>
<ul class="wp-block-list">
<li>デフォルトではこちら。<code>@Pipe({ name: 'xxx' })</code> と書くだけで純粋パイプとして扱われる。</li>



<li>値が変わったときだけ再評価されるので、パフォーマンスによい。</li>



<li>単純な日付変換や数値フォーマットなど、入力値が変わらないときに「結果も変わらない」処理に最適。</li>
</ul>
</li>



<li><strong>非純粋パイプ (Impure Pipe)</strong>
<ul class="wp-block-list">
<li><code>@Pipe({ name: 'xxx', pure: false })</code> のように、<code>pure: false</code> を指定すると非純粋パイプになる。</li>



<li>変更検知サイクルのたびに毎回 <code>transform</code> が走るので、配列やオブジェクトの“中身”の変化に対しても都度再評価される。</li>



<li><strong>利用シーン</strong>:
<ul class="wp-block-list">
<li>配列・オブジェクトをテンプレート上でフィルタやソートしたいときに、「単純に参照が新規になった/ならない」を超えて、内容の微細な変化に対応させたい場合など。</li>



<li>ただしパフォーマンスに影響するので、よく検討してから使う。</li>
</ul>
</li>
</ul>
</li>
</ol>



<p><strong>非純粋パイプの簡単な例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@Pipe({
  name: 'search',
  pure: false // 非純粋パイプ
})
export class SearchPipe implements PipeTransform {
  transform(items: any[], keyword: string): any[] {
    return items.filter(item => item.name.includes(keyword));
  }
}
</pre>



<p>この例では、<code>items</code> (配列) や <code>keyword</code> (検索文字列) が細かく変化するたびにパイプを再評価し、フィルタ済みの配列を返す。もし純粋パイプだと、配列の「参照」が同じままでは再実行されないため、意図するタイミングで結果が更新されない場合がある。とはいえ「毎回呼ばれる」ことになるため、大きな配列・複雑な処理には注意が必要です。</p>



<h2 class="wp-block-heading"><span id="toc12">具体的な利用シーンとコード例</span></h2>



<h3 class="wp-block-heading"><span id="toc13">シーン1: ユーザー一覧の表示をフィルタ/ソートしたい</span></h3>



<ul class="wp-block-list">
<li>パイプでフィルタ処理を書けば、テンプレートに <code>| filterUser:'xxx'</code> のように書くだけで表示を切り替えられる。</li>



<li>ただし大量データがある場合は、都度全件フィルタするとパフォーマンスが落ちるため、コンポーネント側でフィルタした結果を保持するなど検討が必要。</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@Pipe({ 
  name: 'filterUser'
})
export class FilterUserPipe implements PipeTransform {
  transform(users: { id: number; name: string; }[], searchTerm: string): any[] {
    if (!searchTerm) return users;
    return users.filter(user => 
      user.name.toLowerCase().includes(searchTerm.toLowerCase())
    );
  }
}
</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- テンプレート -->
&lt;input [(ngModel)]="keyword" placeholder="検索ワード" />
&lt;ul>
  &lt;li *ngFor="let user of users | filterUser:keyword">
    {{ user.name }}
  &lt;/li>
&lt;/ul>
</pre>



<h3 class="wp-block-heading"><span id="toc14">シーン2: 日付の差分を表示したい (たとえば「xx日前」「xx時間前」)</span></h3>



<ul class="wp-block-list">
<li>ビルトインの <code>DatePipe</code> では「相対的な日付表示」はサポートしていない (locale, format によるもの) ので、カスタムパイプで実装する。</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="typescript" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@Pipe({
  name: 'relativeTime'
})
export class RelativeTimePipe implements PipeTransform {
  transform(value: Date): string {
    const now = new Date();
    const diffMs = now.getTime() - value.getTime();
    const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
    const diffHours = Math.floor(diffMs / (1000 * 60 * 60));

    if (diffDays > 0) {
      return `${diffDays}日前`;
    } else if (diffHours > 0) {
      return `${diffHours}時間前`;
    } else {
      return 'たった今';
    }
  }
}
</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!-- テンプレート例 -->
&lt;p>投稿時刻: {{ post.createdAt | relativeTime }}&lt;/p>
&lt;!-- 出力例: "1日前" "2時間前" ... -->
</pre>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><span class="badge-green">まとめ</span>　<strong>Angularのパイプ</strong>の理解</p>



<p><strong>パイプは「表示直前のデータ変換器」</strong></p>



<ul class="wp-block-list">
<li>テンプレートの可読性と表示処理の再利用性を高めるためにある。</li>



<li>ビルトインパイプでよく使うフォーマット (日付、数値、文字列など) は大半がカバーできる。</li>
</ul>



<p><strong>カスタムパイプで表示ロジックをカプセル化</strong></p>



<ul class="wp-block-list">
<li>変換ロジックを <code>transform</code> メソッドに閉じ込めることで、複数のテンプレートで同じフォーマットを簡単に使い回しできる。</li>



<li>「ビジネスロジックはコンポーネントやサービス側、表示ロジックはパイプ側」と分けるとシンプルに整理できる。</li>
</ul>



<p><strong>Change Detection と「純粋/非純粋」</strong></p>



<ul class="wp-block-list">
<li>純粋パイプは「入力が変わったときだけ」呼ばれるのでパフォーマンスに優れる。</li>



<li>非純粋パイプは「常に呼ばれる」ため、配列やオブジェクトの中身の変化を捉えたい場合に利用する。ただし多用は避ける。</li>
</ul>



<p><strong>利用シーンを明確に</strong></p>



<ul class="wp-block-list">
<li>大量データを都度フィルタしたり、複雑なロジックをパイプで実行するとパフォーマンスが落ちる。</li>



<li>あくまで「ちょっとした表示形式の変更・整形」を軽量に実装するのがパイプの本来の役割。</li>
</ul>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p><strong>パイプは「コンポーネント → テンプレート」の単方向データフローの、テンプレート直前でのフォーマット処理</strong> としてとらえると理解しやすいです。</p>
</div></div>



<p>前提として「Angularの変更検知の流れ (コンポーネントのプロパティが変わるとテンプレートに反映される)」を押さえておけば、純粋パイプと非純粋パイプの振る舞いも自然と理解できるでしょう。一度使ってみるとその便利さを実感できるので、まずはビルトインパイプの日付フォーマットや数値フォーマットから試し、必要に応じてカスタムパイプでオリジナルの変換処理を実装してみてください。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
