【ITニュース解説】Building a Crypto Portfolio Tracker with PyQt6
2025年09月07日に「Dev.to」が公開したITニュース「Building a Crypto Portfolio Tracker with PyQt6」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
PyQt6を使った暗号資産ポートフォリオ管理アプリの作成事例。CSVファイルの読み込み、Kraken APIからの価格取得、データ表示を実装。UIの応答性を保つため、マルチスレッド処理を導入。pandasのDataFrameとQTableWidgetを連携させ、GUIとデータを同期。configファイルによるシンボルマッピングやロギング機能も追加。
ITニュース解説
このニュース記事は、PyQt6というPythonのライブラリを使って、仮想通貨のポートフォリオを管理するデスクトップアプリケーションを作成した事例を紹介している。システムエンジニアを目指す初心者にとって、GUIプログラミング、API連携、スレッド処理などを学ぶ上で役立つ内容だ。
このアプリケーションの目的は、仮想通貨の保有状況をCSVファイルから読み込み、仮想通貨取引所Krakenから最新の価格情報を取得し、それらをテーブル表示することだ。主な機能として、ポートフォリオのCSVファイル読み込み、Krakenからの価格情報更新、更新されたデータのCSVファイルへのエクスポートの3つがある。
アプリケーションのUIは、QTableWidgetというQtのウィジェットでポートフォリオのデータを表示し、ロード、リフレッシュ、エクスポートのボタンが配置されている。ポートフォリオの読み込みでは、QFileDialogを使ってCSVファイルを選択し、pandasというデータ分析ライブラリのDataFrameにデータを格納する。DataFrameは表形式のデータを扱うのに適しており、読み込んだデータをテーブルに表示するために利用される。
価格情報の取得は、KrakenのAPIを利用する。ここで重要なのが、UIスレッドをブロックしないように、マルチスレッドを使用している点だ。APIへのリクエストには時間がかかる場合があり、UIスレッドをブロックすると、アプリケーションが応答しなくなる。そこで、QThreadPoolとQRunnableを使い、APIリクエストをバックグラウンドで実行することで、UIの応答性を保っている。具体的には、各仮想通貨シンボルに対してWorkerクラスのインスタンスを作成し、スレッドプールで実行する。Workerクラスは、指定された関数を指定された引数で実行する役割を持つ。
Kraken APIから取得した価格情報は、DataFrameに格納され、QTableWidgetに表示される。テーブルには、シンボル(例:BTC)、保有量(CSVファイルから)、価格(Krakenから)、合計評価額(保有量×価格)が表示される。
このアプリケーションでは、loggingモジュールを使ってログを記録している。ログは、ファイルとコンソールに出力され、APIのレスポンスのデバッグや、PyInstallerを使ったアプリケーションのパッケージングの際に役立つ。PyInstallerは、Pythonスクリプトをスタンドアロンの実行可能ファイルに変換するツールだが、設定ファイルなどのリソースの取り扱いに注意が必要となる。
このプロジェクトから得られる教訓はいくつかある。まず、GUIプログラミングにおいて、スレッド処理は非常に重要である。UIスレッドをブロックすると、アプリケーションがフリーズしてしまう。次に、PyQt6のレイアウトは柔軟だが、複雑なレイアウトを構築するには試行錯誤が必要となる。そして、pandasとQTableWidgetを組み合わせることで、GUIとデータを簡単に同期できる。
このアプリケーションのソースコードはGitHubで公開されており、動作デモはYouTubeで見ることができる。これらのリソースは、PyQt6を使ったGUIプログラミングを学ぶ上で参考になるだろう。特に、マルチスレッドの実装や、API連携、データ表示といった要素は、他のアプリケーション開発にも応用できる。