680 Views
March 01, 25
スライド概要
この発表では、NotebookLMを使って過去のツイートを分析し、自分の技術レベルを推定する試みを紹介します。X(旧Twitter)からデータアーカイブを取得し、ツイートデータを.txtに変換してNotebookLMに読み込ませることで、AIに自分の技術的関心や成長を評価させる仕組みです。ツイートの処理でJavaScriptを使用したことから、その実装を紹介しています。
ソフトウェアエンジニア|Swift中心にモバイルアプリやウェブ開発をやっています。 ESP32や3Dプリンタ(Ender3 S1 Pro)を活用して、自宅の作業環境をカスタマイズ中。 シンプルで使いやすいものを作るのが理想。
NotebookLMで技術レベル推定 〜過去15年の自分のツイートを読み込ませる〜 鈴木 孝宏 (sussan0416), 2025-03-01, hokkaido.js vol.01 @ Sapporo
鈴木孝宏(sussan0416) • 株式会社Helpfeel / 開発部プロダクトエンジニア • Gyazoの開発を担当 • メインスキルは、iOS, macOSアプリの開発 • React, Rails側も一部担当 コードを読んで直せる シンプルなComponent, Controllerが作れる
NotebookLMとは… • ソースとしてアップロードしたドキュメントの情報をもとに、 質問応答してくれるAI • 多様なドキュメントに対応 • PDF, .txt, Markdown, 音声 • Googleドライブ上のドキュメント • Webサイト, YouTube
NotebookLMで技術レベル推定 手順 • Xから、データのアーカイブをダウンロード • 過去のツイート・ポストを .txt に出力 • NotebookLMに .txt を渡す • 分析!! JavaScriptを使用
NotebookLMで技術レベル推定 手順 • Xから、データのアーカイブをダウンロード • 過去のツイート・ポストを .txt に出力 • NotebookLMに .txt を渡す • 分析!! JavaScriptを使用
データのアーカイブをダウンロード • Xの設定画面から、データのアーカイブをリクエストする • 数日後、アーカイブをダウンロードできるようになる data/tweets.js に 過去のツイート・ポストがある
• Xから、データのアーカイブをダウンロード • 過去のツイート・ポストを .txt に出力 • NotebookLMに .txt を渡す • 分析!! JavaScriptを使用
tweets.jsの書き換え window.YTD.tweets.part0 = [ { "tweet" : { ... "created_at" : "Wed Feb 19 12:50:05 +0000 2025", "full_text" : "iPhone16Eになるという噂があるのか。", ... } }, ... ]
tweets.jsの書き換え Inspectorで const allData = [ { アクセス可能になる "tweet" : { ... "created_at" : "Wed Feb 19 12:50:05 +0000 2025", "full_text" : "iPhone16Eになるという噂があるのか。", ... } }, ... ] window.YTD.tweets.part0 = allData
ブラウザで開く /Your archive.html/tweets/tweets にアクセス 🐦を懐かしみつつ、Inspectorを開く
分割して .txt に切り出す • ̀allDatàをタイムスタンプでソート • 適当な件数でチャンクして、ファイルに出力 1ファイルに含むワード数を NotebookLMが扱える量にする
分割して .txt に切り出す
// `allData`を時系列順に並べ直す
const sortedAllData = allData.sort((a, b) => {
const aCreatedAt = new Date(a.tweet.created_at);
const bCreatedAt = new Date(b.tweet.created_at);
return aCreatedAt.getTime() - bCreatedAt.getTime();
});
// 500ツイートずつファイルに書き出す
// ファイル名のプレフィックスは、`tweets`
downloadChunksAsFiles(sortedAllData, 500, 'tweets');
分割して .txt に切り出す async function downloadChunksAsFiles(array, chunkSize, filenamePrefix) { const chunkedArray = chunkArray(array, chunkSize); // チャンクに分けて for (const [index, chunk] of chunkedArray.entries()) { await downloadFile(chunk, index, filenamePrefix); // ダウンロードする } }
分割して .txt に切り出す
※Geminiに助けてもらった
よくあるダウンロード処理
よくあるチャンク処理
function downloadFile(chunk, index, filenamePrefix) {
return new Promise(resolve => {
setTimeout(() => {
const filename = `${filenamePrefix}_${index + 1}.txt`;
const content = chunk.map(obj => JSON.stringify(obj)).join('\n');
function chunkArray(array, size) {
const chunkedArray = [];
for (let i = 0; i < array.length; i += size) {
chunkedArray.push(array.slice(i, i + size));
}
return chunkedArray;
}
const blob = new Blob([content], { type: 'application/json' });
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = filename;
link.click();
resolve(); // 処理完了を通知
}, 100); // 100ミリ秒の待ち時間
});
}
Lodash を使えばよかったのでは……?
• Xから、データのアーカイブをダウンロード • 過去のツイート・ポストを .txt に出力 • NotebookLMに .txt を渡す • 分析!! JavaScriptを使用
NotebookLMに渡す • 無料枠 • 50件のドキュメント • ドキュメント1件あたり50万語 • 50回のチャット
まとめ • NotebookLMに過去のツイートを読ませて、自分の技術レベルを聞いてみた • tweets.jsを書き換えて、ブラウザのInspector経由でデータを処理 • Lodashを使ってみればよかったとあとから気付く • 事前にファイル出力の方法を調べていれば、Inspectorじゃなくても…… • スマートな方法があったらぜひ教えてください🙇 → ブログにもまとめてあります https://sussan-po.com/2025/02/21/notebooklm-tweets/
宣伝させて下さい!🙏
Gyazoを開発する西山が執筆!!