Microsoft Windows BITSとは?バックグラウンドインテリジェント転送サービスの仕組みと活用方法を徹底解説
Microsoft Windowsのバックグラウンドインテリジェント転送サービス(BITS:Background Intelligent Transfer Service)は、Windows OSに標準搭載されているサービスで、HTTP(Hypertext Transfer Protocol)WebサーバーやSMB(Server Message Block)ファイルサーバーとの間でファイルのダウンロード・アップロードを行うことができます。
BITSは、ネットワークのアイドル帯域(未使用の帯域幅)を利用して、バックグラウンドまたはフォアグラウンドでファイル転送を実行します。これにより、ユーザーの前面操作への影響を最小限に抑えられます。なお、このサービスを無効化すると、BITSに依存するすべてのアプリケーションがプログラムや重要情報を自動ダウンロードできなくなります。
BITSの基本的な仕組み
BITSは、使用されていないアイドル帯域を活用し、HTTP WebサーバーやSMBファイルサーバーとの間でファイルのダウンロードやアップロードといった転送処理を実行します。クライアントマシンとサーバー間のファイル転送は非同期で行われ、フォアグラウンドまたはバックグラウンドで動作します。つまり、アプリケーションがBITSにファイル転送を要求した後も、アプリケーション側は他のタスクを自由に実行できます。
BITSには、転送ジョブの作成・管理用のPowerShellコマンドレットや、ダウンロード/アップロードジョブの作成と進捗監視が可能なBITSAdminコマンドラインユーティリティが含まれています。さらに、キュー管理機能も備えており、アプリケーションからのファイル転送要求に優先順位を付けることが可能です。
ネットワークに障害や中断が発生した場合でも、BITSは自動的に再接続し、ネットワークやマシンの復旧後にファイル転送を再開します。再起動後であっても転送を一時停止・再開できるほか、マシンが電源に接続されモダンスタンバイ(Modern Standby)モードの状態でもファイル転送を行い、消費電力にも配慮した動作を実現します。
BITSジョブのライフサイクル
BITSジョブとは、HTTP WebサーバーやSMBファイルサーバーとの間で転送される1つ以上のファイルを格納するコンテナです。ジョブには、BITSがファイルをどのように転送し、アプリケーションとどう連携するかを指定するプロパティが設定されます。
ジョブのライフサイクルは作成から始まります。この段階で、ユーザーはジョブの優先度、アップロードかダウンロードかの種別、通知を受け取りたいイベントなどを指定します。ジョブ作成後、ファイルを追加できます(アップロードジョブの場合は最大1ファイル)。また、アプリケーションに応じてジョブプロパティを変更することも可能です。ジョブにファイルを追加する際は、ファイルのローカル名(クライアント側)とリモート名(サーバー側)を必ず指定する必要があります。
ジョブが作成されると、BITSは自動的にそのジョブを一時停止(SUSPENDED)状態にします。ユーザーがジョブを再開すると、転送キュー内でアクティブになり、一時停止状態から待機(QUEUED)状態へ移行します。ジョブはBITSスケジューラが転送順番と判断するまで待機状態のままとなり、その後接続中(CONNECTING)状態に移行してBITSがリモートサーバーに接続します。続いて転送中(TRANSFERRING)状態となり、以下の4つの条件のいずれかが発生するまでこの状態が維持されます。
- タイムスライス(割り当て時間)が終了した
- 転送が完了した
- エラーが発生した
- アプリケーションがジョブを一時停止した
BITSがジョブ内の全ファイルの転送を完了すると、ジョブは転送済み(TRANSFERRED)状態に移行します。ただし、転送されたファイルがクライアントで利用可能になるのは、アプリケーションがIBackgroundCopyJob::Completeメソッドを呼び出し、ファイルの所有権がBITSからユーザーに移譲されたタイミングです。
BITSがユーザー体験を守る仕組み
BITSは、利用可能なアイドル帯域に応じてファイル転送速度を動的に調整します。他のアプリケーションがより多くの帯域を消費し始めると、BITSは自動的に転送レートを下げることで、ユーザーの全体的な体験を維持し、バックグラウンド転送を最適な状態に保ちます。
ファイル転送を開始したユーザーがネットワークにログオンし続け、ネットワーク接続が維持されている限り、BITSはアプリケーション自体が終了してもファイル転送を継続します。一方、接続が切断されたりユーザーがログオフしたりしても、BITSは無理に接続を強制しません。代わりにまず転送ジョブを一時停止し、接続の復旧後またはユーザーの再ログオン後に転送を再開します。
BITSは常に、ファイル転送のコスト、ネットワーク使用量、ネットワーク混雑状況を考慮します。また、アプリケーションが指定した転送ポリシーを利用して、従量制のネットワーク接続でのファイル転送を防止します。こうした配慮は、コストが急激に増大しうるローミングネットワーク環境では特に重要です。さらにBITSは、ユーザーのフォアグラウンド作業への影響や干渉を最小限に抑えることで、システム利用時の快適な体験を支えています。
BITSの主な用途
BITSは、HTTP WebサーバーやSMBファイル共有との間でファイルをダウンロード・アップロードしたいシステム管理者にとって特に有用です。加えて、C、C++、.NETプログラマにとって便利なComponent Object Model(COM)インターフェースも提供しています。なお、MicrosoftはUniversal Windows Platform(UWP)開発者に対してはBITS APIの使用を推奨しておらず、代わりにWindows.Networking.BackgroundTransfer APIを使用すべきとしています。
Windows自体も、更新プログラムをユーザーのローカルシステムにダウンロードする際にBITSを利用しています。その他多くのアプリケーションもBITSを使用しており、例えばHTTPまたはREST(representational state transfer)WebサーバーやSMBファイルサーバーとの間でファイルをやり取りする必要があるアプリケーションなどが該当します。また、ネットワーク切断後やコンピュータ再起動後にファイル転送を自動的に再開する必要があるアプリケーションもBITSを活用しています。さらに、一部のWindowsおよびWindows Server OSエディションに含まれるWAN最適化技術「BranchCache」と組み合わせれば、WANトラフィックの最適化にも利用できます。
管理者はMicrosoft Windows BITSを活用してWANトラフィックを管理できます。
BITSの転送ジョブの種類とジョブ状態
BITSは次の3種類の転送ジョブをサポートしています。
- ダウンロードジョブ: クライアントへファイルをダウンロードします。すべてのファイルはフォアグラウンドまたはバックグラウンドで非同期に転送されます。
- アップロードジョブ: クライアントからサーバーへファイルをアップロードします。
- アップロード応答ジョブ: まずサーバーへファイルをアップロードし、その後、アップロード完了を示す応答ファイルをサーバーアプリケーションから受け取ります。
BITSジョブは4つの状態クラスのいずれかに属します。
- 開始(Starting): 既定ではSUSPENDED(一時停止)状態です。この状態では、ジョブへのファイル追加やジョブ・ファイルのプロパティ設定が可能です。
- アクション(Action): QUEUED(待機)、CONNECTING(接続中)、TRANSFERRING(転送中)など、ジョブの現在の内部動作を示す複数の状態があります。また、ファイル転送に失敗したことを示すTRANSIENT ERROR(一時的エラー)状態も含まれます。
- 転送済み(Transferred): 転送が成功し、それ以上の転送処理がない場合の状態です。
- 最終(Final): ジョブがACKNOWLEDGED(承認済み)となり、完了したダウンロードファイルがすべて利用可能になった状態です。
BITSジョブは実行中、各状態クラス間を遷移していきます。しかし、一度最終状態に達すると、その状態から抜け出すことはなく、状態を変更するメソッドを呼び出すこともできません。また、ジョブ列挙の結果にも表示されなくなります。エラーが発生した場合、ジョブは致命的エラー状態(BITSでは回復不能)か、一時的エラー状態(エラーが自己解決する可能性があり、BITSは転送が成功するか、アプリケーションが指定した期間内にジョブがタイムアウトするまで再試行を続ける)に移行します。一時的エラー状態でジョブがタイムアウトすると、BITSはそれを致命的エラー状態へ移行させます。
BITSの優先度レベル
BITSは、どの転送ジョブをいつ実行するかをインテリジェントに選択できます。これは、アプリケーションが異なる優先度レベル(フォアグラウンド用1つ、バックグラウンド用3つ)を利用できるためです。優先度レベルによって、転送キュー内の他のジョブと比較していつジョブが処理されるかが決まります。
- 優先度の高いジョブは、優先度の低いジョブより先に処理されます。
- 優先度の低いジョブは、すべての高優先度ジョブの転送が完了するか、エラー状態になるまで転送時間を割り当てられません。
- 同じ優先度レベルのジョブは転送時間を共有するため、大きなジョブが転送キューを塞いで遅延を引き起こすことはありません。
同一優先度レベルのジョブをスケジューリングする際、BITSはラウンドロビン方式を採用し、各ジョブにファイル処理用の時間スライスを与えます。特定のジョブが割り当てられた時間スライス内で完了しなかった場合は、自動的に待機状態に戻り、キュー内の次のジョブがFIFO(先入れ先出し)方式で起動されます。なお、BITSはFIFO処理を保証しているわけではなく、あくまでベストエフォートである点に注意が必要です。
Windows BITSはラウンドロビンスケジューリングにより、同一優先度レベルのジョブをスケジューリングします。
BITS 1.5以前では、フォアグラウンドジョブがバックグラウンドジョブよりも優先されていました。実際、フォアグラウンドジョブは最高優先度であり、BITSは一度に1つのジョブしか処理しませんでした。後のバージョンでは複数のフォアグラウンド転送を同時に実行できるようになりましたが、同一ジョブ内の複数ファイルは常に逐次的(シリアル)に転送されます。
BITSの歴史とバージョン変遷
MicrosoftはBITSを何度もアップデートしてきました。主な沿革は以下の通りです。
- BITS 1.0: 2001年、Windows XPで初めて導入されました。
- BITS 1.2: 2002年半ばに登場し、Windows 2000にAutomatic Updatesサービスを追加しました。
- BITS 1.5: 2003年末にWindows Server 2003とともに提供され、コマンドラインサポート、アップロード機能の拡充、セキュリティ強化をもたらしました。
- BITS 2.0: 2004年半ばに複数OS向けアップデートとしてリリースされ、ダウンロード機能の拡張、帯域幅スロットリング、SMBサポートが追加されました。
- BITS 2.5: 2007年半ばにリリースされ、IPv6対応、カスタムHTTPヘッダーのサポート、HTTPセキュリティの向上が図られました。
- BITS 3.0: Windows VistaおよびWindows Server 2008に同梱され、ピアキャッシング、通知、一時ファイルアクセス、HTTPリダイレクト処理、追加のグループポリシー制御、イベントログ機能が追加されました。
- BITS 4.0: 2009年半ばにWindows 7およびWindows Server 2008 R2とともにリリースされ、トークンベースのセキュリティ、スタンドアロンファイルサーバー機能、洗練された帯域幅スロットリング、改訂版ピアキャッシングが導入されました。
- BITS 5.0: 2016年半ばにWindows 10に同梱され、バックグラウンドコピージョブの改善、旧式バックグラウンドコピージョブのサポート、APIおよびPowerShellコマンドレット経由でのBITS利用が可能になりました。
- BITS 10.1: Windows 10 version 1703(Creators Update)の一部として、ダウンロードおよび通知機能が改良されました。
- BITS 10.2: Windows 10 October 2018 Updateの一部として、既定のプロキシ順序付け、モダンスタンバイ対応、モバイルデバイスマネージャーポリシーおよびグループポリシーのサポートが追加されました。
- BITS 10.3: Windows 10 May 2019 Updateの一部として、HTTPヘッダーの書き込み専用マーク機能とサーバー証明書検証コールバックが有効化されました。
関連情報として、PowerShellによるFTPスクリプトでのファイルアップロード・ダウンロード方法や、企業向けの安全なファイル転送サービスについてもぜひご確認ください。
-
Mac版切り抜きツール(Snipping Tool)の決定版!おすすめ代替アプリ5選
Windows 7以降、Microsoftはデスクトップのカスタムスクリーンショットを簡単に撮影できる「Snipping Tool(切り抜きツール)」を標準搭載してきました。このツールに慣れ親しんだ状態でMacに乗り換えると、「MacにSnipping Toolのようなものはないの?」と疑問に感じる方も多いでしょう。実は、Macにも同等のツールが豊富に存在します。Windowsと同様、シンプルながら高性能な標準ツールが用意されているほか、多機能なサードパーティ製アプリも数多くラインナップされています。ただしmacOSでは「切り抜きツール」ではなく、一般的に「スクリーンショットユーティリティ」と
-
OS X活用術:辞書アプリから不要な辞書・参照ソースを削除して使いやすくする方法
OS Xに標準搭載されている「辞書」アプリは、調べものの際に非常に便利なリファレンスツールです。しかし、初期設定では英語や日本語以外の外国語辞書も多数含まれており、普段ほとんど使う機会のない辞書まで一覧に表示されてしまいます。 こうした不要な辞書が検索結果の邪魔になると感じたら、環境設定から簡単に無効化できます。この記事では、その手順をわかりやすく解説します。 辞書アプリで表示する辞書を選択する手順 まず「辞書」アプリを起動します。 メニューバーの「辞書」→「環境設定…」を選択します。 設定ウィンドウには、アプリ内で表示できる辞書や参照ソースの一覧が表示されます。使いたい辞書にはチェック