WhatsAppのチャットログは長期間使っていると膨大な量になります。特に活発なグループチャットでは、過去の会話を探すのが大変です。そこで便利なのが、ログを日付ごとに分割するツールです。今回は既存のWhatsAppログ分割ツールをより使いやすくするための改良作業を紹介します。
1. 元のツールの課題
もともとのWhatsAppログ分割ツールは機能的には十分でしたが、使い勝手に少し問題がありました。処理が完了するとポップアップメッセージが表示され、出力先のフォルダも別途指定する必要がありました。また、ファイルをドラッグ&ドロップした後でも、実行ボタンを押さなければ処理が始まりませんでした。
ポップアップは作業の流れを中断させます。また、保存先を毎回選ぶのは、文房具をいつも決まった場所に置いておけばいいのに、使うたびに「どこに置こうか」と考えるようなものです。
2. 改良の目標
ツールの改良にあたり、次の3点を目標としました:
- 完了メッセージをポップアップからログ表示に変更する
- 出力フォルダを入力ファイルと同じ場所に自動設定する
- ドラッグ&ドロップしたファイルを自動的に処理する


これらの変更によって、ユーザーは余計な操作に時間を取られることなく、スムーズに作業を進められるようになります。
3. 改良作業の流れ
改良は大きく分けて3つのステップで行いました。コードの中から関連する部分を見つけ出し、必要な変更を加えます。
3.1. 完了メッセージの変更
まず、完了メッセージの表示部分を見つけました。これはprocess_fileメソッドの中にあります:
# 変更前
self.root.after(0, lambda: messagebox.showinfo("完了", f"処理が完了しました。\n出力先: {output_dir}"))
# 変更後
self.log(f"処理が完了しました。出力先: {output_dir}")
Code language: PHP (php)
この変更により、処理完了のお知らせがポップアップウィンドウではなく、ログエリアに表示されるようになりました。作業の流れを中断せず、ユーザーは必要なときにログを確認できます。
3.2. 出力フォルダの設定変更
次に、出力フォルダの設定に関する変更を行いました。
- 出力ディレクトリ選択UIの削除
- 出力先を入力ファイルと同じ場所に自動設定
出力ディレクトリを選ぶためのUI部分はもう不要なので、以下のコードを削除しました:
# 削除したコード
output_dir_frame = ttk.LabelFrame(self.root, text="出力ディレクトリ")
output_dir_frame.pack(fill="x", padx=5, pady=5)
self.output_dir_var = tk.StringVar(value=self.output_dir)
output_entry = ttk.Entry(output_dir_frame, textvariable=self.output_dir_var, width=50)
output_entry.grid(row=0, column=0, padx=5, pady=5, sticky="ew")
output_browse_button = ttk.Button(output_dir_frame, text="参照...", command=self.browse_output_dir)
output_browse_button.grid(row=0, column=1, padx=5, pady=5)
Code language: PHP (php)
そして、出力先の決定方法を変更しました:
# 変更前
folder_name = self.get_output_folder_name(input_file)
base_output_dir = self.output_dir_var.get()
output_dir = os.path.join(base_output_dir, folder_name)
# 変更後
folder_name = self.get_output_folder_name(input_file)
input_file_dir = os.path.dirname(input_file)
output_dir = os.path.join(input_file_dir, folder_name)
Code language: PHP (php)
これにより、入力ファイルと同じフォルダに自動的に出力されるようになりました。ファイルの場所を探す手間が省け、関連ファイルが同じ場所に整理されるため、後から見つけやすくなります。
3.3. ドラッグ&ドロップの自動実行機能追加
最後に、ファイルがドロップされたときの処理を行うhandle_dropメソッドを修正しました:
def handle_drop(self, event):
"""ドラッグ&ドロップされたファイルを処理する"""
# ドロップされたファイルのパスを取得
file_path = event.data
# WindowsやMacでの特殊な形式に対応
if file_path.startswith('{') and file_path.endswith('}'):
file_path = file_path[1:-1]
# 前後の空白や引用符を削除
file_path = file_path.strip('" ')
# ファイルパスを設定
self.file_path_var.set(file_path)
# 自動的に実行処理を開始
self.execute()
Code language: PHP (php)
最後の1行self.execute()を追加することで、ファイルがドロップされると同時に処理が自動的に開始されるようになりました。この変更はシンプルですが、操作性を大きく向上させます。
4. 改良後のツールの使い方
改良後のツールの使い方はとても簡単です。
4.1. 操作方法1(ファイル選択から):
- 「参照…」ボタンを押して入力ファイルを選択
- 出力オプション(すべての日付/最新の日付のみ)を選択
- 「実行」ボタンを押す
4.2. 操作方法2(ドラッグ&ドロップ):
- ファイルをツールウィンドウにドラッグ&ドロップする
- 自動的に処理が始まる
どちらの方法でも、処理が完了すると、ログエリアに完了メッセージが表示され、自動的に出力フォルダが開きます。選択した入力ファイルと同じフォルダに、日付ごとに分割されたログファイルが保存されます。
5. まとめ
今回の改良で、WhatsAppログ分割ツールは次のように変わりました:
- 処理完了時のポップアップメッセージをログ表示に変更
- 出力ディレクトリ選択UIを削除
- 入力ファイルと同じ場所に自動的に出力するよう変更
- ドラッグ&ドロップでファイルを取り込んだ後、自動的に処理を開始する機能を追加
これらの変更により、ツールの操作手順が簡素化され、より直感的に使えるようになりました。特にドラッグ&ドロップの自動実行機能は、「スマートフォンのカメラアプリを立ち上げると自動的にカメラが起動する」といった、当たり前に感じる操作性に近づいたと言えるでしょう。
小さな改良ですが、繰り返し使うツールでは、このような細かな使い勝手の向上が大きな違いを生み出します。技術的には単純な変更でも、ユーザー体験を考えた設計をすることで、ツールの価値は大きく向上します。
この改良は、「ユーザーにとって最適な体験とは何か」を考えることの重要性を示しています。テクノロジーは複雑さを隠し、シンプルに使えるものであるべきなのです。これからも「より少ない操作でより多くのことができる」を目指して、改良を続けていきたいと思います。