記事内にはプロモーションが含まれています

Pythonでクリップボードを操作!コピー・取得・画像や監視方法

Pythonでクリップボードを操作!コピー・取得・画像や監視方法 Python

Pythonを使って業務効率化ツールを作っていると、「クリップボードの内容を自動で読み取りたい」「処理結果をクリップボードにコピーしてすぐに貼り付けられるようにしたい」という場面によく遭遇します。

普段何気なく使っているコピー&ペースト(コピペ)の機能をPythonプログラムに組み込むことができれば、テキストエディタやExcel、ブラウザ間でのデータ移動を自動化でき、手作業の手間を大幅に減らすことが可能です。

この記事では、Pythonでクリップボードを操作するための基本的な方法から、画像の扱い、クリップボードの監視といった応用テクニックまで、実務で役立つ知識をサンプルコード付きで詳しく解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

Pythonでクリップボードを操作する方法とは?標準ライブラリはある?

Pythonでクリップボードを扱う方法は大きく分けて2つあります。

一つはPythonに最初から入っている「標準ライブラリ」を使う方法、もう一つはより簡単に扱える「外部ライブラリ」を使う方法です。

それぞれの特徴を理解して、目的に合った方を選びましょう。

標準ライブラリ「tkinter」を使う方法

Pythonには標準でGUI(グラフィカルユーザーインターフェース)を作成するための tkinter というライブラリが含まれています。

この tkinter にはクリップボードを操作する機能が備わっているため、追加のインストールなしで利用することが可能です。

ただし、tkinter は本来ウィンドウ画面を作るためのものなので、クリップボード機能だけを使いたい場合でも、裏側でウィンドウの部品(インスタンス)を作成する必要があります。

そのため、コードが少し記述しにくくなるという側面があります。

外部ライブラリ「pyperclip」を使う方法(推奨)

テキストデータのやり取りだけであれば、pyperclip という外部ライブラリを使うのが最も簡単で一般的です。

Windows、Mac、Linuxといった異なるOS間の違いを吸収してくれるため、非常にシンプルなコードでコピーやペーストの実装ができます。

本記事では、主にこの pyperclip を使った手法を中心に、画像などを扱う場合は Pillow などのライブラリを組み合わせる方法を紹介していきます。

【基本】pyperclipを使ったテキストのコピーと取得

まずは、テキストをクリップボードにコピーしたり、クリップボードにあるテキストを取得したりする基本的な操作を見ていきましょう。

これを使うだけで、プログラムの出力結果をユーザーが手動でコピーする手間を省けます。

ライブラリのインストール

pyperclip は外部ライブラリですので、使用する前にインストールが必要です。

ターミナル(またはコマンドプロンプト)で以下のコマンドを実行してください。

pip install pyperclip

クリップボードに文字列をコピーする

Pythonプログラム内の文字列をクリップボードに送るには、pyperclip.copy() 関数を使用します。

import pyperclip

# クリップボードにコピーしたい文字列
text_to_copy = "Pythonでクリップボードを操作するのは簡単です!"

# コピーを実行
pyperclip.copy(text_to_copy)

print("クリップボードにコピーしました。")
print("メモ帳などに貼り付けて確認してみてください。")

ソースコードの解説

import pyperclip でライブラリを読み込みます。
pyperclip.copy() の引数に文字列を渡すだけで、その文字列がクリップボードに保存されます。

実行後にメモ帳などを開き、「Ctrl + V」(MacならCommand + V)を押すと、指定した文字列が貼り付けられることを確認できるはずです。

クリップボードから文字列を取得(ペースト)する

現在クリップボードに入っているテキストデータをPythonプログラムで受け取るには、pyperclip.paste() 関数を使用します。

import pyperclip

# 実行前に、何か適当なテキストをコピーしておいてください
# 例:「あいうえお」という文字をコピーした状態で実行します

# クリップボードの内容を取得
clipboard_content = pyperclip.paste()

print("--- クリップボードの中身 ---")
print(clipboard_content)
print("----------------------------")

実行結果

--- クリップボードの中身 ---
あいうえお
----------------------------

ソースコードの解説

pyperclip.paste() を呼び出すと、実行時点でクリップボードに保持されているテキストデータが返り値として取得できます。

WebサイトのURLやExcelの特定のセルをコピーした状態でこのスクリプトを実行すれば、その内容を変数に格納して、加工や保存といった次の処理に繋げることができます。

クリップボードの画像を扱う方法(取得・保存)

pyperclip はテキスト専用のライブラリであるため、画像データを扱うことはできません。

クリップボードにある画像をPythonで取得し、ファイルとして保存するには、画像処理ライブラリである Pillow(PIL)の ImageGrab モジュールを使用します。

Pillowを使った画像の取得

Pillow も外部ライブラリですので、インストールが必要です。

pip install Pillow

以下のコードは、クリップボードにある画像を取得し、ファイルとして保存するサンプルです。

