長年運用されてきた Redmine からのデータ移行や併走を検討する際、現場で最初に突き当たるのが 「手元の Redmine から吐き出した CSV が新しいツールでちゃんと読み込めるのか?」 という問題です。
特に以下のトラブルが頻発します:
-
文字コードの不一致: Windows 版 Redmine や Excel 編集による
Shift_JIS (CP932)と、WebツールのUTF-8の違いによる文字化け - 必須カラムの欠落: カスタムビューで出力した際に「件名」や「担当者」が含まれていない
- データセキュリティ: 機密情報を含む社内課題CSVを、見知らぬ外部Webサーバーにアップロードしたくない
そこで今回、社内CSVのテキストデータを外部サーバーに一切送信せず、ブラウザ(Client-side JS)上だけで完結して適合度と文字コードを1秒で無料診断するツールを個人開発して公開しました!
🛠 作ったツール
- ツール名: Redmine CSV 互換性診断ツール
- URL: https://taski-app.com/tools/redmine-csv-validator
- 料金: 完全無料(会員登録不要)
💡 技術的なこだわりと解決したポイント
1. サーバー送信ゼロの安心セキュリティ
ユーザーがドラッグ&ドロップした CSV ファイルは、File.arrayBuffer() を使用してユーザーのブラウザメモリ上でのみ解析されます。ネットワークリクエストは一切発生しないため、社内セキュリティ基準をクリアした状態で安心して使っていただけます。
2. UTF-8 vs Shift_JIS (CP932) の自律判別ロジック
単なる TextDecoder('utf-8') では、Shift_JIS のバイト配列が偶然 UTF-8 として部分的に合法に見えてしまい、化け文字が生成されてしまう問題がありました。
本ツールでは以下のように TextDecoder('utf-8', { fatal: true }) を使用しています:
let text = '';
let encoding = 'UTF-8';
try {
// fatal: true を指定すると、UTF-8 構造に違反したバイトで即例外が投げられる
const utf8Decoder = new TextDecoder('utf-8', { fatal: true });
text = utf8Decoder.decode(buffer);
encoding = 'UTF-8';
} catch (e) {
// UTF-8 違反 ➔ Shift_JIS (CP932/Windows-31J) として安全デコード
const sjisDecoder = new TextDecoder('shift-jis');
text = sjisDecoder.decode(buffer);
encoding = 'Shift_JIS (CP932)';
}
この判定により、Excel で保存された Shift_JIS CSV が 100% 正確に認識され、文字化けを未然に検出・防止します。
3. スコアリングと主要属性マッピング
取り込まれた CSV から「件名/題名」「担当者」「ステータス」「期日」「トラッカー」「優先度」などの必須ヘッダーを自動認識し、100点満点のスコアと改善アドバイスを出力します。
🚀 まとめ
Redmine からの移行や並行運用をお考えのチームは、ぜひお手元の CSV で試してみてください!
- 無料ツール: https://taski-app.com/tools/redmine-csv-validator
- Redmine vs Taski 徹底比較: https://taski-app.com/compare/redmine