読み込み中...

JavaScriptファイル読み込み完全ガイド!10の使い方とサンプルコード

JavaScriptファイル読み込みの初心者向け解説 JS
この記事は約27分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

JavaScriptでファイル読み込みを行う方法を習得したい方に向けて、本記事では詳細な解説と実践的なサンプルコードをご紹介いたします。

初心者の方でも理解しやすいよう、ステップバイステップで説明を進めてまいります。

ファイル操作は多くのウェブアプリケーションで重要な機能であり、その基礎を押さえることで、より高度な開発にも取り組めるようになります。

●JavaScriptでのファイル読み込みとは

JavaScriptを用いたファイル読み込みは、外部ファイルの内容をウェブページ上で活用するための重要な技術です。

テキストファイル、CSVファイル、JSONファイルなどの外部リソースを取り込み、データを表示したり処理したりすることが可能となります。

この機能を活用することで、ユーザーがアップロードしたファイルの内容を即座に表示したり、サーバーから取得したデータを動的に反映させたりすることができます。

ファイル読み込みを実現するには、主に3つの手法があります。

File API、XMLHttpRequest、そしてFetch APIです。

この方法を使い分けることで、様々なシチュエーションに対応できます。

それぞれの特徴や使用場面について、詳しく見ていきましょう。

●ファイル読み込みの方法

ファイル読み込みの方法は、用途や状況によって適切なものを選択することが重要です。

それでは、主要な3つの方法について詳しく解説いたします。

○File API

File APIは、ユーザーが選択したファイルをブラウザ上で直接読み込むための機能を提供します。

FileReaderオブジェクトを利用することで、ローカルファイルの内容にアクセスできます。

この方法は、ユーザーがローカルマシンから選択したファイルを読み込む際に特に有用です。

例えば、画像プレビューや、テキストファイルの内容表示などに適しています。

○XMLHttpRequest

XMLHttpRequestは、サーバーとの非同期通信を実現するためのAPIです。

このAPIを使用すると、サーバー上に存在するファイルを非同期で取得することができます。

従来から広く使用されてきた方法であり、多くのブラウザで安定して動作します。

特に、小規模なデータ取得や、レガシーなシステムとの互換性が必要な場合に適しています。

○Fetch API

Fetch APIは、XMLHttpRequestの後継として開発された、より現代的なAPIです。

Promiseベースの設計により、非同期処理をより簡潔に記述できる特徴があります。

より直感的な構文と、強力な機能を備えており、モダンなウェブアプリケーション開発において推奨される方法です。

大規模なデータ取得や、複雑な非同期処理を含む場合に特に威力を発揮します。

●10の使い方とサンプルコード

それでは、具体的な使用方法と実際のコード例を見ていきましょう。

各サンプルコードは、実際の開発現場でも活用できる実践的な内容となっています。

初心者の方でも理解しやすいよう、コードの解説も詳しく行っていきます。

○サンプルコード1:File APIでテキストファイルを読み込む

File APIを使用してテキストファイルを読み込む方法をご紹介します。

このコードでは、ユーザーがファイルを選択すると、その内容がウェブページ上に表示されます。

ユーザーがローカルのファイルを選択し、その内容をブラウザ上で即座に確認したい場合に非常に有用です。

<input type="file" id="fileInput">
<pre id="output"></pre>

<script>
document.getElementById('fileInput').addEventListener('change', function(event) {
  const file = event.target.files[0]; // ユーザーが選択したファイルを取得
  const reader = new FileReader(); // FileReaderオブジェクトを作成

  reader.onload = function(event) {
    document.getElementById('output').textContent = event.target.result; // ファイルの内容を表示
  };

  reader.readAsText(file); // ファイルをテキストとして読み込む
});
</script>

このコードでは、<input type="file">要素を使用してファイル選択フィールドを作成し、選択されたファイルをFileReaderオブジェクトで読み込んでいます。

読み込まれたテキストは<pre>要素内に表示されます。

FileReaderのonloadイベントを利用することで、ファイルの読み込みが完了した時点で内容を表示することができます。

