<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0</id>
	<title>JavaScriptの基礎 - エラーハンドリング - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0&amp;action=history"/>
	<updated>2026-07-10T14:51:23Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0&amp;diff=14378&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == エラーハンドリングは、プログラムの実行中に発生する予期しない問題を検出・処理するための仕組みである。&lt;br&gt; JavaScriptでは、&lt;code&gt;try / catch / finally&lt;/code&gt; 構文を使用して同期処理のエラーを捕捉し、&lt;code&gt;.catch()&lt;/code&gt; や &lt;code&gt;async/await&lt;/code&gt; を使用して非同期処理のエラーを処理する。&lt;br&gt; &lt;br&gt; 適切なエラーハンドリングを実装することにより…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0&amp;diff=14378&amp;oldid=prev"/>
		<updated>2026-02-20T20:52:02Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == エラーハンドリングは、プログラムの実行中に発生する予期しない問題を検出・処理するための仕組みである。&amp;lt;br&amp;gt; JavaScriptでは、&amp;lt;code&amp;gt;try / catch / finally&amp;lt;/code&amp;gt; 構文を使用して同期処理のエラーを捕捉し、&amp;lt;code&amp;gt;.catch()&amp;lt;/code&amp;gt; や &amp;lt;code&amp;gt;async/await&amp;lt;/code&amp;gt; を使用して非同期処理のエラーを処理する。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; 適切なエラーハンドリングを実装することにより…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
