#プログラミング言語
204 件の記事
PySide6 実践講座 #8 配布の仕上げ — アイコン・バージョン情報、署名、GitHub Actions
シリーズ最終回として、アプリを人に渡せる状態に仕上げます。PyInstaller の spec ファイルでアイコン・名前・リソースを管理する方法、バージョンを一か所で定義してアプリとビルドに供給する方法、署名のないアプリがダウンロード直後にブロックされる理由と macOS 公証・Windows 署名の地形、GitHub Actions のマトリックスで 3 つの OS のビルドを自動化するワークフロー、そしてシリーズ全体の振り返りまで扱います。
PySide6 実践講座 #7 テスト — pytest-qt と層別テスト戦略
GUI アプリはテストしにくいという通念を、層構造で解体します。Qt なしで動く core のテストが最も多くあるべき理由、一時 DB ファイルでリポジトリを検証する方法、qtbot が QApplication とイベントループを代わりに管理してくれる pytest-qt の動作、モデルの契約(rowCount・data・setData)を検証するテスト、シグナル待機(waitSignal)とウィジェット操作のテスト、そして CI で画面なしに Qt のテストを回す方法まで扱います。
PySide6 実践講座 #6 設定画面 — QSettings、ダークテーマ、データバックアップ
ハードコードされていた値をユーザーに渡します。プラットフォームごとの標準の場所に設定を保存してくれる QSettings の使い方と型の罠、設定画面と実際の動作(リマインダー時刻、閉じるボタンの動作)の接続、スタイルシートの差し替えで実装するダーク・ライトテーマとシステムテーマの検知、そしてユーザーデータを尊重する最後のピースである CSV エクスポートと DB バックアップまで扱います。
PySide6 実践講座 #5 トレイ常駐とリマインダー — 閉じても死なないアプリ
習慣トラッカーを本物の道具にする条件、常駐を実装します。QSystemTrayIcon でシステムトレイにアイコンとメニューを出す方法、ウィンドウを閉じる操作を終了ではなく非表示に変える closeEvent の処理とその UX 論争、QTimer で毎日決まった時刻にリマインダー通知を送る方法、トレイ通知の限界と OS ごとの違い、そしてアプリが 2 つ立ち上がってしまうのを防ぐ単一インスタンス処理まで扱います。
PySide6 実践講座 #4 統計画面 — QPainter で草むらヒートマップを描く
既製ウィジェットのない画面を自分で描きます。達成率計算や連続記録といった統計ロジックを Qt のない core 層に置いてテスト可能にする方法、paintEvent と QPainter で GitHub の草スタイルのヒートマップウィジェットを描く方法、座標計算とサイズ対応(sizeHint)、マウス位置のセルを特定してツールチップを出すヒットテスト、そして再描画は update() の呼び出しで依頼するというカスタムウィジェットのルールまで扱います。
PySide6 実践講座 #3 今日画面 — カスタムモデルとチェックのトグル
アプリ最初の本物の画面を作ります。リストウィジェットに直接アイテムを入れる方式が実戦ですぐ限界に達する理由、QAbstractListModel を継承してリポジトリをビューにつなぐカスタムモデル、ロール(role)でデータの複数の顔を公開する方法、チェック状態のトグルがモデルを経て DB まで流れる経路、dataChanged シグナルでビューを正確に更新する方法、習慣追加ダイアログまで扱います。
PySide6 実践講座 #2 SQLite データ層 — リポジトリパターンとマイグレーション
アプリの記憶を担うデータ層を作ります。デスクトップアプリで SQLite がデフォルトである理由、OS ごとに違うアプリデータフォルダを正しく見つける方法、習慣とチェック記録のスキーマ設計、SQL を一か所に閉じ込めるリポジトリパターン、そしてアプリの更新後もユーザーデータが壊れないようにする user_version ベースの超シンプルなマイグレーションまで扱います。
PySide6 実践講座 #1 プロジェクト設計 — 習慣トラッカーを作りながら学ぶアプリ構造
PySide6 入門を終えた人が、実際のアプリひとつを完成まで持っていく実践シリーズの第 1 回です。何を作るのか(ローカルの習慣トラッカー)となぜこの題材なのか、機能要件を画面単位に分解する方法、UI・コア・データの 3 層にコードを分ける構造とその理由、uv ベースのプロジェクトセットアップ、そしてこの先 8 回を支えるメインウィンドウの骨組みまで作ります。
NumPy 入門 — 配列が Python のリストより速い理由と基本の使い方
データ処理の基盤ライブラリ NumPy を原理から整理します。Python のリストが遅くならざるをえないメモリ構造と ndarray がそれを解決する仕組み、ループをなくすベクトル化演算、形の違う配列同士が計算できるブロードキャストのルール、スライスがコピーではなくビューであるがゆえの罠、axis の概念で読む集計、そして NumPy を使わないほうがよいケースまで扱います。
Rust で JSON を扱う — serde デシリアライズ実践まとめ
Rust の JSON 処理の標準である serde を実践の順序で整理します。derive 1 行で始める構造体のデシリアライズ、フィールドがないかもしれない現実の JSON を受ける Option と default、API の camelCase をつなぐ rename_all、構造の分からない JSON を探る Value、形が複数ある応答を受ける enum と untagged、そしてエラーメッセージから位置を読む方法まで扱います。
PyO3 で Python 拡張モジュールを作る — maturin のビルドから wheel 配布まで
Polars、Ruff、pydantic が証明した経路「Python のボトルネック関数だけ Rust に」を実際に歩きます。maturin new で始めるプロジェクト構造、#[pyfunction] と #[pymodule] で Rust 関数を Python に公開する方法、maturin develop の開発サイクル、型変換(str・list・dict)の規則、free-threaded Python 時代との相性、そして wheel のビルドと PyPI への配布まで扱います。
Box・Rc・Arc の違い — Rust のスマートポインタ、いつ何を使うか
基礎講座が The Book に預けていた空白を回収します。値をヒープに置く Box が必要な 3 つの状況(再帰型、dyn トレイト、大きな値の移動)、所有者を複数にする Rc と参照カウント、スレッドをまたぐ Arc、実行時の借用検査で内部可変性を開く RefCell、そして実務のイディオムである Rc<RefCell<T>> と Arc<Mutex<T>> まで、選択基準を決定手順として整理します。