CSVの読込み方式と本ツール固有の入力上限
このツールは,選択されたCSVファイルをブラウザのFileReaderによってUTF-8の文字列として一括読込みし,JavaScriptのメモリ上で同期的に解析します.Web Workerやストリーム処理,チャンク分割による段階読込みは行わないため,読込み元の文字列,二次元配列の行列データ,フィルタ処理中の中間配列,ダウンロード用に直列化した文字列が同一プロセス内に同時に保持される場合があります.
そのため,本ツールではファイルサイズ10 MiB以下,入力文字列10,485,760 UTF-16コード単位以下,ヘッダーを除くデータ行100,000件以下,200列以下,ヘッダーを含む総セル数1,000,000件以下,出力文字列20,971,520 UTF-16コード単位以下という保守的な上限を設けています.
なお,入出力の文字数カウントはUnicodeコードポイントではなくJavaScriptのUTF-16コード単位に基づきます.これらは処理対象のデータ規模を制限するものであり,処理速度やメモリの十分性を保証するものではありません.過負荷による問題への配慮です.
文字コードはUTF-8に限定されており,ファイルの先頭にUTF-8のBOM(Byte Order Mark)が存在する場合は解析前に自動的に除去されます.ただし,Shift_JISやUTF-16などの他の文字コードを判別して自動変換する機能は備えていません.また,区切り文字はカンマ固定であり,タブ区切りのTSVやセミコロン区切りには対応していません.
読み込んだCSVが文字化けしている場合は,事前にテキストエディタや文字コード変換ツールを用いてUTF-8へ変換してから再選択する必要があります.ファイル読込み中には新規ファイル選択やサンプル読込みの操作が無効化されます.読込みを中断したい場合は「クリア」を実行するか画面を離脱する必要があり,世代管理によって古い読込み結果が反映される事態を抑制します.
同名ファイルの再選択は読込み完了後に行えます.
読込みの解析段階では,閉じられていない二重引用符,不適切な位置にある引用符,閉じ引用符の直後に区切り記号や改行以外の文字が続く不正な引用形式を厳密に検出し,曖昧な自動修復を行わずに構文エラーとして処理を停止します.また,ヘッダー行で確定した列数と各データレコードの列数が一致しない場合も,該当するレコード番号とともにエラーを表示して処理を中断します.
エラー発生時には直前の出力結果の表表示が非表示となり,元ファイルの問題箇所を修正した同名ファイルを再選択してすぐにやり直すことができます.手元に検証用のCSVファイルがない場合でも,画面上のサンプルデータ(6列7行のデモデータ)を読み込み,列の並べ替えやフィルタ機能の挙動を確認することが可能です.
引用符付きフィールドの解析と空白を保持する規則
CSVテキストの解析では,先頭から1文字ずつ走査しながらカンマ,レコード区切り記号,二重引用符の状態を追跡し,厳密な二次元配列へと変換します.二重引用符で囲まれたフィールド内では,カンマは列の区切りとして解釈されず,CRLF,LF,CRの各改行記号もすべてセル内部の文字列データとしてそのまま保持されます.
引用符付きフィールド内で二重引用符そのものを表現する連続した二重引用符("")は,1つの二重引用符として正しくエスケープ解除されます.一方で,引用符で囲まれていないフィールドの途中に二重引用符が現れたり,閉じ引用符の後にカンマや改行以外の余剰な文字列が存在したりする場合は,勝手な推測や無言の自動修復を行わず,明確なシンタックスエラーとして扱われます.
仕様としてセルの前後の空白(スペース)もデータの一部とみなすため,本ツールのパーサーはセル値に対して一律のtrim処理を実行せず,たとえば「 A 」のような値の前後の空白を忠実に残します.空文字(長さ0のセル)と空白文字のみを含むセルは明確に区別されます.また,ヘッダーで決定された列数と合致しない不揃いなレコード(列数の不足や超過)が検出された場合も,空文字による自動補完や超過列の自動切り捨ては行わず,厳密なエラーとなります.
本ツールはCRLFだけでなくLFや単独のCRもレコード区切りとして受容しますが,これはあらゆる独自仕様や崩れたCSV方言への万能な対応を意味するものではありません.
直列化して保存する際は,現在の見出し行と出力対象行を完全に一致した列数でCSVフォーマットへと書き出します.カンマ,改行,二重引用符を含むセルは必ず二重引用符で囲み,内部の二重引用符は連続する2つの二重引用符へと変換されます.フィールド末尾の空セルやセル内の余白も脱落することなく保持されます.
データ行が一切なくヘッダー行のみで構成されるCSVファイルや,単一の空フィールドのみで構成されるヘッダーも正式に許容されており,見出し編集と保存が行えます.また,二重引用符で囲まれた空フィールド("")は1行1列の有効なデータとして解釈され,末尾の空レコードが消失する問題を防ぎます.
データ型の推論は行わないため,数値や日付に見える値も解析・出力の全過程で文字列として保持されます.
ドラッグと矢印による列順,見出し変更,出力非表示
CSVの解析が正常に完了すると,先頭行の各フィールドが見出し(ヘッダー)として認識され,画面上に列ごとの設定カードが生成されます.各カードはマウスによるドラッグ&ドロップ,あるいは配置された矢印ボタンの操作によって,列の出力順序を柔軟に入れ替えることができます.
タッチ操作環境ではHTML標準のドラッグが動作しない場合があるため,カードに備えられた1つ上,1つ下へ移動させる矢印ボタンを併せて利用できます.カード一覧の上から下へ並ぶ順序が,そのままプレビュー画面の表および保存されるCSVにおける左から右への列順序に対応します.
操作環境に応じてドラッグまたは矢印ボタンを選択して並び順を調整してください.
各列カードに設けられたテキスト入力欄からは,出力時の見出し名を直接自由に書き換えることができます.見出しを空文字に設定したり,他の列と重複する名称を付与したりすることも制限されず,元の入力通りに維持されますが,空欄や重複が存在する場合には画面上に警告通知が表示されます.
これは,後続のデータベースや業務システムでヘッダー名をキーとして処理する際に,識別不能によるトラブルを未然に防ぐための注意喚起です.また,カード上の目のアイコンをクリックすることで特定の列を出力非表示に切り替えられます.これは内部データから列を完全に消去するのではなく,出力対象リストから除外する設定であるため,いつでも再表示に戻すことが可能です.
各列の設定カードは,読み込み時の元データにおける元の列インデックス(参照番号)を一貫して保持しています.そのため,ドラッグや矢印ボタンで表示順序を変更したり見出し名を編集したりしても,データ参照先が狂うことはありません.後述する行フィルタ条件もこの元列インデックスを参照して評価されるため,列の並べ替えによってフィルタ対象が別の列へずれてしまう心配はありません.
さらに,出力非表示に設定した列であってもフィルタ条件の対象として指定できるため,「部署」列を最終的なCSV出力からは除外しつつ,「部署に営業部を含む行」のみを抽出して保存するという高度な前処理も容易に実現できます.
五つのフィルタ条件とAND評価,有限数の判定
データの絞り込み条件として,「部分一致」「完全一致」「数値より大きい」「数値より小さい」「値が空」の5種類のフィルタが用意されています.「部分一致」と「完全一致」のテキスト比較では,英字の大文字と小文字を区別しない(case-insensitive)一方で,入力された検索文字列の前後の空白はトリム(除去)されずそのまま保持されます.
CSVセル側の空白も保持されたまま比較されるため,検索欄に空白を含めた意図的な一致判定が可能です.たとえば「完全一致」において,セル側が「 Tokyo 」で検索値が空白なしの「Tokyo」である場合は一致しません.また,「部分一致」に空文字を指定した場合は全レコードが合致するため,条件を解除したい場合は該当するフィルタカード自体を削除します.
一方,「数値より大きい」および「数値より小さい」の数値比較フィルタでは,セル値と入力された検索値の両方について前後の空白のみをトリムし,JavaScriptのNumberによって数値へと変換して判定します.ただし,空文字や空白のみの文字列が自動的に0として扱われてしまう誤判定を防ぐため,双方が非空であり,かつNumber.isFiniteを満たす有効な有限数値である場合のみ比較が実行されます.
したがって,空セルやNaN,Infinity,数値に変換できない文字列データは大小比較の対象外となり一致しません.検索値が未入力または有限数でない場合は,入力欄に警告が表示されます.「値が空」フィルタは長さ0の空文字のみを対象とし,半角スペースや全角スペースが含まれるセルは空とはみなされません.
複数のフィルタ条件を設定した場合は,すべてAND条件として組み合わされ,すべての条件を同時に満たすデータレコードのみが抽出されます.たとえば「部署に開発を含む」かつ「年齢が30より大きい」というフィルタを設定した場合,両方を満たす行だけが残ります.OR条件や否定(NOT),正規表現,日付範囲,以上・以下といった複雑なクエリには対応していません.
また,数値比較フィルタは評価時にのみ一時的に有限数へと変換して判定する仕組みであり,CSV全体のデータ型を推論したり元データを数値型へ変換したりするものではありません.
先頭50行のプレビューと全件CSV出力の違い
フィルタ適用後のデータは画面上のHTMLテーブルにプレビュー表示されますが,ブラウザの描画負荷を抑えて軽快な操作性を維持するため,画面上の表示件数は先頭50行までに限定されています.これはあくまでブラウザ上の確認用表示の上限であり,データそのものを50行に切り詰めるわけではありません.
条件に合致するデータが51件以上存在する場合でも,CSVダウンロード時には条件に合致するすべてのデータ行が漏れなく保存されます.条件に一致する行が0件の場合は見出しのみのプレビューとなり,すべての列を出力非表示にした場合は保存ボタン自体が無効化(非表示)されます.
CSVのダウンロードを実行すると,出力表示が有効な列のみが現在のカード順に従って並べられ,フィルタ条件を満たすすべての行からデータが抽出されます.生成されたCSVテキストはUTF-8エンコードのBlobオブジェクトに変換され,一時的なObject URLを介して「edited_data.csv」という固定ファイル名でダウンロードされます.
改行コードにはLFが採用され,BOMは付与されません.ブラウザの資源管理のため,ダウンロード処理の呼び出しから約1秒後にURL.revokeObjectURLが実行されて一時URLが解放されますが,これによりメモリ解放が保証されるわけではありません.OSによる改行コードの切り替え,BOM付与の選択,ファイル名のカスタマイズ,Excel(XLSX)やJSON形式での出力機能は備えていません.
本ツールでは,出力対象となる見出しおよび各セルの値について,先頭が「=」「+」「-」「@」,タブ文字,CR,LF,あるいは特定の全角記号などで始まる数式風文字列の件数をカウントし,表計算ソフトで開いた際に意図せず数式として解釈・実行されるリスクに対する注意喚起を表示します.
ただし,元データを忠実に保つ方針から,先頭文字の除去やプレフィックス付与による自動無害化処理は行いません.また,厳密なCSV引用符ルールを適用して出力しても,表計算ソフト側の自動型変換や先頭ゼロの欠落を完全に防ぐことはできないため,保存後の実環境において見出しやデータの整合性を必ずご確認ください.
メモリ負荷,数式候補の注意表示,非対応範囲
CSVの読込み,解析,列設定,フィルタ,保存用文字列の生成は,この編集機能のJavaScript処理としてブラウザ内で行います.ただし,これはページ全体の通信状態,ブラウザ拡張,端末の管理機能まで含む「一切無通信」や「完全オフライン」の保証ではありません.機密情報や個人情報を扱う場合は,使用する端末,ブラウザ,ネットワーク,組織のデータ取扱規程も確認してください.
また,入力上限は停止やメモリ不足が起きない保証ではなく,利用環境によっては上限未満でも処理が重くなることがあります.
出力対象の見出しとセルについて,先頭が=,+,-,@,タブ,CR,LF,または一部の全角記号で始まる値を数え,表計算ソフトで数式のように解釈される可能性があることを表示します.この件数は注意喚起のための候補抽出であり,すべての表計算ソフトの挙動を網羅した完全検出ではありません.
元データを勝手に変えない方針のため,先頭への文字追加や削除による無害化も行いません.信頼できないCSVを表計算ソフトで開く場合は,保存後の利用先でも確認が必要です.
本ツールが行うのは,列順の変更,見出し改名,出力列の選択,基本的な行フィルタとCSV保存です.行のソート,行やセルの直接編集,重複削除,集計,OR・NOT検索,正規表現,日付解析,ロケール変換,数値の丸め,計算式の実行,元に戻す・やり直し,設定の永続保存,共有URL,ファイルの結合には対応しません.
元ファイルを上書きせず新しいCSVを保存するため,結果を確認できるまでは元のCSVを保管しておくと,条件の修正や再出力を行いやすくなります.