エラーハンドリングは、プログラムの実行中に発生する予期しない問題を検出・処理するための仕組みである。&amp;lt;br&amp;gt;&lt;br /&gt;
JavaScriptでは、&amp;lt;code&amp;gt;try / catch / finally&amp;lt;/code&amp;gt; 構文を使用して同期処理のエラーを捕捉し、&amp;lt;code&amp;gt;.catch()&amp;lt;/code&amp;gt; や &amp;lt;code&amp;gt;async/await&amp;lt;/code&amp;gt; を使用して非同期処理のエラーを処理する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
適切なエラーハンドリングを実装することにより、以下に示すメリットが得られる。&amp;lt;br&amp;gt;&lt;br /&gt;
* プログラムのクラッシュ防止&lt;br /&gt;
*: エラーが発生しても処理を継続できる&lt;br /&gt;
* デバッグの効率化&lt;br /&gt;
*: エラーの原因を特定しやすくなる&lt;br /&gt;
* ユーザー体験の向上&lt;br /&gt;
*: エラー発生時に適切なフィードバックを提供できる&lt;br /&gt;
* セキュリティの強化&lt;br /&gt;
*: 機密情報を含むスタックトレースの漏洩を防止できる&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== try / catch / finally ==&lt;br /&gt;
&amp;lt;code&amp;gt;try / catch / finally&amp;lt;/code&amp;gt; は、JavaScriptにおける同期処理のエラーハンドリングの基本構文である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;catch&amp;lt;/code&amp;gt; または &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt; のどちらかは省略可能だが、両方を同時に省略することはできない。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 基本構文 ====&lt;br /&gt;
&amp;lt;code&amp;gt;try&amp;lt;/code&amp;gt; ブロック内でエラーが発生すると、処理は即座に &amp;lt;code&amp;gt;catch&amp;lt;/code&amp;gt; ブロックに移行する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt; ブロックは、エラーの有無にかかわらず必ず実行される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 try {&lt;br /&gt;
    // エラーが発生する可能性のある処理&lt;br /&gt;
    const result = riskyOperation();&lt;br /&gt;
    console.log(result);&lt;br /&gt;
 }&lt;br /&gt;
 catch (error) {&lt;br /&gt;
    // エラーが発生した場合の処理&lt;br /&gt;
    console.error(&amp;#039;エラーが発生しました:&amp;#039;, error.message);&lt;br /&gt;
 }&lt;br /&gt;
 finally {&lt;br /&gt;
    // 成功・失敗にかかわらず常に実行される処理&lt;br /&gt;
    console.log(&amp;#039;処理が完了しました&amp;#039;);&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== catchブロック ====&lt;br /&gt;
&amp;lt;code&amp;gt;catch&amp;lt;/code&amp;gt; ブロックは、&amp;lt;code&amp;gt;try&amp;lt;/code&amp;gt; ブロック内で発生したエラーオブジェクトを引数として受け取る。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ES2019以降、エラーオブジェクトが不要な場合は、括弧を省略した &amp;lt;u&amp;gt;オプショナルcatch binding&amp;lt;/u&amp;gt; を使用できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // 通常のcatch (エラーオブジェクトを受け取る)&lt;br /&gt;
 try {&lt;br /&gt;
    JSON.parse(&amp;#039;invalid json&amp;#039;);&lt;br /&gt;
 }&lt;br /&gt;
 catch (error) {&lt;br /&gt;
    console.error(error.name);    // SyntaxError&lt;br /&gt;
    console.error(error.message); // エラーメッセージ&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // オプショナルcatch binding (ES2019以降)&lt;br /&gt;
 try {&lt;br /&gt;
    riskyOperation();&lt;br /&gt;
 }&lt;br /&gt;
 catch {&lt;br /&gt;
    console.error(&amp;#039;エラーが発生しました&amp;#039;);&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
エラーの種類に応じて処理を分岐させることもできる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 try {&lt;br /&gt;
    processData(input);&lt;br /&gt;
 }&lt;br /&gt;
 catch (error) {&lt;br /&gt;
    if (error instanceof TypeError) {&lt;br /&gt;
       console.error(&amp;#039;型エラー:&amp;#039;, error.message);&lt;br /&gt;
    }&lt;br /&gt;
    else if (error instanceof RangeError) {&lt;br /&gt;
       console.error(&amp;#039;範囲エラー:&amp;#039;, error.message);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
       console.error(&amp;#039;予期しないエラー:&amp;#039;, error.message);&lt;br /&gt;
       throw error; // 対処できないエラーは再スロー&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== finallyブロック ====&lt;br /&gt;
&amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt; ブロックは、&amp;lt;code&amp;gt;try&amp;lt;/code&amp;gt; や &amp;lt;code&amp;gt;catch&amp;lt;/code&amp;gt; 内に &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; 文や &amp;lt;code&amp;gt;throw&amp;lt;/code&amp;gt; 文があっても必ず実行される。&amp;lt;br&amp;gt;&lt;br /&gt;
ファイルのクローズやDB接続の解放など、リソースの後処理に使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 function readFile(filename) {&lt;br /&gt;
    let fileHandle = null;&lt;br /&gt;
    try {&lt;br /&gt;
       fileHandle = openFile(filename);&lt;br /&gt;
       return fileHandle.read();&lt;br /&gt;
    }&lt;br /&gt;
    catch (error) {&lt;br /&gt;
       console.error(&amp;#039;ファイル読み込みエラー:&amp;#039;, error.message);&lt;br /&gt;
       return null;&lt;br /&gt;
    }&lt;br /&gt;
    finally {&lt;br /&gt;
       // return や throw の後でも必ず実行される&lt;br /&gt;
       if (fileHandle) {&lt;br /&gt;
          fileHandle.close();&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== ネストしたtry / catch ====&lt;br /&gt;
&amp;lt;code&amp;gt;try / catch&amp;lt;/code&amp;gt; はネストして使用できる。&amp;lt;br&amp;gt;&lt;br /&gt;
内側の &amp;lt;code&amp;gt;catch&amp;lt;/code&amp;gt; で処理しきれないエラーは、外側の &amp;lt;code&amp;gt;catch&amp;lt;/code&amp;gt; に伝播させることができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 try {&lt;br /&gt;
    try {&lt;br /&gt;
       riskyDatabaseCall();&lt;br /&gt;
    }&lt;br /&gt;
    catch (dbError) {&lt;br /&gt;
       // 内側のcatchでエラーをラップして再スロー&lt;br /&gt;
       throw new Error(&amp;#039;Database operation failed&amp;#039;, { cause: dbError });&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 catch (error) {&lt;br /&gt;
    // 外側のcatchで最終的なエラー処理&lt;br /&gt;
    logError(error);&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Errorオブジェクト ==&lt;br /&gt;
JavaScriptには、エラーの種類ごとに専用の組み込みErrorクラスが用意されている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
全ての組み込みエラーは、&amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt; クラスを継承している。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 組み込みErrorの種類 ====&lt;br /&gt;
下表に、JavaScriptの主な組み込みエラーの種類を示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 組み込みErrorの種類&lt;br /&gt;
! エラー型 !! 発生条件 !! 例&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt; || 汎用エラー || &amp;lt;u&amp;gt;throw new Error(&amp;#039;message&amp;#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;TypeError&amp;lt;/code&amp;gt; || 型が無効 || &amp;lt;u&amp;gt;null.property&amp;lt;/u&amp;gt;、&amp;lt;u&amp;gt;&amp;#039;str&amp;#039;.forEach()&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ReferenceError&amp;lt;/code&amp;gt; || 未定義変数の参照 || &amp;lt;u&amp;gt;console.log(undefinedVar)&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SyntaxError&amp;lt;/code&amp;gt; || 構文エラー || &amp;lt;u&amp;gt;eval(&amp;quot;let x =;&amp;quot;)&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RangeError&amp;lt;/code&amp;gt; || 値が範囲外 || &amp;lt;u&amp;gt;new Array(-1)&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;URIError&amp;lt;/code&amp;gt; || 無効なURI || &amp;lt;u&amp;gt;decodeURIComponent(&amp;#039;%&amp;#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EvalError&amp;lt;/code&amp;gt; || eval関連 (後方互換) || ほぼ使用されない&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AggregateError&amp;lt;/code&amp;gt; || 複数エラーの集約 || &amp;lt;u&amp;gt;Promise.any()&amp;lt;/u&amp;gt; で全失敗時&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Errorのプロパティ ====&lt;br /&gt;
下表に、&amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt; オブジェクトの主なプロパティを示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Errorオブジェクトのプロパティ&lt;br /&gt;
! プロパティ !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || エラー名 (例: &amp;quot;TypeError&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt; || エラーメッセージ&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;stack&amp;lt;/code&amp;gt; || スタックトレース (非標準だがほぼ全環境で利用可能)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;cause&amp;lt;/code&amp;gt; || エラーの原因 (ES2022)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;cause&amp;lt;/code&amp;gt; プロパティを使用すると、エラーの根本原因を連鎖的に保持できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 try {&lt;br /&gt;
    // 何らかの処理&lt;br /&gt;
 }&lt;br /&gt;
 catch (originalError) {&lt;br /&gt;
    const wrappedError = new Error(&amp;#039;処理に失敗しました&amp;#039;, { cause: originalError });&lt;br /&gt;
    console.error(wrappedError.cause); // 元のエラーにアクセス可能&lt;br /&gt;
    throw wrappedError;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== throw文 ==&lt;br /&gt;
&amp;lt;code&amp;gt;throw&amp;lt;/code&amp;gt; 文は、任意の値を例外としてスローするための構文である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
スローされた値は、呼び出しスタックを遡って最初の &amp;lt;code&amp;gt;catch&amp;lt;/code&amp;gt; ブロックで捕捉される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 基本構文 ====&lt;br /&gt;
&amp;lt;code&amp;gt;throw&amp;lt;/code&amp;gt; 文の基本的な使い方を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // 文字列をスロー (非推奨)&lt;br /&gt;
 throw &amp;#039;エラーが発生しました&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 // Errorオブジェクトをスロー (推奨)&lt;br /&gt;
 throw new Error(&amp;#039;エラーが発生しました&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
 // 条件に基づいてスロー&lt;br /&gt;
 function divide(a, b) {&lt;br /&gt;
    if (b === 0) {&lt;br /&gt;
       throw new Error(&amp;#039;ゼロ除算はできません&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return a / b;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
文字列や数値等、任意の値をスローすることは技術的には可能だが、&amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt; オブジェクトのスローが強く推奨される。&amp;lt;br&amp;gt;&lt;br /&gt;
その理由は以下の通りである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;u&amp;gt;スタックトレースの自動キャプチャ&amp;lt;/u&amp;gt;&lt;br /&gt;
*: エラー発生箇所の追跡が容易になる。&lt;br /&gt;
* &amp;lt;u&amp;gt;標準プロパティ (name, message, stack) の提供&amp;lt;/u&amp;gt;&lt;br /&gt;
*: エラー情報へのアクセス方法が統一される。&lt;br /&gt;
* &amp;lt;u&amp;gt;デバッガやエラーモニタリングツールとの互換性&amp;lt;/u&amp;gt;&lt;br /&gt;
*: Sentry等のツールが正しく認識できる。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Errorオブジェクトのスロー ====&lt;br /&gt;
組み込みエラーを適切に使い分けることで、エラーの原因を明確に伝えることができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 function processUserInput(input) {&lt;br /&gt;
    if (typeof input !== &amp;#039;string&amp;#039;) {&lt;br /&gt;
       throw new TypeError(&amp;#039;inputは文字列である必要があります&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (input.length === 0) {&lt;br /&gt;
       throw new RangeError(&amp;#039;inputは1文字以上である必要があります&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (!isKnownVariable(input)) {&lt;br /&gt;
       throw new ReferenceError(`&amp;quot;${input}&amp;quot; は定義されていません`);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return input.trim();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
    processUserInput(42);&lt;br /&gt;
 }&lt;br /&gt;
 catch (error) {&lt;br /&gt;
    console.error(`${error.name}: ${error.message}`);&lt;br /&gt;
    // TypeError: inputは文字列である必要があります&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== カスタムエラークラス ==&lt;br /&gt;
組み込みエラーに加え、アプリケーション固有のエラーを表現するためにカスタムエラークラスを作成することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
カスタムエラークラスは、&amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt; クラスを継承して定義する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 基本的なカスタムエラー ====&lt;br /&gt;
最もシンプルなカスタムエラークラスの定義方法を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 class ValidationError extends Error {&lt;br /&gt;
    constructor(message) {&lt;br /&gt;
       super(message);&lt;br /&gt;
       this.name = &amp;#039;ValidationError&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // 使用例&lt;br /&gt;
 function validateAge(age) {&lt;br /&gt;
    if (age &amp;lt; 0 || age &amp;gt; 150) {&lt;br /&gt;
       throw new ValidationError(`年齢の値が不正です: ${age}`);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return age;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
    validateAge(-5);&lt;br /&gt;
 }&lt;br /&gt;
 catch (error) {&lt;br /&gt;
    if (error instanceof ValidationError) {&lt;br /&gt;
       console.error(&amp;#039;バリデーションエラー:&amp;#039;, error.message);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 実用的なカスタムエラー ====&lt;br /&gt;
追加プロパティを持つカスタムエラーや、エラー階層の構築例を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // HTTPエラーの基底クラス&lt;br /&gt;
 class HTTPError extends Error {&lt;br /&gt;
    constructor(statusCode, message) {&lt;br /&gt;
       super(message);&lt;br /&gt;
       this.name = &amp;#039;HTTPError&amp;#039;;&lt;br /&gt;
       this.statusCode = statusCode;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // 404 Not Found専用エラー&lt;br /&gt;
 class NotFoundError extends HTTPError {&lt;br /&gt;
    constructor(resource) {&lt;br /&gt;
       super(404, `${resource} not found`);&lt;br /&gt;
       this.name = &amp;#039;NotFoundError&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // 403 Forbidden専用エラー&lt;br /&gt;
 class ForbiddenError extends HTTPError {&lt;br /&gt;
    constructor(resource) {&lt;br /&gt;
       super(403, `Access to ${resource} is forbidden`);&lt;br /&gt;
       this.name = &amp;#039;ForbiddenError&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // 使用例&lt;br /&gt;
 function fetchResource(path, user) {&lt;br /&gt;
    if (!resourceExists(path)) {&lt;br /&gt;
       throw new NotFoundError(path);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (!user.hasPermission(path)) {&lt;br /&gt;
       throw new ForbiddenError(path);&lt;br /&gt;
    }&lt;br /&gt;
    return getResource(path);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
    fetchResource(&amp;#039;/admin/data&amp;#039;, currentUser);&lt;br /&gt;
 }&lt;br /&gt;
 catch (error) {&lt;br /&gt;
    if (error instanceof NotFoundError) {&lt;br /&gt;
       res.status(404).send(error.message);&lt;br /&gt;
    }&lt;br /&gt;
    else if (error instanceof ForbiddenError) {&lt;br /&gt;
       res.status(403).send(error.message);&lt;br /&gt;
    }&lt;br /&gt;
    else if (error instanceof HTTPError) {&lt;br /&gt;
       res.status(error.statusCode).send(error.message);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
       res.status(500).send(&amp;#039;内部サーバーエラー&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ES2022の &amp;lt;code&amp;gt;Error.prototype.cause&amp;lt;/code&amp;gt; を利用すると、エラーの根本原因を連鎖的に保持できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 async function connectDatabase(config) {&lt;br /&gt;
    try {&lt;br /&gt;
       await db.connect(config);&lt;br /&gt;
    }&lt;br /&gt;
    catch (originalError) {&lt;br /&gt;
       throw new Error(&amp;#039;データベース接続に失敗しました&amp;#039;, { cause: originalError });&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
    await connectDatabase(config);&lt;br /&gt;
 }&lt;br /&gt;
 catch (error) {&lt;br /&gt;
    console.error(error.message);       // データベース接続に失敗しました&lt;br /&gt;
    console.error(error.cause.message); // 元のエラーメッセージ&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 非同期処理のエラーハンドリング ==&lt;br /&gt;
非同期処理では、同期処理とは異なるエラーハンドリングの方法が必要になる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Promiseベースの処理には &amp;lt;code&amp;gt;.catch()&amp;lt;/code&amp;gt; メソッドを、&amp;lt;code&amp;gt;async / await&amp;lt;/code&amp;gt; には &amp;lt;code&amp;gt;try / catch&amp;lt;/code&amp;gt; を使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Promiseのエラー捕捉 ====&lt;br /&gt;
Promiseのエラーは、&amp;lt;code&amp;gt;.catch()&amp;lt;/code&amp;gt; メソッドで捕捉する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;.then()&amp;lt;/code&amp;gt; の第2引数でも捕捉できるが、成功ハンドラ内のエラーを捕捉できないため非推奨である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // .catch()を使用した方法 (推奨)&lt;br /&gt;
 fetch(&amp;#039;/api/data&amp;#039;)&lt;br /&gt;
    .then(response =&amp;gt; response.json())&lt;br /&gt;
    .then(data =&amp;gt; console.log(data))&lt;br /&gt;
    .catch(error =&amp;gt; console.error(&amp;#039;エラー:&amp;#039;, error.message));&lt;br /&gt;
 &lt;br /&gt;
 // .then()の第2引数を使用した方法 (非推奨)&lt;br /&gt;
 // 成功ハンドラ (第1引数) 内のエラーを捕捉できない&lt;br /&gt;
 fetch(&amp;#039;/api/data&amp;#039;)&lt;br /&gt;
    .then(&lt;br /&gt;
       data =&amp;gt; console.log(data),&lt;br /&gt;
       error =&amp;gt; console.error(&amp;#039;エラー:&amp;#039;, error.message)&lt;br /&gt;
    );&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== async / awaitのエラー捕捉 ====&lt;br /&gt;
&amp;lt;code&amp;gt;async/await&amp;lt;/code&amp;gt; を使用した非同期処理では、&amp;lt;code&amp;gt;try / catch&amp;lt;/code&amp;gt; でエラーを捕捉できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 async function fetchUserData(userId) {&lt;br /&gt;
    try {&lt;br /&gt;
       const response = await fetch(`/api/users/${userId}`);&lt;br /&gt;
 &lt;br /&gt;
       if (!response.ok) {&lt;br /&gt;
          throw new HTTPError(response.status, `HTTPエラー: ${response.status}`);&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       return await response.json();&lt;br /&gt;
    }&lt;br /&gt;
    catch (error) {&lt;br /&gt;
       console.error(&amp;#039;データの取得に失敗しました:&amp;#039;, error.message);&lt;br /&gt;
       throw error; // 必要に応じて呼び出し元に再スロー&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // 呼び出し側&lt;br /&gt;
 async function main() {&lt;br /&gt;
    try {&lt;br /&gt;
       const user = await fetchUserData(123);&lt;br /&gt;
       console.log(user);&lt;br /&gt;
    }&lt;br /&gt;
    catch (error) {&lt;br /&gt;
       console.error(&amp;#039;ユーザデータを取得できませんでした&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 複数の非同期処理のエラー捕捉 ====&lt;br /&gt;
複数の非同期処理を並列実行する場合、&amp;lt;code&amp;gt;Promise.all&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;Promise.allSettled&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;Promise.any&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;Promise.race&amp;lt;/code&amp;gt; の違いに注意が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
下表に各メソッドの特性を示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 複数の非同期処理メソッドの比較&lt;br /&gt;
! メソッド !! 成功条件 !! 失敗条件 !! 返却値 !! 用途&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Promise.all&amp;lt;/code&amp;gt; || 全て成功 || 1つでも失敗 || 結果の配列 || 全て成功が必要な場合&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Promise.allSettled&amp;lt;/code&amp;gt; || 常に完了 || なし || {status, value/reason} の配列 || 全結果を個別確認する場合&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Promise.any&amp;lt;/code&amp;gt; || 1つでも成功 || 全て失敗 || 最初の成功値 || フォールバックが必要な場合&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Promise.race&amp;lt;/code&amp;gt; || 最速の完了 || 最速の完了 || 最初の完了値 || タイムアウト処理&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
各メソッドの使用例を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const p1 = fetch(&amp;#039;/api/users&amp;#039;);&lt;br /&gt;
 const p2 = fetch(&amp;#039;/api/posts&amp;#039;);&lt;br /&gt;
 const p3 = fetch(&amp;#039;/api/comments&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
 // Promise.all: 1つでも失敗すると全体が失敗&lt;br /&gt;
 try {&lt;br /&gt;
    const [users, posts, comments] = await Promise.all([p1, p2, p3]);&lt;br /&gt;
 }&lt;br /&gt;
 catch (error) {&lt;br /&gt;
    console.error(&amp;#039;いずれかのリクエストが失敗:&amp;#039;, error.message);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Promise.allSettled: 全ての結果を個別に確認できる&lt;br /&gt;
 const results = await Promise.allSettled([p1, p2, p3]);&lt;br /&gt;
 results.forEach((result, index) =&amp;gt; {&lt;br /&gt;
    if (result.status === &amp;#039;fulfilled&amp;#039;) {&lt;br /&gt;
       console.log(`リクエスト${index + 1}成功:`, result.value);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
       console.error(`リクエスト${index + 1}失敗:`, result.reason);&lt;br /&gt;
    }&lt;br /&gt;
 });&lt;br /&gt;
 &lt;br /&gt;
 // Promise.any: 最初に成功したものを使用 (全て失敗するとAggregateError)&lt;br /&gt;
 try {&lt;br /&gt;
    const data = await Promise.any([&lt;br /&gt;
       fetch(&amp;#039;/api/primary&amp;#039;),&lt;br /&gt;
       fetch(&amp;#039;/api/fallback1&amp;#039;),&lt;br /&gt;
       fetch(&amp;#039;/api/fallback2&amp;#039;)&lt;br /&gt;
    ]);&lt;br /&gt;
 }&lt;br /&gt;
 catch (error) {&lt;br /&gt;
    // AggregateError: error.errors に個別のエラーが格納される&lt;br /&gt;
    console.error(&amp;#039;全てのリクエストが失敗:&amp;#039;, error.errors);&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== エラーハンドリングのパターン ==&lt;br /&gt;
==== ガード節パターン ====&lt;br /&gt;
ガード節パターンは、早期リターンを使用して条件のネストを浅くするパターンである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
バリデーションや前提条件のチェックに有効で、ソースコードの可読性が向上する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ガード節を使用しない場合と使用する場合の比較を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // ガード節なし (深いネスト)&lt;br /&gt;
 function processUser(user) {&lt;br /&gt;
    if (user) {&lt;br /&gt;
       if (user.isActive) {&lt;br /&gt;
          if (user.email) {&lt;br /&gt;
             sendEmail(user.email);&lt;br /&gt;
             return true;&lt;br /&gt;
          }&lt;br /&gt;
          else {&lt;br /&gt;
             console.error(&amp;#039;メールアドレスがありません&amp;#039;);&lt;br /&gt;
             return false;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
       else {&lt;br /&gt;
          console.error(&amp;#039;ユーザーがアクティブではありません&amp;#039;);&lt;br /&gt;
          return false;&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
       console.error(&amp;#039;ユーザーが存在しません&amp;#039;);&lt;br /&gt;
       return false;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // ガード節あり (フラットな構造)&lt;br /&gt;
 function processUser(user) {&lt;br /&gt;
    if (!user) {&lt;br /&gt;
       console.error(&amp;#039;ユーザーが存在しません&amp;#039;);&lt;br /&gt;
       return false;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (!user.isActive) {&lt;br /&gt;
       console.error(&amp;#039;ユーザーがアクティブではありません&amp;#039;);&lt;br /&gt;
       return false;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (!user.email) {&lt;br /&gt;
       console.error(&amp;#039;メールアドレスがありません&amp;#039;);&lt;br /&gt;
       return false;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    sendEmail(user.email);&lt;br /&gt;
    return true;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Resultパターン ====&lt;br /&gt;
Resultパターンは、&amp;lt;code&amp;gt;throw&amp;lt;/code&amp;gt; を使用せず、成功・失敗を表すオブジェクトを返すパターンである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;{ success, data, error }&amp;lt;/code&amp;gt; のような形式で結果を返すことにより、呼び出し側が明示的にエラーを処理するよう強制できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // Resultパターンの実装&lt;br /&gt;
 async function fetchUser(userId) {&lt;br /&gt;
    try {&lt;br /&gt;
       const response = await fetch(`/api/users/${userId}`);&lt;br /&gt;
       if (!response.ok) {&lt;br /&gt;
          return {&lt;br /&gt;
             success: false,&lt;br /&gt;
             data: null,&lt;br /&gt;
             error: `HTTPエラー: ${response.status}`&lt;br /&gt;
          };&lt;br /&gt;
       }&lt;br /&gt;
       const data = await response.json();&lt;br /&gt;
 &lt;br /&gt;
       return { success: true, data, error: null };&lt;br /&gt;
    }&lt;br /&gt;
    catch (error) {&lt;br /&gt;
       return { success: false, data: null, error: error.message };&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // 呼び出し側&lt;br /&gt;
 async function main() {&lt;br /&gt;
    const result = await fetchUser(123);&lt;br /&gt;
 &lt;br /&gt;
    if (!result.success) {&lt;br /&gt;
       console.error(&amp;#039;取得失敗:&amp;#039;, result.error);&lt;br /&gt;
       return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    console.log(&amp;#039;取得成功:&amp;#039;, result.data);&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
下表に、Resultパターンの主なメリットを示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Resultパターンのメリット&lt;br /&gt;
! メリット !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| エラーの明示的な処理 || 呼び出し側がエラーチェックを忘れにくい。&lt;br /&gt;
|-&lt;br /&gt;
| 例外の伝播を防止 || 意図しない場所でのエラー処理を避けられる。&lt;br /&gt;
|-&lt;br /&gt;
| TypeScriptとの相性が良い || 型定義によりエラー処理を型安全に行える。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 関連情報 ==&lt;br /&gt;
* [[JavaScriptの基礎 - コールバック関数]]&lt;br /&gt;
* [[JavaScriptの基礎 - クラス]]&lt;br /&gt;
* [[JavaScriptの基礎 - 継承とプロトタイプ]]&lt;br /&gt;
* [[JavaScriptの基礎 - デバッグ]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;br /&gt;
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板&lt;br /&gt;
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;br /&gt;
|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:Web]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>