Testing Files Generator
日本語

正確なサイズのファイルを作る方法

どのOSにもそのためのコマンドがあり、3つとも以下に載せています。正確なバイト数のファイルが作れ、多くのテストではそれで十分です。このページのコマンドはすべて、公開前に対応するOS上で実行しました。

短い答え

Windows:fsutil file createnew name 10485760。Linux:dd if=/dev/zero of=name bs=1M count=10。macOS:mkfile 10m name。サイズはバイトで指定し、ファイルマネージャーの数え方での10MBは10485760です。

Windows

fsutilと、追加不要のPowerShell版

fsutilはWindowsに付属しています。サイズはバイト単位で指定するため、先に数値を計算してください。10MBは10485760、100MBは104857600、1GBは1073741824です。

fsutil file createnew test10mb.bin 10485760

Windows 11で実測しました。通常のプロンプトから実行でき、管理者権限は不要で、ファイルはちょうど10485760バイトになります。

PowerShellは別のプログラムを呼び出さずに同じことができ、単位も理解します。

$file = New-Object System.IO.FileStream "test10mb.bin", Create, ReadWrite
$file.SetLength(10MB)
$file.Close()

PowerShellの10MBは、エクスプローラーと同じ1024基準の数え方で10485760バイトを意味するため、上の2つのコマンドは同じサイズになります。

Linux

dd、truncate、fallocate、そして人がつまずく違い

ddは誰もが知っているコマンドです。実際にバイトを書き込みます。

dd if=/dev/zero of=test10mb.bin bs=1M count=10

truncateは一瞬で終わりますが、そこが落とし穴です。Alpine Linuxで実測すると、ファイルは10485760バイトと報告されるのに、占有するのは0ブロックで、スパースファイルになっています。読み込むものには10メガバイトのゼロが返りますが、ディスクは領域を実際には確保していません。

truncate -s 10M test10mb.bin

アップロード制限のテストには問題ありませんが、ディスク容量の制限のテストでは誤解を招きます。領域が実際に必要なときはfallocateを使います。

fallocate -l 10M test10mb.bin

圧縮できない内容が必要で、アーカイバーが再び小さくできないようにしたいときは:

head -c 10485760 /dev/urandom > test10mb.bin

macOS

スパースではないmkfileと、すでにご存じの2つ

macOSにはmkfileが付属しています。macOS 26.6.2で実測したところ、10485760バイトで20480ブロックでした。領域は約束だけでなく実際に確保されています。

mkfile 10m test10mb.bin

ddとtruncateもあり、Linuxと同じように動作します。

dd if=/dev/zero of=test10mb.bin bs=1m count=10
truncate -s 10M test10mb.bin

これが通用しなくなる場所

正しいサイズのファイルは、正しい種類のファイルではありません

上記はどれも、ゼロのかたまりを作ります。テスト対象がサイズだけを見る場合、たとえばアップロード制限、割り当て、転送なら、それで十分です。何かがそのファイルを開いた瞬間に、十分ではなくなります。

実測しましたので、ぜひご自身でも試してください。fsutilで2MBのファイルを作り、photo.pngという名前を付けて、画像ライブラリに渡します。Pillowはcannot identify image fileと答えます。それはPNGではありません。最初からそうではなく、名前がそう言っていただけです。

これは見た目以上に重要です。テストがどちらの向きで失敗するかが関わるからです。アップロードのエンドポイントがファイルを拒否し、テストが緑になり、サイズ制限は機能していると結論します。しかし、サイズが理由で拒否したのではありません。バイトが画像ではなかったから拒否したのであり、テストしたかったルールには届いていません。

もう1つの方法

その形式の本物のファイルを、要求したとおりのサイズで

これがTesting Files Generatorの役割です。ファイルはその形式の本物で、対応するソフトウェアで開け、要求したバイト数とぴったり一致します。

tfg generate --format png --size 10mb --out ./fixtures

形式が到達できないサイズを要求すると、下限とその理由を示すエラーが返り、サイズの違うファイルが作られることはありません。形式ページに、各形式と、生成できる最小のファイルを載せています。

そして制限は1つではなく3つのテストケースなので、ツールは3つとも作ります。

tfg generate --format pdf --boundary 10mb --out ./edges

10485759、10485760、10485761バイトのファイルと、システムがどれを受け入れどれを拒否するべきかを示すマニフェストが得られます。利用例のページでは、これと、このツールが想定する他の4つの用途を紹介しています。

無料のオープンソース、GPL-3.0。登録は不要です。WindowsとmacOS向けのダウンロードは署名済みで、警告なしで起動します。

では、どちらを使うべきでしょうか。

どちらも状況によって正しいため、このページに両方載せています。避けるべき間違いは、後者が必要な場面で前者を使い、緑になったテストを証明と受け取ることです。