○サンプルコード2:XMLHttpRequestでJSONファイルを読み込む

次に、XMLHttpRequestを使用してJSONファイルを読み込む方法を解説致します。

このコードでは、ボタンをクリックすることでサーバー上のJSONファイルを非同期に取得し、その内容を表示します。

サーバーサイドのデータを動的に取得し、ウェブページに反映させたい場合に適しています。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>XMLHttpRequestでJSONファイルを読み込む</title>
</head>
<body>
  <button id="loadJson">JSONファイルを読み込む</button>
  <pre id="output"></pre>

  <script>
    document.getElementById('loadJson').addEventListener('click', function() {
      const xhr = new XMLHttpRequest(); // XMLHttpRequestオブジェクトを作成
      xhr.open('GET', 'data.json'); // data.jsonファイルを読み込むリクエストを作成
      xhr.responseType = 'json'; // レスポンスの形式をJSONに設定

      xhr.onload = function() {
        if (xhr.status === 200) { // ステータスコードが200の場合、成功
          const data = xhr.response; // レスポンスデータを取得
          document.getElementById('output').textContent = JSON.stringify(data, null, 2); // データを整形して表示
        } else {
          console.error('ファイルの読み込みに失敗しました'); // エラーメッセージを表示
        }
      };

      xhr.send(); // リクエストを送信
    });
  </script>
</body>
</html>

このコードでは、XMLHttpRequestオブジェクトを使用してサーバーからJSONファイルを取得しています。

取得したデータは整形されてウェブページ上に表示されます。XMLHttpRequestは、リクエストの進行状況を細かく制御できる点が特長です。

エラーハンドリングも容易に行えるため、複雑なデータ取得処理にも対応可能です。

○サンプルコード3:Fetch APIでCSVファイルを読み込む

Fetch APIを利用してCSVファイルを読み込む方法について説明いたします。

このコードでは、ボタンクリックによってサーバー上のCSVファイルを非同期に取得し、その内容を表示します。

Fetch APIは、モダンなJavaScriptの非同期処理に適した設計となっており、直感的な記述が可能です。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Fetch APIでCSVファイルを読み込む</title>
</head>
<body>
  <button id="loadCsv">CSVファイルを読み込む</button>
  <pre id="output"></pre>

  <script>
    document.getElementById('loadCsv').addEventListener('click', async function() {
      try {
        const response = await fetch('data.csv'); // data.csvファイルを読み込むリクエストを作成
        if (response.ok) { // ステータスコードが200の場合、成功
          const text = await response.text(); // レスポンスデータをテキストとして取得
          document.getElementById('output').textContent = text; // データを表示
        } else {
          console.error('ファイルの読み込みに失敗しました'); // エラーメッセージを表示
        }
      } catch (error) {
        console.error('エラー:', error); // エラーメッセージを表示
      }
    });
  </script>
</body>
</html>

このコードでは、Fetch APIを使用してサーバーからCSVファイルを取得しています。

async/awaitを使用することで、非同期処理を同期的に記述できるため、コードの可読性が向上します。

エラーハンドリングもtry-catch文で簡潔に記述できます。

○サンプルコード4:イベントリスナーを使用してファイルを読み込む

イベントリスナーを活用してファイルを読み込む方法をご紹介します。

このコードでは、ファイル選択時にイベントが発火し、選択されたファイルの内容がウェブページ上に表示されます。

ユーザーの操作に応じてリアルタイムにファイル内容を表示したい場合に有効です。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>イベントリスナーを使用してファイルを読み込む</title>
</head>
<body>
  <input type="file" id="fileInput">
  <pre id="output"></pre>

  <script>
    document.getElementById('fileInput').addEventListener('change', function(event) {
      const file = event.target.files[0]; // 選択されたファイルを取得
      const reader = new FileReader(); // FileReaderオブジェクトを作成

      reader.onload = function() {
        document.getElementById('output').textContent = reader.result; // 読み込んだ内容を表示
      };

      reader.readAsText(file); // ファイルをテキストとして読み込む
    });
  </script>
</body>
</html>

