本記事には筆者が開発に関わっているサービス(GetXAPI)の紹介を含みます。重みと設定値はすべて、2026年10月28日(UTC)に xai-org/x-algorithm リポジトリを筆者が直接読んで確認したものです。
「いいねは0.5点」「通報1件でいいね355件分のマイナス」「プロフィールクリックは12点」。Xのアルゴリズムについて、日本語の解説記事やAIの回答にはこうした数字が並んでいます。ところが、いま公開されているコードを読むと、いくつかは2023年の旧Twitterのコードの数字で、いくつかは10月13日より前の古い値です。この記事では、Xのアルゴリズムの仕組みを公開ソースコードから行番号つきで整理し、重みがいつ変わったかも全コミットから洗い出しました。
2026年10月28日更新。重みは commit 2f25214(10月27日 01:28 UTC)の home-mixer/params/param.rs から引用し、翌日の commit 5ed7963 でも重みに変更がないことを確認しています。
Xのアルゴリズムはどういう仕組みですか?
リクエストのたびに候補の投稿を集め、各投稿に対してあなたが取りそうな行動の確率を予測し、重みをかけて足し合わせた点数で並べます。 候補はフォロー中のアカウント(Thunder)と、フォロー外のアカウント(Phoenixの検索、SimClusters、人気投稿)から集まります。点数は Σ(重み × その行動の予測確率) で、READMEにもこの式が書かれています。投稿から48時間を過ぎた投稿はスコア計算の前に除外されます。
いいねの重みは0.5ですか?
10月13日までは0.5でした。 commit e1a0375 で0.6に、翌日の 17c96bf で 0.66 に上がりました。0.5という数字は、いまも vm-ranker/params.rs の3行目にフォールバック(既定値)として残っています。本番の設定から同期されているのは home-mixer 側のファイル(1行目に「mirrored from config feature-switch defaults」とある)なので、引用するならこちらです。
通報1件はいいね何件分ですか?
そういう換算はできません。 重みは「回数」ではなく「予測確率」にかかります。param.rs の319〜346行目のコメントでは、X自身が「通報1件でいいね468件が帳消し」という読み方を誤りと書き、通報はいいねより1,000倍以上起きにくいと説明しています。
「Heavy Ranker」「プロフィールクリック12点」は今も正しいですか?
いいえ、2023年の旧Twitterのリポジトリ(twitter/the-algorithm)の話です。 現在のおすすめはPhoenixモデルで順位付けされ、プロフィールクリックの重みは 0、作者のリプライ返し(+75)という項目も今の重み一覧にはありません。「候補を約1,500件抽出」という数字も、現在のコードでは確認できませんでした。
Xアルゴリズムの重み一覧(commit 2f25214)
home-mixer/params/param.rs の348行目(FavoriteWeight)から460行目(ReportWeight)までの値です。
| 予測する行動 | 重み |
|---|---|
| リンクをコピーして共有 | 20.0 |
| リプライ | 5.0(相互フォロー同士なら +15.0) |
| 引用 | 5.0 |
| DMで共有 | 5.0 |
| 作者をフォロー | 4.0 |
| 共有 | 2.0 |
| リポスト | 1.0 |
| いいね | 0.66 |
| クリック後の滞在時間(連続値) | 0.4 |
| クリック | 0.3 |
| リンクを開く | 0.2 |
| 画像の拡大、滞在 | 各0.05 |
| 動画を開く | 0.02 |
| 滞在時間(連続値) | 0.006 |
| プロフィールクリック、動画の視聴品質 | 0 |
| 滞在しない | −0.02 |
| ブロック | −31.2 |
| 興味がない | −52.272 |
| ミュート | −58.8 |
| 通報 | −234 |
ブックマークには重みがありません。ただし viewer_history.rs の30行目で ClientTweetBookmark は「ポジティブな行動」に入っていて、モデルが読む行動履歴には使われます。
重みはいつ変わった?(8月13日以降の全変更)
param.rs に触れた48コミットをすべて再生し、重みが変わったものだけを抜き出しました。
| 日付 | コミット | 変更 |
|---|---|---|
| 8月25日 | 0d3cdd8 | 滞在 0→0.05、動画を開く 0.05→0.07、動画の視聴品質 0.05→0 |
| 9月29日 | a707cc2 | クリック 0.4→0.3、クリック後の滞在時間 0→0.4、興味がない −43.2→−47.52 |
| 10月7日 | 78460ca | 未探索の投稿 0.02→0.015 |
| 10月13日 | e1a0375 | いいね 0.5→0.6、動画を開く 0.07→0.02、滞在時間 0.004→0.006 |
| 10月14日 | 17c96bf | いいね 0.6→0.66、興味がない −47.52→−52.272 |
相互フォローのリプライ加点は同期ファイルができる前の変更で、リポジトリ内の docs/BIDIRECTIONAL_BOOST_CHANGE.md によると7月13日に20で導入され、7月24日に15へ下げられています。
10月27日の変更で何が変わった?
重みは変わっていません。 変わったのは VMRankerSendDebiasInputs が false から true になったこと(param.rs 508行目)で、投稿ごとに7つの特徴量(動画の有無、最長動画の長さ、画像の有無、メディア数、文字量、改行数、URLの有無)が再ランキングのサービスに送られるようになりました。ただし、それを使う側の UserDebiasEnabled は vm-ranker/params.rs で false のままで、オフのときは処理がそのまま返ります。「リンク付き投稿は減点される」という説明も見かけますが、重みの上ではリンクを開く行動は +0.2 で、マイナスの項目はありません。
自分のアカウントに影響があったか測る
コードからわかるのは「何が変わったか」までです。自分の投稿に効いたかは、変更日の前後で数字を比べるしかありません。GetXAPIのユーザー投稿取得エンドポイントは、最新投稿約20件の表示回数・いいね・リプライ・リポスト・引用・ブックマークを 1回0.001ドル で返します。
import csv
import os
from datetime import datetime, timezone
import requests
API_KEY = os.environ["GETXAPI_KEY"]
FIELDS = ["viewCount", "likeCount", "replyCount", "retweetCount", "quoteCount", "bookmarkCount"]
def snapshot(username, out="post_metrics.csv"):
r = requests.get(
"https://api.getxapi.com/twitter/user/tweets",
params={"userName": username},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=30,
)
r.raise_for_status()
taken = datetime.now(timezone.utc).isoformat(timespec="seconds")
new_file = not os.path.exists(out)
with open(out, "a", newline="", encoding="utf-8") as f:
w = csv.writer(f)
if new_file:
w.writerow(["taken_at", "post_id", "created_at"] + FIELDS)
for p in r.json()["tweets"]:
w.writerow([taken, p["id"], p["createdAt"]] + [p.get(k) for k in FIELDS])
snapshot("your_handle")
検証結果: 2026年10月28日に公開アカウント(@nikitabier)で実行し、1回の呼び出しで 22件 の投稿と6つの指標がCSVに書き込まれました。cronで毎日動かし、リポジトリのコミット履歴と見比べてください。
このコードからわからないこと
- 返信欄の並び順。 XのヘルプセンターによるとX Premium(有料)の加入有無は返信の並びに考慮されますが、おすすめの順位付けコードにはPremiumや認証の項目はありませんでした。
- 非公開の部分。 一部のルールファイルとGroxという分類器のプロンプトは公開されていません。
- 一人ひとりの順位。 予測確率は人によって違うので、同じ投稿でも点数は人ごとに変わります。
よくある質問
Xのアルゴリズムはオープンソースですか?
はい。github.com/xai-org/x-algorithm に、おすすめタイムラインのパイプライン、重み、フィルター、Phoenixモデルのコードが公開されています。一部のルールファイルと分類器のプロンプトは非公開です。
おすすめに表示させない・おすすめを変えるには?
見たくない投稿には「興味がない」(重み −52.272)を使い、アカウントのミュートやブロック、ミュートワードを設定すると、その投稿はスコア計算の前に除外されます。フォロー中のアカウントだけを見たいときは「フォロー中」タブに切り替えます。
Xのアルゴリズムはどのくらいの頻度で変わりますか?
リポジトリにはほぼ毎日コミットがありますが、重みが変わったのは8月13日から10月28日までで5回です。多くのコミットは同期時刻の更新や、オフの新しい設定の追加です。
参考
- xai-org/x-algorithm README(commit 2f25214): https://github.com/xai-org/x-algorithm/blob/2f252142b9284e692ac72851768c8072d045f0d5/README.md
- home-mixer/params/param.rs(重み、commit 2f25214): https://github.com/xai-org/x-algorithm/blob/2f252142b9284e692ac72851768c8072d045f0d5/home-mixer/params/param.rs
- vm-ranker/params.rs(フォールバック値、UserDebiasEnabled): https://github.com/xai-org/x-algorithm/blob/2f252142b9284e692ac72851768c8072d045f0d5/vm-ranker/params.rs
- param.rs のコミット履歴: https://github.com/xai-org/x-algorithm/commits/main/home-mixer/params/param.rs
- 10月27日の差分: https://github.com/xai-org/x-algorithm/compare/6258a15...2f25214
- X ヘルプセンター「おすすめタイムラインについて」: https://help.x.com/en/using-x/x-timeline
- twitter/the-algorithm(2023年の旧Twitter版): https://github.com/twitter/the-algorithm
- GetXAPI docs「User Tweets」: https://docs.getxapi.com/docs/users/user-tweets
- 英語版の詳しい解説: https://www.getxapi.com/blogs/x-algorithm