Skip to content

既知の制限:プラグインの境界線

このレッスンで学べること

  • プラグインがどのテーブルタイプをサポートしていないか
  • 非対応のシナリオでプラグインを使用しない方法
  • プラグインの技術的境界と設計上のトレードオフ

コアコンセプト

このプラグインは 1 つの目標に集中しています:OpenCode の隠しモード向けに Markdown パイプテーブルのフォーマットを最適化する

そのために、コアシナリオの信頼性とパフォーマンスを確保するため、一部の機能を意図的に制限しています。

既知の制限一覧

制限説明サポート予定
HTML テーブルMarkdown パイプテーブル(| ... |)のみサポート❌ 非対応
複数行セルセル内に <br> などの改行タグを含められない❌ 非対応
区切り行なしテーブル`---
セル結合行または列にまたがる結合は非対応❌ 非対応
ヘッダーなしテーブル区切り行がヘッダーとして扱われるため、ヘッダーなしテーブルは作成不可❌ 非対応
設定オプション列幅のカスタマイズ、機能の無効化などは不可🤔 将来的に可能
超大テーブル100+ 行のテーブルのパフォーマンスは未検証🤔 将来的に最適化

制限の詳細

1. HTML テーブルは非対応

現象

html
<!-- このテーブルはフォーマットされません -->
<table>
  <tr>
    <th>列 1</th>
    <th>列 2</th>
  </tr>
  <tr>
    <td>データ 1</td>
    <td>データ 2</td>
  </tr>
</table>

原因

プラグインは Markdown パイプテーブル(Pipe Table)のみ処理します。つまり、| で区切られた形式です:

markdown
| 列 1 | 列 2 |
|--- | ---|
| データ 1 | データ 2 |

ソースコードの根拠

typescript
// index.ts:58-61
function isTableRow(line: string): boolean {
  const trimmed = line.trim()
  return trimmed.startsWith("|") && trimmed.endsWith("|") && trimmed.split("|").length > 2
}

検出ロジックは | で始まり、| で終わる行のみをマッチするため、HTML テーブルは直接スキップされます。

代替案

HTML テーブルをフォーマットする必要がある場合、以下をおすすめします:

  • 専用の HTML フォーマットツールを使用する
  • HTML テーブルを Markdown パイプテーブルに変換する

2. 複数行セルは非対応

現象

markdown
| 列 1 | 列 2 |
|--- | ---|
| 第 1 行<br>第 2 行 | 単一行 |

出力時に <!-- table not formatted: invalid structure --> コメントが表示されます。

原因

プラグインはテーブルを 1 行ずつ処理し、セル内の改行をサポートしていません。

ソースコードの根拠

typescript
// index.ts:25-56
function formatMarkdownTables(text: string): string {
  const lines = text.split("\n")
  // ... 1 行ずつスキャンし、複数行をマージするロジックなし
}

代替案

  • 複数行の内容を複数行のデータに分割する
  • または、テーブルが広くなることを受け入れ、内容を 1 行内に表示する

3. 区切り行なしテーブルは非対応

現象

markdown
<!-- 区切り行が欠けている -->
| 列 1 | 列 2 |
| データ 1 | データ 2 |
| データ 3 | データ 4 |

<!-- table not formatted: invalid structure --> コメントが表示されます。

原因

Markdown パイプテーブルには区切り行(Separator Row)が必須であり、列数と配置方法を定義するために使用されます。

ソースコードの根拠

typescript
// index.ts:86-87
const hasSeparator = lines.some((line) => isSeparatorRow(line))
return hasSeparator  // 区切り行がない場合は false を返す

正しい記述

markdown
| 列 1 | 列 2 |
| --- | --- |  ← 区切り行
| データ 1 | データ 2 |
| データ 3 | データ 4 |

4. セル結合は非対応

現象

markdown
| 列 1 | 列 2 |
|--- | ---|
| 2 列結合 |  ← 列 1 と列 2 にまたがることを期待
| データ 1 | データ 2 |

原因

Markdown 標準はセル結合構文をサポートしておらず、プラグインも結合ロジックを実装していません。

代替案

  • 空白セルでプレースホルダーを使用する:| 2 列結合 | |
  • または、Markdown の制限を受け入れ、HTML テーブルを使用する

5. 区切り行はヘッダーとして扱われる

現象

markdown
|--- | --- | ---|
| 左寄せ | 中央寄せ | 右寄せ |
| データ 1 | データ 2 | データ 3 |

区切り行がヘッダー行として扱われるため、「ヘッダーなし」の純粋なデータテーブルを作成できません。

原因

Markdown 仕様では、区切り行の後の最初の行をテーブルヘッダー(Table Header)として扱います。

代替案

  • これは Markdown 自体の制限であり、プラグイン固有のものではありません
  • ヘッダーなしテーブルが必要な場合は、他のフォーマット(CSV など)を検討してください

6. 設定オプションなし

現象

設定ファイルで調整できません:

  • 最小/最大列幅
  • 特定機能の無効化
  • カスタムキャッシュ戦略

原因

現在のバージョン(v0.0.3)は設定インターフェースを提供しておらず、すべてのパラメータはソースコードにハードコードされています。

バージョンについて

現在のプラグインバージョンは v0.0.3(package.json で宣言)です。CHANGELOG.md に記録されている v0.1.0 は将来のバージョン計画であり、まだリリースされていません。

ソースコードの根拠

typescript
// index.ts:115 - 列の最小幅が 3 にハードコード
const colWidths: number[] = Array(colCount).fill(3)

// index.ts:222 - キャッシュしきい値がハードコード
if (cacheOperationCount > 100 || widthCache.size > 1000) {
  cleanupCache()
}

将来の計画

CHANGELOG では、将来サポートされる可能性がある言及があります:

Configuration options (min/max column width, disable features)


7. 超大テーブルのパフォーマンスは未検証

現象

100+ 行のテーブルの場合、フォーマットが遅くなるか、メモリを多く消費する可能性があります。

原因

プラグインは 1 行ずつのスキャンとキャッシュメカニズムを使用しており、理論的には大テーブルを処理できますが、専用のパフォーマンス最適化は行われていません。

ソースコードの根拠

typescript
// index.ts:5-7
const widthCache = new Map<string, number>()
let cacheOperationCount = 0

// キャッシュは 100 回の操作または 1000 エントリ後にクリアされる
if (cacheOperationCount > 100 || widthCache.size > 1000) {
  cleanupCache()
}

推奨事項

  • 超大テーブルの場合、複数の小テーブルに分割することをおすすめします
  • または、将来のパフォーマンス最適化バージョンをお待ちください

チェックポイント

このレッスンを完了すると、以下の質問に答えられるはずです:

  • [ ] プラグインはどのテーブルフォーマットをサポートしていますか?(答え:Markdown パイプテーブルのみ)
  • [ ] なぜ複数行セルをフォーマットできないのですか?(答え:プラグインは 1 行ずつ処理し、マージロジックがないため)
  • [ ] 区切り行の役割は何ですか?(答え:列数と配置方法を定義し、必須)
  • [ ] 列幅をカスタマイズできますか?(答え:現在のバージョンでは非対応)

よくある間違い

よくあるエラー

エラー 1:HTML テーブルがフォーマットされることを期待する

プラグインは Markdown パイプテーブルのみ処理します。HTML テーブルは手動でフォーマットするか、他のツールを使用する必要があります。

エラー 2:テーブルに区切り行がない

区切り行は Markdown テーブルの必須部分であり、欠けると「無効な構造」エラーが発生します。

エラー 3:セルの内容が長すぎて、テーブルが広くなる

プラグインには最大列幅の制限がないため、セルの内容が長すぎると、テーブル全体が非常に広くなります。手動で改行するか、内容を簡潔にすることをおすすめします。


まとめ

制限原因代替案
HTML テーブル非対応プラグインは Markdown パイプテーブルに集中HTML フォーマットツールを使用
複数行セル非対応1 行ずつ処理するロジック複数行に分割するか、広くなることを受け入れる
区切り行なし非対応Markdown 仕様の要件`
設定オプションなし現在のバージョンでは未実装将来のバージョン更新をお待ちください

次のレッスンの予告

次のレッスンでは 技術詳細 を学びます。

学べること:

  • プラグインのキャッシュメカニズムの仕組み
  • パフォーマンス最適化戦略
  • なぜキャッシュが 100 回の操作後にクリアされるのか

付録:ソースコード参照

クリックしてソースコードの場所を表示

更新日時:2026-01-26

制限ファイルパス行番号
HTML テーブル検出index.ts58-61
区切り行検出index.ts63-68
テーブル検証(区切り行が必須)index.ts70-88
列の最小幅ハードコードindex.ts115
キャッシュしきい値ハードコードindex.ts222-224

主要な関数

  • isTableRow():Markdown パイプテーブル行かどうかを検出
  • isSeparatorRow():区切り行を検出
  • isValidTable():テーブル構造の有効性を検証

主要な定数

  • colWidths 最小幅 = 3:列の最小表示幅
  • キャッシュしきい値 = 100 回の操作または 1000 エントリ:キャッシュクリアをトリガーする条件

CHANGELOG 参照