53
アーカイブされたiChatを整理する

仕事でもプライベートでも、MacをAppleのiChatに大きく依存しています。Macworldのスタッフ仲間や、世界中に散らばる家族や友人と毎日チャットしています。iChatは連絡を取り合うのに最適な方法です。iChatセッションでは多くの有益な情報がやり取りされるため、ずっと前からログ機能を有効にしています(「iChat:環境設定」を選択し、「メッセージ」タブをクリックして「会話記録を自動保存」オプションを選択します)。時々ログファイルを開いて整理しているのですが、すぐに溜まってしまいます。現在、2004年2月まで遡って5,428件ものiChat会話記録があります。

OS X 10.4 がリリースされる前は、Spiny Software の無料アプリ Logorrhea を使ってチャットから特定の情報を探していました。OS X 10.4 では、Logorrhea と Spotlight を組み合わせて使っています (Logorrhea は少し遅いですが、探しているものを正確に制御しやすいです)。これはこれで良いのですが、アーカイブされたチャットが大量にあるので、整理するための仕組みが必要です。デフォルトでは (変更できませんが)、すべての iChat ログはユーザーの Documents/iChats フォルダに保存されます。このフォルダにはサブフォルダはなく、ファイルが山積みになっています。各チャットの日付を確認するには、リスト表示を使用するか、iChat 独自のファイル命名規則を理解する必要があります。ログを保存する際、iChat はファイルに、チャットの相手の名前と日時に基づいて名前を付けます。例:

ジョー・チャッター 2005年11月11日 10時45分

リスト表示を使うにしてもファイル名を使うにしても、例えば先月15日にリチャードとチャットしたはずのチャットを探すのは本当に大変です。iChatフォルダを開いて、長いエントリリストをスクロールダウンしてリチャードのセクションを見つけ、そこから15日のチャットを探さなければなりません。うーん。そこで今日のGeeky Fridayでは、Pythonプログラミング言語で書いたコードを使って、iChatのログを分かりやすいサブフォルダに整理する方法をご紹介したいと思います。PythonはOS Xに付属しており(OS X 10.4にはバージョン2.3.5がインストールされています)、今日のヒントで使うために特別なものをダウンロードする必要はありません。

整理整頓する

フォルダを整理するために、以下のPythonスクリプトを使用します。先に進む前に、私はプログラマーではないことをご承知おきください。そのため、このコードを書いたわけではないだけでなく、その動作のすべてを説明することもできません。このスクリプトは、macosxhintsの読者であるJay Soffian氏が作成したもので、匿名の寄稿者であるdashv氏がiChatのログファイルの命名規則の変更に対応するために修正を加えています。

このスクリプトはiChatsフォルダ内でファイルを移動するため、 整理スキームの使用を中止したり、スクリプトが正しく動作しなかったりした場合に備えて、まずフォルダをバックアップしておくことを強くお勧めします。バックアップが完了したら、テキストエディット(ターミナルに慣れている場合は、お好みのエディタと併用してください)を開き、新しいテキスト文書を作成してください。文書がリッチテキストかプレーンテキストかわからない場合は、「フォーマット」メニューを確認してください。「プレーンテキストを作成」メニュー項目が表示されている場合は、それを選択してください。「リッチテキストを作成」項目が表示されている場合は、文書は既にプレーンテキストになっています。

次に、次のコードをコピーして新しいドキュメントに貼り付けます。

	#!/usr/bin/python import sys import os, os.path import re ichats_dir = os.path.join(os.getenv("HOME"), "Documents/iChats") Patterns = map(re.compile, ( r" on d{4}-d{2}-d{2} at d{2}.d{2}.i{,1}chat$", r" on d{4}-d{2}-d{2} at d{2}.d{2} #d+.i{,1}chat$", r" #d+.chat$", r".chat$", ) ) for chat in os.listdir(ichats_dir): aim = None for pattern in patterns: if pattern.search(chat): aim = pattern.sub("", chat) break if aim is None: continue aim_dir = os.path.join(ichats_dir, aim) if os.path.isdir(aim_dir) ではありません: os.mkdir(aim_dir) src = os.path.join(ichats_dir, chat) dst = os.path.join(ichats_dir, aim_dir, chat) print "%s -> %s/%s" % (chat, aim_dir, chat) os.rename(src, dst)	

基本的に、このスクリプトはフォルダ内のすべてのファイルを読み取り、ファイル名をチェックします。新しいファイル名が見つかるたびに、そのエントリの名前の一部をトリミングし、新しいフォルダの名前として使用します。そして、同じバディのすべてのログを新しいフォルダに移動します。フォルダ内のすべてのファイルを確認するまで、このプロセスを繰り返します。

スクリプトが正しいことを確認したら、ハードドライブのどこかに保存します。スクリプト用のフォルダを作成している場合は、そこに保存するのが最適です。または、Documentsフォルダのどこかにドロップしてください。ファイル名には 拡張子を含めることをお勧めします 。拡張子を付けないと、TextEditによって .txt が付加されますが、これは後で削除すれば済むでしょう。私はPythonスクリプトであることを示すために、拡張子に .py を使用しました。保存時に独自の拡張子を追加しようとすると、TextEditから警告が表示されます。

「.py を使用」ボタンをクリックして、テキストエディットに自分が何をしているのかを伝えます。また、コードを実行するには入力する必要があるため、名前は短く、できれば小文字のみにすることをお勧めします。そのため、入力しやすい名前にしておくのが賢明です。

スクリプトを保存したら、ターミナル(/Applications/Utilities 内)を起動します。以下は、ファイルをドキュメントフォルダに保存し、chatorg.py という名前を付けていることを前提としています。そうでない場合は、必要に応じて以下の内容を変更してください。以下のコマンドを入力し、それぞれ入力するたびにReturnキーを押してください( は入力しないでください $。プロンプトが表示されます)。

	$ cd ~/Documents $ chmod a+x chatorg.py	

まず、スクリプトのあるディレクトリに移動しました。次に、OS Xにこのプログラムが実行可能であることを伝えました。さあ、スクリプトを実行するには( バックアップは取ってありますよね?)、次のように入力するだけです

$ ./chatorg.py

Returnキーを押すとスクリプトの実行が開始され、処理するファイルごとに1行ずつ出力が表示されます。トランスクリプトの数によっては、スクリプトが完了するまで数分かかる場合があります。完了すると、iChatsフォルダがきれいに整理されていることがわかります。以下は、私のフォルダのビフォーアフターです。左側はフォルダ内に個々のファイルがばらばらに入っている様子、右側はスクリプト後の構造です。(一部の行はスクリーンネームかメールアドレスが表示されていたため、歪ませて表示しています。)

すべてをフォルダ分けすれば、特定の相手とのiChatのやり取りを見つけるのがずっと簡単になります。相手のフォルダを見つけて開き、日付順に並べ替えるだけです。嬉しいことに、この整理方法はLogorrheaやSpotlightには影響しません。どちらも、アーカイブされたiChatのトランスクリプト内を問題なく検索し続けます。

整理整頓する

iChatを使い続けると、フォルダの最上位にアーカイブが追加されていくことを覚えておいてください。そのため、上記のターミナルの手順を定期的に繰り返して、iChatフォルダの並べ替えを行ってください。フォルダアクションスクリプトとAutomatorを使って、この作業を自動化する方法を現在検討中です。また、iChatのトランスクリプトをより「Spotlight対応」にする方法も検討中です。もし全て解決できたら、今後のGeeky Fridayの記事でその詳細をお伝えします。