このコードでは、<input type="file">要素のchangeイベントにリスナーを設定し、ファイル選択時に自動的に読み込み処理が行われるようになっています。

FileReaderオブジェクトを使用して非同期にファイルを読み込み、読み込みが完了したらonloadイベントハンドラーでその内容を表示しています。

○サンプルコード5:FileReaderを使って画像ファイルを表示する

FileReaderを使用して画像ファイルを読み込み、表示する方法を解説します。

この方法は、ユーザーがアップロードした画像をプレビュー表示する際に非常に有用です。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>FileReaderを使って画像ファイルを表示する</title>
</head>
<body>
  <input type="file" id="fileInput">
  <img id="output" alt="選択された画像が表示されます">

  <script>
    document.getElementById('fileInput').addEventListener('change', function(event) {
      const file = event.target.files[0]; // 選択されたファイルを取得
      const reader = new FileReader(); // FileReaderオブジェクトを作成

      reader.onload = function() {
        document.getElementById('output').src = reader.result; // 読み込んだ画像データを表示
      };

      reader.readAsDataURL(file); // ファイルをデータURLとして読み込む
    });
  </script>
</body>
</html>

このコードでは、FileReaderのreadAsDataURLメソッドを使用して画像ファイルをデータURL形式で読み込んでいます。

読み込んだデータは<img>要素のsrc属性に設定され、即座に画像がプレビュー表示されます。

これにより、ユーザーは選択した画像をアップロード前に確認することができます。

○サンプルコード6:動的にHTML要素を生成してファイルを読み込む

動的にHTML要素を生成し、ファイルを読み込む方法を紹介します。

この手法は、複数のファイルを順次読み込んで表示する場合や、読み込んだファイルの内容に基づいて動的にページ構造を変更したい場合に有効です。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>動的にHTML要素を生成してファイルを読み込む</title>
</head>
<body>
  <input type="file" id="fileInput">
  <div id="output"></div>

  <script>
    document.getElementById('fileInput').addEventListener('change', function(event) {
      const file = event.target.files[0]; // 選択されたファイルを取得
      const reader = new FileReader(); // FileReaderオブジェクトを作成

      reader.onload = function() {
        const outputDiv = document.getElementById('output');
        const preElement = document.createElement('pre'); // pre要素を作成
        preElement.textContent = reader.result; // 読み込んだ内容を表示
        outputDiv.appendChild(preElement); // pre要素をoutputDivに追加
      };

      reader.readAsText(file); // ファイルをテキストとして読み込む
    });
  </script>
</body>
</html>

このコードでは、ファイルが読み込まれるたびに新しい<pre>要素が生成され、その中にファイルの内容が表示されます。

これにより、複数のファイルを順次読み込んで表示することが可能となります。

動的な要素生成を活用することで、ユーザーのアクションに応じて柔軟にページ構造を変更できます。

○サンプルコード7:複数ファイルを一度に読み込む

複数のファイルを同時に読み込む方法について説明いたします。

この機能は、ユーザーが複数のファイルをまとめてアップロードする必要がある場合に非常に便利です。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>複数ファイルを一度に読み込む</title>
</head>
<body>
  <input type="file" id="fileInput" multiple>
  <div id="output"></div>

  <script>
    document.getElementById('fileInput').addEventListener('change', function(event) {
      const files = event.target.files; // 選択された複数のファイルを取得
      const outputDiv = document.getElementById('output');

      for (let i = 0; i < files.length; i++) {
        const file = files[i]; // 各ファイルを取得
        const reader = new FileReader(); // FileReaderオブジェクトを作成

        reader.onload = function() {
          const preElement = document.createElement('pre'); // pre要素を作成
          preElement.textContent = `File ${i + 1}: ${file.name}\n${reader.result}`; // ファイル名と内容を表示
          outputDiv.appendChild(preElement); // pre要素をoutputDivに追加
        };

        reader.readAsText(file); // ファイルをテキストとして読み込む
      }
    });
  </script>
</body>
</html>

このコードでは、<input>要素にmultiple属性を追加することで、複数ファイルの選択を可能にしています。

選択されたファイルはfilesプロパティで取得し、forループを使用して各ファイルを順番に読み込みます。

