StripChatの報酬集計をPHPで自動化|キャスト別の収益を数秒でまとめる方法
タイトル候補8選
- StripChatの報酬集計をPHPで自動化|キャスト別の収益を数秒でまとめる方法
- スタジオ運営者必見|月次の報酬集計をスクリプトで終わらせる
- コピペで動く!StripChat報酬のキャスト別集計PHPスクリプト
- 手計算はもう卒業|トークンから円換算までを自動化する方法
- キャストが増えても破綻しない|報酬管理のPHP自動化入門
- スプレッドシート作業を減らす|配信収益の集計を仕組み化する
- PHP初心者でもできるCSV集計|StripChat運営の効率化
- 集計ミスをなくす|不正な行を自動スキップする報酬レポート
この記事で作るもの
| 項目 | 内容 |
|---|---|
| 入力 | 日付・キャスト名・トークン数を含むCSVファイル |
| 処理 | キャスト別にトークンを合計し、設定したレートで円換算する |
| 出力 | トークンの多い順に並べた集計表と合計行 |
| 安全対策 | 形式不正の行はスキップして警告を表示、ファイル不在や引数なしはエラー終了 |
事前準備
レンタルサーバーやローカルPCのPHP(8.0以上推奨)で動く。ターミナルで
php -v と入力し、バージョンが表示されれば準備完了。管理画面からの出力や手元の記録を、下記の形式のCSVに整える。1行目はヘッダー行。
date,cast,tokens
2026-10-01,Aoi,1200
2026-10-01,Mio,800
2026-10-02,Aoi,950
2026-10-02,Mio,abc
2026-10-03,Rin,3000
2026-10-03,Mio,400このサンプルでは、5行目にあえて「abc」という不正な数値を入れてある。後述のとおり、スクリプトはこの行を自動でスキップする。
サンプルコード(report.php)
以下を report.php という名前で保存する。
<?php
// 報酬CSVをキャスト別に集計し、円換算するスクリプト
// 想定CSV列: date,cast,tokens
const YEN_PER_TOKEN = 5.0; // 手取り換算レート(例)。実際のレートに合わせて変更する
const MIN_COLUMNS = 3;
if ($argc < 2) {
fwrite(STDERR, "使い方: php report.php rewards.csv\n");
exit(1);
}
$path = $argv[1];
if (!is_readable($path)) {
fwrite(STDERR, "ファイルを読み込めません: {$path}\n");
exit(1);
}
$fh = fopen($path, 'r');
fgetcsv($fh); // ヘッダー行を読み飛ばす
$totals = [];
$line = 1;
while (($row = fgetcsv($fh)) !== false) {
$line++;
if (count($row) < MIN_COLUMNS || !is_numeric($row[2])) {
fwrite(STDERR, "スキップ(形式不正) {$line}行目\n");
continue;
}
$cast = trim($row[1]);
$totals[$cast] = ($totals[$cast] ?? 0) + (float)$row[2];
}
fclose($fh);
arsort($totals); // トークンの多い順
echo implode("\t", ['キャスト', 'トークン', '円換算']), "\n";
foreach ($totals as $cast => $tokens) {
echo implode("\t", [$cast, number_format($tokens), number_format($tokens * YEN_PER_TOKEN)]), "\n";
}
echo implode("\t", ['合計', number_format(array_sum($totals)), number_format(array_sum($totals) * YEN_PER_TOKEN)]), "\n";実行方法と出力結果
CSVと同じフォルダで、次のコマンドを実行する。
php report.php rewards.csv上のサンプルCSVで実行すると、次の結果が表示される(タブ区切り)。5行目の不正な行は「スキップ(形式不正) 5行目」と警告され、集計から除外される。
キャスト トークン 円換算
Rin 3,000 15,000
Aoi 2,150 10,750
Mio 1,200 6,000
合計 6,350 31,750コードの要点解説
| 箇所 | 役割 |
|---|---|
| const YEN_PER_TOKEN | 円換算のレート。ここだけ書き換えれば換算結果が変わる。手取りか総額かで値を使い分ける |
| fgetcsv() | CSVを1行ずつ配列として読み込む。カンマを含む項目も正しく扱える |
| is_numeric($row[2]) | トークン列が数値かを確認。文字や空欄の行を弾いて集計崩れを防ぐ |
| $totals[$cast] ?? 0 | そのキャストの初出なら0から加算する書き方。初期化の記述が不要になる |
| arsort() | 合計値の大きい順に並べ替え、キャスト名との対応は保つ |
自分の環境に合わせて変えるポイント
カスタマイズの例
- CSVの列順が違う場合は
$row[1](キャスト名)と$row[2](トークン)の番号を変更する - 換算レートを変える場合は
YEN_PER_TOKENの値を更新する - 月別に分けたい場合は、日付列(
$row[0])の先頭7文字で集計キーを分ける - 結果をファイルに保存したい場合は
php report.php rewards.csv > result.tsvのようにリダイレクトする
運用上の注意点
| 注意点 | 理由 |
|---|---|
| CSVを公開フォルダに置かない | URLを知られると第三者に報酬情報が見られる恐れがある |
| レートは定期的に見直す | 換算レートや報酬率が変わると、集計結果と実際の入金額がずれる |
| 集計結果は必ず一度目視で確認する | 元データの形式が変わったとき、スクリプトが想定外の値を拾う可能性がある |
| 確定申告・支払いの根拠にする場合は原本を保管する | スクリプトの出力は補助資料であり、元の明細が正式な記録になる |
よくある質問
Q. PHPを触ったことがなくても使えますか?
コマンドを1行実行できれば使える。コードを書き換える必要があるのは、レートと列番号を変える場合だけ。まずはサンプルCSVで動かして、結果を確認してみるのがおすすめ。
Q. ExcelやGoogleスプレッドシートで十分では?
キャスト数が少なければ表計算で十分。ただし、毎月数百〜数千行を手作業で集計する場合は、スクリプト化するとミスと工数を大きく減らせる。
Q. StripChatから直接データを取得して自動化できますか?
このスクリプトはあくまで手元のCSVを集計するもので、プラットフォームへ自動接続はしない。外部連携の可否や方法は公式の案内を確認する必要がある。
Q. 列の並びがうちのCSVと違います
コード内の $row[1] と $row[2] の番号を、実際の列位置(0から数える)に合わせて変更すれば対応できる。
まとめ
報酬の集計は、キャストが増えるほど手作業の負担とミスのリスクが大きくなる。CSVを読み込んでキャスト別に合計し、円換算まで行うスクリプトを用意しておけば、月次作業は数秒で終わる。まずはサンプルCSVで動かして仕組みを理解し、自分の環境のCSV形式とレートに合わせて調整してみてほしい。個人情報を扱う作業なので、データの保管場所には十分注意しながら運用していこう。









