0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PC最適化ガイド: Pythonを使ったシステム分析と対策 (claude3.7に聞いた例)

Posted at

PC最適化ガイド: Pythonを使ったシステム分析と対策

1. はじめに

このガイドでは、Pythonスクリプトを使用してPCのパフォーマンスを分析し、最適化する方法を解説します。市販のPC最適化ソフトウェアを購入しなくても、無料で効果的にパフォーマンスを向上させることが可能です。

2. 分析ツール

2.1 必要な環境

  • Python 3.x
  • psutilライブラリ(pip install psutilでインストール)

2.2 分析スクリプト

以下のPythonスクリプトをpython-pc-analyzer.pyとして保存します:

import os
import platform
import psutil
import shutil
import datetime
import time

def get_system_info():
    """基本的なシステム情報を収集"""
    print("\n===== システム情報 =====")
    print(f"OS: {platform.system()} {platform.release()}")
    print(f"バージョン: {platform.version()}")
    print(f"マシン: {platform.machine()}")
    print(f"プロセッサ: {platform.processor()}")
    
    # CPU情報
    cpu_count = psutil.cpu_count(logical=False)
    cpu_count_logical = psutil.cpu_count()
    print(f"CPU物理コア数: {cpu_count}")
    print(f"CPU論理コア数: {cpu_count_logical}")
    
    # メモリ情報
    mem = psutil.virtual_memory()
    print(f"総メモリ: {mem.total / (1024**3):.2f} GB")
    print(f"利用可能メモリ: {mem.available / (1024**3):.2f} GB")
    print(f"メモリ使用率: {mem.percent}%")

def check_disk_usage():
    """ディスク使用状況の分析"""
    print("\n===== ディスク使用状況 =====")
    partitions = psutil.disk_partitions()
    
    for partition in partitions:
        if os.name == 'nt' and ('cdrom' in partition.opts or partition.fstype == ''):
            # スキップ: CDROMドライブなど
            continue
        try:
            usage = psutil.disk_usage(partition.mountpoint)
            print(f"ドライブ: {partition.device}")
            print(f"  マウントポイント: {partition.mountpoint}")
            print(f"  ファイルシステム: {partition.fstype}")
            print(f"  総容量: {usage.total / (1024**3):.2f} GB")
            print(f"  使用量: {usage.used / (1024**3):.2f} GB")
            print(f"  空き容量: {usage.free / (1024**3):.2f} GB")
            print(f"  使用率: {usage.percent}%")
            
            # 警告表示
            if usage.percent > 90:
                print("  [警告] ディスク使用率が90%を超えています!")
            elif usage.percent > 80:
                print("  [注意] ディスク使用率が80%を超えています")
        except Exception as e:
            print(f"  エラー: {e}")

def find_large_files(path, min_size_mb=100, top_n=20):
    """指定サイズ以上の大きなファイルを検索"""
    print(f"\n===== 大きなファイル (>{min_size_mb}MB) トップ{top_n} =====")
    min_size = min_size_mb * 1024 * 1024  # MB → バイト
    large_files = []
    
    for root, dirs, files in os.walk(path):
        for file in files:
            try:
                file_path = os.path.join(root, file)
                file_size = os.path.getsize(file_path)
                if file_size > min_size:
                    large_files.append((file_path, file_size))
            except (PermissionError, FileNotFoundError):
                # アクセス権限がない、またはファイルが見つからない場合はスキップ
                continue
    
    # サイズでソート
    large_files.sort(key=lambda x: x[1], reverse=True)
    
    # トップNを表示
    for i, (file_path, size) in enumerate(large_files[:top_n], 1):
        print(f"{i}. {file_path}")
        print(f"   サイズ: {size / (1024**2):.2f} MB")

def check_running_processes(top_n=10):
    """実行中のプロセスのメモリ・CPU使用状況"""
    print(f"\n===== リソース使用率の高いプロセス (トップ{top_n}) =====")
    
    # CPUとメモリ使用率でソートするためにプロセス情報を収集
    processes = []
    for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']):
        try:
            processes.append(proc.info)
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass
    
    # CPU使用率順に表示
    print("CPU使用率が高いプロセス:")
    processes_sorted_by_cpu = sorted(processes, key=lambda p: p['cpu_percent'], reverse=True)
    for i, proc in enumerate(processes_sorted_by_cpu[:top_n], 1):
        print(f"{i}. PID: {proc['pid']}, 名前: {proc['name']}, CPU: {proc['cpu_percent']}%")
    
    # メモリ使用率順に表示
    print("\nメモリ使用率が高いプロセス:")
    processes_sorted_by_memory = sorted(processes, key=lambda p: p['memory_percent'], reverse=True)
    for i, proc in enumerate(processes_sorted_by_memory[:top_n], 1):
        print(f"{i}. PID: {proc['pid']}, 名前: {proc['name']}, メモリ: {proc['memory_percent']:.2f}%")

