【解決編】2GBの壁をColabで突破!Outlook PSTファイルをThunderbird用MBOXに変換する自作プログラム

無料ツール
この記事は約10分で読めます。

「OutlookからThunderbirdへのデータ移行」作業で直面した「2GBの壁」。

有料ツールに頼らず、自力で解決するべく、Pythonを使ったデータコンバートプログラムを作成することになりました。

本記事では、その開発プロセス――特にGeminiとの対話(押し問答)を通じて、いかにしてこの難題を乗り越えるコードを完成させたのか、その全貌を公開します。

🚀 導入:難題を解決する鍵は「Colab」と「readpst」

問題は、2GBを超えるPSTファイル(Outlookのデータファイル)を、Thunderbirdが読み込めるMBOX形式に変換することです。

今回は、環境構築の手間がなく、Linuxコマンドを実行できるGoogle Colabを開発環境に選び、データ変換の核としてLinuxで広く使われるユーティリティreadpstを採用しました。

目標は、このreadpstのインストールと実行、そしてGoogle Driveからの入出力管理をPythonで自動化することです。

🧑‍💻 第1章:Geminiとのプログラミング対話(押し問答の全記録)

ここからは、実際に私がGeminiと交わした対話の核心部分を、会話形式で再現します。

最初に提示されたコードを、いかにして最適な「単一MBOXファイル」出力に修正していったのか、その経緯をご覧ください。

初期要求:PSTをMBOXに変換するColabコードを

Google Colab環境で、Google Driveに保存されているPSTファイルをMBOX形式に変換するPythonコードを書いてください。

readpstコマンドを使います。PSTファイルのパスは実行時に入力させたいです。

承知いたしました。

PSTファイル変換のために、pst-utilsのインストール、Google Driveのマウント、パスの入力、そしてreadpstの実行を組み合わせたColab用Pythonコードを作成します。

初期バージョンでは、readpstのデフォルト動作(PST内のフォルダ階層をMBOXファイルとして作成)に従います。

押し問答勃発!「単一MBOXファイル」へのこだわり

ちょっと待って。

Thunderbirdへのインポートが目的なので、PST内のフォルダ(受信トレイ、送信済みなど)ごとにMBOXファイルを作成するのではなく、すべてのメールを一つの大きなMBOXファイルにまとめてほしいです。

フォルダ階層は要りません。コードを修正してください。

ご要望を理解しました。

Thunderbirdでのインポートをシンプルにするため、すべてのメールを単一のMBOXファイルにまとめるようにreadpstコマンドを修正します。

具体的には、フォルダ階層を作成するデフォルトオプション(-r)を削除し、代わりに単一MBOXファイルに出力するオプション(-M)を追加します。

さらに、ログレベルを調整する-L 3オプションを加えて、実行中のメッセージを少なくしますね。

解決と確認

素晴らしい!このコードなら、2GBの壁を気にせず変換できそうです。

すべてのメールが単一のファイルにまとまるという動作も確認できました。

ありがとう、これで作業を進められます!

お役に立てて光栄です!

単一MBOXファイル出力のコードが、お客様のThunderbirdへのインポートをスムーズにすることを願っています。

成功をお祈りしています!

この押し問答によって、最終的に「パスを読み込み、単一MBOXファイルとしてDrive内の特定のフォルダに出力する」という、実用性抜群のコードが完成しました。

💻 第2章:紆余曲折の末に完成!最終Pythonコード

Geminiとの対話を経て完成した、Google Colabにそのまま貼り付けて実行できる、PSTからMBOXへの変換コードがこちらです。

このコードを実行することで、2GBを超えるPSTファイルも、ファイルサイズの制限なくMBOX形式に変換できます。

【ご利用にあたっての注意】 本ツールの使用はご自身の責任でお願いいたします。本ツールの使用により生じたいかなる損害やトラブルについて、当方は一切の責任を負いかねます。

Python

# @title
import os
from google.colab import drive

# ----------------------------------------------------
# 1. システムライブラリ (pst-utils) のインストール
# ----------------------------------------------------
print("1. システムライブラリ (pst-utils) をインストールします...")
# readpstコマンドが含まれるpst-utilsパッケージをインストール
!sudo apt-get update > /dev/null
!sudo apt-get install pst-utils -y > /dev/null
print("✅ インストール完了。")

# ----------------------------------------------------
# 2. Google Driveのマウント
# ----------------------------------------------------
print("\n2. Google Driveをマウントします。認証が必要です。")
print("   PSTファイルへの高速アクセスと結果の保存のためです。")
drive.mount('/content/drive')
print("✅ Google Driveマウント完了。")

# ----------------------------------------------------
# 3. ファイルパスの指定と変換実行
# ----------------------------------------------------
print("\n3. 変換するPSTファイルのフルパスを指定してください。")
print("   (例: /content/drive/MyDrive/Outlook_Backup/kakou.pst)")