各ファイルの内容は個別の<pre>要素に表示され、ファイル名も併せて表示されます。

○サンプルコード8:ファイルをドラッグアンドドロップで読み込む

ドラッグアンドドロップによるファイル読み込み機能を実装する方法を紹介します。

この機能により、ユーザーエクスペリエンスが大幅に向上し、より直感的なファイル操作が可能となります。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>ファイルをドラッグアンドドロップで読み込む</title>
  <style>
    #dropZone {
      width: 300px;
      height: 200px;
      border: 2px dashed #ccc;
      text-align: center;
      line-height: 200px;
    }
  </style>
</head>
<body>
  <div id="dropZone">ここにファイルをドロップ</div>
  <div id="output"></div>

  <script>
    const dropZone = document.getElementById('dropZone');
    const outputDiv = document.getElementById('output');

    // ドロップゾーンにファイルが入るときの処理
    dropZone.addEventListener('dragover', function(event) {
      event.preventDefault(); // デフォルトイベントを無効にする
      this.style.backgroundColor = '#eee'; // 背景色を変更
    });

    // ドロップゾーンからファイルが離れるときの処理
    dropZone.addEventListener('dragleave', function() {
      this.style.backgroundColor = ''; // 背景色を元に戻す
    });

    // ドロップゾーンにファイルがドロップされたときの処理
    dropZone.addEventListener('drop', function(event) {
      event.preventDefault(); // デフォルトイベントを無効にする
      this.style.backgroundColor = ''; // 背景色を元に戻す

      const file = event.dataTransfer.files[0]; // ドロップされたファイルを取得
      const reader = new FileReader(); // FileReaderオブジェクトを作成

      reader.onload = function() {
        const preElement = document.createElement('pre'); // pre要素を作成
        preElement.textContent = reader.result; // 読み込んだ内容を表示
        outputDiv.appendChild(preElement); // pre要素をoutputDivに追加
      };

      reader.readAsText(file); // ファイルをテキストとして読み込む
    });
  </script>
</body>
</html>

このコードでは、dragoverdragleavedropイベントを活用して、ドラッグアンドドロップ機能を実現しています。

ユーザーがファイルをドロップゾーンにドラッグすると背景色が変わり、ドロップするとファイルが読み込まれて内容が表示されます。

この方法により、従来のファイル選択インターフェースよりも直感的な操作が可能となります。

○サンプルコード9:プログレスバーを表示してファイル読み込みの進行状況を確認する

大容量のファイルを読み込む際に、プログレスバーを表示してユーザーに進行状況を知らせる方法を解説します。

この機能により、ユーザーは読み込みの進捗を視覚的に確認できるようになります。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>プログレスバーを表示してファイル読み込みの進行状況を確認する</title>
</head>
<body>
  <input type="file" id="fileInput">
  <progress id="progressBar" value="0" max="100"></progress>
  <div id="status"></div>

  <script>
    document.getElementById('fileInput').addEventListener('change', function(event) {
      const file = event.target.files[0]; // 選択されたファイルを取得
      const reader = new FileReader(); // FileReaderオブジェクトを作成
      const progressBar = document.getElementById('progressBar'); // プログレスバーを取得
      const status = document.getElementById('status'); // ステータス表示用の要素を取得

      // ファイル読み込みの進行状況をプログレスバーに反映
      reader.onprogress = function(event) {
        if (event.lengthComputable) {
          const progress = Math.round((event.loaded / event.total) * 100);
          progressBar.value = progress;
          status.textContent = `${progress}% 読み込み完了`;
        }
      };

      reader.onload = function() {
        progressBar.value = 100; // 読み込み完了時にプログレスバーを100%にする
        status.textContent = 'ファイルの読み込みが完了しました。';
      };

      reader.readAsArrayBuffer(file); // ファイルをArrayBufferとして読み込む
    });
  </script>
</body>
</html>

このコードでは、FileReaderのonprogressイベントを利用して読み込みの進行状況を取得し、プログレスバーに反映させています。

event.lengthComputableプロパティを確認することで、進行状況が計算可能かどうかを判断しています。

