- ネットワーク
オフラインとは?意味とオンラインとの違い|onLineの落とし穴を実測
結論
オフラインとは、パソコンやスマホなどの端末が、ネットワーク(インターネットや社内の回線)につながっていない状態のことです。反対に、つながっている状態をオンラインといいます。ふだんの会話では「ネットの外で、直接会う・紙で行う」という意味(オフ会・オフライン広告など)でも使われ、場面によって指すものが変わります。
この記事でわかること
- オフラインの意味とオンラインとの違いを、ふだんの言葉・IT・ゲーム・業務の場面別に整理した表
- 回線を実際に切ったとき、ブラウザーの navigator.onLine・online/offline イベント・キャッシュ・保存データがどう動くかの実測
- 「オフラインです」「インターネットに接続されていません」と出るときの症状表と、端末別の直し方
この記事で実際に動かしたもの:127.0.0.1 の 8727 番に立てた自作の Web サーバーと Chromium 153(開発者ツールのオフライン再現・navigator.onLine・online/offline イベント・HTTP キャッシュ・localStorage・IndexedDB・サービスワーカー・エラー画面)、Linux のネットワーク名前空間(ip netns)で作った「回線のない端末」「つながっているがインターネットに出られない端末」での Chromium・curl・Python・Node.js・npm・pip・git の動きです。
「オフライン」は、スマホの画面にも、ゲームの説明にも、会議の案内にも出てくる言葉です。どれも「ネットワークの外にいる」という芯は同じですが、何から切り離されているのかが場面ごとに違うため、取り違えると話がかみ合いません。最初に、つながりの全体像を図にします。
flowchart TB
A[アプリ・ブラウザー] --> B[端末の接続<br>Wi-Fi・有線・モバイル]
B --> C[ルーター・基地局]
C --> D[インターネット]
D --> E[相手のサーバー]
N[navigator.onLine が<br>主に見ているのはここ] -.- B
どこか1か所でも切れると、利用者から見れば「オフライン」です。ただし、ブラウザーが「オフライン」と判断できるのは主に端末の接続(図の B)までで、その先が切れていても「オンライン」と表示されることがあります。この点は後半で実測します。よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| オフラインとは(意味) | 端末がネットワークにつながっていない状態。英語の offline | オフラインとは(場面別の意味) |
| オンラインとオフラインの違い | つながっていればオンライン、つながっていなければオフライン | オンラインとオフラインの違い |
| オフラインになると何ができないか | 新しいページ・送信・同期・ログインが止まる。保存済みのものは使える | オフラインでも表示できるもの・できないもの |
| 「オフラインです」と出る原因 | Wi-Fi オフ・機内モード・ケーブル抜け・ルーターの不調・アプリの設定 | 「オフラインです」と出るときの症状表 |
| オフラインを直す方法 | 機内モードとWi-Fiを確かめ、ルーターを再起動し、別の端末で比べる | 端末別:オフラインを直す手順 |
| オフラインかどうかの確かめ方 | 開発者ツールで navigator.onLine、ターミナルで ip route |
自分で確かめる |
| オフラインで使えるアプリの仕組み | 必要なファイルとデータを端末に保存し、つながったら同期する | オフラインで使えるアプリの仕組み |
| オフ会・オフラインイベントとは | ネットで知り合った人が直接会う集まり・会場で開く催し | 意味が違う「オフライン」 |
確認環境:Ubuntu 24.04.5 LTS の上で、Python 3.13.18 の http.server で作った自作の Web サーバーを 127.0.0.1 の 8727 番で起動し、Cache-Control の違う4種類のファイル(max-age=3600 の HTML と CSS、no-store の HTML、no-store の JSON API)とサービスワーカー付きのページを返して、届いたリクエストをすべて記録しました。ブラウザーは Chromium 153.0.8010.12(Chrome for Testing)を playwright 1.63.0 から作業用のプロファイルで動かし、開発者ツールのオフライン再現(context.set_offline。内部では Chrome DevTools Protocol のネットワーク条件の設定)を使いました。本物の回線断は、iproute2 6.1.0 の ip netns で作った2つのネットワーク名前空間を veth でつなぎ、インターフェースの up/down・IP アドレス・既定ルートを1段ずつ変えて再現し、その中で Chromium・curl・Python 3.13・Node.js 22.23・npm・pip・git を動かしました。名前空間の先はどこにもつながっておらず、外部のサービスには接続していません。Windows・Mac・iPhone・Android・Outlook・Google ドキュメント・プリンターの手順は、Microsoft・Apple・Google・キヤノンの公式の説明で確かめた範囲だけを書いています。図は mermaid-cli 11.16.0 で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「オフラインとは?意味とオンラインとの違い|onLineの落とし穴を実測」
オフラインとは(場面別の意味:ふだんの意味とITの意味)
この節では、「オフライン」という言葉が、ふだんの会話と IT・ゲーム・ビジネスの各場面でそれぞれ何を指すのかが分かります。
オフラインは英語の offline で、「線(line)から外れている(off)」が元の形です。もともとは、コンピューター本体の制御から切り離された装置や作業を指す言葉でした(国語辞典にも「中央処理装置と入出力装置が切り離されている状態」という意味が載っています)。インターネットが広まってからは「通信回線につながっていない状態」の意味で使うのが一般的になり、さらに「ネットの外の、直接の世界」という意味にも広がりました。
| 場面 | オフラインが指すもの | 例 | 見分ける手がかり |
|---|---|---|---|
| ふだんの会話 | ネットの外で、直接会う・その場で行うこと | オフ会、オフラインで打ち合わせ | 人・会う・会場 |
| パソコン・スマホ | 端末がネットワークにつながっていない状態 | 機内モード、Wi-Fi がオフ | Wi-Fi・圏外・接続 |
| Web・アプリ | 通信できない状態で、保存済みの内容で動くこと | オフライン再生、オフライン対応のアプリ | ダウンロード・同期 |
| ゲーム | ネット対戦をせず、1台の中だけで遊ぶこと | オフラインモード、オフラインで遊べるゲーム | ソロ・対戦なし |
| 周辺機器・業務ソフト | 機器やソフトが通信先と切り離されていること | プリンターがオフライン、Outlook のオフライン作業 | 印刷・メール・状態表示 |
| マーケティング | ネット以外の顧客接点 | オフライン広告(チラシ・看板)、実店舗 | O2O・OMO・販促 |
| 開発・データ処理 | 通信せずに手元だけで行う処理 | オフラインインストール、オフライン評価 | キャッシュ・手元・事前 |
ふだんの「オフライン」
対象は人の集まりや活動
「ネット越しではなく直接」という意味
似た言葉は対面・リアル・現地
IT の「オフライン」
対象は端末・アプリ・機器
「通信できない状態」という意味で、状態を数値やエラーで確かめられる
似た言葉は圏外・未接続・切断中
以下では、検索されることの多い「端末・ブラウザーがオフラインになる」場面を中心に、実際に回線を切って確かめた結果で説明します。ゲーム・オフ会・プリンター・Outlook などの意味は後半の節でまとめます。
オンラインとオフラインの違い(できること・できないこと)
この節では、オンラインとオフラインで何が変わるのかと、オフラインでも使えるもの・使えないものの違いが分かります。
オンラインは「ネットワークにつながっていて、ほかの機器やサーバーとやり取りできる状態」、オフラインは「つながっておらず、端末の中にあるものだけで動く状態」です。オフラインで困るのは、相手(サーバー)とのやり取りが要る操作です。逆に、端末に保存してあるものは、オフラインでもそのまま使えます。
| 操作 | オンライン | オフライン | 理由 |
|---|---|---|---|
| 新しい Web ページを開く | できる | できない(エラー画面) | サーバーから取ってくる必要がある |
| メッセージ・メールの送信 | できる | 送れない(アプリによっては送信待ちに入る) | 相手のサーバーに届ける必要がある |
| ログイン・決済 | できる | できない | サーバー側で確かめる必要がある |
| ダウンロード済みの動画・音楽・地図 | できる | できる | 端末に保存されている |
| 端末内の文書の編集 | できる | できる(共有・同期は後で) | 端末で完結する |
| 一度開いたページをもう一度見る | できる | 場合による | ブラウザーのキャッシュの残り方次第(次の節で実測) |
オンライン・オフラインの違いは「つながっているかどうか」の二択に見えますが、実際の困りごとは「つながっているはずなのに使えない」という中間の状態で起きることが多いです。Wi-Fi のマークは出ているのに Web が開けない、という状態です。これはブラウザーの判定の仕組みと関係するため、実測で順に見ていきます。
オフラインになるとブラウザーで何が起きるか(Chromiumで実測)
この節では、ブラウザーがオフラインになった瞬間に、ページの中の JavaScript から何が見え、どんなイベントが起きるのかが分かります。
ブラウザーには、オンラインかどうかを表す navigator.onLine(true か false)と、状態が変わったときに起きる online・offline イベントがあります。手元のサーバーで開いたページにイベントの記録を仕込み、開発者ツールのオフライン再現をオン・オフしました。
addEventListener('online', () => log('online event onLine=' + navigator.onLine));
addEventListener('offline', () => log('offline event onLine=' + navigator.onLine));
log('load onLine=' + navigator.onLine);
online onLine True conn 4g
after set_offline onLine False
events: ['0.016 load onLine=true', '0.222 offline event onLine=false', '0.730 online event onLine=true']
オフラインにすると navigator.onLine は false になり、offline イベントが起きました。戻すと online イベントが起きて true に戻ります。オフライン再現を5回繰り返して、切り替えからイベントまでの時間を測ると、どれも1〜2ミリ秒でした。
次に、オフラインの状態でページの中から通信してみました。fetch の結果と、そのときサーバーに届いたリクエストです。
fetch /api => TypeError: Failed to fetch
fetch /style.css => OK 200
fetch /cached.html => OK 200
fetch /nostore.html => TypeError: Failed to fetch
fetch /api force-cache => TypeError: Failed to fetch
fetch /style.css no-cache => TypeError: Failed to fetch
localStorage 書きかけ
IndexedDB メモ
server during offline: []
オフラインの間、サーバーには1本もリクエストが届いていません。それでも /style.css と /cached.html は 200 で読めました。どちらも事前に一度読み込み、Cache-Control: max-age=3600(1時間は新しいとみなしてよい)で返していたため、ブラウザーの手元のキャッシュから出たのです。一方、no-store(保存しない)で返した API と HTML は TypeError: Failed to fetch で失敗しました。キャッシュがあるファイルでも、cache: "no-cache"(毎回サーバーに確かめる)を付けると失敗します。
端末の中に保存する仕組み(localStorage と IndexedDB)は、オフラインでも読み書きできました。入力途中の下書きをオフラインの間に失わないようにするには、こうした保存先を使います。保存先ごとの違いは、関連記事「localStorage・sessionStorage・Cookieの違い|実測比較」で扱っています。
オフラインでも表示できるもの・できないもの(キャッシュの実測)
この節では、オフラインのときに「一度見たページ」をもう一度開けるかどうかが、開き方とキャッシュの設定でどう変わるかが分かります。
オフラインで開けるかどうかは「手元にそのページの保存があるか」と「ブラウザーがサーバーに確かめに行く開き方か」の組み合わせで決まります。オンラインのうちに各ページを一度開いてから、オフラインにして開き方を変えました。
| 開き方 | ページの保存の設定 | 結果 | サーバーへの通信 |
|---|---|---|---|
| アドレスバーやリンクで開く | max-age=3600(期限内) | 200 で表示できた | なし(キャッシュから) |
| アドレスバーやリンクで開く | no-store | ERR_INTERNET_DISCONNECTED | 出せない |
| 再読み込み(F5) | max-age=3600(期限内) | ERR_INTERNET_DISCONNECTED | 確かめに行こうとして失敗 |
| 「戻る」で前のページへ | no-cache | 200 で表示できた | なし(キャッシュから) |
| 一度も開いていない URL(?x=1 付き) | (保存なし) | ERR_INTERNET_DISCONNECTED | 出せない |
| サービスワーカーで保存したページを再読み込み | アプリ側で保存 | 200 で表示できた | なし(サービスワーカーから) |
目を引くのは3行目です。リンクで開けば表示できたページが、再読み込み(F5)するとエラーになりました。再読み込みは「最新か確かめ直す」操作なので、期限内のキャッシュがあってもサーバーに問い合わせようとし、オフラインでは失敗します。オフラインのときに「とりあえず再読み込み」をすると、見えていたページが消えてしまうことがあるのはこのためです。
reload cached.html => ERROR Page.reload: net::ERR_INTERNET_DISCONNECTED
go_back to / (no-cache) => 200 オフライン実験 http://127.0.0.1:8727/
goto nostore => ERROR Page.goto: net::ERR_INTERNET_DISCONNECTED at http://127.0.0.1:8727/nostore.html
一方、「戻る」は no-cache(毎回確かめる設定)のページでも表示できました。履歴をたどる操作では、ブラウザーが手元の保存を優先して使うためです。なお、この実験の自動操作では「戻る・進む」を一瞬で再現する仕組み(バックフォワードキャッシュ)が切られているため、この結果は HTTP キャッシュから出たものです。キャッシュの設定値の意味は、関連記事「Cache-Control no-cacheとno-storeの違い|実測表つき」で扱っています。
オフラインで、見ていたページを残したいとき(見る側)
再読み込みはサーバーに確かめ直すため、オフラインでは表示が消える
navigator.onLine は「インターネットにつながる」とは限らない(ip netnsで実測)
この節では、ブラウザーが「オンライン」と言っているのに通信できない状態と、逆に「オフライン」なのに通信できる状態が、本物の回線断でどう起きるかが分かります。
開発者ツールのオフライン再現は、ブラウザーの中の通信を止めるだけです。本物の回線断では何が起きるかを見るため、Linux のネットワーク名前空間で「インターフェースが無い端末」を作り、インターフェース・IP アドレス・既定ルート(外へ出る道)を1段ずつ足して、その中の Chromium で調べました。外への通信先には、文書の例示用に予約されたアドレス 192.0.2.10 を使っています。
| 端末の状態 | navigator.onLine | 外(192.0.2.10) | 127.0.0.1 |
|---|---|---|---|
| S1 ループバック(lo)だけ | false | TypeError: Failed to fetch | OK 200 |
| S2 インターフェースを up(相手側は down) | false | TypeError: Failed to fetch | OK 200 |
| S3 相手側も up(リンクはつながった) | false | TypeError: Failed to fetch | OK 200 |
| S4 IP アドレスを付けた(既定ルートなし) | true(online イベント) | TypeError: Failed to fetch | OK 200 |
| S5 既定ルートあり・先はインターネットにつながらない | true | 3秒で打ち切り(AbortError) | OK 200 |
| S6 相手側のリンクを切る(ケーブルを抜く相当) | false(offline イベント) | TypeError: Failed to fetch | OK 200 |
読み取れることは4つです。
リンクがつながっただけでは false
S3 でケーブルがつながった状態でも、IP アドレスが付くまで onLine は false のままだった。
アドレスが付いた時点で true
true でも外に出られない
S4・S5 は onLine が true なのに、外への通信は失敗した。S5 は応答が無いまま待たされた。
「Wi-Fi はつながるのにネットが使えない」の正体
本物の回線断でも自分の中は通る
どの状態でも 127.0.0.1 の自作サーバーには届いた。開発者ツールの再現では 127.0.0.1 も失敗していた。
再現と本物で範囲が違う
ケーブルを抜くとすぐ気づく
S6 でリンクを切ると offline イベントが起き、5回の計測で12〜389ミリ秒後だった。戻したときの online は5〜8ミリ秒後。
端末の接続の変化には反応が速い
MDN の説明でも、Chrome と Safari は「LAN やルーターに接続できないときに false、それ以外は true」とされ、false ならオフラインとみなせるが、true だからといってインターネットにつながるとは限らないと書かれています。仮想マシン用の仮想アダプターがある端末では、常に「接続中」になる例も挙げられています。実測でも、onLine が見ているのは端末の接続(冒頭の図の B)までで、その先のルーターやインターネットの状態は見ていませんでした。
同じ状態でページを開いたときのエラー画面の種類も、状態によって変わりました。
S1 http://www.example.com/ Page.goto: net::ERR_INTERNET_DISCONNECTED
S1 http://192.0.2.10/ Page.goto: net::ERR_INTERNET_DISCONNECTED
S5 http://www.example.com/ Page.goto: net::ERR_NAME_NOT_RESOLVED
S5 http://192.0.2.10/ Page.goto: Timeout 40000ms exceeded.
端末の接続が無い S1 では ERR_INTERNET_DISCONNECTED(インターネットに接続されていません)でしたが、つながっているのに外へ出られない S5 では、名前(ドメイン)を調べられない ERR_NAME_NOT_RESOLVED や、応答待ちの時間切れになりました。エラーの名前を見れば、「端末がオフライン」なのか「端末はつながっているが先で止まっている」のかを切り分けられます。
「オフラインです」と出るときの症状表(エラー原文つき)
この節では、オフラインのときに画面やコマンドに出る表示から、どこで切れているのかを見分ける方法が分かります。
Chromium で、オフラインの状態でページを開いたときのエラー画面の文字を、日本語の表示で読み取りました。
タブのタイトル: 127.0.0.1
プレイするには Space キーを押してください
(読み上げ用の本文に)インターネットに接続されていません
次をお試しください
・ネットワーク ケーブル、モデム、ルーターを確認する
・Wi-Fi に再度接続する
ERR_INTERNET_DISCONNECTED
恐竜の絵とともに出る、いわゆる「恐竜の画面」です。手元の Chromium では見出しにゲームの案内が出て、「インターネットに接続されていません」はページの本文の中に入っていました。いちばん下の小さな英字(エラーコード)が切り分けの手がかりです。ターミナルやプログラムでは、同じオフラインでも次のように出ました。
| 表示(原文) | どこで出たか | 意味 | まず確かめること |
|---|---|---|---|
ERR_INTERNET_DISCONNECTED |
Chrome・Edge などの画面 | 端末がネットワークにつながっていない | Wi-Fi・機内モード・ケーブル |
ERR_NAME_NOT_RESOLVED |
Chrome・Edge などの画面 | 端末はつながっているが、名前を調べられない | ルーター・回線・DNS |
TypeError: Failed to fetch |
Web ページの JavaScript | 通信そのものができなかった(オフライン・CORS など) | navigator.onLine と開発者ツールの Network |
OSError(101, 'Network is unreachable') |
Python | 外へ出る道(ルート)が無い | ip route に default があるか |
OSError(113, 'No route to host') |
Python | 道はあるが、次の機器に届かない(リンクが切れた) | ケーブル・Wi-Fi の接続先 |
curl: (6) Could not resolve host |
curl | 名前を調べられない | 端末の接続、次に DNS |
curl: (28) Connection timed out |
curl | 送ったが応答が来ない | ルーターの先・回線・相手のサーバー |
fetch failed / ENETUNREACH |
Node.js | 外へ出る道が無い | ip route |
アプリの画面に「オフラインです」「ネットワークに接続されていません」と出る場合も、原因の場所は同じ考え方で絞れます。
| 症状 | 考えられる原因 | 直し方 |
|---|---|---|
| すべてのアプリとサイトが使えない | 機内モード・Wi-Fi オフ・圏外・ケーブル抜け | 機内モードをオフ、Wi-Fi をオン、接続先を選び直す |
| Wi-Fi のマークは出ているのにどこも開けない | ルーターから先(回線・プロバイダー)が止まっている | ルーターとモデムの再起動、別の端末でも同じか比べる |
| 1つのアプリだけ「オフライン」と出る | アプリのオフライン設定・サーバー側の障害・アプリの通信の許可 | アプリの設定と通信の許可を確かめる、ほかのアプリと比べる |
| プリンターが「オフライン」 | パソコンとプリンターが通信できない、「プリンターをオフラインで使用する」が有効 | 電源の入れ直し、印刷待ち一覧のメニューでチェックを外す |
| Outlook の下に「オフライン作業」 | オフライン作業のボタンが押されたまま | 「送受信」タブの「オフライン作業」をもう一度押す |
| 会社の中だけ開けないサイトがある | 社内のプロキシ・ファイアウォールの設定 | 社内の情報システムの担当に確かめる |
端末別:オフラインを直す手順(Windows・Mac・スマホ・Linux)
この節では、端末がオフラインになったときに、Windows・Mac・iPhone・Android・Linux それぞれで確かめる場所と順番が分かります。
どの端末でも、軽い確認から順に、1つずつ変えて結果を見るのが近道です。全体の順番は次のとおりです。
機内モードと Wi-Fi のオン・オフを確かめる
機内モードが入っていると Wi-Fi やモバイル通信が切れる。Wi-Fi がオンで、接続先の名前の下に「接続済み」と出ているかを見る。
別の端末で同じ回線を試す
スマホでもパソコンでも開けないなら回線やルーター側、1台だけなら端末側の問題と分かる。
ルーターとモデムを再起動する
電源を抜き、30秒ほど待ってからモデム、次にルーターの順に入れ直す(Microsoft の手順)。
接続先を削除してつなぎ直す
保存済みのネットワークを削除し、パスワードを入れ直す。
それでも直らなければ、エラーの名前で切り分ける
ERR_INTERNET_DISCONNECTED なら端末側、ERR_NAME_NOT_RESOLVED や時間切れならその先、と考える。
端末ごとの確かめる場所は、各社の公式の説明で確かめた範囲では次のとおりです。
| 端末 | 確かめる場所 | 次の手 | 出典 |
|---|---|---|---|
| Windows | タスクバー右側のネットワークのアイコンで Wi-Fi と「接続済み」を見る。設定 > ネットワークとインターネット > 機内モード がオフか | 既知のネットワークの管理で削除してつなぎ直す。2.4GHz と 5GHz の別のほうに切り替える | Microsoft サポート |
| Windows(コマンド) | ipconfig で「デフォルト ゲートウェイ」を見て、その番号に ping |
応答が無ければルーターまでで切れている | Microsoft サポート |
| Mac | メニューバーの Wi-Fi 状況メニューで接続先を選ぶ | Option キーを押しながらクリックすると、IP アドレスとルーターのアドレスが見える | Mac ユーザガイド |
| iPhone・iPad | コントロールセンターの機内モードと Wi-Fi のボタン | Wi-Fi のボタンが淡色(グレイ)なら、すべてのネットワークから切断されている | Apple サポート |
| Android | 画面上部から下にスワイプし、[インターネット]のパネルで接続先を見る | [インターネット]を長押ししてリセット。保存済みネットワークを削除してつなぎ直す | Android ヘルプ |
| Linux | ip -br addr でアドレス、ip route で default の有無 |
default が無ければ外へ出られない(次の節で実物) | この環境で実行 |
Apple の説明では、機内モードの間は(あとから自分でオンにしない限り)Wi-Fi と Bluetooth もオフになるとされています。飛行機の中で Wi-Fi だけを使う場合は、機内モードにしたあと Wi-Fi だけをオンに戻す、という順番になります。
自分で確かめる:オフラインかどうかを1行で調べる
この節では、いま使っている端末とブラウザーがオフラインかどうかを、開発者ツールやターミナルの1行で確かめる方法が分かります。
確かめ方1:ブラウザーの開発者ツールで1行。Chrome や Edge で F12 を押して開発者ツールを開き、Console(コンソール)に次の1行を入れます。
navigator.onLine
false ならブラウザーはオフラインと判断しています。true なら端末の接続はあるので、開けない原因はその先(ルーター・回線・相手のサーバー)にあります。続けて次の1行を入れておくと、Wi-Fi を切ったり戻したりしたときにイベントが表示されます。
['online','offline'].forEach(t => addEventListener(t, () => console.log(t, navigator.onLine)))
確かめ方2:作る側は、開発者ツールでオフラインを再現する。Chrome DevTools の公式の説明では、Network パネルのスロットリングのメニュー(Disable cache の隣)から Offline を選ぶと、完全なオフラインを再現できます。自分のサイトがオフラインでどう見えるかを、回線を切らずに確かめられます。ただし手元の実測では、この再現は 127.0.0.1 宛ての通信まで止めました。本物の回線断では 127.0.0.1 は通るため、ローカルのサーバーを使う開発ではこの違いに注意します。開発者ツールの基本は、関連記事「Chrome DevToolsの使い方|デバッグ手順と便利機能一覧」で扱っています。
確かめ方3:ターミナルで1行(Linux)。外へ出る道があるかを ip route get で確かめます。手元の名前空間で状態ごとに実行した結果です。
$ ip -br addr (S5:つながっているが先が無い)
lo UNKNOWN 127.0.0.1/8
veth-a@if2 UP 10.27.0.2/24
$ ip route get 192.0.2.10
192.0.2.10 via 10.27.0.1 dev veth-a src 10.27.0.2 uid 0
$ ip route get 192.0.2.10 (S4:アドレスはあるが既定ルートなし)
RTNETLINK answers: Network is unreachable
$ ip -br addr (S1:インターフェースが down)
lo UNKNOWN 127.0.0.1/8
veth-a@if2 DOWN
Network is unreachable が返るなら、端末の中で道が無い(オフライン)状態です。道が返るのに通信できないなら、ルーターから先を疑います。Windows では、前の節の表のとおり ipconfig と ping で同じ切り分けができます。ping は通るのにつながらない場合の切り分けは、関連記事「ネットワークの切り分け8選|pingは通るのに繋がらない」で扱っています。
- 1navigator.onLine が false かfalse なら端末の接続が無い
- 2エラー画面の英字が何かDISCONNECTED か NAME_NOT_RESOLVED か
- 3外へ出る道(default)があるかip route・ipconfig のデフォルト ゲートウェイ
- 4別の端末でも同じか同じなら回線・ルーター側
オフラインで使えるアプリの仕組み(サービスワーカーと端末への保存)
この節では、電波が無くても動くアプリや Web サイトが、どういう仕組みでオフラインに対応しているのかが分かります。
オフラインで使えるアプリは、「画面を作るファイル」と「データ」を前もって端末に保存し、通信できないときはその保存から表示し、つながったら送受信(同期)する作りになっています。動画アプリのダウンロード、地図の保存、Google ドキュメントのオフライン設定なども、考え方は同じです。
1画面のファイルを保存する
Web ではサービスワーカーが HTML・CSS・JS を保存し、通信の代わりに返す。スマホアプリは本体に画面が入っている。
2データを保存する
IndexedDB などに記事・メッセージ・地図を保存しておく。オフラインで書いたものも一度ここに入れる。
3つながったら同期する
online イベントなどを合図に、たまった送信を送り、新しいデータを取り込む。競合(両方で編集)の扱いを決めておく。
サービスワーカーの効果を確かめるため、手元で、ページと CSS を保存して「保存にあれば保存から返す」だけの最小のサービスワーカーを登録しました。
self.addEventListener('install', e => {
e.waitUntil(caches.open('v1').then(c => c.addAll(['/sw/', '/sw/app.css'])));
});
self.addEventListener('fetch', e => {
e.respondWith(caches.match(e.request).then(r => r || fetch(e.request)));
});
server online (SW install+reload): ['/sw/ 200', '/sw/app.css 200', '/sw/sw.js 200', '/sw/ 200', '/sw/app.css 200']
SW page offline reload => 200 from_service_worker True SWのページ rgb(0, 102, 204)
SW page offline goto => 200 True
server during offline: []
cache keys ['/sw/', '/sw/app.css']
キャッシュだけのページでは失敗した「オフラインでの再読み込み」が、サービスワーカーのあるページでは 200 で表示でき、CSS の色(rgb(0, 102, 204))も当たっていました。応答はサービスワーカーから返り、サーバーには1本も届いていません。ブラウザー任せのキャッシュは「残っていれば使われる」もの、サービスワーカーは「アプリが何を残すかを決める」ものという違いです。
この記事は「オフラインとは何か」の入口なので、仕組みはここまでにします。サービスワーカーの登録・更新・キャッシュの戦略(キャッシュ優先・ネットワーク優先など)を含む PWA の作り方は、関連記事「PWAの作り方|Service Worker最小コードとキャッシュ戦略一覧」で扱っています。チャットのように常に接続を保つ仕組みで、切れたときにつなぎ直す作り方は、関連記事「Node.js WebSocket実装|ws・再接続・認証・nginxまで」で扱っています。
利用者の立場で使うオフライン機能の例として、Google の公式ヘルプでは、Google ドキュメント・スプレッドシート・スライドをオフラインで使う条件が次のように説明されています。
- 対応ブラウザーは Google Chrome と Microsoft Edge で、シークレットモード(プライベート ブラウジング)では使えない
- 「Google オフライン ドキュメント」拡張機能を入れて有効にする
- Google ドライブの設定(右上の歯車 > 設定)で「オフライン」を有効にする。有効にする操作はインターネットにつながった状態で行う
「オフラインになってから設定しようとしても間に合わない」のは、このように多くのオフライン機能がオンラインのうちに準備しておく作りだからです。
開発作業とオフライン(npm・pip・git の実物)
この節では、プログラミングの作業がオフラインのときにどこで止まり、どこまでなら進められるのかが分かります。
回線の無い名前空間(S1)で、よく使う開発の道具を動かしました。
$ npm install left-pad --offline
npm error code ENOTCACHED
npm error request to https://registry.npmjs.org/left-pad failed: cache mode is 'only-if-cached' but no cached response is available.
$ npm install left-pad --fetch-retries=0
npm error code EAI_AGAIN
npm error syscall getaddrinfo
npm error request to https://registry.npmjs.org/left-pad failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org
$ python3 -m pip download --no-index -d w requests
ERROR: Could not find a version that satisfies the requirement requests (from versions: none)
ERROR: No matching distribution found for requests
$ git commit -qm first && git log --oneline
945d472 first
$ git push origin HEAD
fatal: unable to access 'https://github.com/example/repo.git/': Could not resolve host: github.com
| 作業 | オフラインでの結果 | 進める方法 |
|---|---|---|
| npm install | EAI_AGAIN(名前を調べられない)。--offline なら ENOTCACHED |
オンラインのうちに一度入れてキャッシュを作る。--offline はキャッシュにあるものだけで入れる |
| pip install | from versions: none |
オンラインのうちに pip download でファイルを集め、--no-index --find-links で入れる |
| git commit・log・branch | できた | 手元のリポジトリで完結するため、オフラインでも進められる |
| git push・pull | Could not resolve host |
つながってからまとめて送る |
npm は、回線が無いときに名前を調べる段階(getaddrinfo)で失敗し、--fetch-retries=0 を付けないと再試行で長く待たされました。インターネットにつながらない社内のサーバーに導入する「オフラインインストール」は、この表の右の列のように、つながる場所で必要なファイルを集めてから持ち込む手順になります。
意味が違う「オフライン」(オフ会・ゲーム・広告・編集・プリンター・Outlook)
この節では、ネットワークの話以外で使われる「オフライン」と、機器やソフトの「オフライン」表示の意味が分かります。
| 言葉 | 意味 | 補足 |
|---|---|---|
| オフ会・オフラインミーティング | ネットで知り合った人が、実際に集まって会うこと | 「オフラインの会」を縮めた言い方 |
| オフラインイベント | 会場に集まって開く催し | オンライン配信と両方で開くものはハイブリッド開催と呼ばれる |
| オフラインゲーム・オフラインモード | ネット対戦をせず、1台で遊ぶこと | オンライン専用のゲームでは、オフラインだと起動できないものもある |
| オフライン広告 | チラシ・看板・テレビなど、ネット以外の広告 | ネットと店舗をつなぐ考え方に O2O・OMO がある |
| オフライン編集 | 映像の本番の仕上げの前に行う仮編集 | 映像制作の用語。ネットワークとは関係ない |
| プリンターがオフライン | パソコンがプリンターと通信できない状態 | キヤノンの説明では「プリンターをオフラインで使用する」のチェックが原因のこともある |
| Outlook のオフライン作業 | メールの送受信を止めて手元だけで作業する状態 | クラシック Outlook は「送受信」タブの「オフライン作業」で切り替え。ステータス バーに表示される |
Microsoft の説明では、クラシック Outlook の「オフライン作業」はすべてのメール アカウントに適用され、オフライン作業中は画面下のステータス バーに「オフライン作業」と表示されます。同じボタンをもう一度押すとオンラインに戻ります。回線が本当に切れている場合は「ステータス: 切断中」と出るため、表示の文言で「自分で切り替えたのか」「回線が切れたのか」を見分けられます。新しい Outlook では、設定 > 全般 > オフライン に、オフラインでメール・予定表・ユーザーを使えるようにする切り替えがあります。
プリンターについては、キヤノンの説明で、Wi-Fi のつながり(プリンターの画面の Wi-Fi のアイコン)・電源の入れ直し・通常使うプリンターの設定・「プリンターをオフラインで使用する」のチェック・ドライバーの入れ直し、の順に確かめる手順が示されています。ほかのメーカーの手順は、それぞれのマニュアルで確かめます。
オフラインでよくあるエラーとつまずき(作る側)
この節では、Web サイトやアプリを作る側が、オフラインの扱いでつまずきやすい点と直し方が分かります。
| 症状・エラー原文 | 原因 | 直し方 |
|---|---|---|
onLine が true なのに fetch が固まる |
端末はつながっているが先で止まっている(実測の S5)。onLine は先を見ていない | fetch に時間制限(AbortSignal.timeout など)を付け、失敗を通信不可として扱う |
TypeError: Failed to fetch がオフラインかどうか分からない |
オフライン・CORS・接続拒否で同じ例外になる | 例外の時点で navigator.onLine を見て、表示する文言を分ける |
| 開発者ツールの Offline で 127.0.0.1 の API まで止まる | 再現はブラウザーの通信をすべて止める。本物の回線断では 127.0.0.1 は通った | ローカルのサーバーの動作確認は、再現をオフにして行う |
オフラインで再読み込みすると ERR_INTERNET_DISCONNECTED |
再読み込みはキャッシュが期限内でもサーバーに確かめに行く | オフラインでも開かせたいページはサービスワーカーで返す |
| オフラインの間に書いた内容が消えた | 送信が失敗した時点で入力を捨てていた | localStorage・IndexedDB に一度保存し、online で送り直す |
| オフラインの表示が出たまま消えない | offline イベントだけを見て、online イベントを見ていない | 両方のイベントを登録し、表示を切り替える |
npm error code ENOTCACHED |
--offline でキャッシュに無いパッケージを入れようとした |
オンラインで一度入れてから、オフラインで使う |
オフラインの表示を作るときは、次のような書き方が基本です。navigator.onLine の false は信用し、true のときは実際の通信の成否で判断します。
async function send(data) {
if (!navigator.onLine) return saveForLater(data); // false はオフラインとみなしてよい
try {
const r = await fetch('/api', { method: 'POST', body: JSON.stringify(data),
signal: AbortSignal.timeout(5000) });
if (!r.ok) throw new Error(r.status);
} catch (e) {
saveForLater(data); // true でも失敗はありうる
}
}
addEventListener('online', flushSaved); // つながったら送り直す
判断表:オフラインにどこまで対応するか
この節では、Web サイトやアプリを作るときに、オフラインにどこまで対応するかを決める目安が分かります。
- 1最低限:オフラインと分かる表示を出すoffline・online イベントで帯を出す。送信ボタンを押せないようにする
- 2入力を失わない書きかけを端末に保存し、つながったら送り直す
- 3一度見た画面はオフラインでも開けるサービスワーカーで画面のファイルを保存する
- 4オフラインで作業を続けられるデータも端末に持ち、つながったら同期する。競合の扱いを決める
| アプリの種類 | 向く段階 | 理由 |
|---|---|---|
| 会社や店の紹介サイト | 1(ブラウザーの標準のエラー画面でも困りにくい) | 読む人はオンラインで来る。作り込む利点が小さい |
| 問い合わせ・申し込みフォーム | 2 | 長い入力が消えると、利用者の負担が大きい |
| マニュアル・社内文書の閲覧 | 3 | 電波の弱い場所・移動中でも読みたい |
| 点検・在庫・営業の記録アプリ | 4 | 電波の届かない倉庫・地下・山間部で入力する |
| 決済・予約の確定 | 1〜2(確定はオンラインだけ) | 二重の確定を避けるため、オフラインでは確定させない |
段階を上げるほど作る手間と確かめる手間が増えます。「どこで・誰が・どれくらいの時間オフラインになるか」を先に決めると、必要な段階が決まります。
よくある質問
Q. オフラインとオンラインの違いを一言で言うと? A. ネットワークにつながっているかどうかです。つながっていてほかの機器やサーバーとやり取りできればオンライン、つながっておらず端末の中だけで動いていればオフラインです。
Q. オフラインになると何ができなくなりますか? A. 新しいページを開く、送信する、ログインする、同期する、のようにサーバーとのやり取りが要る操作です。ダウンロード済みの動画や地図、端末内の文書の編集はそのまま使えます。手元の実測では、localStorage と IndexedDB への保存もオフラインで読み書きできました。
Q. Wi-Fi はつながっているのに「オフライン」と出ます。 A. ルーターから先(回線・プロバイダー)が止まっている、またはアプリ側の設定やサーバーの障害が考えられます。別の端末でも開けないならルーターとモデムを再起動し、1つのアプリだけならそのアプリの設定を確かめます。逆に、ブラウザーが「オンライン」と判断していても外に出られない状態は、手元の実測で再現できました。
Q. 機内モードとオフラインは同じですか? A. 機内モードは端末の電波をまとめて止める機能で、オンにするとその端末はオフラインになります。Apple の説明では、機内モードの間でも Wi-Fi をあとからオンにでき、その場合は Wi-Fi 経由でオンラインになります。オフラインは状態の名前、機内モードはその状態にする手段の1つです。
Q. オフラインのときに再読み込み(F5)してもよいですか? A. 見ていたページが消えることがあります。手元の実測では、リンクで開けばキャッシュから表示できたページが、再読み込みでは ERR_INTERNET_DISCONNECTED になりました。回線が戻ってから再読み込みするのが確実です。
Q. navigator.onLine だけでオフライン判定をしてよいですか? A. false のときはオフラインとみなせますが、true のときはインターネットにつながるとは限りません。手元では、IP アドレスが付いただけで外へ出る道が無い状態でも true になりました。実際の通信に時間制限を付け、その成否と組み合わせて判断します。
Q. オフラインの恐竜の画面は何ですか? A. Chrome などで、オフラインのときにページを開くと出るエラー画面です。手元の Chromium では、見出しに Space キーでゲームを始める案内、下に「ERR_INTERNET_DISCONNECTED」というエラーコードが出ました。コードが ERR_NAME_NOT_RESOLVED などに変わる場合は、端末はつながっていて、その先で止まっています。
Q. オフ会のオフはオフラインのことですか? A. はい。オフ会は「オフラインの会」を縮めた言い方で、ネット上で知り合った人が実際に会う集まりを指します。ネットワークの接続とは関係ありません。
Q. 「オフラインで使える」アプリはどうやって動いているのですか? A. 画面を作るファイルとデータを前もって端末に保存し、通信できないときはその保存から表示しています。Web ではサービスワーカーがこの役目を担います。手元の最小のサービスワーカーでも、オフラインの再読み込みで 200 を返せました。多くはオンラインのうちに準備が要るため、出かける前に設定やダウンロードを済ませておきます。
Q. プリンターがオフラインになったときは? A. パソコンとプリンターが通信できていない状態です。キヤノンの説明では、プリンターの Wi-Fi のつながり、電源の入れ直し、通常使うプリンターの設定、「プリンターをオフラインで使用する」のチェックを外す、ドライバーの入れ直し、の順に確かめます。
まとめ
- オフラインとは、端末がネットワークにつながっていない状態。オンラインはその反対。ふだんの会話では「ネットの外で直接」という意味(オフ会・オフライン広告)でも使う。
- オフラインでは、サーバーとのやり取りが要る操作が止まる。手元の実測では、オフライン中にサーバーへ届いた通信は0本で、max-age 付きで保存済みのファイルと localStorage・IndexedDB だけが使えた。
- オフラインでの再読み込みは、期限内のキャッシュがあっても ERR_INTERNET_DISCONNECTED になった。サービスワーカーで保存したページは 200 で表示できた。
- navigator.onLine は端末の接続までしか見ていない。IP アドレスが付いただけで外へ出られない状態でも true になり、エラーは ERR_NAME_NOT_RESOLVED や時間切れに変わった。
- 直すときは、機内モードと Wi-Fi → 別の端末で比べる → ルーターの再起動 → エラーの名前で切り分け、の順。自分では
navigator.onLineとip route get(Windows はipconfigとping)で確かめられる。
参考・出典
確認日はいずれも 2026年10月29日です。
- MDN「Navigator: onLine プロパティ」:https://developer.mozilla.org/ja/docs/Web/API/Navigator/onLine
- Chrome for Developers「Network features reference」(Offline の再現):https://developer.chrome.com/docs/devtools/network/reference
- Microsoft サポート「Fix Wi-Fi connection issues in Windows」(Windows の Wi-Fi 接続の問題の解決):https://support.microsoft.com/help/10741
- Microsoft サポート(Windows 用 Outlook でオフラインで作業する方法):https://support.microsoft.com/ja-jp/outlook/getstarted/how-to-work-offline-in-outlook-for-windows
- Apple サポート「コントロールセンターでBluetoothとWi-Fiを使う」:https://support.apple.com/ja-jp/102412
- Apple「Mac ユーザガイド」MacでWi-Fi状況メニューを使用する:https://support.apple.com/ja-jp/guide/mac-help/mchlfad426fa/mac
- Android ヘルプ「Android デバイスを Wi-Fi ネットワークに接続する」:https://support.google.com/android/answer/9075847?hl=ja
- Google ドキュメント エディタ ヘルプ「オフライン時に Google ドキュメント、スプレッドシート、スライドで作業する」:https://support.google.com/docs/answer/6388102?hl=ja
- キヤノン インクジェット マニュアル「オフラインになる(Windows)/通信できない(Windows)」:https://ij.manual.canon/ij/webmanual/Manual/All/TR160%20series/JP/NTR/ntr_t_03_17.html
- IETF「RFC 5737 IPv4 Address Blocks Reserved for Documentation」(192.0.2.0/24):https://www.rfc-editor.org/rfc/rfc5737
- Weblio 辞書「オフライン」(デジタル大辞泉ほか):https://www.weblio.jp/content/OFFLINE
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「オフラインとは?意味とオンラインとの違い|onLineの落とし穴を実測」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。