2026年6月公開、2026年7月4日更新:X の現行の従量課金の料金(2026年4月の書き込みコストの変更を含む)と、X が公式 SDK を Python と TypeScript にのみ出荷し Go には出荷していない、という Go ツールの状態を反映しています。2026年7月4日更新:100回分の無料リクエストの開始オファーを追加し、Sorsa のリクエスト単位の料金を1,000件あたりの基準に刷新しました。
要点: 2026年に Go 向けの公式 X(Twitter)API SDK はありません。X は公式 SDK を Python と TypeScript にのみ出荷しています。Go での実用的な経路は、gotwtr のようなメンテナンスされたコミュニティのライブラリ、ベアラートークンを用いた素の net/http、または読み取り専用のサードパーティ REST API です。
「twitter api golang」を検索して公式のサポートされたパッケージを期待したなら、それはありません。X は2025年後半に Python と TypeScript の一次 SDK を出荷し、Go はコミュニティに任せました。このクエリでランクするほとんどの Go チュートリアルは、ないよりも悪いです。廃止された v1.1 API しか話さない dghubble/go-twitter を、もう存在しない料金に対して教えているのです。
当社は Twitter/X の代替 API である Sorsa API を開発・運用しており、Go は読み取り専用の経路に自然に合います。プロフィール、ツイート、検索結果、フォロワーを、Go の構造体に直接マッピングされるきれいな JSON として、ApiKey ヘッダーの中の1つの API キーで、OAuth のハンドシェイクも、待つべき開発者アカウントの承認もなく返します。読み取りの多い作業では、公式 X API よりおよそ最大50分の1のコストで動作します。バッチ処理された料金は1,000ツイートあたり$0.02、1,000プロフィールあたり$0.01から始まり、レート制限はすべてのプランで一律の毎秒20リクエストで、新規アカウントは、どの有料プランの前にも、100回分の無料リクエスト(1回限り・クレジットカード不要、すべてのエンドポイントを含む)で始まります。すべてのプロジェクトがその型に合うわけではありません。投稿が必要なものもあれば、コンプライアンスのために公式 API が必要なものもあります。本ガイドは、すべての Go の経路を、動作するコード、現行の料金、そしてレート制限を尊重する並行コレクターとともに扱います。API playground で、コードを書かずに呼び出しをテストすることもできます。
目次
- 何が変わったか:2026年の X API と Go ツール
- X API に最適な Go ライブラリ
- どのアプローチを使うべき?
- 方法1:コミュニティのライブラリ(gotwtr)
- 方法2:ベアラートークンを用いた素の net/http
- 方法3:読み取り専用の REST API
- X API 向けの公式 Go SDK はある?
- Go で並行データコレクターを構築する
- 比較:3つの経路を並べて
- API 認証情報の取得方法
- 実例:Go コレクターのコストを削る
- よくある質問
- 始め方
何が変わったか:2026年の X API と Go ツール {#what-changed-the-x-api-and-go-tooling-in-2026}
古いチュートリアルが書かれて以降、Go 開発者にとって3つのことが変わりました。X API は無料プランのない従量課金の課金に移り、リソースの読み取り単位で課金します。2026年4月の更新後、書き込みが高くなりました。そして X は最初の公式 SDK を出荷しましたが、Python と TypeScript のためだけなので、Go 開発者は依然としてコミュニティのライブラリか生の HTTP に頼ります。
従量課金が既定です。 新規登録者に無料プランも月額の Basic プランもありません。クレジットを買い、リソース単位で支払います。投稿の読み取りあたり$0.005、ユーザープロフィールあたり$0.010、フォロワーまたはフォローのレコードあたり$0.010です。自分のアカウントのデータの読み取りはリソースあたり$0.001で、標準アカウントは月間200万投稿の読み取りが上限です。実際の予算の背後にある数字は、X API 料金の詳細 にあります。
書き込みが高くなりました。 2026年4月の更新後、標準の投稿はリクエストあたり$0.015、URL を含む投稿は$0.20かかります。フォロー・いいね・引用投稿のアクションはセルフサービスの層から引き上げられ、今では Enterprise 契約を必要とします。
公式 SDK は Python と TypeScript のためだけに登場しました。 2025年後半に X はこの2言語向けの一次 XDK を発表しました。公式の Go SDK はありません。コミュニティのライブラリがそのギャップを埋め、v2 API に最も強力なものは gotwtr で、OAuth 2.0 ベアラートークンで v2 の面全体をカバーします。
古い Go ライブラリはほとんど死んでいます。 ほぼすべての古い Go チュートリアルが使う dghubble/go-twitter は、X が廃止した v1.1 API を対象にしています。v1.1 のフィールドで client.Statuses.Update や client.Search.Tweets を呼ぶガイドは、どれも古くなっています。
X API に最適な Go ライブラリ {#the-best-go-library-for-the-x-api}
Go での新しい v2 の作業には、gotwtr が最良の汎用ライブラリです。v2 API を対象とし、OAuth 2.0 ベアラートークンで認証し、ユーザー、ツイート、検索、フォロワー、タイムライン、そして書き込みをカバーします。それより優先する公式の Go SDK はありません。読み取り専用のデータ収集には、多くの Go チームがライブラリを飛ばして、標準の net/http パッケージでサードパーティの REST API を呼び、それが OAuth を完全に取り除きます。
主な選択肢がどう比較されるかは以下のとおりです。
| ライブラリ / ツール | API バージョン | 最適な用途 | 備考 |
|---|---|---|---|
| gotwtr | v2 | 新しい v2 のビルド、完全なカバレッジ | ベアラートークン。検索、ユーザー、フォロワー、タイムライン、加えて書き込みとストリーミングをカバー。活発にメンテナンス。 |
| gotwi | v2 | 型付きでモジュラーな v2 アクセス | エンドポイントごとのパッケージ設計、ベアラーと OAuth 1.0a。まだ開発中とマーク。 |
| go-twitter(dghubble) | v1.1 のみ | レガシーコードのみ | 成熟しているが廃止された v1.1 API を話す。ほとんどの古いチュートリアルが使う。新規作業向けではない。 |
| net/http(標準ライブラリ) | 任意 | 最小限の依存、完全な制御 | リクエストの構造体とページネーションを自分で定義。サードパーティ API とよく合う。 |
| 読み取り専用 REST API | 該当なし | 読み取りの多いデータ収集 | ヘッダーの中の1つのキー、OAuth なし、フラットなリクエスト単位の課金。読み取り専用。 |
公式 API にどのライブラリを選んでも、コストは同じです。X はライブラリ単位ではなく、自らの側でリソース単位で課金するからです。制御できる変数は、いくつのリソースを取得するかで、それがバッチエンドポイントとフラット料金の API が計算を変えるところです。
どのアプローチを使うべき? {#which-approach-should-you-use}
コードを書く前に経路を選びましょう。型付きライブラリで v2 API に対して読み書きするなら gotwtr を使います。最小限のセットアップで大量の読み取り専用データには、サードパーティの REST API が OAuth と審査待ちの行列を取り除きます。依存なしの完全な制御には、標準の net/http パッケージで十分です。決定はほとんどが読み取り対書き込みと、どれだけの量を取得するかです。
| 必要なもの… | 使うもの… |
|---|---|
| v2 ライブラリでの読み書き | gotwtr |
| 大規模な読み取り専用データ、最小限のセットアップ | 読み取り専用のサードパーティ REST API |
| 依存なしの完全な制御 | ベアラートークンを用いた素の net/http |
| 投稿・いいね・フォロー | gotwtr または公式 API(OAuth 必須) |
プロジェクトが公開データを読むだけなら、サードパーティ API が OAuth フローを取り除きます。ヘッダーの中の1つのキーでデータの取得を始められ、開発者アカウントの申請もクレジットの購入もありません。投稿や書き込みアクションが必要なら、gotwtr を通じた公式 API がその経路です。ユーザーを代行して投稿するサードパーティのプロバイダーはありません。別の言語で作業していますか? このガイドの Python 版 をご覧ください。
方法1:コミュニティのライブラリ(gotwtr) {#method-1-a-community-library-gotwtr}
gotwtr は X API v2 の Go クライアントです。OAuth 2.0 ベアラートークンで認証し、型付きのレスポンスを返し、v2 のエンドポイントのセット全体をカバーします。Go が持つ、完全で現行の Twitter クライアントに最も近いものです。
インストールします。
go get github.com/sivchari/gotwtr
直近7日間を検索して結果を出力します。
package main
import (
"context"
"fmt"
"os"
"github.com/sivchari/gotwtr"
)
func main() {
client := gotwtr.New(os.Getenv("X_API_BEARER_TOKEN"))
tsr, err := client.SearchRecentTweets(context.Background(), "golang lang:en", &gotwtr.SearchTweetsOption{
TweetFields: []gotwtr.TweetField{gotwtr.TweetFieldAuthorID, gotwtr.TweetFieldCreatedAt},
MaxResults: 20,
})
if err != nil {
panic(err)
}
for _, t := range tsr.Tweets {
fmt.Println(t.Text)
}
}
特定のツイートを ID で照会します。
ts, err := client.RetrieveMultipleTweets(context.Background(), []string{"1782368585664626774"})
if err != nil {
panic(err)
}
for _, t := range ts.Tweets {
fmt.Println(t.Text)
}
gotwtr は、ユーザーの照会(RetrieveSingleUserWithUserName)、フォロワーとフォローのリスト(Followers、Following)、ユーザータイムライン(UserTweetTimeline)、書き込み(PostTweet)、そしてフィルタード・サンプリングのストリーミング(ConnectToStream、VolumeStreams)もカバーします。型付きの v2 アクセスが欲しく、書き込みもするかもしれないときの正しい選択です。トレードオフ:一次ではなくコミュニティがメンテナンスしており、依然として有料の X 開発者アカウントが必要で、すべての呼び出しで X のリソース単位の料金を支払います。
方法2:ベアラートークンを用いた素の net/http {#method-2-plain-nethttp-with-a-bearer-token}
ライブラリも、ラッパーもありません。Go の標準 net/http パッケージと encoding/json は、ベアラートークンで X API v2 を呼ぶのに十分です。この経路は、リクエストとレスポンスの構造体を完全に制御したい、またはサードパーティの依存を避けたい開発者に合います。
欲しいフィールドの構造体を定義し、プロフィールを照会します。
package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
type userResponse struct {
Data struct {
ID string `json:"id"`
Username string `json:"username"`
Name string `json:"name"`
PublicMetrics struct {
FollowersCount int `json:"followers_count"`
} `json:"public_metrics"`
} `json:"data"`
}
func main() {
req, _ := http.NewRequest(http.MethodGet, "https://api.x.com/2/users/by/username/elonmusk", nil)
q := req.URL.Query()
q.Set("user.fields", "public_metrics,created_at")
req.URL.RawQuery = q.Encode()
req.Header.Set("Authorization", "Bearer "+os.Getenv("X_API_BEARER_TOKEN"))
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var u userResponse
json.NewDecoder(resp.Body).Decode(&u)
fmt.Printf("@%s has %d followers\n", u.Data.Username, u.Data.PublicMetrics.FollowersCount)
}
公式 API は、レスポンスの meta の中の next_token で検索のページネーションを行います。広いクエリがクォータを使い果たさないよう、ガード付きですべての結果を順に取得します。
func searchRecent(token, query string) ([]map[string]any, error) {
var all []map[string]any
nextToken := ""
for {
req, _ := http.NewRequest(http.MethodGet, "https://api.x.com/2/tweets/search/recent", nil)
q := req.URL.Query()
q.Set("query", query)
q.Set("max_results", "100")
q.Set("tweet.fields", "created_at,public_metrics")
if nextToken != "" {
q.Set("next_token", nextToken)
}
req.URL.RawQuery = q.Encode()
req.Header.Set("Authorization", "Bearer "+token)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
var body struct {
Data []map[string]any `json:"data"`
Meta struct {
NextToken string `json:"next_token"`
} `json:"meta"`
}
json.NewDecoder(resp.Body).Decode(&body)
resp.Body.Close()
all = append(all, body.Data...)
if body.Meta.NextToken == "" {
break
}
nextToken = body.Meta.NextToken
}
return all, nil
}
これは、依存をゼロにしたいとき、または API の挙動をデバッグしているときに機能します。欠点は、ページネーション、ステータスコードの処理、レート制限、リトライを自分で所有することです。単発のジョブにはそれで問題ありませんが、本番のパイプラインには、結局は自分の小さなクライアントを書くことになります。この経路も開発者アカウントと従量課金クレジットを必要とします。
方法3:読み取り専用の REST API {#method-3-a-read-only-rest-api}
Go のサービスが公開の Twitter データを読むだけなら、サードパーティの REST API が公式 API を完全に飛ばします。OAuth も、申請のステップも、クレジット購入のワークフローもなく、ただヘッダーの中の1つのキーと、構造体に直接デコードされる JSON です。
これが、開発者アカウントなしで X データを取得する 実用的な経路です。以下は、標準ライブラリだけを使った、Sorsa での見た目です。
ユーザープロフィールを取得します。
package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
type sorsaUser struct {
ID string `json:"id"`
Username string `json:"username"`
DisplayName string `json:"display_name"`
FollowersCount int `json:"followers_count"`
}
func main() {
req, _ := http.NewRequest(http.MethodGet, "https://api.sorsa.io/v3/info?username=elonmusk", nil)
req.Header.Set("ApiKey", os.Getenv("SORSA_API_KEY"))
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var u sorsaUser
json.NewDecoder(resp.Body).Decode(&u)
fmt.Printf("@%s (%s): %d followers\n", u.Username, u.DisplayName, u.FollowersCount)
}
完全な Web コマンドのセットでツイートを検索します。検索エンドポイントは1ページあたり約20件のツイートと、次のページ用の next_cursor を返します。
import "bytes"
type sorsaTweet struct {
ID string `json:"id"`
FullText string `json:"full_text"`
LikesCount int `json:"likes_count"`
}
type searchResponse struct {
Tweets []sorsaTweet `json:"tweets"`
NextCursor string `json:"next_cursor"`
}
func searchTweets(apiKey, query string) (*searchResponse, error) {
payload, _ := json.Marshal(map[string]string{"query": query, "order": "latest"})
req, _ := http.NewRequest(http.MethodPost, "https://api.sorsa.io/v3/search-tweets", bytes.NewReader(payload))
req.Header.Set("ApiKey", apiKey)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var out searchResponse
if err := json.NewDecoder(resp.Body).Decode(&out); err != nil {
return nil, err
}
return &out, nil
}
フォロワーリストを取得します。1回のリクエストが最大200件のプロフィールを返すため、1,000フォロワーのアカウントは、10ページのページネーションではなく5リクエストです。
type followersResponse struct {
Users []sorsaUser `json:"users"`
NextCursor string `json:"next_cursor"`
}
// GET https://api.sorsa.io/v3/followers?username=elonmusk returns up to 200 users
複雑なクエリには、高度な検索で行うのと同じ方法でコマンドを組み合わせます。完全なリストは 検索コマンドのリファレンス にあります。各ツイートのレスポンスは作者プロフィールと公開指標を運ぶため、フォロワーリストの取得 とエンゲージメントの数字の読み取りは、追加の呼び出しを加えません。ヘッダーは ApiKey、ベース URL は https://api.sorsa.io/v3 で、フィールド名は API ドキュメント と正確に一致します。1回のリクエストで最大100件のツイートを取得するには、その ID を /tweet-info-bulk に POST します。これは1リクエストとして数えられ、完全なツイートオブジェクトを返します。
X API 向けの公式 Go SDK はある? {#is-there-an-official-go-sdk-for-the-x-api}
いいえ。2026年時点で X は公式 SDK を Python と TypeScript にのみ公開しており、公式の Go SDK はありません。X 自身のツールとライブラリのページは、その2つの一次 SDK に加えて開発者ツールを列挙し、オープンソースの XDK ジェネレーターは現在 Python と TypeScript のテンプレートのみを出荷し、Go はリリースされたパッケージではなく将来の貢献の対象として文書化されています。
Go には、上でカバーした3つの本当の選択肢が残ります。型付きの v2 アクセスのためのコミュニティのライブラリ gotwtr、完全な制御のための素の net/http、または読み取りの多い作業のための読み取り専用のサードパーティ API です。Go をまったく書かずに手早く手動で確認するには、X は組み込みの OAuth を持つ curl 風の公式コマンドラインツール xurl も出荷しており、それはエンドポイントをコードに配線する前につつくのに便利です。
Go SDK が後で登場するなら、それは Python と TypeScript のものと同じ OpenAPI 仕様から生成されるため、その面はそれらに似るでしょう。それまでは、「公式 Go SDK」を主張するチュートリアルはどれも不正確として扱ってください。
Go で並行データコレクターを構築する {#building-a-concurrent-data-collector-in-go}
データ収集における Go の本当の利点は並行性ですが、レート制限のある API に対する並行性にはスロットルが必要です。さもないと、429 エラーを速度と引き換えにすることになります。うまくいくパターン:リクエストを goroutine にファンアウトし、API の制限に合わせたサイズの単一のレートリミッターを通してゲートし、ミューテックスの下で結果を収集します。一律の毎秒20リクエストの制限に対して、50ミリ秒ごとに1スロットを解放する ticker が、すべての goroutine を予算内に保ちます。
このコレクターは、制限内にとどまりながら、多くのクエリの最近のツイートを一度に取得します。方法3の searchTweets 関数と sorsaTweet 構造体を再利用します。
package main
import (
"fmt"
"sync"
"time"
)
func collectForQueries(apiKey string, queries []string) map[string][]sorsaTweet {
const ratePerSecond = 20
ticker := time.NewTicker(time.Second / ratePerSecond) // one slot every 50ms
defer ticker.Stop()
results := make(map[string][]sorsaTweet)
var mu sync.Mutex
var wg sync.WaitGroup
for _, query := range queries {
wg.Add(1)
go func(q string) {
defer wg.Done()
<-ticker.C // wait for a rate-limit slot before calling
res, err := searchTweets(apiKey, q)
if err != nil {
return
}
mu.Lock()
results[q] = res.Tweets
mu.Unlock()
}(query)
}
wg.Wait()
return results
}
func main() {
queries := []string{"golang", "rustlang", "typescript"}
all := collectForQueries("YOUR_SORSA_API_KEY", queries)
for q, tweets := range all {
fmt.Printf("%s: %d tweets\n", q, len(tweets))
}
}
本当の仕事をしているのは ticker です。すべての goroutine がそれでブロックするため、いくつ起動しても、呼び出しは許可されたレートで出ていきます。Sorsa 側でコレクターを作り直したとき、一律の毎秒の制限は、エンドポイント別の窓より歩調を合わせやすいとわかりました。単一の ticker が、エンドポイントごとの別々の予算ではなく、クライアント全体をカバーするからです。各クエリの最初のページを越えて進むには、レスポンスの next_cursor をたどり、空の値で止まります。ページネーションガイド にそのループがあり、公式側は X API レート制限 のリファレンスにあります。429 の場合は、1秒待って同じ呼び出しを再試行します。
比較:3つの経路を並べて {#comparison-three-routes-side-by-side}
3つの Go の経路は、2つの軸で分かれます。書き込めるかどうか、そしてどう課金されるかです。両方の公式 API の経路は開発者アカウントを必要とし、リソース単位で課金します。読み取り専用 API は、書き込みアクセスを単一のキーとフラットなリクエスト単位の課金と引き換えにします。
| 経路 | セットアップ | 認証 | 読み取り | 書き込み | 課金 |
|---|---|---|---|---|---|
| gotwtr(コミュニティ v2 ライブラリ) | 開発者アカウント、クレジット | ベアラー / OAuth | あり | あり | リソース単位 |
| 素の net/http | 開発者アカウント、クレジット | ベアラー / OAuth | あり | あり | リソース単位 |
| 読み取り専用 REST API | API キー、約3分 | 単一の ApiKey ヘッダー | あり | なし(読み取り専用) | リクエスト単位フラット |
この分割が、どれを選ぶかを教えます。投稿や書き込みアクションが必要なら、それは gotwtr を通じた公式 API の領分です。フラットで予測しやすい価格での読み取りの多いアクセスには、読み取り専用 API のほうが安く単純な経路で、同じ公開データを返します。
読み取りのコスト差は課金単位から来ます。公式 API はレスポンス内のすべての投稿とすべての作者プロフィールに課金します。フラット料金の API は、返す項目の数にかかわらず1リクエストを課金します。
| ワークロード | 公式 X API | 読み取り専用 API(Sorsa Pro) |
|---|---|---|
| 作者データ付きで20ツイートを返す検索 | $0.30(20投稿の読み取り × $0.005 + 20プロフィール × $0.010) | 1リクエスト、約$0.002(作者込み) |
| 1,000フォロワープロフィール | 約$10(プロフィール単位) | 約$0.01(1ページ200で5リクエスト) |
| ID による作者データ付き100ツイート | $1.50(100投稿の読み取り × $0.005 + 100プロフィール × $0.010) | 1リクエスト、約$0.002(バルクエンドポイント) |
| 月間上限 | 200万投稿の読み取り | プランベース(10,000〜500,000リクエスト) |
| レート制限 | 15分あたり300〜900(変動) | 毎秒20リクエスト、フラット |
読み取りの多い作業には、リソース単位のモデルは単純な仕事を行う高価な方法で、だからこそ、月およそ10,000回の読み取りを越えると、フラットなリクエスト単位のレートが勝ちます。書き込みは例外です。投稿と DM は公式 API にのみあるため、書き込みの多いサービスは、読み取りコストにかかわらずそこに属します。
API 認証情報の取得方法 {#how-to-get-your-api-credentials}
公式 API には、developer.x.com で開発者アカウントを作成し、開発者向け規約に同意し、ユースケースを説明し、プロジェクトとアプリを作成してベアラートークンと OAuth 認証情報を生成します。無料プランがないため、最初の呼び出しの前にクレジットを買います。読み取り専用のサードパーティ API には、サインアップし、キーを生成し、ヘッダーで渡すだけで、申請も承認のステップもなく、何かを買う前にテストする100回分の無料リクエストがあります。
どちらの認証情報も、ソースからではなく環境から読みます。
# .env or your shell environment
X_API_BEARER_TOKEN=your-x-bearer-token
SORSA_API_KEY=your-sorsa-api-key
Go では、上の例で示したように os.Getenv でそれらを読みます。開発中の .env ファイルの読み込みには、godotenv のようなパッケージは任意です。既存の公式 API のコードを移植しているなら、公式 X API から移行するガイド が、公式のエンドポイントとフィールド名をそのフラット料金の相当物にマッピングするため、ロジックを書き直さずにトランスポートを変えられます。
実例:Go コレクターのコストを削る {#in-practice-cutting-the-cost-of-a-go-collector}
約12人の市場インテリジェンスのチームが、競合アカウントを追跡する Go サービスを運用した状態で相談に来ました。それは v1.1 時代のライブラリを使っており、X がそれらのエンドポイントを廃止したときに壊れたため、チームは素の net/http で公式 v2 API に対して書き直しました。コードはきれいでした。請求はそうではありませんでした。毎晩の実行は投稿の読み取りごと・作者プロフィールごとに支払い、月間200万投稿の読み取り上限は、追跡アカウントのリストが増えるにつれて量を見張ることを意味しました。
対処は書き直しではなくトランスポートの入れ替えでした。同チームは goroutine の収集ロジックとスケジューリングを保ち、クライアントを検索と /followers のエンドポイントに向け、OAuth を単一の ApiKey ヘッダーに落としました。各リクエストがリソース単位で課金する代わりに最大20件のツイートまたは200件のフォロワープロフィールを返すため、同じ毎晩の取得は以前のごく一部のコストになり、読み取りの多い部分でおよそ30〜50分の1のコストになり、毎秒の制限が、歩調を合わせる唯一のものとして月間上限に取って代わりました。読み取り専用のワークロードには、リソース単位のモデルは単純な仕事を行う高価な方法だったのです。
よくある質問 {#faq}
Go 向けの公式 X(Twitter)API SDK はある?
いいえ。2026年時点で X は公式 SDK を Python と TypeScript にのみ公開しており、公式の Go SDK はありません。v2 API のメンテナンスされたコミュニティの選択肢は gotwtr で、OAuth 2.0 ベアラートークンを使い、ユーザー、ツイート、検索、フォロワー、タイムラインをカバーします。X のオープンソースの SDK ジェネレーターは Go を将来の対象として列挙していますが、Go パッケージはリリースされていないため、「公式 Go SDK」の主張はどれも不正確として扱ってください。
Twitter API に最適な Go ライブラリは?
新しい v2 の作業には、gotwtr が最良の汎用 Go ライブラリです。v2 API を対象とし、ベアラートークンで認証し、読み書きをカバーします。dghubble による古い go-twitter パッケージは広く引用されますが、廃止された v1.1 API しか話さないため、新規のビルドには適しません。大量の読み取り専用データには、多くの Go チームがライブラリを飛ばして、標準の net/http パッケージでサードパーティの REST API を呼びます。
開発者アカウントなしで Go でツイートをどう取得する?
読み取り専用のサードパーティ REST API を呼びます。Sorsa では、サインアップし、API キーを取得し、それを ApiKey ヘッダーで渡し、net/http でリクエストを送ります。JSON は Go の構造体に直接デコードされます。OAuth フローも、アプリ審査も、クレジット購入もなく、新規アカウントは始めるための100回分の無料リクエストを含みます。各ツイートのレスポンスは作者プロフィールと公開指標を含むため、1回のリクエストが完全なデータを返します。
2026年に Go アプリで X API はいくらかかる?
公式 X API ではリソース単位で支払います。投稿の読み取りあたり$0.005、ユーザープロフィールあたり$0.010、標準の投稿あたり$0.015、URL 付きの投稿は$0.20で、月間200万投稿の読み取り上限があります。20ツイートを返す検索は、作者プロフィールを含めると$0.30かかります。Sorsa は代わりにリクエスト単位で課金し、バッチエンドポイントで1,000ツイートあたり$0.02、1,000プロフィールあたり$0.01からになり、新規アカウントは100回分の無料リクエストで始まります。
Go で X API のレート制限をどう扱う?
公式 API は15分の窓ごとにリクエストを制限し(エンドポイントによって通常300〜900)、それに達すると429 を返します。Go では、制限に合わせたサイズの単一のレートリミッター(time.Ticker や golang.org/x/time/rate など)を通して並行呼び出しをゲートし、goroutine がそれを超えないようにします。Sorsa のようなフラット料金の API は毎秒20リクエストの制限を使うため、50ミリ秒ごとに1スロットを解放する ticker が予算内に保ちます。
Go で net/http だけを使って X API を呼べる?
はい。Go の標準の net/http と encoding/json のパッケージは、Authorization ヘッダーのベアラートークンで X API v2 を呼び、レスポンスを自分の構造体にデコードできます。ページネーション、ステータスコード、リトライを自分で扱い、それはいくつかのエンドポイントや単発のジョブには問題ありません。より大きなパイプラインには、結局は小さなクライアントを書くことになり、その時点でライブラリかサードパーティ API が時間を節約します。
gotwtr は X API v2 をサポートする?
はい。gotwtr は X API v2 向けに作られ、OAuth 2.0 ベアラートークンで認証します。検索、ユーザーの照会、フォロワーとフォロー、タイムライン、そして投稿のような書き込みアクションをカバーし、その1.x の系統で完全な v2エンドポイントのカバレッジを出荷しました。従量課金の下で公式 API に無料プランがないため、購入したクレジットを持つ有料の X 開発者アカウントを必要とします。
始め方 {#getting-started}
経路を選び、上の例の1つを実行しましょう。
- 読み取り専用データ: Sorsa ダッシュボード からキーを取得します。これは100回分の無料リクエスト・クレジットカード不要で始まります。それを
SORSA_API_KEYとして設定し、任意の方法3の例を実行します。構造化された X データが1分未満でターミナルに届き、クイックスタート が最初の呼び出しを案内します。プランと制限は 料金ページ にあります。 - 読み書き: developer.x.com で開発者アカウントを作成し、クレジットを買い、ベアラートークンで gotwtr または net/http の例を実行します。
- プロバイダーの比較: 読み取り専用の選択肢のより広い見方については、Twitter API の代替の比較 を、マネージドなスクレイピングのトレードオフについては、X をスクレイピングする ガイドをご覧ください。
監修:Keksich(Sorsa創業者、マーケター兼X APIリサーチャー)
本ガイドの検証方法
当チームは、API を日々運用しながら、2026年6月に本ガイドを書き、検証しました。公式の Go SDK が存在しないことと、Python と TypeScript の SDK が存在することは、X の公式のツールとライブラリのドキュメントと、その XDK の開発者向け発表に対して確認しました。gotwtr のメソッド名と v2 カバレッジは、Go パッケージインデックス上のその パッケージリファレンス に対して確認しました。X API の料金は、2026年4月の書き込みコストの変更を含む現行の従量課金モデルを反映しています。Sorsa のエンドポイントの挙動、リクエスト単位のバッチ処理、プランの料金は Sorsa API のドキュメントから来ています。チームの詳細は About ページ にあります。ライブラリのバージョン番号とスター数は動くため、固定せずに描写しています。現在の価格には、製品内のドキュメントが真実のソースです。