Skip to content

feat: ダークモード・モノスペースフォント・ショートカット追加#5

Merged
kwrkb merged 2 commits intomainfrom
feat/ui-ux-improvements
Feb 28, 2026
Merged

feat: ダークモード・モノスペースフォント・ショートカット追加#5
kwrkb merged 2 commits intomainfrom
feat/ui-ux-improvements

Conversation

@kwrkb
Copy link
Copy Markdown
Owner

@kwrkb kwrkb commented Feb 28, 2026

Summary

  • QSSベースのライト/ダークテーマ切替を追加(View > Toggle Dark Mode / Ctrl+D)
  • SQLエディタ・スキーマビューにモノスペースフォント(11pt)を適用
  • キーボードショートカット追加: Ctrl+Enter / F5(クエリ実行)、Ctrl+R(テーブルリフレッシュ)
  • テーマ設定はQSettingsで永続化、起動時に自動復元
  • SQLハイライターがテーマ連動でカラースキーム切替(ライト: GitHub風、ダーク: VS Code風)

新規ファイル

  • src/sqliteviewer/theme.py — Theme enum, QSS読み込み/適用/永続化
  • src/sqliteviewer/resources/light.qss — GitHub風ライトテーマ
  • src/sqliteviewer/resources/dark.qss — VS Code風ダークテーマ

設計判断

  • QSS方式: QPaletteより柔軟(hover/角丸/スクロールバー)、外部ライブラリ不要
  • str, Enum: StrEnum(3.11+)ではなくstr, Enumを使用(requires-python >= 3.10 互換)
  • QFontDatabase.systemFont: フォント名ハードコードよりクロスプラットフォーム対応

Test plan

  • uv run python -m pytest tests/ -v で回帰テスト(16件パス確認済み)
  • View > Toggle Dark Mode でテーマ切替確認
  • SQLエディタがモノスペースフォントで表示されるか確認
  • Ctrl+Enter / F5 でクエリ実行確認
  • Ctrl+R でテーブルリフレッシュ確認
  • アプリ再起動後にテーマが維持されるか確認

🤖 Generated with Claude Code

QSSベースのライト/ダークテーマ切替、SQLエディタへのモノスペースフォント適用、
Ctrl+Enter/F5/Ctrl+R のキーボードショートカットを追加。
テーマ設定はQSettingsで永続化され、起動時に自動復元される。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

このプルリクエストは、SQLiteViewerのUI/UXを大幅に改善することを目的としています。ダークモードとライトモードのテーマ切り替え、SQLエディタとスキーマビューへの固定幅フォントの適用、および頻繁に使用される操作のためのキーボードショートカットの追加により、開発者ツールとしての使い勝手と視覚的な魅力を向上させます。

Highlights

  • ダークモードとライトモードのテーマ切り替え機能を追加: QSSベースのテーマ切り替え機能が導入され、ユーザーは「View > Toggle Dark Mode」メニューまたはCtrl+Dショートカットでライトテーマ(GitHub風)とダークテーマ(VS Code風)を切り替えることができます。選択されたテーマはQSettingsによって永続化され、アプリケーションの再起動後も維持されます。
  • SQLエディタとスキーマビューにモノスペースフォントを適用: SQLエディタとスキーマビューのフォントが、クロスプラットフォーム対応のシステム固定幅フォント(11pt)に変更されました。これにより、コードの可読性が向上します。
  • キーボードショートカットの追加: クエリ実行用にCtrl+EnterおよびF5、テーブルリフレッシュ用にCtrl+Rの新しいキーボードショートカットが追加され、操作性が向上しました。
  • SQLハイライターのテーマ連動: SQLハイライターが選択されたテーマ(ライトまたはダーク)に応じてカラースキームを自動的に切り替えるようになり、視覚的な一貫性が保たれます。

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • PLAN.md
    • ドキュメントのタイトルを「SQLiteView 開発計画」に更新しました。
    • UI/UX改善に関するフェーズ2の計画と完了状況を追記しました。
  • src/sqliteviewer/app.py
    • アプリケーション起動時に保存されたテーマ設定を適用するロジックを追加しました。
    • テーマ関連のヘルパー関数をインポートしました。
  • src/sqliteviewer/mainwindow.py
    • テーマ切り替え、フォント設定、ショートカット機能のために必要なPyQt6モジュールをインポートしました。
    • 現在のテーマを追跡するためのcurrent_theme属性を追加し、初期テーマ設定をロードしました。
    • SQLエディタとスキーマビューに固定幅フォント(11pt)を適用し、タブストップ距離を再計算しました。
    • SQLハイライターをインスタンス化し、現在のテーマに基づいてカラースキームを設定するように変更しました。
    • 「Run Query」ボタンに「Execute SQL (Ctrl+Enter)」のツールチップを追加しました。
    • 「View」メニューに「Toggle Dark Mode (Ctrl+D)」と「Refresh Tables (Ctrl+R)」アクションを追加しました。
    • テーマ切り替えと永続化のための_toggle_dark_modeおよび_set_themeメソッドを実装しました。
    • クエリ実行(Ctrl+Enter, F5)とテーブルリフレッシュ(Ctrl+R)のキーボードショートカットをインストールしました。
  • src/sqliteviewer/resources/dark.qss
    • VS CodeのダークテーマにインスパイアされたQSSスタイルシートを追加しました。
  • src/sqliteviewer/resources/light.qss
    • GitHubのライトテーマにインスパイアされたQSSスタイルシートを追加しました。
  • src/sqliteviewer/sql_highlighter.py
    • ライトテーマとダークテーマに対応するカラースキームの定義を追加しました。
    • コンストラクタから直接色設定を削除し、set_color_schemeメソッドで設定するように変更しました。
    • テーマに基づいてトークンの色を更新し、ハイライトを再適用するset_color_schemeメソッドを追加しました。
  • src/sqliteviewer/theme.py
    • アプリケーションのテーマを定義するTheme Enumクラスを追加しました。
    • QSSファイルをロードするload_theme関数を追加しました。
    • アプリケーションにテーマを適用するapply_theme関数を追加しました。
    • テーマ設定を永続化するsave_theme_preference関数を追加しました。
    • 永続化されたテーマ設定をロードするload_theme_preference関数を追加しました。
