6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自分で管理していた「60万行の宿曜Excel」をWebアプリ化した話【脱Excel DX】

6
Last updated at Posted at 2025-11-30

はじめに

宿曜占星術という、生年月日から27種類の「宿」を割り出し、相性を診断する占いがあります。これを提供するために、約60万行のExcelファイルを長年管理していました。

  • 1500年分の日付データ(553年〜2100年)
  • 27種類の宿曜とその関係性
  • 特殊日(甘露日・金剛峰日など)のフラグ

ある日、「これ、自分以外誰も使えないな...」と気づきました。

結論: ExcelをSQLite + WordPressショートコードでWebアプリ化しました。

👉 完成したアプリ: https://www.5dmgmt.com/shukuyo/

Before: 私のExcel業務フロー

【従来のフロー】
1. お客様から生年月日を聞く
2. Excelで該当日を検索(Ctrl+F)
3. 宿曜を特定
4. 別シートの相性表を参照
5. エクセルで関係図を作成
6. お客様に説明

所要時間: 約15分/人

正直なところ:

  • 自分しか使えない
  • Excelファイルが壊れたら詰む
  • 複数人の相性を見るのがめんどくさい
  • お客様に「自分で調べたい」と言われても渡せない

After: Webアプリ化

【新フロー】
1. お客様がWebサイトにアクセス
2. 生年月日を入力
3. 瞬時に宿曜と関係図が表示
4. 他の人も追加して相性確認

所要時間: 約30秒/人

技術選定: なぜSQLite + WordPressなのか

検討した選択肢

選択肢 メリット デメリット
SpreadJS等でExcelそのまま 移行コスト低 60万行は重い
MySQL + API スケーラブル サーバー費用増
SQLite + WordPress 軽量、既存サイト活用 大規模には不向き
Google Sheets API 無料 API制限、遅延

決め手

  1. 既存WordPressサイトに追加したかった → プラグイン形式が最適
  2. データは読み取り専用 → SQLiteで十分
  3. 月間数百アクセス程度 → 大規模対応は不要
  4. 自分でメンテしたい → シンプルな構成がいい

実装のポイント

1. Excel → SQLiteへの変換

私のExcelの構造:

| 日付 | 宿曜 | 曜日 | 特殊日 | 七曜陵逼 |
|------|------|------|--------|----------|
| 553/1/1 | 鬼 | 月 | | |
| 553/1/2 | 柳 | 火 | 甘露日 | |
| ... | ... | ... | ... | ... |

SQLiteのテーブル設計:

CREATE TABLE shukuyo_master (
    date TEXT PRIMARY KEY,
    shukuyo TEXT NOT NULL,
    weekday TEXT,
    special_day TEXT,
    shichiyo_ryohitsu TEXT
);

CREATE INDEX idx_date ON shukuyo_master(date);

ポイント: 日付をPRIMARY KEYにすることで、検索が高速化(60万件でも数ミリ秒)

2. WordPressショートコードの設計

class Shukuyo_Kankei_Plugin {
    public function render_shortcode($atts) {
        ob_start();
        include SHUKUYO_KANKEI_PATH . 'templates/shukuyo-kankei-template.php';
        return ob_get_clean();
    }
}

add_shortcode('shukuyo_kankei', array($this, 'render_shortcode'));

これで、WordPressの任意のページに [shukuyo_kankei] と書くだけでアプリが埋め込めます。

3. AJAX APIでデータ取得

private function get_shukuyo_data() {
    $year = intval($_GET['year']);
    $month = intval($_GET['month']);
    $day = intval($_GET['day']);

    $db = new SQLite3($db_path, SQLITE3_OPEN_READONLY);

    $stmt = $db->prepare('SELECT * FROM shukuyo_master WHERE date = :date');
    $stmt->bindValue(':date', $date_str, SQLITE3_TEXT);
    $result = $stmt->execute();

    $row = $result->fetchArray(SQLITE3_ASSOC);

    wp_send_json_success(array(
        'shuku' => $row['shukuyo'],
        'youbi' => $row['weekday'],
        'specialDay' => $row['special_day']
    ));
}

4. フロントエンドでSVG動的描画

27宿の関係図は、SVGテンプレートをJavaScriptで動的に書き換え:

// 27宿は循環するので、モジュロ演算で位置を計算
const targetShuku = SHUKU_CYCLE_ORDER[(baseIndex + svgShukuIndex) % 27];

// SVG内のテキスト要素を書き換え
textEl.textContent = targetShuku + '宿/' + SHUKU_YOMI[targetShuku];

ポイント: 27種類のSVGを用意するのではなく、1つのテンプレートを動的に変換

5. CSV一括登録(Excelとの連携は残す)

「内閣メンバーの相性を一気に見たい」という自分のニーズに対応:

// encoding-japanese ライブラリで文字コード自動判定
const detectedEncoding = Encoding.detect(codes);
const unicodeArray = Encoding.convert(codes, {
    to: 'UNICODE',
    from: detectedEncoding || 'SJIS'  // Excel CSVはShift_JISになりがち
});

ポイント: ExcelでCSV出力 → アプリにドラッグ&ドロップ → 一括登録、という流れを維持

6. localStorageで自動保存

「登録した人が消えた!」を防ぐため、自動保存を実装:

window.shukuyoSaveToLocalStorage = function(silent = false) {
    const saveData = {
        peopleData: peopleData,
        basePerson: basePerson,
        savedAt: new Date().toISOString()
    };
    localStorage.setItem('shukuyo-kankei-data', JSON.stringify(saveData));
};

脱Excelで得られた効果

定量的な効果

指標 Before After 改善率
1人あたりの診断時間 15分 30秒 97%削減
複数人の相性確認 1時間以上 3分 95%削減
自分の稼働 必須 不要 セルフサービス化

定性的な効果

  • お客様満足度向上: その場で結果が見られる
  • 新規顧客獲得: 無料で試せるので、有料鑑定への導線に
  • 自分の負担軽減: 単純作業から解放され、深い鑑定に集中できる

「活Excel」の部分

完全な脱Excelではなく、Excelの良さを活かした部分もあります:

  1. マスターデータの管理: 特殊日の追加・修正はExcelで行い、SQLiteに再インポート
  2. CSV一括登録: 調べたい人リストをExcelで管理 → CSV出力 → アプリで一括登録
  3. 結果のエクスポート: 将来的にCSVダウンロード機能を追加予定

まとめ

Excel業務のDX化で重要だと感じたこと:

  1. 全部置き換えない: Excelが得意な部分(マスターデータ管理、一括編集)は残す
  2. ユーザー体験を変える: 「検索して参照」から「入力して即表示」へ
  3. 技術選定は規模に合わせる: 60万行でもSQLiteで十分なケースもある
  4. 既存資産を活かす: WordPressサイトがあるならプラグイン化

「秘伝のExcel」を持っている方、まずはデータをSQLiteに移行するところから始めてみてはいかがでしょうか。


👉 完成したアプリ: https://www.5dmgmt.com/shukuyo/

生年月日を入力するだけで、あなたの宿曜と相性がわかります。ぜひ試してみてください。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?