English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
イントロダクション
Faker Storageは、大量の偽データファイルを効率的に生成および保存するために設計された高性能なPHPパッケージです。並行処理を考慮して構築されており、SwooleまたはPCNTLを活用して、数千のファイルを並行して生成することができるため、負荷テスト、開発環境、およびストレージシステムのベンチマークに最適です。
このパッケージは、画像(PNG、JPG、GIF、BMP、WEBP、AVIF)、テキストファイル、CSVファイル、バイナリデータ、およびRFC822準拠のメールなど、さまざまなファイルタイプを生成するための流暢なAPIを提供します。各ジェネレーターは、シードに基づいて決定的な出力を生成し、環境を超えて再現可能なテストデータを保証します。
主な特長
- 高性能の並行処理: 並行ファイル生成のためにSwoole(コルーチン)とPCNTL(プロセスフォーク)の自動選択
- 複数のファイルジェネレーター: 画像、テキスト、CSV、バイナリ、メールファイルのビルトインサポート
- 決定論的な出力: シードベースの生成により再現可能な結果を保証
- 柔軟なストレージ: どんなLeague Flysystemアダプター(ローカル、S3など)とも動作
- カスタマイズ可能なファイル名: 完全な制御を伴うクロージャベースの名前生成
- 画像サポート: 設定可能な寸法と圧縮を持つ複数のフォーマット
- メール生成: 添付ファイルおよびMIMEサポートを含むRFC822準拠のメール
サンプル
use DefectiveCode\Faker\Faker;use League\Flysystem\Filesystem;use DefectiveCode\Faker\Generators\Png;use League\Flysystem\Local\LocalFilesystemAdapter; // 1000のPNG画像を10の同時作業者で生成Faker::make(Png::class) ->width(800, 1920) ->height(600, 1080) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage'))) ->basePath('images') ->count(1000) ->concurrency(10) ->seed(42) ->generate(); // CSVファイルを生成use DefectiveCode\Faker\Generators\Csv; Faker::make(Csv::class) ->columns(5, 10) ->rows(100, 500) ->delimiter(',') ->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage'))) ->count(50) ->generate(); // 添付ファイル付きのメールを生成use DefectiveCode\Faker\Generators\Email; Faker::make(Email::class) ->paragraphs(3, 5) ->sentences(2, 4) ->withAttachment(Png::class, 1, 3) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage'))) ->count(100) ->generate();
インストール
Composer経由でパッケージをインストールします:
composer require defectivecode/faker-storage
要件
- PHP >= 8.4
- ext-gd(画像生成用)
- ext-swoole(オプション、パフォーマンス向上のため)
- ext-pcntl(並行処理のフォールバック)
オプション依存関係
最適なパフォーマンスのために、Swoole拡張をインストールします:
pecl install swoole
パッケージは利用可能な場合、自動的にSwooleを使用し、そうでない場合はPCNTLにフォールバックします。
使用法
基本的なワークフロー
すべてのジェネレーターは同じパターンに従います:
- ジェネレーターを持つFakerインスタンスを作成
- ジェネレーターを設定(オプション)
- 保存先を設定
- 並行処理とカウントを設定
- ファイルを生成
use DefectiveCode\Faker\Faker;use League\Flysystem\Filesystem;use DefectiveCode\Faker\Generators\Text;use League\Flysystem\Local\LocalFilesystemAdapter; Faker::make(Text::class) ->paragraphs(5, 10) // ジェネレーター特有の設定 ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage'))) ->basePath('documents') // ファイルは/storage/documents/に保存されます ->count(100) // 100ファイル生成 ->concurrency(4) // 4の作業者を使用 ->seed(123) // 決定論的出力のため ->generate();
ストレージ設定
Flysystemを使用する
Faker Storageは、League Flysystemをストレージ抽象化に使用します:
use League\Flysystem\Filesystem;use League\Flysystem\Local\LocalFilesystemAdapter; // ローカルストレージ$filesystem = new Filesystem(new LocalFilesystemAdapter('/path/to/storage')); Faker::make(Png::class) ->toDisk($filesystem) ->generate();
AWS S3ストレージ
use Aws\S3\S3Client;use League\Flysystem\Filesystem;use League\Flysystem\AwsS3V3\AwsS3V3Adapter; $client = new S3Client([ 'credentials' => [ 'key' => 'your-key', 'secret' => 'your-secret', ], 'region' => 'us-east-1', 'version' => 'latest',]); $adapter = new AwsS3V3Adapter($client, 'your-bucket-name');$filesystem = new Filesystem($adapter); Faker::make(Png::class) ->toDisk($filesystem) ->basePath('uploads/images') ->generate();
ディスクオプション
ファイルシステムアダプターに追加オプションを渡します:
Faker::make(Png::class) ->toDisk($filesystem) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', 'CacheControl' => 'max-age=31536000', ]) ->generate();
並行処理設定
concurrency()メソッドで並行実行を制御します:
// 10の作業スレッド/プロセスを使用Faker::make(Png::class) ->concurrency(10) ->generate(); // Swoole特有: スレッドごとにスレッドとコルーチンを設定Faker::make(Png::class) ->concurrency(threads: 4, coroutines: 8) // 4作業者、各スレッドで8コルーチン ->generate();
ファイル命名
デフォルト名付け
デフォルトでは、ファイルはUUID v4を使用して名前が付けられます:
// 生成されます: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.pngFaker::make(Png::class)->generate();
内蔵名生成器
use DefectiveCode\Faker\NameGenerator; // UUIDベース(デフォルト)NameGenerator::setDefault('uuid'); // 生成します: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png // 逐次番号NameGenerator::setDefault('sequence'); // 生成します: 1.png, 2.png, 3.png, ...
カスタム命名
クロージャを提供してファイル名をカスタマイズします:
use DefectiveCode\Faker\NameGenerator; // カスタムクロージャFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "custom-{$completedFiles}-{$seed}.png"; }) ->generate(); // 日付ベースの命名Faker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return date('Y/m/d') . "/image-{$completedFiles}.png"; }) ->generate();
再現性のためのシーディング
シードを設定して、実行ごとに同じファイルを生成します:
Faker::make(Png::class) ->seed(42) ->count(10) ->generate();
各ファイルには、基本のシードとファイルインデックスから派生した一意の決定論的シードが付与されます。
ジェネレーター
画像ジェネレーター
すべての画像ジェネレーターは、寸法と品質の設定をサポートしています。
PNG
use DefectiveCode\Faker\Generators\Png; Faker::make(Png::class) ->width(800, 1920) // 800-1920pxの範囲でランダムな幅 ->height(600, 1080) // 600-1080pxの範囲でランダムな高さ ->withAlpha(true) // アルファ/透明チャネルを有効にする ->grid(5) // オプション: 5x5の対称パターンを生成 ->toDisk($filesystem) ->generate();
JPG
use DefectiveCode\Faker\Generators\Jpg; Faker::make(Jpg::class) ->width(800, 1920) // 800-1920pxの範囲でランダムな幅 ->height(600, 1080) // 600-1080pxの範囲でランダムな高さ ->grid(5) // オプション: 5x5の対称パターンを生成 ->toDisk($filesystem) ->generate();
GIF
use DefectiveCode\Faker\Generators\Gif; Faker::make(Gif::class) ->width(800, 1920) // 800-1920pxの範囲でランダムな幅 ->height(600, 1080) // 600-1080pxの範囲でランダムな高さ ->withAlpha(true) // アルファ/透明チャネルを有効にする ->grid(5) // オプション: 5x5の対称パターンを生成 ->toDisk($filesystem) ->generate();
BMP
use DefectiveCode\Faker\Generators\Bmp; Faker::make(Bmp::class) ->width(800, 1920) // 800-1920pxの範囲でランダムな幅 ->height(600, 1080) // 600-1080pxの範囲でランダムな高さ ->grid(5) // オプション: 5x5の対称パターンを生成 ->toDisk($filesystem) ->generate();
WEBP
use DefectiveCode\Faker\Generators\Webp; Faker::make(Webp::class) ->width(800, 1920) // 800-1920pxの範囲でランダムな幅 ->height(600, 1080) // 600-1080pxの範囲でランダムな高さ ->withAlpha(true) // アルファ/透明チャネルを有効にする ->grid(5) // オプション: 5x5の対称パターンを生成 ->toDisk($filesystem) ->generate();
AVIF
use DefectiveCode\Faker\Generators\Avif; Faker::make(Avif::class) ->width(800, 1920) // 800-1920pxの範囲でランダムな幅 ->height(600, 1080) // 600-1080pxの範囲でランダムな高さ ->withAlpha(true) // アルファ/透明チャネルを有効にする ->grid(5) // オプション: 5x5の対称パターンを生成 ->toDisk($filesystem) ->generate();
ランダム画像
ランダムな画像フォーマットを生成します:
use DefectiveCode\Faker\Generators\RandomImage; Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(false) // AVIF、BMP、GIF、JPEG、PNG、WEBPからランダム生成 ->toDisk($filesystem) ->generate(); Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(true) // AVIF、GIF、PNG、WEBPからランダム生成 ->toDisk($filesystem) ->generate();
テキストジェネレーター
段落を含むプレーンテキストファイルを生成します:
use DefectiveCode\Faker\Generators\Text; Faker::make(Text::class) ->paragraphs(5, 10) // ファイルごとに5-10段落 ->sentences(3, 6) // 段落ごとに3-6文 ->toDisk($filesystem) ->generate();
出力例:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
CSVジェネレーター
ランダムデータを含むCSVファイルを生成します:
use DefectiveCode\Faker\Generators\Csv; Faker::make(Csv::class) ->columns(5, 10) // 5-10列 ->rows(100, 500) // 100-500行 ->delimiter(',') // 列デリミタ ->enclosure('"') // フィールドエンクロージャ ->escape('\\') // エスケープキャラクター ->eol("\n") // 行末 ->toDisk($filesystem) ->generate();
出力例:
"John Doe","john@example.com","555-1234","New York","Engineer""Jane Smith","jane@example.com","555-5678","Los Angeles","Designer""Bob Johnson","bob@example.com","555-9012","Chicago","Manager"
バイナリジェネレーター
ランダムなバイナリデータを生成します:
use DefectiveCode\Faker\Generators\Binary; Faker::make(Binary::class) ->length(1024, 1048576) // 1KB - 1MB ->toDisk($filesystem) ->generate();
メールジェネレーター
RFC822準拠のメールファイルを生成します:
use DefectiveCode\Faker\Generators\Email; Faker::make(Email::class) ->paragraphs(3, 5) // メール本文に含まれる段落数 ->sentences(2, 4) // 段落ごとの文の数 ->withAttachment(Png::class, 1, 3) // PNG添付ファイルを1-3付加 ->toDisk($filesystem) ->generate();
メールヘッダー
生成されたメールに含まれる項目:
To: ランダムな名前とメールFrom: ランダムな名前とメールSubject: ランダムな文Date: 現在のタイムスタンプMessage-ID: シードに基づく決定論的ID
添付ファイル付きのメール
生成器クラス名またはインスタンスを使用してファイルを添付します:
use DefectiveCode\Faker\Generators\Email;use DefectiveCode\Faker\Generators\Png;use DefectiveCode\Faker\Generators\Pdf; Faker::make(Email::class) ->withAttachment(Png::class, 1, 3) // 1-3 PNG添付ファイル ->generate(); // 設定されたジェネレーターインスタンスを使用して添付$pngGenerator = new Png(Png::getDefaultConfig());$pngGenerator->width(400, 800)->height(300, 600); Faker::make(Email::class) ->withAttachment($pngGenerator, 2, 5) ->generate();
出力例:
To: John Doe <john.doe@example.com>From: Jane Smith <jane.smith@example.com>Subject: Important meeting tomorrowDate: Fri, 03 Jan 2026 10:30:00 +0000Message-ID: <3e92e5c2b0d632b3a36fbbb17484b7fe@example.com>Content-Type: multipart/mixed; boundary="----=_Part_123" ------=_Part_123Content-Type: text/plain; charset=utf-8Content-Transfer-Encoding: quoted-printable Lorem ipsum dolor sit amet, consectetur adipiscing elit... ------=_Part_123Content-Type: image/png; name="attachment.png"Content-Disposition: attachment; filename="attachment.png"Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==------=_Part_123--
高度な使用法
カスタムジェネレーター
Generatorインターフェースを実装することで独自のジェネレーターを作成します:
use DefectiveCode\Faker\Configs\Config;use DefectiveCode\Faker\Concerns\SetsSeed;use DefectiveCode\Faker\Generators\Generator;use DefectiveCode\Faker\Concerns\PreparesFaker; class MyCustomGenerator implements Generator{ use PreparesFaker; use SetsSeed; public function __construct(public Config $config) {} public static function getDefaultConfig(): Config { return new MyCustomConfig([ 'contentType' => 'application/x-custom', 'nameGenerator' => NameGenerator::default('extension'), ]); } public function generate(): mixed { // 生成ロジックをここに記述 $data = $this->faker->randomElement(['foo', 'bar', 'baz']); $stream = fopen('php://temp', 'w+'); fwrite($stream, $data); return $stream; }} // カスタムジェネレーターを使用Faker::make(MyCustomGenerator::class) ->toDisk($filesystem) ->generate();
設定クラス
各ジェネレーターは、Configを拡張する設定クラスを使用します:
use DefectiveCode\Faker\Configs\Config; class MyCustomConfig extends Config{ public int $minValue = 1; public int $maxValue = 100;}
パフォーマンステips
- Swooleを使用: 最高のパフォーマンスのためにSwoole拡張をインストール
- 並行処理を調整: スレッド数をCPUコアに合わせて最適なスループットを実現
- バッチ操作: 複数の小さな実行よりも大きなバッチを生成
- ストレージ場所: アップロード前の一時ファイルに高速ストレージ(SSD、ローカルディスク)を使用
- ネットワークI/O: S3を使用する場合、帯域幅の使用を最大化するために並行処理を増やす
設定
グローバル設定メソッド
これらのメソッドはすべてのFakerインスタンスで利用可能です:
make(string $generator): Faker
指定されたジェネレーターで新しいFakerインスタンスを作成します:
Faker::make(Png::class)
toDisk(Filesystem $filesystem): Faker
ストレージの保存先を設定します(必須です):
Faker::make(Png::class) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
basePath(string $basePath): Faker
ファイルシステム内のベースパスを設定します:
Faker::make(Png::class) ->basePath('images/uploads') // ファイルは/storage/images/uploads/に保存されます
count(int $count): Faker
生成するファイル数を設定します:
Faker::make(Png::class) ->count(1000)
concurrency(int $threads, ?int $coroutines = null): Faker
並行処理を設定します:
// 基本的な並行処理Faker::make(Png::class) ->concurrency(4) // Swoole特有: スレッドとコルーチンFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8)
seed(int $seed): Faker
決定論的生成のためにシードを設定します:
Faker::make(Png::class) ->seed(42)
nameGenerator(Closure $generator): Faker
ファイル名をカスタマイズします:
Faker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "file-{$completedFiles}.png"; })
diskOptions(array $diskOptions): Faker
ファイルシステムアダプターにオプションを渡します:
Faker::make(Png::class) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', ])
generate(): void
ファイル生成を実行します:
Faker::make(Png::class)->generate();
サポートガイドライン
私たちのオープンソースパッケージを選んでいただきありがとうございます!これらのサポートガイドラインを確認するための時間を取ってください。プロジェクトを最大限に活用する助けになるでしょう。
コミュニティ主導のサポート
私たちのオープンソースプロジェクトは、素晴らしいコミュニティによって支えられています。質問がある場合や支援が必要な場合は、StackOverflowやその他のオンラインリソースが最良の選択です。
バグと機能の優先順位付け
オープンソースプロジェクトを管理する現実として、報告されたすべてのバグや機能リクエストに即座に対応することはできません。以下の順序で問題を優先します。
1. 有料製品に影響を与えるバグ
有料製品に影響を与えるバグは常に最優先事項となります。場合によっては、私たちに直接影響を与えるバグのみを扱うことがあります。
2. コミュニティのプルリクエスト
バグを特定し、解決策を持っている場合は、プルリクエストを提出してください。私たちの製品に影響を与える問題の次に、これらのコミュニティ主導の修正に対して最も高い優先順位を与えます。レビューと承認が行われた後、あなたの解決策をマージし、貢献を認めます。
3. 財政的サポート
上記のカテゴリー以外の問題については、その解決に資金を提供することができます。各オープンイシューには、財政的に貢献できる注文フォームへのリンクがあります。提供された資金額に基づいて、これらの問題を優先します。
コミュニティの貢献
オープンソースは、そのコミュニティが活発であるときに栄えます。バグを修正していない場合でも、コード改善、ドキュメントの更新、チュートリアルの作成、またはコミュニティチャネルで他の人を支援することで貢献を考えてください。私たちは、コミュニティとしてオープンソースの仕事を支援することを皆さんに強く奨励します。
繰り返しになりますが、DefectiveCodeは、有料製品にどのように影響を与えるか、コミュニティのプルリクエスト、そして問題に対して受け取った財政的サポートに基づいてバグを優先します.
ライセンス - MITライセンス
著作権 © Defective Code, LLC. 全著作権を保有します。
本ソフトウェア及び関連する文書ファイル(以下「ソフトウェア」)のコピーを取得したすべての人に対して、無償で本ソフトウェアを制限なく利用する権利、使用、複製、修正、統合、出版、配布、サブライセンス、及び/またはソフトウェアのコピーを販売する権利を許可し、ソフトウェアが提供される人々にもそれを行うことを許可します。ただし、以下の条件に従います:
上記の著作権表示とこの許可通知は、ソフトウェアのすべてのコピーまたは重要な部分に含まれるものとします。
ソフトウェアは「現状のまま」提供され、いかなる種類の保証もなく、明示または暗示を問わず、商業性、特定の目的への適合性および非侵害の保証を含むが、これに限定されない保証はありません。著作者または著作権者は、契約、不法行為、またはその他の方法によるいかなる請求、損害、またはその他の責任についても、ソフトウェアまたはソフトウェアの使用またはその他の取り扱いに起因する場合において、一切の責任を負わないものとします。