def check_startup_programs():
    """スタートアップ項目の確認(Windowsのみ)"""
    if platform.system() != 'Windows':
        print("\n===== スタートアップ項目の確認 =====")
        print("この機能はWindowsのみサポートしています")
        return
    
    try:
        import winreg
        
        print("\n===== スタートアップ項目 =====")
        
        # 共通のスタートアップフォルダをチェック
        startup_folders = [
            os.path.join(os.environ["APPDATA"], "Microsoft\\Windows\\Start Menu\\Programs\\Startup"),
            os.path.join(os.environ["PROGRAMDATA"], "Microsoft\\Windows\\Start Menu\\Programs\\Startup")
        ]
        
        for folder in startup_folders:
            if os.path.exists(folder):
                print(f"フォルダ: {folder}")
                for item in os.listdir(folder):
                    print(f"  {item}")
        
        # レジストリのスタートアップキーをチェック
        registry_paths = [
            (winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
            (winreg.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
            (winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce"),
            (winreg.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce")
        ]
        
        for reg_key, reg_path in registry_paths:
            try:
                key = winreg.OpenKey(reg_key, reg_path)
                print(f"レジストリ: {reg_path}")
                
                i = 0
                while True:
                    try:
                        name, value, _ = winreg.EnumValue(key, i)
                        print(f"  {name}: {value}")
                        i += 1
                    except WindowsError:
                        break
                
                winreg.CloseKey(key)
            except WindowsError:
                pass
    except ImportError:
        print("winregモジュールを読み込めません。レジストリ情報は表示できません。")

def check_temp_files():
    """一時ファイルの確認"""
    print("\n===== 一時ファイル =====")
    
    temp_paths = []
    
    if platform.system() == 'Windows':
        # Windowsの一時ファイルフォルダ
        temp_paths.append(os.environ.get('TEMP', 'C:\\Windows\\Temp'))
    else:
        # Linux/Macの一時ファイルフォルダ
        temp_paths.append('/tmp')
    
    for temp_path in temp_paths:
        if os.path.exists(temp_path):
            temp_size = 0
            file_count = 0
            
            try:
                for root, dirs, files in os.walk(temp_path):
                    for file in files:
                        try:
                            file_path = os.path.join(root, file)
                            temp_size += os.path.getsize(file_path)
                            file_count += 1
                        except (PermissionError, FileNotFoundError):
                            continue
                
                print(f"一時ファイルフォルダ: {temp_path}")
                print(f"  ファイル数: {file_count}")
                print(f"  合計サイズ: {temp_size / (1024**2):.2f} MB")
                
                if temp_size > 1024**3:  # 1GB以上
                    print("  [推奨] 一時ファイルのクリーンアップをお勧めします")
            except Exception as e:
                print(f"  エラー: {e}")

def analyze_system():
    """システム分析の実行"""
    print("===== システム分析を開始します =====")
    start_time = time.time()
    
    # 各分析モジュールを実行
    get_system_info()
    check_disk_usage()
    check_running_processes()
    check_startup_programs()
    check_temp_files()
    
    # ユーザーフォルダの大きなファイルを探す(Windowsの場合)
    if platform.system() == 'Windows':
        user_folder = os.environ['USERPROFILE']
        try:
            find_large_files(user_folder)
        except Exception as e:
            print(f"大きなファイルの検索中にエラーが発生しました: {e}")
    
    # 分析レポートの生成
    print("\n===== 最適化の推奨事項 =====")
    
    # メモリ使用率に基づく推奨事項
    mem = psutil.virtual_memory()
    if mem.percent > 80:
        print("・メモリ使用率が高いです。不要なアプリケーションを閉じるか、メモリの増設を検討してください。")
    
    # ディスク使用率に基づく推奨事項
    for partition in psutil.disk_partitions():
        try:
            usage = psutil.disk_usage(partition.mountpoint)
            if usage.percent > 85:
                print(f"・ドライブ {partition.device} の空き容量が少なくなっています。不要なファイルを削除してください。")
        except Exception:
            pass
    
    # 実行時間の表示
    elapsed_time = time.time() - start_time
    print(f"\n分析完了 (実行時間: {elapsed_time:.2f}秒)")
    print("===== 結果に基づいてパソコンの最適化を行ってください =====")

if __name__ == "__main__":
    # モジュールpsutilが必要です
    # pip install psutil で事前にインストールしてください
    try:
        analyze_system()
    except Exception as e:
        print(f"エラーが発生しました: {e}")
        print("psutilモジュールがインストールされているか確認してください。")
        print("インストール方法: pip install psutil")

2.3 スクリプトの実行方法

  1. コマンドプロンプトまたはターミナルを開く
  2. 以下のコマンドでpsutilをインストール:
    pip install psutil
  3. 保存したスクリプトのあるフォルダに移動:
    cd フォルダのパス
  4. スクリプトを実行:
    python python-pc-analyzer.py

3. 分析結果の見方と対策

3.1 メモリ使用率

症状: メモリ使用率が80%以上

対策:

  • 不要なアプリケーションを終了する
  • ブラウザのタブを減らす
  • スタートアップアプリを減らす
  • メモリリークのあるアプリを特定して再起動
  • メモリの増設を検討

3.2 バックグラウンドプロセス

症状: 特定のプロセスがメモリを大量に使用

対策:

  • タスクマネージャーで不要なプロセスを終了
  • バックグラウンド実行設定を変更(例:ブラウザの設定)
  • Windowsの設定 → システム → 省電力とバッテリー → バックグラウンドアプリの制限をオン

3.3 一時ファイル

症状: 大量の一時ファイルが蓄積

対策:

  • ディスククリーンアップツールを実行
  • 手動で削除:
    del /q /f /s %TEMP%*
  • CCleaner等の無料ツールを使用

3.4 大きなファイル

対策:

  • 不要なインストーラーや古いダウンロードファイルを削除
  • 重複ファイルを削除
  • 特に大きいファイルを外部ストレージに移動

3.5 スタートアップ項目

対策:

  1. タスクマネージャー →「スタートアップ」タブ
  2. 不要な項目を右クリック →「無効にする」
  3. 特に確認すべき項目:
    • クラウドストレージ同期アプリ
    • メッセンジャーアプリ
    • ブラウザ
    • アップデートツール

3.6 システムプロセスの最適化

対策:

  1. Windows検索を最適化:

    • 「インデックスのオプション」で検索対象を限定
  2. 視覚効果の削減:

    • Win+R →「SystemPropertiesAdvanced」→「パフォーマンスの設定」
    • 「パフォーマンスを優先する」を選択
  3. 仮想メモリの最適化:

    • コントロールパネル →システムとセキュリティ →システム →詳細設定
    • 「詳細設定」タブ →パフォーマンス「設定」→「詳細設定」タブ
    • 「仮想メモリ」の「変更」→カスタム設定
    • 初期サイズ = RAM × 1.5、最大サイズ = RAM × 3

4. 定期的なメンテナンス計画

最適なパフォーマンスを維持するためには、以下の作業を定期的に行うことをお勧めします:

4.1 週次メンテナンス

  • ブラウザのキャッシュをクリア
  • ごみ箱を空にする
  • ダウンロードフォルダを整理

4.2 月次メンテナンス

  • ディスククリーンアップを実行
  • 大きなファイルを確認・整理
  • 不要なプログラムをアンインストール
  • システム分析スクリプトを実行して状態を確認

4.3 四半期メンテナンス

  • ディスクの最適化/デフラグを実行(SSDでは不要)
  • Windows Updateを確認
  • スタートアップ項目を見直す
  • バックアップを作成

5. ハードウェアアップグレードの検討

ソフトウェア最適化だけでは十分なパフォーマンス向上が見られない場合は、以下のハードウェアアップグレードを検討してください:

  1. メモリ増設: 最も費用対効果の高いアップグレード
  2. SSDへの換装: HDDを使用している場合
  3. CPU/マザーボードの更新: 予算に余裕がある場合

6. まとめ

このPython分析ツールと最適化ガイドを活用することで、市販の最適化ソフトウェアを購入することなく、PCのパフォーマンスを効果的に向上させることができます。定期的なメンテナンスを習慣づけることで、PCの寿命を延ばし、快適な使用環境を維持することが可能です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?