5 タブと履歴の扱いを見直した
(menow v0.3)

前回の記事では、テキストを素早く残すための小さなエディタ「menow」を作り始めたところまでを書きました。今回はその続きです。実際に使い続ける中で感じた違和感を起点に、タブ管理と履歴表示を見直しました。

<svg class="eyecatch-svg" viewBox="0 0 192 192" xmlns="http://www.w3.org/2000/svg">
  <!-- 背景 -->
  <rect width="192" height="192" fill="white" rx="32" ry="32"/>
  
  <!-- エディタウィンドウの背景 -->
  <rect x="36" y="60" width="120" height="96" fill="#E0E0E0" rx="4" ry="4"/>
  
  <!-- タブバー背景 -->
  <rect x="36" y="36" width="120" height="24" fill="#607D8B" rx="4" ry="4"/>
  
  <!-- タブ3つ -->
  <g id="tabs">
    <!-- アクティブタブ -->
    <rect x="40" y="36" width="32" height="24" fill="#2196F3" rx="4" ry="4"/>
    <!-- 非アクティブタブ1 -->
    <rect x="76" y="36" width="32" height="24" fill="#9E9E9E" rx="4" ry="4"/>
    <!-- 非アクティブタブ2 -->
    <rect x="112" y="36" width="32" height="24" fill="#9E9E9E" rx="4" ry="4"/>
  </g>
  
  <!-- エディタ内のテキスト線 -->
  <g id="text-lines" stroke="#607D8B" stroke-width="3" stroke-linecap="round">
    <line x1="48" y1="76" x2="120" y2="76"/>
    <line x1="48" y1="92" x2="132" y2="92"/>
    <line x1="48" y1="108" x2="108" y2="108"/>
    <line x1="48" y1="124" x2="126" y2="124"/>
    <line x1="48" y1="140" x2="96" y2="140"/>
  </g>
  
  <!-- メニューアイコン(右上) -->
  <g id="menu-icon" transform="translate(150, 42)">
    <line x1="0" y1="0" x2="12" y2="0" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round"/>
    <line x1="0" y1="6" x2="12" y2="6" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round"/>
    <line x1="0" y1="12" x2="12" y2="12" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round"/>
  </g>
  
  <!-- タブ数制限を示す「5」バッジ -->
  <circle cx="148" cy="48" r="12" fill="#4CAF50"/>
  <text x="148" y="53" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="white">5</text>
</svg>タブと履歴の扱いを見直した<br class="chiilabo-br is-on">(menow v0.3)

機能追加というより、「使っていて引っかかった点を一つずつ潰した」という性質の変更です。

関連記事

1. なぜタブまわりが気になり始めたのか

しばらく menow を使っていると、無意識にタブを増やしている自分に気づきました。メモを書き捨てる用途なので、1つ1つのタブは軽いはずです。それでも数が増えると、ウィンドウの上部が横に広がり、視線が散ります。

特に気になったのは、新しいタブを追加する「+」ボタンの位置でした。タブの右端にあると、クリックするたびに視線とマウスを大きく動かす必要があります。些細ですが、毎回となると積み重なります。

ここから、「タブは増やしすぎない」「追加操作は落ち着いた場所に集約する」という方針が固まりました。

2. 新規タブ追加をメニューに移した理由

以前は、タブバー右端に「+」ボタンを置いていました。多くのアプリで見慣れた配置なので、最初は違和感がありませんでした。

ただ、menow はタブを並べて比較するツールではありません。考え事の途中メモを切り替えるためのものです。その性質を考えると、タブバーを常に操作対象にする必要はないと感じました。

2.1. メニューに集約するという判断

そこで、新規タブ追加はメニューボタンの中に「New」として移しました。操作としては一手増えますが、視線の移動が減ります。結果として、落ち着いた操作感になりました。

実装上は、タブ右上のボタンを削除し、既存のメニューボタンに QAction を追加するだけです。UIの見た目は変わりますが、コードの変更範囲は小さく済みました。

3. タブ数を最大5個に制限した理由

3.1. ウィンドウ幅が広がる問題

タブを無制限に増やすと、Qt の仕様上、タブバーは横方向に伸び続けます。結果として、ウィンドウ全体が横に広がり、レイアウトが崩れたように感じました。

スクロール可能なタブバーにする手もあります。ただ、それは「タブを管理する」という別の認知コストを生みます。

3.2. 古いタブから閉じるという割り切り

menow の用途を考えると、同時に保持したいメモはせいぜい数個です。そこで、最大5個までと決め、それを超えたら古いタブから自動で閉じるようにしました。

ここでは「古い」を、タブのインデックス順と定義しています。履歴や保存処理は既存の close 処理に任せられるため、新しいロジックを増やさずに済みました。

この割り切りは万能ではありません。ただ、少なくとも自分の使い方では、迷いが減りました。

4. タブ名から日付を消した理由

4.1. ファイル名と表示名は同じでなくていい

menow では、ファイル名に YYYY-MM-DD_ を付けています。これは保存時の整理には便利です。一方で、タブ上で毎回日付を読む必要はありません。

タブは「今、どのメモを書いているか」を一瞬で把握できれば十分です。日付は情報量として過剰でした。

4.2. 表示時だけ加工する方針

そこで、ファイル名そのものは変えず、タブに表示するときだけ日付部分を削除しました。正規表現で先頭が日付形式の場合のみ除去しています。

この方法なら、既存ファイルとの互換性も保てます。表示と実体を分けて考える、という当たり前の整理を改めて意識しました。

5. History 表示で感じた違和感

ファイルを削除したあとも、History メニューにはその項目が残っていました。クリックすると当然エラーになります。

理屈では理解できます。履歴は「過去に開いたパスの一覧」であって、「今存在するファイルの一覧」ではありません。

ただ、使う側としては混乱します。

5.1. 表示時に存在チェックするという解決

履歴を更新するタイミングは色々考えられます。削除時に即反映する方法もあります。

今回はもっと単純に、「History を表示する瞬間に、存在しないものは出さない」という方針にしました。同時に、存在しないパスは内部リストからも削除します。

これにより、履歴は自然に掃除されます。ユーザーが意識する必要はありません。

6. 今回の変更で得られたものと残った課題

今回の v0.3 では、大きな新機能はありません。その代わり、日常的な操作の引っかかりを減らせました。

一方で、タブを自動で閉じる挙動は、人によっては唐突に感じるかもしれません。設定で変更できる余地はありますが、今は入れていません。