0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「Excelの操作感じゃないと嫌だ」と言われたWeb画面。HTML Tableで列幅ドラッグ伸縮(最小10px)とリアルタイムPing疎通を自作した話

0
Last updated at Posted at 2026-10-30

はじめに:情シスや現場管理者の「Excel信仰」にどう立ち向かうか?

LAN内の資産管理ツールや業務管理Web画面を開発してリリースしたとき、現場のベテラン管理者から必ず言われる「お決まりのクレーム」があります。

「このWeb画面、カラム(列)の幅をマウスで広げられないの? Excelならマウスで自由に幅を変えられるのに、これじゃ長いホスト名が途切れて見えないよ。Excelに戻して。」

開発者としては「レスポンシブデザインで組んだからブラウザ幅を変えてくれ」と言いたくなりますが、現場の管理者にとって 「列境界をドラッグして幅を調整できること」 は絶対譲れない機能なのです。

かといって、これだけのために重厚なReactデータグリッドライブラリ(AG Gridなど)を導入すると、バンドルサイズが跳ね上がり、システムの複雑化を招きます。

普通のHTML <table> タグに対し、外部ライブラリを一切使わず、Pure JavaScript(Vanilla JS)わずか50行で「列幅のドラッグリサイズ機能(最小幅ガード付き)」と「リアルタイム死活Pingインジケーター(🟢/⚪)」 を組み込みました。

本記事では、現場の管理者を唸らせたこのフロントエンド実装を公開します。


1. HTML & CSS:透明な「ドラッグ境界線(リサイザー)」の配置

各 <th> 要素の右端に、掴みやすいリサイズ用の境界線 div.resizer を絶対配置(absolute)します。

💻 コア実装・設定スニペット(抜粋)

# (要点抜粋)
/* table_resizable.css */
table.excel-table {
    border-collapse: collapse;
    width: 100%;
    table-layout: fixed; /* 重要: 固定レイアウトにして列幅制御を効かせる */
}

table.excel-table th, table.excel-table td {
    border: 1px solid #cbd5e1;
    padding: 8px 12px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap; /* テキストの折り返しを防ぎExcel風に */
}

table.excel-table th {
    position: relative;
    background-color: #f1f5f9;
    user-select: none; /* ドラッグ中のテキスト選択を無効化 */
}

/* 列幅リサイズハンドル */
.resizer {
    position: absolute;
    top: 0;
    right: 0;
    width: 5px;
    cursor: col-resize;
    user-select: none;
    height: 100%;
    background-color: transparent;
}

.resizer:hover, .resizing {
    background-color: #0284c7; /* ホバー・ドラッグ時に青く光る */
}

/* リアルタイム死活Pingインジケーター */
.status-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    margin-right: 6px;
}
.status-dot.online { background-color: #22c55e; box-shadow: 0 0 6px #22c55e; } /* 🟢 オンライン */
.status-dot.offline { background-color: #94a3b8; }                             /* ⚪ 応答なし */

2. Pure JavaScript によるドラッグ伸縮(最小幅ガード付き)

わずか50行足らずのコードで、マウスイベント(mousedown, mousemove, mouseup)を処理し、列が潰れすぎないよう 最小10px の安全ガードを入れます。


3. バックグラウンドPingによる「生きた死活状態」のリアルタイム反映

テーブルの先頭列には、端末のリアルタイム疎通状況(Ping応答)を非同期でフェッチして表示します。


まとめ:現場の信頼は「手触り感」から生まれる

どれほど裏側のAIやスキャンロジックが高度であっても、毎日その画面を使う管理者が「列幅すら変えられなくて使いにくい」と感じてしまえば、ツールは定着しません。

  • ヘビーフレームワークを使わず、Pure JSだけで軽快に動かす
  • Excelの使い慣れた手触り感をWeb上に再現する
  • 死活状況が視覚的にパッと分かるインジケーターを添える

この「現場ファーストな手触りの良さ」へのこだわりこそが、LAN内ツールを「全員が使いたがる愛用ツール」に変えるための最大のカギです!


📚 さらに詳しいアーキテクチャ設計・パラメータ表・トラブルシューティング

最後までお読みいただきありがとうございます!
本記事が少しでも「役に立った」「あとで試したい」と感じていただけましたら、ぜひQiitaの 「いいね(♡)」 と 「ストック」、および アカウントのフォロー をいただけると今後の検証・執筆の大きな励みになります!

また、本記事のさらに踏み込んだ 「深層アーキテクチャ解説」「主要パラメータの技術的根拠」「現場アンチパターン・トラブルシューティング対応表」 は、以下のGitHub技術リファレンスにて公開しています。

👉 【第24弾 詳細技術リファレンス (QIITA_ARTICLE_DETAIL_24.md)】

⭐ 全14層・200パターンの自立型インフラ&オンプレAIリファレンス集(おじさんの武器庫)を順次公開中です。ぜひGitHubリポジトリへの Star (★) と X (@OjisanTechnical) のフォローもお願いいたします!
👉 GitHub リポジトリ: ojisantech/ojisan-arsenal

💡 【検証環境・個人研究(PoC)に関する注記】
本記事は、筆者個人の自宅検証環境(ホームラボ/仮想環境)において、公開情報およびOSS(オープンソースソフトウェア)を用いて独自に構築・検証した個人研究(PoC)の記録です。特定の企業・団体の実環境や業務上の非公開情報とは一切関係ありません。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?