スクリーンショットを撮ってクリップボードに保存した状態で試してみてください。

from PIL import ImageGrab

# クリップボードから画像を取得
# 画像がない場合は None が返る
image = ImageGrab.grabclipboard()

if image is None:
    print("クリップボードに画像がありません。")
else:
    print(f"画像を取得しました。サイズ: {image.size}")
    
    # 画像をファイルとして保存
    save_path = "clipboard_image.png"
    image.save(save_path)
    print(f"画像を {save_path} に保存しました。")

ソースコードの解説

ImageGrab.grabclipboard() メソッドを使うと、クリップボード内の画像データを取得できます。

もしクリップボードの中身がテキストなど画像以外だった場合は None が返されるため、if image is None: でチェックを行っています。

取得できたデータはPillowのImageオブジェクトなので、そのまま .save() メソッドを使ってpngやjpg形式で保存したり、リサイズなどの画像処理を行ったりすることが可能です。

PandasでExcelや表データをクリップボードから直接読み込む

データ分析を行う際に、ExcelやGoogleスプレッドシートの表データをコピーし、Pythonの pandas で処理したいというケースがあります。

この場合、CSVファイルなどを経由せずに、クリップボードから直接データフレーム(DataFrame)として読み込む機能が便利です。

read_clipboard関数の活用

pandas には read_clipboard() という便利な関数が用意されています。

import pandas as pd

# Excelなどで表をコピーした状態で実行します
try:
    # クリップボードのデータをDataFrameとして読み込む
    df = pd.read_clipboard()
    
    print("--- 読み込んだデータ ---")
    print(df)
    
except Exception as e:
    print("データの読み込みに失敗しました。")
    print(e)

ソースコードの解説

pd.read_clipboard() を実行すると、クリップボードにあるテキストデータを自動的に解析し、表形式のデータとして読み込みます。

タブ区切りやカンマ区切りなどを自動で判別してくれるため、Excelからコピーした範囲をそのままPythonで集計したい場合に非常に強力なツールとなります。

クリップボードを監視して変更を検知するプログラム

「特定のテキストがコピーされたら自動的に翻訳する」「URLがコピーされたら自動でブラウザを開く」といったツールを作るためには、クリップボードの中身を常時監視する必要があります。

Pythonでこれを実現するには、一定間隔でクリップボードの内容を確認し、変化があった場合のみ処理を行うループを作成します。

監視プログラムのサンプルコード

import pyperclip
import time

def monitor_clipboard():
    # 監視開始時のクリップボードの内容を保持
    last_text = pyperclip.paste()
    print("クリップボードの監視を開始します... (Ctrl+Cで終了)")

    try:
        while True:
            # 現在のクリップボードの内容を取得
            current_text = pyperclip.paste()

            # 前回の内容と比較して変更があれば処理を実行
            if current_text != last_text:
                print(f"変更を検知しました: {current_text}")
                
                # ここに実行したい処理を書く(例:ファイルに保存、API送信など)
                
                # 最新の内容に更新
                last_text = current_text
            
            # 1秒待機(PCへの負荷を抑えるため)
            time.sleep(1)
            
    except KeyboardInterrupt:
        print("\n監視を終了します。")

if __name__ == "__main__":
    monitor_clipboard()

ソースコードの解説

while True: で無限ループを作り、time.sleep(1) で1秒ごとにクリップボードの内容を確認しています。

変数 last_text に直前の内容を保存しておき、current_text(現在の内容)と比較することで、内容が変わった瞬間だけを検知する仕組みです。

この仕組みを応用すれば、コピー履歴を保存するツールなども作成できます。

クリップボードの履歴管理やクリア方法

クリップボードは便利な反面、パスワードや個人情報などが残り続けるとセキュリティ上のリスクになることがあります。

Pythonを使ってクリップボードをクリアする方法や、履歴に関する考え方についても知っておきましょう。

クリップボードをクリアする

クリップボードを空にするには、空文字 "" をコピーするのが最も簡単な方法です。

import pyperclip

# クリップボードをクリア(空文字をコピー)
pyperclip.copy("")

# 確認
content = pyperclip.paste()
if content == "":
    print("クリップボードは空です。")

クリップボードの履歴について

WindowsやMacの標準機能として「クリップボード履歴」が存在する場合、Pythonから pyperclip.copy() でデータを送ると、その履歴の一部として保存されていきます。

Pythonプログラム側からOSの履歴機能そのものを直接操作(履歴の一括削除など)するのは、pyperclip だけでは難しく、OSごとの専用APIを叩く必要があります。

したがって、機密情報を扱うプログラムを作成する場合は、処理が終わったら明示的に空文字をコピーして上書きするなど、情報漏洩への配慮を行うと良いでしょう。

Pythonのスキルを活かして年収を上げる方法

以上、Pythonのクリップボード操作について解説してきました。

なお、Pythonのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPythonの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。