会計ソフトの明細一覧を Chrome 拡張で整える:列幅のずれ、全件自動表示、連携サービスの横並び
会計ソフトAの明細一覧で、行ごとに対応する仕訳を右側へ並べる表示を作らせた。 行の高さは 80px から 28px まで詰まり、100 行のうち 99 行が 1 行に収まった(残る 1 件は複合仕訳で 2 段になる)。 画面としては、もう読める。
ただ、ヘッダーのカラムだけが本体の明細行と高さが合っていない。 そのせいで、表全体が微妙にずれて見えた。
拡張の CSS は相手のページの上に乗る。 だから崩れを見つけたら、まず自分が足したスタイルを疑うことになる。
列幅を決めていたのは th ではなかった
明細テーブルを圧縮するとき、列幅が指定どおりにならなかった。 th に幅を当てても、列は動かない。
DOM を見に行かせたら、テーブルの先頭に <colgroup> があった。
列幅はそちらで決まっていて、th に書いた指定は当たらなかった。
col 要素に幅を当てる方式へ書き換えさせたら、ようやく指定どおりの幅になった。
表示側は journal-view.js として切り出させ、manifest と style.css に組み込ませた。
単体テストは 16 件通った。
「続きを表示」で 120 行まで増えても仕訳側が追従することを実ページで確認し、複合仕訳の行も 1 件見つけた。
ヘッダーだけが本体と揃わない
気持ち悪かったのはヘッダーだった。
目分量で padding を削らせると、たいてい別のどこかがずれる。 先に実測させてから手を入れさせた。
あわせて、未入力行の色とステータス列の並び替えの挙動も同じ回で直させた。 拡張をリロードさせて明細一覧を読み直し、3 点とも実機で確認した。 明細一覧のタブは元の並び順に戻してもらった。
「続きを表示」を押す係を拡張に渡す
このページは、開くと下に「続きを表示」が必ず出てくる。 全件見たいだけなのに、毎回押す。 うっとうしいので、拡張に押させることにした。
先に確認させたのは二重クリックの危険だった。 クリックした直後にページ側がボタンをどう扱うのか。 既存のエクスポート処理が同じボタンを押していないか。 そこを見てから自動クリックを入れさせた。
日付ヘッダーの並び替えも、このときまとめて置き換えさせた。
自動読込と日付の並び替え、ステータスの並び替えを別タブで動かして確認した。
そのうえでコミットしている(4b7dc2c)。
連携サービスをカードの下に横一列で出す
午後は別の不満をつぶした。
通帳カードの下に、連携サービス名を全部並べたい。 ドロップダウンから 1 つ選んで切り替えるのは、単純に手数が多い。 横に並べれば入るはずで、入らなければ 2 段目に折り返せばいい。
select の構造と、切り替えたときに何が飛ぶのかを実機で確認させた。 既存の CSS とテストの書き方も読ませてから実装に入らせている。 結果、12 件が 2 段で並んだ。 スクリーンショットで並びを確かめ、クリックしたときに組み立てる URL も検証させた。
ページ側に CSP があるので、検証には一時サーバーを立て、終わったら止めさせた。
拡張の読み込みで一度止まった
コードを直したら chrome-extension-reload スキルでリロードして反映を見る。 これがいつもの流れになっている。
ただ今回は、拡張をフォルダごと分けていた。 新しいフォルダを Chrome に読み込む操作が別に要る。 そこは OS のフォルダ選択ダイアログが出るから実行できない、と返ってきた。
拡張機能側からできたはずだと思って調べ直させたところで、フォルダを分けたのは自分だったと思い出した。 結局、その場で手を動かして読み込んだ。
読み込んだあと、明細一覧のタブを開き直して実測させた。 新しい拡張だけが動いていること、連携サービス一覧と右側の仕訳表示が同じ拡張から出ていること、旧版の残骸が残っていないことの 3 点を確認した。
仕訳帳に空いた余白をデバッグする
仕訳帳のページを開いたら、パンくずと検索フォームの間が大きく空いていた。 他のページへの遷移ボタンも見当たらない。 今日入れた CSS が効きすぎたのだろう、と思った。
修正に入る前にコミットを取らせた。 どこから壊れたのかを追えなくなるのが一番困る。
それから、その区間にある要素を 1 つずつ実測させた。 犯人は今日触った 2 つの拡張ではなかった。 ホーム画面の広告を消すために前に作った別の拡張が空のメニュー枠を 2 個挿入していた。 その 2 個ぶんが、あの余白だった。
content.js を直して拡張をリロードさせ、空白が消えたことを画面で確認した。
コミットは学習ゲートで止まった。
クイズを 5 問ブラウザに出させたが、そのまま 30 分でタイムアウトした。
サーバー側を確認させても合格セッションはなく、未回答のまま落ちていた。
出し直させたうえで、結局 LEARN_SKIP で通した(8ab45d2)。
午前のコミットも同じ扱いにしている。
学びメモ
- テーブルの列幅が指定どおりにならないときは
<colgroup>を見る。th に幅を書いても col が勝つ場面がある - 見た目のずれは、目分量で padding をいじらせる前に実測させる
- 相手のページに CSS を差し込む拡張が 3 つになった。崩れの原因を最新の変更に決め打ちすると外す
- 修正に入る前にコミットを取る。犯人が別の場所だったとき、戻れる地点があるかどうかで調査の速さが変わる
- 「できません」と返ってきたら、条件を疑ってもう一度調べさせる。今回は自分がフォルダを分けたのを忘れていただけだった
拡張が 3 つになったのに、どれがどのページに何を差し込んでいるかを一覧で持っていない。 次に似た余白を見たときも、また同じ順番で自分を疑うところから始めることになる。