WhatsAppログ分割ツール改良版:出力
形式のカスタマイズと使いやすさの向上

関連記事

1. はじめに

前回の記事では、WhatsAppのチャットログを日付ごとに分割するツールを作成しました。このツールは基本的な機能を備えていましたが、実際に使っていると不便な点がいくつか見つかりました。特に、出力されるファイルの名前や保存先フォルダの構造が分かりにくいという課題がありました。

今回は、ユーザーからのフィードバックを元に、ツールの改良点について共有します。特に出力形式のカスタマイズと使いやすさの向上に焦点を当てています。

2. 改良のポイント

ツールを使う中で見つかった主な課題は次の3つです。

  1. 出力フォルダ名がわかりにくい
  2. 複数のグループのログを処理すると、どのファイルがどのグループのものか区別しづらい
  3. デフォルトで表示される日数が少なすぎる

これらの課題を解決するため、コードを修正しました。

3. 出力フォルダ名の改善

以前のバージョンでは、出力フォルダ名は「今日の日付_元ファイル名」という形式でした。例えば「20250521_友達グループ」のような名前です。これは一見便利そうに見えますが、複数のファイルを処理すると、それぞれ異なるフォルダ名になって管理しづらくなります。

改良版では、出力フォルダ名を「今日の日付_WhatsApp Chats」という統一した形式に変更しました。これにより、どのファイルを処理しても同じフォルダ構造になるので、整理がしやすくなります。

具体的には、get_output_folder_nameメソッドを次のように変更しました:

def get_output_folder_name(self, input_file):
    # 現在の日時を取得
    now = datetime.datetime.now().strftime("%Y%m%d")
    
    # フォルダ名を生成(例:「20230501_WhatsApp Chats」)
    return f"{now}_WhatsApp Chats"
Code language: PHP (php)

これは、お気に入りの曲をプレイリストにまとめるように、WhatsAppのチャットログを日付ごとに一つのフォルダにまとめる方法です。毎回新しいフォルダを作るのではなく、同じ日に処理したものは同じ場所に整理されるようになります。

4. 出力ファイル名の改善

フォルダ名を統一すると、今度は別の問題が生じます。複数のチャットグループのログを同じフォルダに保存すると、ファイル名が同じになってしまうのです。例えば「2025-05-20.txt」という名前のファイルが複数できると、どれがどのグループのものか区別がつきません。

そこで、出力ファイル名を「日付_元ファイル名.txt」という形式に変更しました。例えば「2025-05-20_友達グループ.txt」のような名前になります。

実装するには、まず元のファイル名を保存する変数を追加し、process_fileメソッドで元のファイル名を保存するようにしました:

def __init__(self, root):
    # 省略...
    # 元のファイル名を保存する変数
    self.original_file_name = ""
    # 省略...

def process_file(self, input_file):
    try:
        # 省略...
        # 元のファイル名を保存(拡張子なし)
        self.original_file_name = os.path.splitext(os.path.basename(input_file))[0]
        
        # 「WhatsApp Chat - 」を除去
        self.original_file_name = self.original_file_name.replace("WhatsApp Chat - ", "")
        
        # 特殊文字を置換
        self.original_file_name = re.sub(r'[\\/:*?"<>|]', '_', self.original_file_name)
        # 省略...
Code language: PHP (php)

そして、write_per_daywrite_latest_n_daysメソッドの出力ファイル名部分を変更しました:

# 変更前
output_file = os.path.join(output_dir, f"{day.replace('/', '-')}.txt")

# 変更後
output_file = os.path.join(output_dir, f"{day.replace('/', '-')}_{self.original_file_name}.txt")
Code language: PHP (php)

これは、図書館の本に分類コードと書名が両方あるようなものです。日付という分類と、グループ名という固有の識別子を組み合わせることで、ファイルを簡単に見分けられるようになりました。

5. 最新日数のデフォルト値変更

最後の改善点は、表示される「最新の日数」のデフォルト値です。以前のバージョンではデフォルトで2日分しか表示されませんでした。しかし実際の使用では、もっと長い期間のログを確認したいことが多いです。

そこで、デフォルト値を2日から7日に変更しました:

# 変更前
self.days_var = tk.StringVar(value="2")

# 変更後
self.days_var = tk.StringVar(value="7")
Code language: PHP (php)

また、エラーが発生した場合のデフォルト値も同様に変更しました:

# 変更前
try:
    n_days = int(self.days_var.get())
except ValueError:
    n_days = 2
    self.days_var.set("2")

# 変更後
try:
    n_days = int(self.days_var.get())
except ValueError:
    n_days = 7
    self.days_var.set("7")
Code language: PHP (php)

これは、天気予報で当日だけでなく週間予報も見たいと思うのに似ています。直近の2日間だけでなく、1週間分のチャット履歴を見ることで、会話の流れをより深く理解できます。

6. 修正後のコード全体

改良点を適用した完成版のコードは、以下のようになります:

7. ツール改良の効果

この改良によって、次のような効果が得られました:

  1. フォルダ構造が統一され、どのファイルを処理しても同じフォルダに出力されるようになった
  2. 出力ファイル名に元のファイル名が含まれるため、複数のグループを処理した場合も区別が容易になった
  3. デフォルトで7日分のログが表示されるようになり、会話の流れを把握しやすくなった

これらの改良は小さな変更ですが、ツールの使いやすさが大きく向上しました。特に複数のWhatsAppグループのログを定期的に管理する場合、整理しやすくなります。

8. まとめ

今回の改良では、出力形式のカスタマイズと使いやすさの向上に焦点を当てました。具体的には出力フォルダ名を統一し、出力ファイル名に元ファイル名を含め、デフォルトの表示日数を増やしました。

これらの変更はコードの中核機能には影響しませんが、日常的な使用において大きな違いをもたらします。ユーザーインターフェースの小さな改良が、ツール全体の使いやすさを大きく向上させる好例といえるでしょう。

プログラム開発では、機能の追加だけでなく、こうした使いやすさの改善も重要な要素です。実際の使用シーンを想像して、ユーザーの視点からツールを改良していくことで、より実用的なアプリケーションに近づいていきます。