カテゴリ: Bootstrap 更新日: 2026/07/30

Bootstrapでファイルアップロード進捗を見せる!プログレスバーとスピナー活用法

ファイルアップロード進捗の見せ方:XHR/Fetchとプログレスバー連携
ファイルアップロード進捗の見せ方:XHR/Fetchとプログレスバー連携

先生と生徒の会話形式で理解しよう

生徒

「先生、ファイルをアップロードするときに、どれくらい進んでいるか見せる方法ってありますか?」

先生

「もちろんです。ウェブページ上で進捗バーやスピナーを表示して、ユーザーにアップロード状況を見せることができます。」

生徒

「進捗バーってBootstrapでも使えるんですか?」

先生

「はい。Bootstrapのプログレスバーやスピナーを使うと、簡単に見た目もきれいに進捗を表示できます。XHRやFetchと組み合わせてリアルタイムで更新もできます。」

1. ファイルアップロードの進捗とは?

1. ファイルアップロードの進捗とは?
1. ファイルアップロードの進捗とは?

ファイルアップロードの進捗とは、ユーザーがアップロードしているファイルがサーバーにどれくらい送信されたかを示すものです。初心者の方には、これは動画の再生バーのようなものと考えるとわかりやすいです。バーが右に進むほど、アップロードが進んでいるということです。

2. Bootstrapのプログレスバーとスピナーの基本

2. Bootstrapのプログレスバーとスピナーの基本
2. Bootstrapのプログレスバーとスピナーの基本

Bootstrapでは、プログレスバーを作るために

を使用します。スピナーは
で作れます。これらを使うことで、ファイルアップロード中にユーザーに「処理中です」と視覚的に伝えることができます。


<div class="progress">
    <div class="progress-bar" role="progressbar" style="width: 0%"></div>
</div>
<div class="spinner-border text-primary" role="status">
    <span class="visually-hidden">Loading...</span>
</div>
ブラウザ表示

3. XHRでファイルのアップロード進捗を取得する方法

3. XHRでファイルのアップロード進捗を取得する方法
3. XHRでファイルのアップロード進捗を取得する方法

XHR(XMLHttpRequest)を使うと、ファイルのアップロード中にどれくらい送信されたかを取得できます。これは通信の進捗イベント「progress」を監視することで可能です。進捗バーの幅をこの値に応じて変更することで、リアルタイムで進捗を表示できます。


<input type="file" id="fileInput">
<div class="progress">
    <div class="progress-bar" role="progressbar" style="width: 0%"></div>
</div>

<script>
const fileInput = document.getElementById('fileInput');
const progressBar = document.querySelector('.progress-bar');

fileInput.addEventListener('change', () => {
    const file = fileInput.files[0];
    const xhr = new XMLHttpRequest();
    xhr.upload.addEventListener('progress', (e) => {
        if (e.lengthComputable) {
            const percent = (e.loaded / e.total) * 100;
            progressBar.style.width = percent + '%';
        }
    });
    xhr.open('POST', '/upload');
    const formData = new FormData();
    formData.append('file', file);
    xhr.send(formData);
});
</script>
ブラウザ表示

4. Fetch APIとプログレスバーの連携

4. Fetch APIとプログレスバーの連携
4. Fetch APIとプログレスバーの連携

Fetch APIはXHRよりも新しい方法ですが、直接進捗イベントを取得できません。しかしReadableStreamを使うことで、送信中の進捗を取得できます。Fetchを使ったモダンな方法で、進捗バーを動かす例を紹介します。


<input type="file" id="fileInput2">
<div class="progress">
    <div class="progress-bar" role="progressbar" style="width: 0%"></div>
</div>

<script>
const input2 = document.getElementById('fileInput2');
const progressBar2 = document.querySelector('.progress-bar');

input2.addEventListener('change', async () => {
    const file = input2.files[0];
    const chunkSize = 1024 * 100;
    let uploaded = 0;

    while(uploaded < file.size) {
        const chunk = file.slice(uploaded, uploaded + chunkSize);
        const formData = new FormData();
        formData.append('file', chunk);
        await fetch('/upload-chunk', { method: 'POST', body: formData });
        uploaded += chunk.size;
        const percent = (uploaded / file.size) * 100;
        progressBar2.style.width = percent + '%';
    }
});
</script>
ブラウザ表示

5. アップロード中のスピナー表示でユーザーに安心感を

5. アップロード中のスピナー表示でユーザーに安心感を
5. アップロード中のスピナー表示でユーザーに安心感を

ファイルサイズが大きい場合、アップロードには時間がかかります。その間、ユーザーが何も表示されないと不安になります。スピナーを表示することで「処理中です」という視覚的な安心感を与えられます。


<div id="spinner" class="spinner-border text-success" role="status" style="display:none;">
    <span class="visually-hidden">Loading...</span>
</div>

