X(Twitter)でポストを一括出力する方法!スプレッドシートで管理を楽に

はじめに
今回の記事では、X(Twitter)の自分自身のポスト(ツイート)を一括で出力する方法を紹介します。
Xではポスト内容を一括でダウンロードできる機能がありますが、JSON形式であることもあり整形して視覚的に利用できる状態にするには知識が必要になります。
今回は実際に利用できるスクリプトも添付し、すぐに利用できるよう手順も添えて紹介します。
今回の流れ
STEP1:X(Twitter)のアーカイブデータをダウンロード
自分の投稿履歴をまとめて一括取得できる公式機能を利用します。全ツイートをあとから自由に参照・加工するために最初にダウンロードします。
STEP2:アーカイブデータからポスト情報(tweets.js)を取得
ダウンロードしたZIP内のJSONファイル群のなかで、実際の投稿内容(ID・本文・日時など)が格納されているファイルを抜き出します。
STEP3:Googleドライブにtweets.jsをアップロード
GASから直接読み込めるようにするため。Googleドライブ上に置くことで、URLやファイルIDを使ってシンプルにアクセスできるようにします。
STEP4:GASスクリプトを作成
tweets.jsからポスト情報を取得→ スプレッドシートに書き込み の流れを自動化するコードを記述。手動でコピペする手間をなくし、初心者でも扱いやすい一連の処理をまとめます。
STEP5:実行し、スプレッドシートに出力
スクリプトを実行すると「ツイートID」「作成日時」「本文…」といった情報が表形式で書き出され、あとから検索や分析が簡単に行えるようになります。
手順
X(Twitter)側の操作
まず、自身のXにログインします。以下の手順でアーカイブをリクエストします。
- [もっと見る]をクリック
- [アカウント]をクリック
- [データのアーカイブをダウンロード]をクリック
- 必要に応じてパスワード・認証コードを入力
- [アーカイブをリクエスト]をクリック

リクエストが完了し、24時間程度待つと「アーカイブデータがダウンロードできるようになる」と設定しているメールアドレス宛てにメールが届きます。
メールが届いたらアーカイブをリクエストした際と同様の手順でダウンロードします。

アーカイブデータの中にはアカウントのすべての情報が含まれています。
以下の手順より、ポストの情報が含まれている[tweet.js]ファイルを取り出します。
- ダウンロードしたアーカイブデータ(zip)を解凍
- [data]フォルダの中にある[tweet.js]をコピー
その後、ポスト情報が含まれている[tweet.js]のみをGoogleDriveの任意のフォルダにアップロードします。
- 自身のGoogle Driveの任意のフォルダにアクセス
- [tweet.js]をアップロード
- ファイルの[共有]>[リンクをコピー]からリンクを取得
Google Apps Script側の手順
- Googleスプレッドシートを開き、新規でスプレッドシートを作成します。
- 上部メニュー「拡張機能」 → 「Apps Script」をクリック。新しいタブでGoogle Apps Scriptのエディタが開きます。
- もともと記載してあるmyfunctions{}は削除し、以下のコードをコピー&ペーストしてください。
- コード3行目の
var fileUrl = 'https://drive~(略)';
の部分を、
前ステップの最後でコピーしたリンクに置き換えます。
(シングルクォーテーション' '
はそのままです) - 上部メニューの「保存」ボタンをクリックして、プロジェクトを保存します。
function writeTweetsToSheet() {
// 1) 共有リンクをここに貼り付け
var fileUrl = 'https://drive.google.com/file/d/<FILE_ID>/view?usp=sharing';
// 2) 共有リンクからファイルIDを抽出
var fileIdMatch = fileUrl.match(/[-\w]{25,}/);
if (!fileIdMatch) {
throw new Error('共有リンクからファイルIDを抽出できませんでした。リンクを確認してください。');
}
var fileId = fileIdMatch[0];
// 3) Drive からファイル内容を取得(文字列として)
var content = DriveApp
.getFileById(fileId)
.getBlob()
.getDataAsString('UTF-8');
// 4) JSON 部分だけを切り出し
var marker = 'window.YTD.tweets.part0';
var startIdx = content.indexOf(marker);
if (startIdx === -1) {
throw new Error(marker + ' が見つかりませんでした。');
}
var arrayStart = content.indexOf('[', startIdx);
var arrayEnd = content.lastIndexOf(']');
if (arrayStart === -1 || arrayEnd === -1) {
throw new Error('配列の開始または終了が見つかりませんでした。');
}
var jsonString = content.substring(arrayStart, arrayEnd + 1)
.replace(/,\s*]$/, ']'); // 末尾カンマ削除
// 5) パースして配列化
var tweetsArray = JSON.parse(jsonString);
// 6) スプレッドシートの準備
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tweets') || ss.insertSheet('Tweets');
sheet.clearContents();
// 7) ヘッダー行(日本語)を設定
var headers = [
'ツイートID',
'作成日時 (JST)',
'本文',
'いいね数',
'リツイート数',
'返信元ツイートID',
'返信先ユーザーID'
];
sheet.getRange(1, 1, 1, headers.length).setValues([headers]);
// 8) データ行を作成
var data = tweetsArray.map(function(item) {
var t = item.tweet;
// 作成日時を JST でフォーマット
var dt = new Date(t.created_at);
var jst = Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
return [
t.id_str,
jst,
t.full_text,
t.favorite_count,
t.retweet_count,
t.in_reply_to_status_id_str || '',
t.in_reply_to_user_id_str || ''
];
});
// 9) シートに一括書き込み
if (data.length > 0) {
sheet.getRange(2, 1, data.length, headers.length)
.setValues(data);
}
Logger.log('書き込み完了: ' + data.length + ' 件のツイートを出力しました。');
}
GASエディタのの上部メニュー[▶実行]をクリックします。

[認証が必要です]と表示された場合は以下の手順でアクセス権の承認を行います。
- [OK]をクリック
- スプレッドシートにログインしているアカウントをクリック
- [詳細]をクリック
- [無題のプロジェクト(安全ではないページ)]をクリック
- [許可]をクリック

認証が正常に完了すると、処理が開始しスプレッドシートにポスト情報が書き込まれます。
カスタマイズの依頼について
「本記事の紹介内容をもっと自分用にカスタマイズしたい」
「設定がうまくいかず依頼したい」
「別のツールの作成依頼をしたい」
上記ご要望について、ココナラというサービスにて承っております。
相談は無料ですのでぜひお気軽にご相談ください。

[見積り相談をする]からご相談ください!