<?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>ビズドットオンライン | ビズドットオンライン</title>
	<atom:link href="https://it-biz.online/author/shibuya0404/feed/" rel="self" type="application/rss+xml" />
	<link>https://it-biz.online</link>
	<description></description>
	<lastBuildDate>Tue, 03 Feb 2026 02:40:17 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://it-biz.online/wp-content/uploads/2019/10/cropped-4a332f05ade4ac7bb3c46c472cb5eac8-32x32.png</url>
	<title>ビズドットオンライン | ビズドットオンライン</title>
	<link>https://it-biz.online</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>NFSプロトコルとは何か？初心者向けに1からわかりやすく解説</title>
		<link>https://it-biz.online/it-skills/nfs/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Tue, 03 Feb 2026 02:40:15 +0000</pubDate>
				<category><![CDATA[IT-Skills]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[ネットワーク]]></category>
		<category><![CDATA[通信プロトコル]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=10384</guid>

					<description><![CDATA[結論：NFSとは「別のコンピュータのフォルダを、自分のPCのフォルダのように使える」仕組み NFS（Network File System）とは、ネットワーク越しに他のコンピュータのディスク（フォルダ）を、自分のローカル [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">結論：NFSとは「別のコンピュータのフォルダを、自分のPCのフォルダのように使える」仕組み</h2>



<p>NFS（Network File System）とは、<strong>ネットワーク越しに他のコンピュータのディスク（フォルダ）を、自分のローカルディスクのように扱えるようにする通信プロトコル</strong>です。</p>



<p>一言でいうと、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>「遠くにあるフォルダを、手元にあるかのように使える技術」</strong></p>
</blockquote>



<p>これがNFSの本質です。</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="800" height="533" src="https://it-biz.online/wp-content/uploads/2026/02/image-2-800x533.png" alt="" class="wp-image-10388" srcset="https://it-biz.online/wp-content/uploads/2026/02/image-2-800x533.png 800w, https://it-biz.online/wp-content/uploads/2026/02/image-2-500x333.png 500w, https://it-biz.online/wp-content/uploads/2026/02/image-2-300x200.png 300w, https://it-biz.online/wp-content/uploads/2026/02/image-2-768x512.png 768w, https://it-biz.online/wp-content/uploads/2026/02/image-2.png 1536w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p>NFSはもともと Sun Microsystems によって開発され、現在ではLinux/Unix系システムを中心に、サーバ環境で広く使われています。</p>



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



<h2 class="wp-block-heading">そもそも「ファイル共有」が必要になる理由</h2>



<p>まず前提として、現代のシステムでは次のような状況がよくあります。</p>



<ul class="wp-block-list">
<li>サーバが複数台ある</li>



<li>それらが<strong>同じデータ</strong>を参照する必要がある</li>



<li>画像・帳票・ログ・アップロードファイルなどを<strong>一元管理したい</strong></li>
</ul>



<p>例：</p>



<ul class="wp-block-list">
<li>Webサーバが3台ある</li>



<li>どのサーバからアクセスしても同じ画像フォルダを使いたい</li>
</ul>



<p>このとき各サーバに同じファイルをコピーして回るのは現実的ではありません。</p>



<p>そこで登場するのが <strong>NFS</strong> です。</p>



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



<h2 class="wp-block-heading">NFSの基本的な仕組み</h2>



<h3 class="wp-block-heading">登場人物はたった2つ</h3>



<p>NFSは、とてもシンプルな構成です。</p>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table class="has-fixed-layout"><thead><tr><th>役割</th><th>説明</th></tr></thead><tbody><tr><td>NFSサーバ</td><td>フォルダを「公開」する側</td></tr><tr><td>NFSクライアント</td><td>そのフォルダを「使う」側</td></tr></tbody></table></div></figure>



<p>サーバ側で共有設定したディレクトリを、クライアント側で <code>mount</code>（マウント）すると、クライアントからは普通のフォルダとして見えるようになります。</p>



<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="">[NFSクライアント] ─── ネットワーク ─── [NFSサーバ]
        |
     /mnt/share   ← 実体はサーバ側ディスク
</pre>



<p>ポイントはここです。</p>



<ul class="wp-block-list">
<li>クライアントから見ると <code>/mnt/share</code> は普通のフォルダ</li>



<li>しかし実体はNFSサーバ上に存在</li>
</ul>



<p>アプリケーションは「ローカルファイル」だと思って読み書きしますが、裏ではNFSがネットワーク越しに通信しています。</p>



<h2 class="wp-block-heading">NFSを使うと何が嬉しいのか？</h2>



<p>代表的なメリットは次の3つです。</p>



<h3 class="wp-block-heading">1. アプリケーションを変更しなくてよい</h3>



<p>NFSは「ファイルシステム」として見えるため、</p>



<ul class="wp-block-list">
<li>特別なAPI</li>



<li>専用ライブラリ</li>
</ul>



<p>が不要です。</p>



<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="">/data/file.txt
</pre>



<p>を読むだけ。<br>それがたまたまNFSなだけ、という状態になります。</p>



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



<h3 class="wp-block-heading">2. 複数サーバで同じデータを共有できる</h3>



<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="">WebサーバA ─┐
WebサーバB ─┼─ NFSサーバ
WebサーバC ─┘
</pre>



<p>これにより、</p>



<ul class="wp-block-list">
<li>アップロードファイル</li>



<li>画像</li>



<li>帳票</li>
</ul>



<p>などを<strong>1か所に集約</strong>できます。</p>



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



<h3 class="wp-block-heading">3. 構成がシンプル</h3>



<p>最低限必要なのは：</p>



<ul class="wp-block-list">
<li>NFSサーバ</li>



<li>NFSクライアント</li>
</ul>



<p>だけ。</p>



<p>大規模な分散ストレージと比べると、導入・理解・運用のハードルが低いのも特徴です。</p>



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



<h2 class="wp-block-heading">ローカルディスクとNFSの違い</h2>



<p>感覚的な違いを表にまとめます。</p>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table class="has-fixed-layout"><thead><tr><th>項目</th><th>ローカルディスク</th><th>NFS</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></tbody></table></div></figure>



<p><strong>見た目は同じ、裏側が違う</strong>。<br>これが最大のポイントです。</p>



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



<h2 class="wp-block-heading">超かんたん：NFSの利用イメージ（概念）</h2>



<h3 class="wp-block-heading">サーバ側（共有する）</h3>



<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="">/share
</pre>



<p>というフォルダを公開。</p>



<h3 class="wp-block-heading">クライアント側（使う）</h3>



<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="">mount サーバ:/share /mnt/share
</pre>



<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="">/mnt/share
</pre>



<p>が現れ、普通のフォルダとして操作可能になります。</p>



<p>以降は：</p>



<ul class="wp-block-list">
<li>ls</li>



<li>cp</li>



<li>vi</li>
</ul>



<p>すべて通常通り。</p>



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



<h2 class="wp-block-heading">実務で必ず意識すべき注意点</h2>



<p>便利なNFSですが、設計時には以下が重要です。</p>



<h3 class="wp-block-heading">● ネットワーク＝性能</h3>



<p>ファイルI/Oはすべてネットワーク越し。<br>大量アクセス時はボトルネックになります。</p>



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



<h3 class="wp-block-heading">● NFSサーバは単一障害点になりやすい</h3>



<p>NFSサーバが落ちると、</p>



<p>→ 接続している全クライアントが影響を受けます。</p>



<p>冗長化設計が重要になります。</p>



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



<h3 class="wp-block-heading">● 同時書き込み</h3>



<p>複数マシンから同じファイルを書く場合、</p>



<ul class="wp-block-list">
<li>ロック</li>



<li>整合性</li>
</ul>



<p>を意識しないと事故が起きます。</p>



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



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



<p>最後に要点を整理します。</p>



<ul class="wp-block-list">
<li>NFSとは「遠隔フォルダをローカルのように使える」プロトコル</li>



<li>サーバが公開、クライアントがマウントするだけ</li>



<li>アプリは通常のファイル操作のまま利用可能</li>



<li>複数サーバでのデータ共有が簡単</li>



<li>一方で、性能・単一障害点・同時更新には注意が必要</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Java】列挙型(enum)を１からわかりやすく</title>
		<link>https://it-biz.online/java/enum/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Wed, 23 Oct 2024 00:00:00 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=9438</guid>

					<description><![CDATA[列挙型（enum）とは、あらかじめ決められた選択肢の中から１つを選ぶ必要がある場面で使用される特別なデータ型です。Javaではenumをうまく活用すると、コーディングミスの防止や可読性の向上、コード全体の保守性を高めるこ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>列挙型（<code><span class="bold-blue">enum</span></code>）とは、あらかじめ決められた選択肢の中から１つを選ぶ必要がある場面で使用される特別な<a href="https://it-biz.online/it-skills/data_type/">データ型</a>です。Javaでは<code><span class="blue">enum</span></code>をうまく活用すると、コーディングミスの防止や可読性の向上、コード全体の保守性を高めることができます。</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="">enum Season {
    SPRING, SUMMER, FALL, WINTER;
}
</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>ため、<code>enum</code>は<em>「選択肢の管理者」</em>のような役割を果たします。</p>
</div></div>



<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="">+---------------------+
|       enum Day      |  &lt;-- 列挙型 (enum)
+---------------------+
| - MONDAY            |  &lt;-- 定数1
| - TUESDAY           |  &lt;-- 定数2
| - WEDNESDAY         |  &lt;-- 定数3
| - THURSDAY          |  &lt;-- 定数4
| - FRIDAY            |  &lt;-- 定数5
| - SATURDAY          |  &lt;-- 定数6
| - SUNDAY            |  &lt;-- 定数7
+---------------------+</pre>



<h2 class="wp-block-heading">Javaの列挙型（enum）とは？</h2>



<p><code>enum</code>は、<strong><span class="marker-under">決まった範囲の値</span></strong>を１つの型としてまとめる役割を持つデータ型の一種（厳密には<code><span class="blue">java.lang.Enum</span></code>を継承した<a href="https://it-biz.online/java/java-oop/">クラス</a>として扱われます）。</p>



<p>具体的な例として、曜日（<code>MONDAY</code>、<code>TUESDAY</code>）や四季（<code>SPRING</code>、<code>SUMMER</code>）を扱う際に便利なデータ型です。</p>



<p><strong>例え話</strong>：レストランの注文で・・・</p>



<ul class="wp-block-list">
<li>レストランでは「ラーメン」「カレー」「ハンバーグ」など、メニューから選んで注文します。これ以外の注文が来ても対応できません。同様に、<code>enum</code>を使えば、プログラム内で定義した選択肢以外の無効な値を防ぐことができます。</li>
</ul>



<h3 class="wp-block-heading">enumを使わない場合の問題</h3>



<p>選択肢を文字列（<code><a href="https://it-biz.online/java/java-string/">String</a></code>）で扱う場合、タイプミスや異なる表記によるエラーが発生しやすくなります。以下の例を見てください。</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を使った例（エラーの原因）
String day = "Mondai"; // スペルミスによるバグ

// enumを使った例（安全）
Day day = Day.MONDAY; // 決まった選択肢だけが使用可能
</pre>



<p>要するに<strong>タイプミスやコーディングミスを制限するために役立つ</strong>のが<code>enum</code>のもう１つの側面でもあります。</p>



<h2 class="wp-block-heading">enumの基本的な使い方：構文ルール</h2>



<p>以下のように、Javaの<code>enum</code>は特定の選択肢を<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="">public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
</pre>



<p><span class="badge-green">ポイント</span>　<strong>enumの基本的な性質：不変性</strong></p>



<ul class="wp-block-list">
<li><strong>要素の追加・削除不可</strong>：<code>enum</code>の宣言後に要素を追加したり削除することはできません。</li>



<li><strong>要素の再代入不可</strong>：プログラムの実行中に<code>enum</code>の要素を新しい値に変更することはできません。</li>



<li><strong>定数はすべて暗黙的に<code>final</code>かつ<code>static</code></strong>：そのため、インスタンス化も変更もできません。</li>
</ul>



<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="">public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

// 以下のコードはコンパイルエラーになる
Day today = Day.MONDAY;
// today = "Holiday"; // エラー: 型が一致しない</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>enum</code>の要素は<code><span class="bold-blue">型名.要素名</span></code>で呼び出します（例：<code>Day.MONDAY</code>）。</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-question-circle"><span class="tab-caption-box-label-text block-box-label-text box-label-text">なぜenumは書き換えられないのか？</span></div><div class="tab-caption-box-content block-box-content box-content">
<p><strong>理由1：不変性による安全性</strong></p>



<ul class="wp-block-list">
<li><code>enum</code>を使うことで、<strong>プログラムが予期せぬ変更を受けない</strong>ようにすることができます。<br>例：曜日が動的に変わることは現実的にないため、不変性が理にかなっています。</li>
</ul>



<p><strong>理由2：メモリの効率化</strong></p>



<ul class="wp-block-list">
<li><code>enum</code>の各要素はJavaによって<strong>シングルトン（Singleton）</strong>として管理され、1つのインスタンスが再利用されます。そのため、新たなインスタンスを作成したり、既存の要素を書き換える必要がありません。</li>
</ul>
</div></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo block-box">
<p><code>enum</code>（列挙型）はクラスの一種です。実際、<code>enum</code>を定義するとコンパイラは<code>java.lang.Enum</code>を<a href="https://it-biz.online/java/java-extends/">継承</a>したクラスとして扱います。例えば以下のように定義すると・・・</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="">public enum Color { RED, GREEN, BLUE; }
</pre>



<p>これはコンパイラによって下記のようなクラスに変換されます。</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="">public final class Color extends java.lang.Enum&lt;Color> {
    public static final Color RED = new Color("RED", 0);
    public static final Color GREEN = new Color("GREEN", 1);
    public static final Color BLUE = new Color("BLUE", 2);
    private static final Color[] $VALUES = { RED, GREEN, BLUE };

    private Color(String name, int ordinal) {
        super(name, ordinal);
    }

    public static Color[] values() {
        return $VALUES.clone();
    }

    public static Color valueOf(String name) {
        return Enum.valueOf(Color.class, name);
    }
}
</pre>



<ul class="wp-block-list">
<li><code>extends Enum&lt;Color&gt;</code>：共通処理（<code>name()</code>, <code>ordinal()</code>, <code>compareTo()</code>など）を<code>Enum</code>クラスから継承。</li>



<li>定数ごとに<code>new Color("NAME", 番号)</code>でインスタンス化。</li>



<li><code>$VALUES</code>配列で全定数を保持。</li>
</ul>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li><strong>基底クラス<code>java.lang.Enum</code>の役割</strong>
<ul class="wp-block-list">
<li><strong><code>name()</code></strong>: 定数の文字列表現</li>



<li><strong><code>ordinal()</code></strong>: 宣言順の添字</li>



<li><strong><code>compareTo()</code></strong>: 宣言順比較</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong><code>toString()</code></strong>: デフォルトで<code>name()</code>を返す</li>
</ul>
</li>



<li><strong>自動生成される静的メソッド</strong>
<ul class="wp-block-list">
<li><strong><code>values()</code></strong>: <code>$VALUES</code>を<code>clone()</code>して返却（外部から配列を書き換えられないように）</li>



<li class="is-style-bottom-margin-2em has-bottom-margin"><strong><code>valueOf(String)</code></strong>: 名前一致で定数を取得。存在しないと<code>IllegalArgumentException</code>を投げる。</li>
</ul>
</li>



<li><strong>ユーザー定義の要素</strong>
<ul class="wp-block-list">
<li>独自フィールドやメソッドを<code>enum</code>内に記述可能。</li>



<li>たとえば、<code>RED(255,0,0)</code>のようにコンストラクタ引数を持たせ、RGB値を保持できる。</li>
</ul>
</li>
</ol>



<p><span class="badge-green">ポイント</span>　<strong>enumの特徴まとめ</strong></p>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table class="has-fixed-layout"><thead><tr><th>項目</th><th>説明</th></tr></thead><tbody><tr><td>クラスの一種</td><td><code>Enum</code>は内部的にはクラス（ただし継承はできない）</td></tr><tr><td>固定値の集合</td><td>決まった値（定数）を列挙するのに使う</td></tr><tr><td>メソッド定義可能</td><td>メソッドやフィールドを追加できる</td></tr><tr><td>インスタンス生成</td><td>自動で定義された値分だけ生成され、<code>new</code>で追加は不可</td></tr></tbody></table></div></figure>
</div>



<h3 class="wp-block-heading">enumの活用例</h3>



<p><code>enum</code>の要素は<strong>定数（<a href="https://it-biz.online/java/java-static/">static</a>なインスタンス）として定義されているので</strong>、<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="">// 列挙型(enum)の定義
enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

public class EnumExample {
    public static void main(String[] args) {
        // 今日の曜日を設定
        Day today = Day.MONDAY;

        // 曜日に応じた条件分岐
        if (today == Day.MONDAY) {
            System.out.println("今日は月曜日です！");
        } else {
            System.out.println("今日は月曜日ではありません。");
        }
    }
}
</pre>



<p><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="">今日は月曜日です！
</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><span class="marker-under">enumもクラスの一種！そして、enumの各定数は<strong>自動的にstatic finalなインスタンスとして生成される</strong>！</span></strong></p>



<p>という点だけ頭に入れておけば基本的には自由に使いこなすことができるはずです。</p>
</div></div>



<h2 class="wp-block-heading">enumの応用例</h2>



<p>ここからは、enumの応用編です。より実践に近づけながら解説します。</p>



<h3 class="wp-block-heading">enumにメソッドを追加する</h3>



<p><code>enum</code>は定数の集合だけでなく、<strong><span class="marker-under">メソッドを持たせることで、より柔軟な使い方が可能</span></strong>です。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/java/java-method/">メソッドとは？</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><code>enum</code>にメソッドを持たせる理由はなんでしょうか？</p>
</div></div>



<p>例えば「四季」や「状態」を表す<code>enum</code>があったとしましょう。各季節に「気候の説明」を持たせたい場合、ただの定数ではそれを表現するのは難しいです。ここで、<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="">// enumの定義：四季に説明を持たせる
enum Season {
    SPRING("暖かい"), 
    SUMMER("暑い"), 
    FALL("涼しい"), 
    WINTER("寒い");

    private final String description; // 各要素の説明を保持するフィールド

    // コンストラクタ：各要素を初期化
    Season(String description) {
        this.description = description;
    }

    // 説明を取得するメソッド
    public String getDescription() {
        return description;
    }
}

public class EnumMethodExample {
    public static void main(String[] args) {
        // SUMMERの説明を取得
        Season currentSeason = Season.SUMMER;
        System.out.println("今の季節は " + currentSeason + " で、" + currentSeason.getDescription() + "です。");
    }
}
</pre>



<p><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="">今の季節は SUMMER で、暑いです。
</pre>



<h2 class="wp-block-heading">enumの内部動作</h2>



<p><code>enum</code>は、内部的にクラス（<span class="badge">参考</span>　<a href="https://it-biz.online/java/java-oop/">クラスとは？</a>）として実装され、各要素はシングルトンインスタンスとして生成されます。つまり、同じ<code>enum</code>要素を比較する際に<code><span class="bold-blue">==</span></code>を使うことができ、常に正しい比較が保証されます。</p>



<h3 class="wp-block-heading"><strong>1. enumがクラスとして実装されるとは？</strong></h3>



<p>Javaでは、<code>enum</code>はコンパイル時に<strong>特別なクラス</strong>として変換されます。これは、各<code>enum</code>要素が通常のクラスインスタンスとして扱われるという意味です。しかし、開発者が自分でインスタンスを生成したり変更することはできません。</p>



<h4 class="wp-block-heading"><strong>enumの内部クラス構造イメージ</strong></h4>



<p>以下は、<code>enum</code>が内部的にどのような形でクラスとして扱われるかをイメージ化したものです。</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="">// 実際にはJavaコンパイラによってこのようなクラスに変換される
public final class Day extends Enum&lt;Day> {
    public static final Day MONDAY = new Day("MONDAY", 0);
    public static final Day TUESDAY = new Day("TUESDAY", 1);
    // 他の曜日も同様に定義

    private Day(String name, int ordinal) {
        super(name, ordinal);
    }
}
</pre>



<h3 class="wp-block-heading"><strong>2. シングルトンパターンの適用</strong></h3>



<ul class="wp-block-list">
<li><strong>シングルトンパターン</strong>は、あるクラスのインスタンスが<strong>1つだけ存在することを保証</strong>するデザインパターンです。</li>



<li><code>enum</code>では、このシングルトンの特性が<strong>自動的に適用</strong>されます。</li>
</ul>



<h4 class="wp-block-heading"><strong>enum要素はシングルトン</strong></h4>



<p><code>enum</code>の各要素（例：<code>MONDAY</code>、<code>TUESDAY</code>）は、プログラム全体で<strong>一度だけ生成されるインスタンス</strong>です。これにより、同じ要素同士を比較するときに<strong><code>==</code>演算子</strong>を使って正しく比較できるのです。</p>



<h3 class="wp-block-heading"><strong>3. ==演算子による比較の正しさ</strong></h3>



<p>通常、Javaでは<code>==</code>演算子は<strong>オブジェクトの同一性（同じインスタンスかどうか）</strong>をチェックします。例えば、<code>new</code>キーワードで作成したオブジェクト同士を<code>==</code>で比較すると、異なるインスタンスなので<code>false</code>になります。</p>



<p><strong>例：<code>new</code>で作成したオブジェクトの比較</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 a = new String("Hello");
String b = new String("Hello");
System.out.println(a == b);  // false
</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>a</code>と<code>b</code>は同じ内容でも、異なるインスタンスなので<code>false</code>になります。</p>
</div></div>



<p><strong>enumでの比較</strong></p>



<p>しかし、<code>enum</code>の場合、各要素はシングルトンとして管理されているため、同じ<code>enum</code>要素は常に<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="">Day day1 = Day.MONDAY;
Day day2 = Day.MONDAY;
System.out.println(day1 == day2);  // true
</pre>



<p><span class="badge-green">ポイント</span>　<strong>enumの内部動作</strong></p>



<ul class="wp-block-list">
<li>各要素は<code>static final</code>なインスタンスとして扱われます。</li>



<li>Javaコンパイラは<code>enum</code>をクラスとして変換し、最適化します。</li>



<li><code>ordinal()</code>メソッドを使うと、要素のインデックスを取得できますが、順序に依存しない設計が推奨されます。</li>
</ul>



<h2 class="wp-block-heading">実務でのenumの活用例</h2>



<h3 class="wp-block-heading">プロジェクトの進捗状況の管理</h3>



<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="">public enum Status {
    PENDING, IN_PROGRESS, COMPLETED
}
</pre>



<p>プロジェクトの進捗を管理する際、<code>enum</code>を使って状態を表現することで、管理を簡潔にします。</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="">Status projectStatus = Status.IN_PROGRESS;
if (projectStatus == Status.COMPLETED) {
    System.out.println("プロジェクトが完了しました！");
}
</pre>



<h3 class="wp-block-heading">switch文との連携</h3>



<p><code>switch</code>文(<span class="badge">参考</span>　<a href="https://it-biz.online/java/java-switch/">switch文の基本</a>)と<code>enum</code>の組み合わせは、条件分岐を簡潔かつ可読性高く実装するのに有効です。</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="">public class EnumSwitchExample {
    public static void main(String[] args) {
        Day day = Day.FRIDAY;

        switch (day) {
            case MONDAY:
                System.out.println("仕事が始まる日");
                break;
            case FRIDAY:
                System.out.println("週末の前日！");
                break;
            default:
                System.out.println("平日");
        }
    }
}
</pre>



<p><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="">週末の前日！
</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>Javaのenum（列挙型）</strong></p>



<p><strong>1. enumの基本的な特徴</strong></p>



<ul class="wp-block-list">
<li><strong>定数の集合を管理</strong>：<code>enum</code>は、関連する定数を１つの型にまとめます（例：曜日、季節など）。</li>



<li><strong>変更不可（不変性）</strong>：<code>enum</code>は宣言後に変更できず、安全なプログラムの作成に役立ちます。</li>



<li><strong>コンパクトで可読性の高いコード</strong>を実現：<code>enum</code>の要素は<code>if</code>文や<code>switch</code>文で簡潔に使えます。</li>
</ul>



<p><strong>2. enumの使い方</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="">enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

Day today = Day.MONDAY;
if (today == Day.MONDAY) {
    System.out.println("今日は月曜日です！");
}
</pre>



<ul class="wp-block-list">
<li><strong><code>==</code>演算子</strong>で要素を比較でき、<code>equals()</code>を使う必要がありません。</li>



<li><strong>型安全性</strong>を保証し、無効な値が使われるのを防ぎます。</li>
</ul>



<p><strong>3. enumの内部構造と特性</strong></p>



<ul class="wp-block-list">
<li><strong>クラスとして実装される</strong>：Javaコンパイラは<code>enum</code>を内部的に<strong>クラス</strong>に変換します。</li>



<li><strong>シングルトンインスタンス</strong>：<code>enum</code>の各要素は<strong>一度だけ生成され、プログラム全体で共有される</strong>インスタンスです。</li>



<li><strong><code>==</code>で比較可能</strong>：同じ<code>enum</code>要素は同一のインスタンスを指すため、<code>==</code>での比較が安全です。</li>
</ul>
</div>
]]></content:encoded>
					
		
		
			</item>
		<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>



<h2 class="wp-block-heading">JavaScript：関数の基本</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">関数とは？</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">JavaScript：関数宣言（function）</h2>



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



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



<h3 class="wp-block-heading">パターン１：関数宣言（Function Declarations）</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 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">パターン２：関数式（Function Expressions）</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">JavaScript：関数の呼び出し・実行</h2>



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



<h3 class="wp-block-heading">パターン１：基本的な関数の呼び出し</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">パターン２：引数を複数持つ関数の呼び出し</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">パターン３：関数を変数に割り当ててから呼び出す</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">パターン４：コールバック関数としての関数の呼び出し</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">JavaScript：関数を利用する際の注意点</h2>



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



<h3 class="wp-block-heading">1. スコープの理解</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">2. 巻き上げ（Hoisting）</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">3. 再帰関数の使用</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>



<h2 class="wp-block-heading">イベントとは？</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">イベントリスナーとは？</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">イベントリスナーの仕組み</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">イベントリスナーの使用例</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">イベントリスナーの追加：addEventListener</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 loading="lazy" 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">イベントリスナーの削除：<code>removeEventListener</code></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">イベントリスナーの削除：具体例</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>



<h2 class="wp-block-heading">JSPとは何か？</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">【前提１】静的なページと動的なページ</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">JSPとはどのような技術か</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">JSPの動作のしくみ</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">JSPを動かすための準備</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">JSPの動作に必要なもの</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">最初のJSPファイルを作ってみよう</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">JSPファイルとはどんなファイルか</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">ブラウザで表示してみる</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">JSPの基本構文</h2>



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



<h3 class="wp-block-heading">JSPの構成要素</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">ディレクティブ</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">スクリプトレット</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">式（Expression）</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">宣言</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">コメントの書き方</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">スクリプトレットはなるべく使わない</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">ELとJSTLでスクリプトレットのないJSPへ</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">EL（式言語）とは</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">JSTL（JSP標準タグライブラリ）とは</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">JSPをすっきり保つために</h3>



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



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



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



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



<h3 class="wp-block-heading">フォーム送信の流れ</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">フォームを作るJSP（entry.jsp）</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">データを受け取るJSP（result.jsp）</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">ELを使って書き換える</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">セッションとCookieでデータを保持する</h2>



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



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



<h3 class="wp-block-heading">セッションの基本操作</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">Cookieとは</h3>



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



<h3 class="wp-block-heading">Cookieの基本操作</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">セッションとCookieの使い分け</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">JSPで簡単なアンケートアプリを作ろう</h2>



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



<h3 class="wp-block-heading">アプリの構成と目的</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のルーティングは、Webアプリケーション内でのページ遷移 [&#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>



<h2 class="wp-block-heading">Angular：ルーティングとは？</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">Angularでのルーティング設定</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">Angular：<code>&lt;router-outlet&gt;</code>とは何か？</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">ナビゲーションとリンク</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">ナビゲーションリンク（<code>routerLink</code>ディレクティブ）</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">プログラムによるナビゲーション（<code>Router</code>サービス）</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>



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



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



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



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



<h3 class="wp-block-heading">モジュールの必要性</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">Angular：<code>@NgModule</code>デコレータ</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"><code>@NgModule</code>の構文ルール</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"><code>@NgModule</code>デコレータのプロパティ</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">モジュールの使用</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">ステップ1: 機能モジュールの作成</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">ステップ2: モジュールの利用</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>



<h2 class="wp-block-heading">デコレータとは？コードへの注釈による機能拡張</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">TypeScriptにおけるデコレータの利点：表現力と保守性の向上</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">TypeScriptの主要なデコレータの種類と機能</h2>



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



<h3 class="wp-block-heading">1. クラスデコレータ</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">2. メソッドデコレータ</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">3. プロパティデコレータ</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">4. パラメータデコレータ</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">デコレータの動作原理：メタデータの利用</h2>



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



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



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



<h2 class="wp-block-heading">プログラミングの超基本：「文」と「セミコロン」</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"><strong>セミコロン <code>;</code> の役割</strong></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">Tips：<strong>セミコロンは省略できる？</strong></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">TypeScriptとは？</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"><strong>なぜ型が必要なの？</strong></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">基本的な「値」と「型」</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">値を覚えておく：「変数」</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"><strong>型推論 (Type Inference)</strong></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">値を作り出す：「式」</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"><strong>文と式の違い</strong></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">処理をまとめる：「関数」</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"><strong>アロー関数</strong></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">オブジェクトの形を決める：「インターフェース」</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">オブジェクトの設計図と機能：「クラス」</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">型に別名を付ける：「型エイリアス」</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">型を引数にする：「ジェネリクス」</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">コードの説明書き：「コメント」</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">TypeScript：文法まとめ</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>【ABAP】検索ヘルプの付与（VALUE-REQUEST）を３分で解説</title>
		<link>https://it-biz.online/sap/value-request/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Wed, 23 Jan 2019 12:00:00 +0000</pubDate>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=4854</guid>

					<description><![CDATA[特定の画面項目でF4ヘルプを要求した際にカスタマイズされた検索ヘルプを表示する方法（ON VALUE-REQUEST）を解説します。 検索ヘルプ（F4ヘルプ）とは、選択画面の各項目に値を入力する際に、値入力をアシストして [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>特定の画面項目でF4ヘルプを要求した際にカスタマイズされた検索ヘルプを表示する方法（<strong>ON VALUE-REQUEST</strong>）を解説します。</p>



<p>検索ヘルプ（F4ヘルプ）とは、<strong><span class="marker-under">選択画面の各項目に値を入力する際に、値入力をアシストしてくれる機能のこと。</span></strong></p>



<figure class="wp-block-image aligncenter is-resized"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2020/05/image-44-1024x568.png" alt="検索ヘルプ,SAP" style="width:596px;height:330px"/></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>検索ヘルプの利用方法・登録方法は以下の記事をご参照ください。</p>



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

<a href="https://it-biz.online/sap/f4-help/" title="【SAP】３分で学ぶ「検索ヘルプ」の作り方" 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/2020/05/789c1d34d0d05b20483e15d04401ccea-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2020/05/789c1d34d0d05b20483e15d04401ccea-320x180.png 320w, https://it-biz.online/wp-content/uploads/2020/05/789c1d34d0d05b20483e15d04401ccea-240x135.png 240w, https://it-biz.online/wp-content/uploads/2020/05/789c1d34d0d05b20483e15d04401ccea-640x360.png 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【SAP】３分で学ぶ「検索ヘルプ」の作り方</div><div class="blogcard-snippet internal-blogcard-snippet">【初心者向け】SAPにおける検索ヘルプ（F4ヘルプ・入力ヘルプ）の使い方と作り方を１から図解します。基本検索ヘルプ・複合検索ヘルプの違い、選択メソッド・検索ヘルプパラメータって何？という疑問をお持ちの方は必見です。</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">2023.07.06</div></div></div></div></a>
</div></figure>



<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>前提：イベントブロックとは？（AT SELECTION-SCREEN）</li>



<li>検索ヘルプの付与方法（VALUE-REQUEST）</li>



<li>検索ヘルプを利用したサンプルコード</li>
</ul>
</div>
</div></div>



<p><strong><span class="marker-under">SAPエンジニアやABAPerを目指す方であれば知っておきたい重要知識</span></strong>です。是非最後までご覧ください。</p>



<h2 class="wp-block-heading">前提：イベントブロックとは？</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 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><span class="badge-green">前提</span>　イベントブロックとは、<strong><span class="marker-under">一言で言うとイベントを定義した１つの塊</span></strong>です。</p>



<figure class="wp-block-image aligncenter is-resized"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2020/02/image-1.png" alt="ABAP イベントブロック" style="width:401px;height:326px"/></figure>



<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 fab-question-circle"><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">
<p>ユーザによる<strong>キーボードの操作</strong>、<strong>マウスのクリック</strong>などによって、システムに<strong>何らかの変更</strong>が加えられシステムの状態が変化する出来事のことです。</p>



<p>例えば・・・</p>



<p class="has-text-align-center"><strong>「”Enter”ボタンを押す」</strong></p>



<p class="has-text-align-center"><strong>「"戻るボタン"&nbsp;をマウスでクリックする」</strong></p>



<p class="has-text-align-center"><strong>「"選択画面"&nbsp;が表示される」</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>上記のようなシステムに対する何らかのアクション・何らかのリクエストをABAPではイベントと総称します。</p>
</div></div>
</div></div>



<p>今回解説する「<strong>AT SELECTION-SCREEN ON VALUE-REQUEST</strong>」は「<strong>ユーザが〇〇項目の検索ヘルプを利用したとき</strong>」というイベントを示します。</p>



<p>そのイベントが実行された場合に動くポップアップ画面等を用意しておくイメージです。このページでは、検索ヘルプイベントの定義方法の解説がメインとなりますので、イベントブロックについて１から学習したいという方は以下の記事をご覧ください。</p>



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

<a href="https://it-biz.online/sap/event/" title="【ABAP】イベントブロックを１から分かりやすく解説" 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/2018/12/43027ab07d9d67d68cef1c70191acbc7-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://it-biz.online/wp-content/uploads/2018/12/43027ab07d9d67d68cef1c70191acbc7-320x180.png 320w, https://it-biz.online/wp-content/uploads/2018/12/43027ab07d9d67d68cef1c70191acbc7-240x135.png 240w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【ABAP】イベントブロックを１から分かりやすく解説</div><div class="blogcard-snippet internal-blogcard-snippet">【初心者向け】ABAPの基本ーイベントブロックについて解説します。&quot;INITIALIZATION&quot; &quot;AT-SELECTION-SCREEN&quot; &quot;START-OF-SELECTION&quot;など基本のイベントから&quot;TOP-OF-PAGE&quot;などの見慣れないイベントブロックまで整理して解説します。（サンプルコードつき）</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">2023.07.06</div></div></div></div></a>
</div></figure>



<h2 class="wp-block-heading">&nbsp;<strong>AT SELECTION-SCREEN ON VALUE-REQUEST</strong></h2>



<p>検索ヘルプを付与するには、「<strong><span class="marker-under">〇〇項目の検索ヘルプが呼び出されたとき</span></strong>」というイベントを作成します。構文ルールは以下の通り。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="abap" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">AT SELECTION-SCREEN ON VALUE-REQUEST FOR &lt;input_field>.</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>



<pre class="EnlighterJSRAW" data-enlighter-language="abap" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">* アップロードファイルの画面項目
SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (10) TEXT-S01 FOR FIELD P_FLNM.
  PARAMETERS P_FLNM TYPE STRING.
SELECTION-SCREEN END OF LINE.

* 検索ヘルプの付与
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FLNM.
  " 検索ヘルプが呼び出されたときの処理↓
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    CHANGING
      FILENAME = LV_FILENAME
      PATH     = LV_PATH
      FULLPATH = P_FLNM.   </pre>



<p><a href="https://it-biz.online/sap/parameters/">PARAMETERS命令</a>で定義した画面項目に対して、「当該項目のヘルプが呼び出されたとき」というイベントを定義しています。（以下の部分）</p>



<pre class="EnlighterJSRAW" data-enlighter-language="abap" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">* 検索ヘルプの付与
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FLNM.</pre>



<p>その際、このイベントブロックの配下に記述されているクラスが実行される、という仕組みです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="abap" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">  " 検索ヘルプが呼び出されたときの処理↓
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    CHANGING
      FILENAME = LV_FILENAME
      PATH     = LV_PATH
      FULLPATH = P_FLNM.   </pre>



<p>もう１個別のサンプルコードを記載しておきます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="abap" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">PARAMETERS: p_empid TYPE zempid. " 社員ID（Zテーブルなど）

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_empid.

  DATA: lt_values TYPE TABLE OF ddshretval,
        lt_empids TYPE TABLE OF zempid,
        lv_field  TYPE help_info-fieldname.

  " 候補データを作成（ここでは簡易的に固定）
  APPEND '1001' TO lt_empids.
  APPEND '1002' TO lt_empids.
  APPEND '1003' TO lt_empids.

  " ヘルプ表示
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'P_EMPID'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'P_EMPID'
    TABLES
      value_tab       = lt_empids
      return_tab      = lt_values
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
</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>PARAMETERS</code> に入力フィールドを定義。<code>ON VALUE-REQUEST</code> でF4イベントに割り込みを作り、固定の候補リスト（<code>lt_empids</code>）を作って <code>F4IF_INT_TABLE_VALUE_REQUEST</code> で表示します。</p>
</div></div>



<h3 class="wp-block-heading">Tips：ディクショナリ入力ヘルプが存在する場合</h3>



<p>画面項目に検索ヘルプが紐づいている場合（これを<strong>ディクショナリ入力ヘルプ</strong>と呼びます）、上記で説明したようなコードは不要です。</p>



<figure class="wp-block-image aligncenter"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2020/05/image-45.png" alt="SAP,検索ヘルプ"/></figure>



<p>上記「会社コード」項目は、ディクショナリを参照していますが、そのディクショナリには検索ヘルプが付与されているため、特段の設定をせずとも検索ヘルプが利用可能な状態になっています。</p>



<p>さて、この場合に「VALUE-REQUEST」で検索ヘルプを付与するとどうなるでしょうか。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="abap" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">* 画面項目「会社コード」
PARAMETERS P_BURKS TYPE BUKRS.

* 検索ヘルプの付与
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_BUKRS.
  " 検索ヘルプが呼び出されたときの処理↓
  CALL FUNCTION 'F4_FILENAME'
    IMPORTING
      FILE_NAME = P_BUKRS.</pre>



<p>結果は、ディクショナリ入力ヘルプよりも、<strong>「VALUE-REQUEST」の検索ヘルプが勝ちます。</strong>つまり、上記のサンプルコードを実行した場合、会社コードの入力ヘルプではなく、ファイル選択のヘルプが呼び出されます。<br>→ <strong>標準のF4ヘルプは無効化され、<code>ON VALUE-REQUEST</code> の処理が優先されます。</strong></p>



<p class="has-text-align-center is-style-stapler-top-left-box has-box-style">■ポイント整理</p>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>項目</th><th>内容</th></tr></thead><tbody><tr><td>優先順位</td><td><code>ON VALUE-REQUEST</code> のロジックが <strong>標準のDDICヘルプより優先</strong></td></tr><tr><td>効果</td><td>標準の検索ヘルプは<strong>表示されなくなる</strong></td></tr><tr><td>回避策</td><td>必要ならば、<code><span class="blue">CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'</span></code> などで<strong>標準ヘルプを明示的に呼び出す</strong>必要がある</td></tr></tbody></table></div></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>



<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>ON VALUE-REQUESTとは？</strong></p>



<p>ABAPの<strong>ダイアログプログラム</strong>で使うイベントで、<br><strong>入力フィールドのF4ヘルプ（候補一覧）をカスタマイズしたいとき</strong>に使用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="abap" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">AT SELECTION-SCREEN ON VALUE-REQUEST FOR &lt;フィールド名>.
  " F4が押されたときの処理を書く
</pre>



<p class="has-text-align-center is-style-stapler-top-left-box has-box-style">■ よくある用途</p>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table class="has-fixed-layout"><thead><tr><th>シナリオ</th><th>処理内容の例</th></tr></thead><tbody><tr><td>社員番号入力欄でF4を押す</td><td>社員マスタを検索して選択肢を表示</td></tr><tr><td>部門コード入力欄でF4</td><td>有効な部門コードを一覧表示</td></tr></tbody></table></div></figure>



<p class="has-text-align-center is-style-stapler-top-left-box has-box-style">■補足</p>



<ul class="wp-block-list">
<li>SAP標準のF4ヘルプでは足りない場合に使う</li>



<li>選択肢は<code>CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'</code>などで表示することが多い</li>
</ul>
</div>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