<script>
const spinner = document.getElementById('spinner');
fileInput.addEventListener('change', () => {
    spinner.style.display = 'inline-block';
    // アップロード処理が終わったら
    // spinner.style.display = 'none';
});
</script>
ブラウザ表示

6. プレースホルダーでアップロード前のレイアウトを維持

6. プレースホルダーでアップロード前のレイアウトを維持
6. プレースホルダーでアップロード前のレイアウトを維持

Bootstrapのプレースホルダーは、コンテンツがまだ読み込まれていないときの見た目を整えるための機能です。ファイルアップロード中も、進捗バーやスピナーが出る領域をプレースホルダーで確保すると、ページのレイアウトが変わらずに見やすくなります。


<div class="placeholder-glow">
    <span class="placeholder col-12"></span>
</div>
<div class="progress">
    <div class="progress-bar" role="progressbar" style="width: 0%"></div>
</div>
ブラウザ表示

7. 進捗バーとスピナーを組み合わせた実用例

7. 進捗バーとスピナーを組み合わせた実用例
7. 進捗バーとスピナーを組み合わせた実用例

実際のアップロード画面では、プログレスバーとスピナーを一緒に使うとユーザーがより理解しやすくなります。バーは進行状況を示し、スピナーは処理中であることを強調します。Bootstrapではこれらを簡単に組み合わせられます。


<input type="file" id="fileInput3">
<div id="spinner3" class="spinner-border text-primary" role="status" style="display:none;">
    <span class="visually-hidden">Loading...</span>
</div>
<div class="progress">
    <div class="progress-bar" role="progressbar" style="width:0%"></div>
</div>

<script>
const input3 = document.getElementById('fileInput3');
const spinner3 = document.getElementById('spinner3');
const progressBar3 = document.querySelector('.progress-bar');

input3.addEventListener('change', () => {
    spinner3.style.display = 'inline-block';
    const file = input3.files[0];
    const xhr = new XMLHttpRequest();
    xhr.upload.addEventListener('progress', e => {
        if (e.lengthComputable) {
            progressBar3.style.width = (e.loaded / e.total * 100) + '%';
        }
    });
    xhr.onload = () => { spinner3.style.display = 'none'; };
    const formData = new FormData();
    formData.append('file', file);
    xhr.open('POST', '/upload');
    xhr.send(formData);
});
</script>
ブラウザ表示

8. 初心者でもわかる進捗表示のポイントまとめ

8. 初心者でもわかる進捗表示のポイントまとめ
8. 初心者でもわかる進捗表示のポイントまとめ

初心者がファイルアップロード進捗を作る場合は、まずはBootstrapのプログレスバーとスピナーを理解しましょう。次にXHRで進捗を取得し、進捗バーの幅を変える練習をします。Fetch APIはもう少し進んだステップですが、同じ考え方で進捗を表示できます。プレースホルダーでページレイアウトを整えることも大切です。

このように、進捗バー、スピナー、プレースホルダーを組み合わせることで、ユーザーにわかりやすく、安全にアップロード中であることを伝えることができます。これにより、初心者でも簡単に見た目の良いアップロード画面を作成できます。

まとめ

まとめ
まとめ

今回はBootstrapを使ったファイルアップロード進捗表示について、初心者の方でも理解しやすいように解説しました。まず、ファイルアップロードの進捗とはユーザーが送信しているデータがどれだけサーバーに届いたかを示す指標であり、動画再生のバーと同じように考えるとわかりやすいことがわかりました。次に、Bootstrapのプログレスバーやスピナーを使うことで、アップロード中に視覚的な進捗表示や処理中の安心感をユーザーに提供できることを学びました。具体的には

でバーを作り、
でスピナーを表示する方法を紹介しました。

また、XHR(XMLHttpRequest)を利用すると、upload.progressイベントを活用してリアルタイムに進捗バーを動かすことができることも理解しました。さらにFetch APIを用いるモダンな方法では、ReadableStreamを活用してファイルを分割して送信しながら進捗を管理する手法も紹介しました。大きなファイルをアップロードする場合でも、スピナーで処理中の状態を示すことでユーザーの不安を軽減できることも重要なポイントです。

さらに、Bootstrapのプレースホルダー機能を活用することで、アップロード前やアップロード中のレイアウトを崩さず、ページ全体の見た目を整えることができることもわかりました。最後に、プログレスバーとスピナーを組み合わせた実用例を示し、ユーザーが直感的に理解できるアップロード画面を作る方法を紹介しました。初心者でも手順を踏めば、見やすくわかりやすいアップロード進捗表示を簡単に作成できることが理解できました。

総じて、進捗バー、スピナー、プレースホルダーの三つの要素を適切に組み合わせることが、ユーザー体験を向上させるポイントです。これにより、ウェブサイトやアプリのファイルアップロード機能をより親切で直感的に設計できます。さらに、XHRやFetch APIの基礎を理解することで、将来的により複雑なファイル管理やリアルタイム通信機能にも応用できます。