# PSTファイルのフルパスをプロンプトで取得
PST_FILE_PATH = input("PSTファイルのフルパスを入力してください: ")

# パスが存在するかチェック
if not os.path.exists(PST_FILE_PATH):
    print(f"\n❌ エラー: 指定されたファイルが見つかりません。パスを確認してください: {PST_FILE_PATH}")
else:
    # 出力ディレクトリの決定
    OUTPUT_FILE_NAME_BASE = os.path.splitext(os.path.basename(PST_FILE_PATH))[0]
    OUTPUT_DIR_NAME = OUTPUT_FILE_NAME_BASE + "_MBOX_Converted"
    OUTPUT_BASE_PATH = os.path.dirname(PST_FILE_PATH)
    # MBOXファイルはPSTファイルと同じディレクトリ内に作成される
    MBOX_OUTPUT_FOLDER = os.path.join(OUTPUT_BASE_PATH, OUTPUT_DIR_NAME)

    # 出力フォルダが存在しない場合は作成
    if not os.path.exists(MBOX_OUTPUT_FOLDER):
        os.makedirs(MBOX_OUTPUT_FOLDER)

    print(f"\n  ✅ PSTファイル: {PST_FILE_PATH}")
    print(f"  ✅ 出力フォルダ: {MBOX_OUTPUT_FOLDER}")

    # 4. PSTからMBOXへの変換を実行 (-r オプションを削除し、すべてのメールを単一ファイルにまとめる)
    print("\n4. 変換を実行します。すべてのメールは単一のMBOXファイルに出力されます...")

    # readpstコマンドを実行: -L 3, -M, -o。-r (recursive) は削除されました。
    conversion_command = f'readpst -L 3 -M -o "{MBOX_OUTPUT_FOLDER}" "{PST_FILE_PATH}"'
    !$conversion_command

    # 5. 出力フォルダの内容を強制的にリスト表示 (確認用)
    print(f"\n5. 出力フォルダの中身を確認します (Google Drive パス: {MBOX_OUTPUT_FOLDER}):")
    # ls -R コマンドを実行し、生成されたファイルをリスト表示します
    !ls -R "{MBOX_OUTPUT_FOLDER}"
    print("↑ここに表示されているファイルが、すべてのメールを含む単一のMBOXファイルです。")

    # 6. 完了メッセージ
    print("\n=============================================")
    print("✅ 変換が完了しました!")
    print("今回はフォルダ階層が作成されず、すべてのメールが単一のMBOXファイルにまとめられました。")
    print(f"MBOXファイルはGoogle Drive内の以下の場所に保存されています:")
    # Google Driveパス形式で表示
    display_path = MBOX_OUTPUT_FOLDER.replace('/content/drive/MyDrive', 'My Drive')
    print(f"📁 {display_path}")
    print("\nThunderbirdへのインポート手順は次の通りです:")
    print("1. 上記フォルダ内の単一のMBOXファイルをダウンロードします。")
    print("2. ダウンロードしたファイルに手動で拡張子 **.mbox** を付けます。")
    print("3. ThunderbirdのImportExportTools NGを使ってインポートしてください。")
    print("=============================================")

💡 第3章:コードの使い方とThunderbirdへのインポート手順

Colabでの実行ステップ

  1. 上記のコードをGoogle Colabの新しいノートブックにコピー&ペーストします。
  2. セルを実行します。
  3. Step 2でGoogle Driveのマウント認証を求められるので、認証を完了させます。
  4. Step 3で、変換したいPSTファイルのフルパスを入力します。
    • 例:/content/drive/MyDrive/Outlook_Backup/backup.pst
    • (PSTファイルは事前にGoogle Driveの任意の場所にアップロードしておいてください)
  5. 変換が実行され、完了メッセージが表示されたら成功です。

Thunderbirdへのインポート手順(重要!)

変換されたファイルは、PSTファイルと同じ階層に新しく作成されたフォルダ(例:XXX_MBOX_Converted)内に格納されます。

  1. MBOXファイルをダウンロード: Google Driveの該当フォルダから、中にある単一のファイル(フォルダ名と同じ名前のファイルになっていることが多い)をPCにダウンロードします。
  2. Thunderbirdへインポート: ThunderbirdにImportExportTools NGなどのアドオンをインストールし、対象のフォルダーを指定してインポートすれば完了です!

これで、2GBの壁に悩まされることなく、OutlookからThunderbirdへのデータ移行を自力で、かつ費用をかけずに行うことができました。

技術的な課題に直面したときこそ、GeminiのようなAIと協力しながら、自身のスキルアップに繋がる解決策を自作する喜びを実感しました!

コメント

タイトルとURLをコピーしました