Activity
  • プルリクエストのレビュー中に、Python 3.10との互換性のためにStrEnum(Python 3.11+)の使用をstr, Enumに修正しました。
  • 回帰テスト(uv run python -m pytest tests/ -v)が16件パスしていることを確認しました。
  • テーマ切り替え、モノスペースフォントの表示、新しいショートカット(Ctrl+Enter / F5、Ctrl+R)、およびアプリケーション再起動後のテーマ維持について手動テストを実施しました。
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

このプルリクエストは、ダークモード対応、モノスペースフォントの適用、キーボードショートカットの追加といった、多くの重要なUI/UX改善を導入するもので、素晴らしいです。QSSを利用したテーマ管理やQSettingsによる設定の永続化など、実装は全体的に堅牢でよく考えられています。

いくつか軽微な改善提案をコメントとして追加しました。ショートカットの動作スコープをより明確にすることと、設定キーの一元管理に関する提案です。これらにより、アプリケーションの使いやすさと将来の保守性がさらに向上するかと思います。

Comment on lines +194 to +197
def _install_shortcuts(self) -> None:
for shortcut_key in ("Ctrl+Return", "Ctrl+Enter", "F5"):
shortcut = QShortcut(QKeySequence(shortcut_key), self.query_editor)
shortcut.activated.connect(self._run_query)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

QShortcutのデフォルトのコンテキストはQt.ShortcutContext.WindowShortcutです。これは、親ウィジェットを含むウィンドウがアクティブである限りショートカットがトリガーされることを意味します。現在の実装では、query_editorにフォーカスがない状態(例えば、テーブルリストを選択している状態)でF5Ctrl+Enterを押してもクエリが実行されてしまい、意図しない操作につながる可能性があります。

ショートカットのコンテキストをQt.ShortcutContext.WidgetShortcutに設定することで、query_editorがフォーカスを持っている場合にのみショートカットが有効になります。これにより、より予測可能で安全な動作になります。

Suggested change
def _install_shortcuts(self) -> None:
for shortcut_key in ("Ctrl+Return", "Ctrl+Enter", "F5"):
shortcut = QShortcut(QKeySequence(shortcut_key), self.query_editor)
shortcut.activated.connect(self._run_query)
def _install_shortcuts(self) -> None:
for shortcut_key in ("Ctrl+Return", "Ctrl+Enter", "F5"):
shortcut = QShortcut(QKeySequence(shortcut_key), self.query_editor)
shortcut.setContext(Qt.ShortcutContext.WidgetShortcut)
shortcut.activated.connect(self._run_query)

Comment on lines +20 to +21
_SETTINGS_GROUP = ("SQLiteViewer", "App")
_THEME_KEY = "theme"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

QSettingsのグループ設定 ("SQLiteViewer", "App") が、mainwindow.py__init__内でも直接ハードコードされています(self.settings = QSettings("SQLiteViewer", "App"))。

設定キーを複数の場所でハードコードすると、将来の変更が困難になり、バグの原因にもなります。この定数をパブリック(例: SETTINGS_GROUP)にしてmainwindow.pyからインポートして再利用することを検討してください。これにより、設定の一元管理が可能になり、保守性が向上します。

Suggested change
_SETTINGS_GROUP = ("SQLiteViewer", "App")
_THEME_KEY = "theme"
SETTINGS_GROUP = ("SQLiteViewer", "App")
THEME_KEY = "theme"

- QSettings グループ定数を公開化(SETTINGS_GROUP)し、theme.py と mainwindow.py で共有

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@kwrkb kwrkb merged commit fe85323 into main Feb 28, 2026
1 check passed
@kwrkb kwrkb deleted the feat/ui-ux-improvements branch February 28, 2026 02:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant