見出し画像

AIとコーディング-Safariの履歴をCSVに抽出するAppleScriptを作る

この記事では、macOSのAppleScriptを使用してSafariのブラウザ履歴をCSV形式に変換し、そのデータを簡単に分析する方法をご紹介します。
また、ChatGPT-4oやClaude3といったAIツールを活用して、コーディング、そしてコードレビューを行っています。

コードは全量この記事内でご紹介しています。ご自由にお使いください。
ただし、実行に際して問題が生じた場合、責任は負いかねますのでご了承ください。


URLを連携して、AppleScriptに変換してもらう

これがChatGPTの良いところですね。
URLを一緒に連携して、AppleScriptで動かしたい、というのを伝えるとそれだけでコードを作ってくれます。
以下の記事を参考にさせていただきました。

やりとり抜粋

出来上がったコードはバグだらけ-テストと設計の重要性

断っておくと、このタイミングで出来上がるコードはバグだらけです。というか動きません。これはある種当たり前です。
人間が書くコードも概ねそのようなものです。動くと信じてコンパイルしたり、ビルドする際にコケることもあります。そこで修正を繰り返して、とりあえずぱっと見良さそうなものが出来上がります。そこから更にレビューやテストをして、品質を上げるのです。
現時点のChatGPTは自分で実際に動かして、確認をしているわけではないので、その辺はこちらが確認する必要があります。というか、そうでもしてくれないと人間のやることがなくなります。

AIによるコーディングが当たり前になると、より一層テストフェーズが重要になってくるように思います。ちなみに、条件を全網羅してAIにテストさせれば良いじゃないか、と思うかもしれませんが、ことはそう単純ではありません。

Myersは、単純なプログラムでも、膨大な数のパスがあることを示している。1976年に、10の18乗のパスを持つ100行のプログラムを示し、比較のため、宇宙はおよそ4*10の17乗秒前に誕生したと述べている。

書籍 知識ゼロから学ぶソフトウェアテスト より引用

テストにも定石はありますが、ある種経験則から来る、人間らしい勘もまだまだ必要なところかなと思います。加えて、バグは早めに見つけたほうがコストがかからないので、AIに指示を出すところ(仕様を決めるところ等)もおざなりにはできません。

Boehm(1976)は、IBM、GTE、TRWのコストを調査し、不良の検出時期が遅くなるほど、修正コストが増加することを明らかにした。(中略)ある空軍のコンピュータでは、ソースコード1行あたり、ソフトウェア開発コストは約75ドルだったが、保守コストは、4000ドルもかかった。

書籍 知識ゼロから学ぶソフトウェアテスト より引用

これらの理由から、テストフェーズは非常に重要な役割を果たしています。単体テスト、結合テスト、システムテストなどを通じて、バグや誤りを早期に発見し、修正することができます。さらに、テストを自動化することで、リグレッションを防ぎ、ソフトウェアの品質を維持することができます。

AIが生成したコードであろうと、人間が手動で作成したコードであろうと、バグや誤りは避けられないものです。重要なのは、適切なテストとデバッグの手法を用いて、これらの問題を早期に発見し、修正することです。そうすることで、高品質のソフトウェアを開発し、維持することができるのです。

Claude3より

ただ、今の時代、一昔前と違ってゴリゴリいちからコーディングするよりも、既存のパッケージを組み合わせてごにょごにょすることが多いように思います。とはいえ、この原則は今の時代も、今後も変わることは無いと思います。ただ、AIの力でコーディングそのものの負担は軽くなるため、人間が意識を向けるべきところは、ちょっと変わってくるのかなと思います。

とりあえず動くものを別のAIにレビューしてもらう

とりあえず動くようには、人間側と協力すればさほど難しくはありません。人間側は事象をひたすらAI(ChatGPTなど)に報告すれば、どんどん修正してくれます。
しかし、できあがったコードはいささかぐちゃぐちゃに見えます。そこで、このコードをClaude3に連携してレビューしてもらいます。AI同士の相互レビューですね。別に、ChatGPTに異なるセッションを作って、そこで見てもらっても良いとは思います。
個人的な感想ですが、やはりAIによってコーディングにもクセがあるような気がします。なので、可能な限り複数のAIに見てもらうと、品質が向上するような気がします。

