Skip to content

itcom/hamlab-logtool

Repository files navigation

📡 QSO Log Converter

アマチュア無線QSOログの形式変換Webツール。
日付範囲によるフィルタリングと、複数のログ形式間の相互変換に対応。

Upload Form

✨ 機能

  • CSVファイルの読み込み — ドラッグ&ドロップまたはファイル選択
  • 日付範囲フィルタ — 開始日・終了日を指定してレコードを絞り込み
  • プレビュー — 変換前にデータをテーブルで確認(先頭100件)
  • 形式変換&ダウンロード — 選択した出力形式でCSVをダウンロード
  • 拡張可能な設計 — 新しいログ形式を簡単に追加可能(Strategy Pattern)

Preview & Download

📋 対応形式

形式 説明 エンコーディング ヘッダー
Hamlab QSO管理 Hamlab のQSOデータCSV UTF-8 あり(27カラム)
Turbo HAMLOG Turbo HAMLOG のCSVエクスポート Shift_JIS (CP932) なし(16カラム)

フィールドマッピング

Hamlab → Turbo HAMLOG 変換時のQSLマッピング
Hamlab QSL HAMLOG QSLフラグ 備考
Direct D ダイレクト
JARL J JARL経由
eQSL E eQSL
No-CARD N カード不要
(空) TimeZone値 (J, U) デフォルト

🚀 セットアップ

動作要件

  • PHP 8.3+
  • Composer
  • Node.js / Yarn
  • Laravel Herd (推奨)

インストール

git clone https://github.com/itcom/hamlab-logtool.git logtool
cd logtool

composer install
cp .env.example .env
php artisan key:generate

yarn install
yarn run build

開発サーバー

Laravel Herd を使用している場合は自動的に https://logtool.test で利用可能です。

# Herdなしの場合
composer dev

🏗️ アーキテクチャ

ディレクトリ構造

app/Services/LogConverter/
├── FormatInterface.php      # 共通インターフェース
├── QsoRecord.php            # 中間データ構造(DTO)
├── HamlabFormat.php         # Hamlab形式の読み書き
├── HamLogFormat.php         # Turbo HAMLOG形式の読み書き
└── ConverterService.php     # 変換オーケストレーション

app/Http/Controllers/
└── ConverterController.php  # アップロード/プレビュー/変換

resources/views/
└── converter.blade.php      # UI(ダークテーマ)

変換フロー

入力CSV → [FormatA.parse()] → QsoRecord[] → [FormatB.export()] → 出力CSV

全形式が共通の QsoRecord DTO を経由するため、N形式間の相互変換が O(N) の実装で実現できます。

新しい形式の追加方法

  1. FormatInterface を実装するクラスを作成:
class AdifFormat implements FormatInterface
{
    public function getName(): string { return 'adif'; }
    public function getDisplayName(): string { return 'ADIF'; }
    public function getFileExtension(): string { return 'adi'; }
    public function parse(UploadedFile $file): Collection { /* ... */ }
    public function export(Collection $records): string { /* ... */ }
    // ...
}
  1. ConverterService のコンストラクタに登録:
public function __construct()
{
    $this->registerFormat(new HamlabFormat());
    $this->registerFormat(new HamLogFormat());
    $this->registerFormat(new AdifFormat());  // ← 追加
}

UIは自動的に新しい形式を入力/出力セレクタに表示します。

📡 使い方

  1. 形式を選択 — 入力形式と出力形式をドロップダウンから選択
  2. CSVをアップロード — ドラッグ&ドロップまたはクリックでファイルを選択
  3. 日付フィルタ(任意) — 開始日・終了日を設定して特定期間を抽出
  4. プレビュー — 「プレビュー」ボタンで変換前のデータを確認
  5. ダウンロード — 「変換してダウンロード」ボタンで変換済みCSVを取得

🛠️ 技術スタック

  • Laravel 13 — PHP Webフレームワーク
  • TailwindCSS v4 — ユーティリティファーストCSS
  • Vanilla JS — フロントエンド(fetch API, Blob download)
  • Vite — フロントエンドビルド

📝 ライセンス

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages