stream-android について
stream-androidは、Stream Android SDKを使った開発のためのスキルルーター兼実行ガイドです。Androidアプリでの新規作成、統合、設定を行う開発者向けに、タスク別の手順や製品リファレンス、移行・UI再現の指針をまとめています。
主な機能
- 01意図に基づくAndroidタスクの分類
- 02新規アプリ作成と既存アプリ統合の案内
- 03Stream Chat、Video、Feedsのリファレンス
- 04認証情報、トークン、プロジェクトの確認手順
- 05Sendbird移行とUI再現の手順
活用シーン
- 01新しいAndroidアプリにStreamを追加
- 02既存のGradleプロジェクトにStreamを統合
- 03Stream Android SDKの使い方を調べる
- 04既存のSendbirdアプリをStreamへ移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ getstream/ agent-skills --skill stream-androidインストール後、Claude Code で/stream-androidを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
ai-integration.mdbuilder.mdcredentials.mddesign-matching.mdRULES.mdsdk.mdsendbird-migration.mdreferences/CHAT-COMPOSE-blueprints.mdCHAT-COMPOSE.mdCHAT-XML-blueprints.mdCHAT-XML.mdDOCS.mdFEEDS-COMPOSE-blueprints.mdFEEDS-COMPOSE.mdVIDEO-COMPOSE-blueprints.mdVIDEO-COMPOSE.md詳細
Stream Android - スキルルーター+実行フロー
ルール: セッションごとに RULES.md を一度読み込んでください。必ず守るべきルールはすべてそこに記載されており、ほかの場所にはありません。
このファイルは、Android アプリで Stream を扱う際のインテント分類、ローカルプロジェクトの検出、モジュールへの参照をまとめた唯一のエントリーポイントです。
ステップ 0:インテント分類(最初に必ず実行。省略禁止)
ツールを呼び出す前に、ユーザーの入力だけからトラックを決めてください。先に調査してはいけません。
シグナル → トラック
| ユーザー入力内のシグナル | トラック |
|---|---|
明示的な製品/フレームワークの名称:Chat Compose、Chat XML、Video Android、Video Compose、Feeds Android、Feeds Compose など | C - リファレンスの参照 |
| Stream Android/Compose に関する作業の文脈で「docs」または「documentation」という語がある | C - リファレンスの参照 |
| 「Compose/XML/Android で {X} を行うには?」「{SDK type/Composable/View/Fragment} は何をしますか?」 | C - リファレンスの参照 |
| 「新しい Android アプリを作って」「Compose アプリを作って」「新しい Android アプリ」+ Stream 製品 | A - 新規アプリ |
| 「このアプリに Stream を追加/統合して」「Chat/Video/Feeds を自分の Android プロジェクトに組み込んで」 | B - 既存アプリ |
| 「Stream パッケージをインストールして」「Android Studio で Stream をセットアップして」「認証/トークンのフローを組み込んで」など、より広範な機能リクエストがないもの | D - 初期化/セットアップ |
「ChatGPT 風のアプリを作って」「AI アシスタント/サポートボット/コパイロットを追加して」「LLM の応答をストリーミングして」「思考中インジケーター」「生成を停止」「AI への音声入力」、LangChain、Vercel AI SDK、stream-chat-android-ai-compose | A(新規アプリ)または B(既存アプリ)。次に、統合手順として ai-integration.md を実行します。ユーザーが AI コンポーネントの仕組みだけを尋ねている場合は C |
| 目標とする外観を指定したリクエスト — スクリーンショット、Figma フレーム、「チャットを WhatsApp/Telegram/Slack/<app> のような見た目にして」など | B(または A)+以下のスタイリング深度フラグ → design-matching.md |
| 「Sendbird から移行して」「Sendbird Chat SDK を Stream に置き換えて」「Sendbird/SendbirdUIKit/uikit-compose から切り替える」 | B+以下の移行フラグ → sendbird-migration.md |
引数なしの /stream-android | トラックを簡潔に列挙して、入力を待ちます |
判別フロー
リクエストが実装/統合とリファレンスの参照のどちらとも取れる場合は、短い質問を 1 つだけして、回答を待ちます。
プロジェクトに組み込みたいですか、それとも Android SDK のパターンとファイルを確認したいだけですか?
分類後
- トラック A、B、D → まず**ステップ 0.5(認証情報)**を実行し、次にセッションごとに一度だけ「プロジェクトのシグナル」を確認してから、
builder.mdとsdk.mdに進みます。認証情報を確認する前にプロジェクトを調査してはいけません。 - トラック C → 製品と UI レイヤーが明示されている場合は、両方のステップを省略します。SDK または UI レイヤーが曖昧な場合に限り、必要に応じて「プロジェクトのシグナル」を確認します。
移行フラグ(トラックとは独立)
ユーザーが既存のアプリをSendbirdから移行する場合は、sendbird-migration.mdを実行してください。これはTrack Bの上に重ねて適用する、繰り返し実行可能なSendbirdからStream Chatへの移行手順です。統合形態(Sendbirdのuikit-compose/XML uikit/低レベルのsendbird-chat SDKを使ったカスタムUI/スパゲッティ状態、MVVM/MVI、単一アクティビティか複数アクティビティか、Compose-Navかfragments+Jetpack-Navか)を検出し、次の3つの経路から選択します。UIKitからStreamのComposeバンドル画面への移行、カスタムUIからアプリのUIは維持し、SDK/状態レイヤーのみを置き換える移行(外科的な変更)、XML UIKitから既存のフラグメント内にホストしたStreamのComposeへの移行(フレームワーク間の移行)。アプリのアーキテクチャとナビゲーションは維持し、SDKとの接点のみを変更します。重要なのはギャップ対応プロトコル(§3.5)です。Sendbirdのソースにあった画面のうち、単純な置き換えで失われる画面(作成、設定、メンバー、招待)ごとに、バンドル済みのStream相当機能(GroupChannelInfoScreen/DirectChannelInfoScreen)を接続するか、Streamにバンドルされていない画面(チャンネル作成など)については、標準では用意されていないことをユーザーに伝え、公開クックブック(getstream.io/chat/docs/sdk/android/compose-cookbook/<slug>/)にリンクし、そのクックブックを使って構築することを提案してください。画面を黙って削除してはいけません。また、存在しない画面を作り上げてはいけません。Step 0.5の認証情報フロー(credentials.md)と、画面ごとの忠実度を確保するdesign-matching.mdのリージョン対応の厳密さを再利用します。さらに、コード移行がビルドでき、接続でき、ソースと一致したら、データ移行を提案します(共通の言語非依存ランブック)。
スタイリングの深さフラグ(トラックとは独立)
リクエストに目標とする外観(添付されたスクリーンショット、Figmaのフレーム、「チャットをWhatsApp/Telegram/Slack/<app>のようにして」など)が含まれている場合は、UIコードを書く前にdesign-matching.mdを実行してください。これはTrack A/Bの作業に重ねて適用するものであり(要求されたUIをどのように構築するかを示すものです)、その代わりではありません。参照画像はリージョンのチェックリストです(ヘッダー、コンポーザー、タイムスタンプと既読表示の配置、吹き出しの形状としっぽ、チャンネルリストの行、日付の区切り、添付ファイルなど)。その多くは色だけでなく、StreamのComposeのデフォルトとは構造的に異なります。アクセントカラーと壁紙を設定して終わりにするのは、よくある失敗です。各スクリーンショットを画面(チャンネルリスト、メッセージ、スレッド。Step 0)に分類し、色だけでなく寸法も含めてすべてのリージョンを分解してから、各差分を次の2つの軸のいずれかに割り当てます。テーマトークン(StreamDesign.Colors/Typography)またはChatComponentFactoryのスロット(構造。パディング/角丸/吹き出し形状/コンポーザーのレイアウトはここで扱います。Androidには**Styles軸がない**ため、これらはテーマではなく構造です)。このドキュメントで防ぐ、よくある落とし穴は次のとおりです。複合スロット(MessageContainer、ヘッダー、MessageComposer)をオーバーライドすると、デフォルトが描画していたサブ機能(受信者のアバター、グループ化、リアクション、返信、ステータス、送信/音声)が、再現しない限り黙って失われます。メッセージヘッダーの末尾スロットは、デフォルトでチャンネルのアバターになります(アクションアイコンを表示するにはオーバーライドしてください)。コンポーザーでは、アイコンセットよりも行数/入力欄の形状/配置の違いのほうがはるかに大きく影響します。リスト内のDMには#を付けず、ヘッダーのタイトルを「Channel」にしてはいけません。実際のナビゲーション経路上でビルドし、すべてのリージョンが表示されるようにデータを用意し、リージョンごとに比較して反復するまでは、一致したとはいえません。コンポーザーも含め、すべてのリージョンを実装してください。リージョンがSDKのデフォルトのままなら、補足事項ではなく不合格です。
ステップ 0.5:認証情報、トークン、シードデータ(トラック A、B、D のみ)
順序: インテント分類 -> ステップ 0.5(このステップ) -> プロジェクトシグナルの確認 -> トラック作業。このステップは、以下のトラック表でフェーズ 1 が「検出」となっている場合でも、プロジェクトシグナルのシェルコマンドを実行する前に行ってください。トラック A、B、D では、セッションごとに 1 回実行してください。トラック C ではスキップします。
credentials.md に従って、次の作業を行います。
- ダッシュボード(またはユーザー)から Stream API キーを取得する
- Stream CLI を使ってユーザートークンを生成する(またはユーザーから提供されたものを受け取る)
- 製品固有のセットアップを行う(Chat:任意でチャンネルにシードデータを投入する。Feeds:フィードグループを確認する。Video:不要 — 呼び出しは一時的です)
getstream env の出力から API キーを設定し(例:BuildConfig.STREAM_API_KEY)、コードスニペットでは実際のユーザートークンを使用してください。プレースホルダー文字列は使用しないでください。トラック A/B/D のタスクでコード作業に進む際、認証情報をまだ取得していない場合は、続行する前に credentials.md に戻ってください。
プロジェクトシグナル(トラック A/B/D — セッションごとに 1 回。トラック C は必要な場合のみ)
読み取り専用のローカル確認です。ユーザーが Android Studio/Gradle プロジェクト、Kotlin モジュール、または空のディレクトリのどれを使用しているかを判定します。
bash -c 'echo "=== GRADLE ROOT ==="; find . -maxdepth 2 \( -name "settings.gradle.kts" -o -name "settings.gradle" -o -name "build.gradle.kts" -o -name "build.gradle" \) -print 2>/dev/null; echo "=== APP MODULES ==="; find . -maxdepth 3 -type f \( -name "build.gradle.kts" -o -name "build.gradle" \) -path "*/*/build.gradle*" -print 2>/dev/null; echo "=== VERSION CATALOG ==="; find . -maxdepth 3 -name "libs.versions.toml" -print 2>/dev/null; echo "=== MANIFESTS ==="; find . -maxdepth 4 -name "AndroidManifest.xml" -print 2>/dev/null; echo "=== EMPTY ==="; test -z "$(ls -A 2>/dev/null)" && echo "EMPTY_CWD" || echo "NON_EMPTY"'
結果は会話のコンテキストに保持してください。ユーザーがディレクトリを変更した場合、またはプロジェクトの構成が明らかに変わった場合を除き、再実行しないでください。
結果をもとに、次のような1 行のステータスを出力します。
Compose app detected - app/build.gradle.kts - libs.versions.toml present - ready for Stream wiringMulti-module Gradle project detected - preserve existing module layoutXML / View-based app detected - keep current UI layer unless the user asks to migrateNo Gradle project found - user needs to create the app in Android Studio first
モジュールマップ
| トラック | モジュール |
|---|---|
| A - 新規アプリ | builder.md + sdk.md + 関連するリファレンスファイル |
| B - 既存アプリ | builder.md + sdk.md + 関連するリファレンスファイル |
| C - リファレンス参照 | sdk.md + 関連するリファレンスファイル |
| D - ブートストラップ/セットアップ | builder.md + sdk.md |
リファレンスの構成
ライブドキュメントは、バンドルされていないガイドや機能のエントリーポイントである references/DOCS.md の llms.txt マニフェストを通じて参照します。AI ランブック(LLM アシスタント、ストリーミング返信、エージェント)は、共通バックエンドの仕様 ../stream/ai-backend-contract.md を基盤として、ai-integration.md に記載されています。
Android/Kotlin 共通のパターンは sdk.md に記載されています。ビルド済み Compose コンポーネントを使ってリファレンスデザインを再現するための、厳選された手順(領域から ChatComponentFactory のスロットへのマッピング、およびビルド/検証の反復手順)は、適用するトラックに応じて、上記のスタイリング詳細度フラグを通じて読み込む design-matching.md に記載されています。
製品および UI レイヤー固有の内容は、Stream Android の全機能に合わせて拡張できるフラットな命名規則を使い、references/ 配下にあります。
- リファレンス:
references/<PRODUCT>-<UI_LAYER>.md - ブループリント:
references/<PRODUCT>-<UI_LAYER>-blueprints.md
現在抽出済みのモジュール:
- Chat + Compose:
references/CHAT-COMPOSE.md+references/CHAT-COMPOSE-blueprints.md - Chat + XML:
references/CHAT-XML.md+references/CHAT-XML-blueprints.md - Video + Compose:
references/VIDEO-COMPOSE.md+references/VIDEO-COMPOSE-blueprints.md - Feeds + Compose:
references/FEEDS-COMPOSE.md+references/FEEDS-COMPOSE-blueprints.md
Feeds にはビルド済みの UI コンポーネントはありません。
FEEDS-COMPOSE.mdではヘッドレスなデータ SDK(FeedsClient、FeedState、ActivityState)を扱い、FEEDS-COMPOSE-blueprints.mdではそれらの状態フローを使ったカスタムの Composable のひな形を扱います。Feeds に関するリクエストでは、両方を読み込んでください。
今後 Android 製品の対応範囲を広げる場合も、最上位のスキルを増やすのではなく、この命名規則に沿ってください。
要求された製品/UI レイヤーのファイルがまだバンドルされていない場合は、その旨を明確に伝え、共通の Android パターンには sdk.md を使い、ユーザーから求められた場合にのみライブドキュメントへ切り替えてください。
トラック A - 新規アプリ
詳細: builder.md - 新規プロジェクトの手順を使用してください。
| フェーズ | 名前 | 実施内容 |
|---|---|---|
| A1 | 検出 | **ステップ 0.5(認証情報)**の後に、プロジェクトの兆候を確認します。Android アプリがまだない場合は、まず Android Studio で作成するようユーザーに伝えてください。 |
| A2 | レーンの選択 | 製品と UI レイヤー(Compose、XML/Views、または混在)を確認します。 |
| A3 | インストールと接続 | builder.md と sdk.md に従い、必要な製品リファレンスのみを読み込みます。 |
| A4 | 検証 | Gradle の同期、ChatClient のライフタイム、認証、および最初にレンダリングされる画面を確認します。 |
トラック B - 既存アプリ
詳細: builder.md - 既存プロジェクトの手順を使用してください。
| フェーズ | 名前 | 実施内容 |
|---|---|---|
| B1 | 検出 | **ステップ 0.5(認証情報)**の後に、プロジェクトの兆候を確認し、編集前に既存アプリの構造を調べます。 |
| B2 | 維持 | ユーザーから移行を求められない限り、現在の UI レイヤー、依存関係の管理方法(バージョンカタログまたはインライン)、およびナビゲーションの設定を維持します。 |
| B3 | 統合 | 共通の接続には sdk.md を使い、必要な製品リファレンスファイルのみを読み込みます。 |
| B4 | 検証 | 要求された Stream のフローが、既存アプリ内でビルドされ、レンダリングされることを確認します。 |
トラック C - リファレンスの参照
依頼された製品と UI レイヤーに関連するファイルのみを読み込みます。
- 共通のライフサイクル/認証/状態のパターン ->
sdk.md - Chat Compose のセットアップと注意点 ->
references/CHAT-COMPOSE.md - Chat Compose の画面構造 ->
references/CHAT-COMPOSE-blueprints.md - Chat XML のセットアップと注意点 ->
references/CHAT-XML.md - Chat XML の画面構造 ->
references/CHAT-XML-blueprints.md - Video Compose のセットアップと注意点 ->
references/VIDEO-COMPOSE.md - Video Compose の通話/画面構造 ->
references/VIDEO-COMPOSE-blueprints.md - Feeds Compose SDK のパターン ->
references/FEEDS-COMPOSE.md - Feeds Compose の設計図 ->
references/FEEDS-COMPOSE-blueprints.md - AI アシスタント、LLM チャット、ストリーミング返信 ->
ai-integration.md - 上記に含まれない項目 ->
references/DOCS.mdのマニフェストを参照します。回答する前に該当ページを取得してください
ユーザーが、用意されていない製品/UI レイヤーの組み合わせ(例:Video XML、Feeds XML)について尋ねた場合は、API の詳細を作り上げず、その組み合わせが用意されていないことを明確に伝えてください。
トラック D - ブートストラップ/セットアップ
機能の実装よりもインストールと接続手順を知りたいユーザーに使用します。
- まず Step 0.5(認証情報) を実行します
- プロジェクトの構成を確認します
- Compose と XML のどちらを使用するか選択します
- プロジェクトで既に採用されている依存関係の管理方法(バージョンカタログまたは直接指定)で Stream パッケージをインストールします
sdk.mdに従って認証とChatClientのライフサイクルを設定します- ユーザーがセットアップのみを依頼している場合は、製品固有の UI に進まずに終了します