また、ステータステキストを表示することで、より詳細な情報をユーザーに提供しています。

このような進行状況の表示は、特に大容量のファイルを扱う場合に有用です。

ユーザーに待ち時間の目安を提供することで、アプリケーションの使用体験が向上します。

○サンプルコード10:エラー処理と対処法

最後に、ファイル読み込み時のエラー処理と適切な対処法について説明します。

エラーハンドリングは、ロバストなアプリケーション開発において非常に重要です。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>エラー処理と対処法</title>
</head>
<body>
  <input type="file" id="fileInput">
  <div id="output"></div>

  <script>
    document.getElementById('fileInput').addEventListener('change', function(event) {
      const file = event.target.files[0]; // 選択されたファイルを取得
      const reader = new FileReader(); // FileReaderオブジェクトを作成
      const outputDiv = document.getElementById('output');

      reader.onload = function() {
        outputDiv.textContent = 'ファイルの読み込みが完了しました。';
      };

      // エラーが発生したときの処理
      reader.onerror = function() {
        outputDiv.textContent = 'エラーが発生しました:' + reader.error;

        // エラーの種類に応じた対処
        switch(reader.error.code) {
          case reader.error.NOT_FOUND_ERR:
            console.error('ファイルが見つかりません。');
            break;
          case reader.error.SECURITY_ERR:
            console.error('セキュリティエラーが発生しました。');
            break;
          case reader.error.ABORT_ERR:
            console.error('ファイルの読み込みが中断されました。');
            break;
          case reader.error.NOT_READABLE_ERR:
            console.error('ファイルが読み取り不可能です。');
            break;
          case reader.error.ENCODING_ERR:
            console.error('ファイルのエンコーディングにエラーがあります。');
            break;
          default:
            console.error('ファイルの読み込み中に未知のエラーが発生しました。');
        }
      };

      try {
        reader.readAsText(file); // ファイルをテキストとして読み込む
      } catch (e) {
        outputDiv.textContent = '予期せぬエラーが発生しました:' + e.message;
      }
    });
  </script>
</body>
</html>

このコードでは、FileReaderのonerrorイベントハンドラーを使用してエラーを捕捉しています。

エラーの種類に応じて適切なメッセージを表示することで、ユーザーに具体的な問題点を伝えることができます。

また、try-catch文を使用することで、ファイル読み込み以外の予期せぬエラーも捕捉しています。

適切なエラー処理を実装することで、ユーザーはアプリケーションの状態をより正確に理解でき、必要に応じて適切な対応を取ることができます。

●注意点

JavaScriptでファイル読み込みを行う際には、いくつか重要な注意点があります。

  1. ブラウザのセキュリティ制限 -> ローカルファイルへのアクセスが制限される場合があるため、Webサーバー上でアプリケーションを動作させることが推奨されます。
  2. ファイル形式と大きさ -> 対応していないファイル形式や、非常に大きなファイルの読み込みには注意が必要です。ブラウザやデバイスの性能によっては、処理に時間がかかったり、メモリ不足が発生したりする可能性があります。
  3. ユーザーのプライバシー -> アップロードされたファイルには個人情報が含まれている可能性があるため、適切なセキュリティ対策を講じる必要があります。
  4. クロスオリジンの制限 -> 異なるドメインからのファイル読み込みには、CORS(Cross-Origin Resource Sharing)の設定が必要になる場合があります。
  5. 非同期処理の理解 -> ファイル読み込みは非同期で行われるため、適切な非同期処理の理解が重要です。コールバック関数やPromiseを正しく使用する必要があります。

この点に注意しながら実装を進めることで、より安全で効率的なファイル読み込み機能を実現することができます。

まとめ

本記事では、JavaScriptを使用したファイル読み込みの方法について、詳細な解説と実践的なサンプルコードを紹介しました。

本知識を活用することで、ウェブアプリケーションにおける効果的なファイル操作機能を実装することができます。

ユーザーのニーズに合わせて適切な手法を選択し、セキュリティやパフォーマンスにも配慮しながら、機能を実装していくことが重要です。