先生と生徒の振り返り会話

生徒

「先生、今回はBootstrapのプログレスバーとスピナーを使って、ファイルアップロードの進捗を見せる方法を学びました。XHRやFetch APIも使えるんですね。」

先生

「そうです。基本はプログレスバーで進捗を示すことですが、XHRのprogressイベントでリアルタイム更新、Fetch APIでモダンな分割送信も可能です。さらにスピナーやプレースホルダーを使うと、ユーザーが安心して待てるようになります。」

生徒

「なるほど。アップロード中の見た目を整えるのが意外と大事なんですね。」

先生

「その通りです。進捗バー、スピナー、プレースホルダーの組み合わせで、ユーザーはアップロードが進んでいることを直感的に理解できます。これを覚えておくと、他のウェブアプリでも応用できます。」

生徒

「今日の学習で、初心者でも簡単にアップロード画面を作れるイメージがつかめました。ありがとうございます。」

先生

「よく理解できましたね。まずは基本を押さえて、少しずつXHRやFetchの応用も試してみてください。」

2026年最新 スキルアップ・実践セミナー

【60分集中】CSSを1行も書かない!?Bootstrap 5ユーティリティクラス活用で開発工数を50%削減

「スピード」が武器になる。Bootstrap 5で商用クオリティのWebサイトを高速構築。

本講座では、世界シェアNo.1のフレームワークBootstrap 5を使いこなし、ゼロからレスポンシブサイトを組み上げる「現場最速のワークフロー」を学びます。単なる導入に留まらず、ユーティリティクラスを活用した効率化と、実務で必須となるカスタマイズ技法を60分で完全習得します。

具体的なワークショップ内容と環境

【つくるもの】
モダンなランディングページ(LP)やダッシュボードのプロトタイプを作成します。ナビゲーション、ヒーローセクション、カードレイアウト、フッターなど、Bootstrapのコンポーネントを組み合わせて「一瞬で形にする」感動を体験してください。

【開発環境】
VS CodeにBootstrap 5専用のSnippet(補完機能)を導入し、手入力を最小限にする環境を構築。最新のCDN利用法や、表示速度(Core Web Vitals)を意識した最適な読み込み設定など、プロの初期設定を伝授します。

この60分で得られる3つの革新スキル

1. グリッドシステムの完全マスター

スマホ・タブレット・PCでレイアウトを自由自在に切り替える「ブレイクポイント」の極意を学びます。

2. ユーティリティクラスによる爆速デザイン

CSSを1行も書かずに、マージン・パディング・カラーを制御。開発工数を半分以下にする実戦術を習得します。

3. 脱・標準デザインのカスタマイズ

「Bootstrap感」を消し、独自のブランドイメージに合わせるための、上書きの作法とデザインの整え方を伝授します。

※本講座は、HTML/CSSの基本を理解した方向けの「実践加速講座」です。制作会社のコーダーや副業フリーランスとして「案件の回転率」を上げ、市場価値を最大化させたい方をモクモクがバックアップします。

【60分集中】CSSを1行も書かない!?Bootstrap 5ユーティリティクラス活用で開発工数を50%削減

Bootstrap 5を楽しみながら、一緒に学びましょう!

各回少人数・マンツーマン形式で徹底サポート

このセミナーの詳細・お申し込みはこちら
カテゴリの一覧へ
新着記事
New1
Bootstrap
Bootstrapで定義リストdlを整形する方法とレスポンシブ2カラムレイアウト完全解説
New2
CSS
CSSで要素のサイズを自動調整!autoとfit-contentの使い方
New3
Bootstrap
Bootstrap 5 のナビゲーション入門:Navbar・タブ・ピルの違いと実装例
New4
CSS
背景画像とimgタグの使い分け完全ガイド!初心者でもわかる違いとスタイル比較
人気記事
No.1
Java&Spring記事人気No1
CSS
初心者向け!Webデザインに役立つ色彩心理学と配色の基本を徹底解説
No.2
Java&Spring記事人気No2
CSS
CSSで要素のサイズを自動調整!autoとfit-contentの使い方
No.3
Java&Spring記事人気No3
CSS
テキストボックスの作り方!CSSで幅・高さ・色を自由にカスタマイズする方法
No.4
Java&Spring記事人気No4
CSS
CSSでGoogle Fontsを使う方法を完全ガイド!初心者でもできるフォントの変更
No.5
Java&Spring記事人気No5
CSS
CSSのnth-child()を完全攻略!特定の順番にスタイルを当てる方法
No.6
Java&Spring記事人気No6
CSS
CSSの透明度を完全解説!初心者にもわかるopacityとrgbaの使い方
No.7
Java&Spring記事人気No7
HTML
HTMLコメントの書き方を完全解説!初心者でも理解できるコメントタグの基本と使い方
No.8
Java&Spring記事人気No8
HTML
HTMLのimgタグの書き方|src・altの必須属性を初心者向けにやさしく整理