Claude3のレビュー

もっとも、レビュー結果そのものを鵜呑みにする必要はありません。今回であれば、エラーハンドリングはあっても良いと思います。ファイルの上書きに関しては、元ファイルを編集するわけでは無いので、不要と判断します。ファイルのクリーンアップはあった方が良いので採用しましょう。

ブラウザ履歴のCSV書き出し

さて、こちらが本題ですが、Safariのブラウザ履歴をCSVに書き出すことで、そのままでは難しいデータ分析や解析を行うことができます。
「訪問頻度」や「時間別」の傾向を探るのに役立てられるでしょう。

CSVの出力イメージ

なお、URLのパラメーターには個人情報が含まれることがあります。そうでなくても、機微な情報が含まれることもあります。取り扱いにはご注意ください。

コード実行と手順

1.フルディスクアクセスを許可する

  • システム環境設定を開き、「セキュリティとプライバシー」を選択、または検索します。

  • 「フルディスクアクセス」を選択し、「スクリプトエディタ」にアクセス許可を与えます。

ターミナルも入れておいたほうが便利かも

2.SQLite3のインストール

ターミナルを実行して、以下コマンドを実行。(すでにインストールされていれば不要です)

brew install sqlite3

3.AppleScript

次に、以下のAppleScriptコードをスクリプトエディタに貼り付けて実行します。このコードは、Safariの履歴データベースをコピーし、SQLite3を使用して履歴データをCSVファイルに変換します。(画像でもこの記事の下部に連携します。)

set csvFilePath to (POSIX path of (path to desktop)) & "SafariHistory.csv"
set historyDBPath to (POSIX path of (path to desktop)) & "History.db"

try
	try
		do shell script "cp ~/Library/Safari/History.db " & quoted form of historyDBPath
	on error errMsg
		error "History.dbのコピーに失敗しました: " & errMsg
	end try
	
	try
		do shell script "
            sqlite3 -csv -header " & quoted form of historyDBPath & " \"
                select datetime(v.visit_time + 978307200, 'unixepoch', 'localtime') as visit_date, i.url
                from history_visits as v
                join history_items as i
                on v.history_item = i.id
                order by visit_date desc;
            \" > " & quoted form of csvFilePath
	on error errMsg
		error "SafariHistory.csvの作成に失敗しました: " & errMsg
	end try
	
	if not (do shell script "test -f " & quoted form of csvFilePath & " && echo exists") is "exists" then
		error "SafariHistory.csvの作成に失敗しました。"
	end if
	
	display dialog "Safariの履歴が以下の場所にエクスポートされました: " & csvFilePath & "
SafariHistory.csvの取り扱いにはご注意ください。"
	
	do shell script "rm " & quoted form of historyDBPath
on error errMsg
	display dialog "エラーが発生しました: " & errMsg
end try
成功すれば、上記のダイアログが表示されます。

ファイル操作をするので、セキュリティーのレベルによっては、エラーが発生する可能性があります。

ChatGPTでデータ分析

生成されたCSVファイルをChatGPTにアップロードし、訪問頻度や時間帯別のアクセス解析を依頼します。例えば、「訪問頻度や時間帯別のアクセス解析をお願いします」と入力すると、以下のようなグラフや、詳細な分析結果が得られます。

出力結果イメージ

なかなか興味深い結果です。曜日別のグラフも作ってもらいましたが、それだと差はありませんでした。時間帯を見ると面白く、生活スタイルが垣間見えます👀

話はそれますが、次に取るべきアクションも表示するようになりました。
「Can you analyze visit duration?」や「How to improve visit patterns?」といった選択肢は、前まで表示されていなかったように思います。

まとめ

現時点でChatGPTなどのAIを駆使したコーディングは、それ単体では人間を凌駕する働きはしません。しかし、人間側が協力的であれば、AIも能力を発揮し、効果的に開発が行えるようになります。今後、AIは品質を向上させて成長するでしょうが、人間の持つ直感やセンスは依然として重要です。それぞれの得手不得手を理解し、共に建設的に歩むことが重要です。

コード(画像)

この記事が気に入ったらサポートをしてみませんか?