Skip to content

env backend test / env backend migrate の桁揃えが全角文字を 1 文字幅と数えるため、長い参照で一覧が崩れる #244

Description

@takemi-ohama

何を見つけたか

env backend test と env backend migrate の要約・一覧の桁揃えが、全角文字を 1 文字幅として数えるため崩れる。
書式は :<16 / :<24 / :<28 / :<40 のように文字数で指定されており、表示幅を見ていない。

v3.7.0 を配布した実環境(version: 2 / group_aliases: {default: nyle})での env backend test の実測。

  グローバル(グループ default → nyle)   devbase/team/nyle/global                 22 変数
  個人のグローバル(グループ default → nyle) devbase/users/takemi_ohama/nyle/global   26 変数
  プロジェクト 'adminer'(グループ default → nyle) devbase/team/nyle/projects/adminer       0 変数
  個人のプロジェクト 'carmo-autonavi-wordpress'(グループ default → nyle) devbase/team/… 0 変数

1 行目は揃うが、2 行目以降はパスの開始位置がばらばらである。

読み替えの有無とは関係が無い。 読み替えの無いグループでも、参照の名前が長ければ同じように
崩れる。設計の時点で プロジェクト 'carmo-ai'(グループ default) が 31 文字で、
既に :<28 を超えることを実測している。#188 が見出しへ → nyle を足したことで崩れる行が
増えた
が、原因は #188 ではない。

どこで見つけたか

v3.7.0 の振り返り(起票の取りこぼしを拾う工程)。設計が「別の課題である」と明言しながら、
番号が付いていない。

場所 記述
/Users/takemi_ohama/devbase/issues/old/PLAN64_secret-label-group-design.md:287 「桁揃えそのものの見直しは、この変更とは別の課題である」
同 :323(未確認のまま残ること) 「この変更では扱わない」
PR #223 の Test plan 「桁あふれを実測した」
PR #237 の「やらないこと」 同旨

同じ PLAN64 の棚卸しから出た env_migrate.Target.label のデッドコードは #222 として
起票されており、扱いが揃っていない。
確定仕様 docs/specifications/secret-backend.md にも
桁揃えの記述は移っていない(grep 桁 が 0 件)。

現象の場所は次のとおりである(いずれも lib/devbase/commands/env_backend.py)。

場所 出すもの 書式
cmd_env_backend_test(:472) env backend test の一覧 :<28 / :<40
env backend migrate の完了後の一覧(:594) --to age でサーバに残す参照 :<24
_heading(:706) env backend migrate の要約(移行する機密・衝突するキー)の見出し :<24
print_left_on_server(:731) サーバ上に残す他のグループの共通の参照 :<16

env list(lib/devbase/commands/env.py の cmd_env_list)の見出しと件数行は桁揃えを持たないため、この崩れは出ない。

なぜこの変更の範囲外なのか

PLAN64(#188)の受け入れ条件は、見出しに読み替えの前後を出すことと、その適用範囲
(エラー文言・ログは読み替え前のまま)だけを対象としている。桁揃えの方式は受け入れ条件に
含まれていない。

直さないと何が起きるか

  • 参照の名前が長い環境(プロジェクトが多い・グループ名が長い)で、一覧が読めない。
    この端末では 74 件の参照のうち大半が崩れている
  • 日本語の見出しを持つ出力すべてに同じ形が出るため、今後この方式で新しい一覧を足すたびに
    同じ崩れが増える

直し方の案

案 内容
A 表示幅を数える関数を 1 つ置き(unicodedata.east_asian_width が W / F を返す文字を 2 と数える)、桁揃えをそこへ寄せる。修正レイヤーはここである
B 桁揃えをやめ、見出しとパスを別の行に出す。幅の計算が要らなくなる
C 見出しを短くする((グループ default → nyle) を末尾に 1 度だけ出す)。崩れは減るが無くならない

A が原因の場所で、B は形を変えて回避する。どちらを採るかは、この一覧を何に使うかで決まる。

由来

issue #188(v3.7.0 の振り返り、PR #212)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions