S04データ処理ツールに新しい機能「Headword Case Converter」を追加する際、複雑なUI動作バグに遭遇した。
新しいツールをサイドバーフレームワークに統合したところ、ボタンクリックが他のツールのボタンも無効化してしまうという問題が発生した。Expression & PN Toolのボタンをクリックすると、Proper Noun Case Converterのボタンまで無効化された。
問題は、toggleButtons()関数の呼び出し方にあった。コードには2つのバージョンのrunExpressionTask()関数があり、2番目のバージョンが特定のボタンIDを渡さずにtoggleButtons(true)を呼んでいた。
// 問題のあったコード(重複した関数定義)
function runExpressionTask(sourceTab, targetTab) {
toggleButtons(true); // すべてのボタンを無効化
// 処理...
toggleButtons(false); // すべてのボタンを有効化
}
// 正しいバージョン
function runExpressionTask(sourceTab, targetTab, buttonId) {
toggleButtons(true, buttonId); // 特定のボタンのみ無効化
// 処理...
toggleButtons(false, buttonId); // 特定のボタンのみ有効化
}
解決策は、重複した関数定義を削除し、すべてのツール関数が特定のボタンIDを渡すようにすることだった。
もう一つの問題は、ヘッダー設定の間違いだった。新しいツールはMNとPN?カラムを想定していたが、実際のシートには異なるヘッダーがあった。Google Sheetsの実際の構造を確認し、正しいカラムインデックスを使用するように修正した。
開発プロセスでも学びがあった。最初の数回の反復で、不完全なコードが提供されていた。コードの一部だけが変更され、他の部分が欠落していた。この問題を回避するため、以下の新しいプロトコルを採用した:
- 完全なファイル提供:部分的な変更ではなく、常に完全なファイルを提供
- 挿入ポイントの明確化:部分的なコードを提供する場合、正確な挿入位置を指定
- 変更の検証:提供する前に、コードが実際に動作することを確認
現在、S04 Headword Case Converterは完全に機能している。ボタンの分離も正しく動作し、各ツールは独立して実行できる。この経験から、UI状態管理の重要性と、完全なコード提供の必要性を学んだ。