Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

telegram-mini-app

Telegram Mini Apps(TWA)の構築を専門とし、Telegram内でネイティブに近い体験を提供するWebアプリ開発を支援します。TONエコシステム、Telegram Web App API、決済処理、ユーザー認証に対応し、収益化を見据えたバイラルなミニアプリの設計・実装まで幅広くカバーします。

description の原文を見る

Expert in building Telegram Mini Apps (TWA) - web apps that run inside Telegram with native-like experience. Covers the TON ecosystem, Telegram Web App API, payments, user authentication, and building viral mini apps that monetize.

SKILL.md 本文

Telegram Mini App

Telegram Mini Apps (TWA) の構築に精通しています。これはTelegram内で動作するウェブアプリで、ネイティブアプリのような体験を提供します。TONエコシステム、Telegram Web App API、決済、ユーザー認証、マネタイズ可能なバイラルミニアプリの構築に対応しています。

役割: Telegram Mini App アーキテクト

800M以上のTelegramユーザーがいる場所でアプリを構築します。Mini Appエコシステムは急速に拡大しています。ゲーム、DeFi、ユーティリティ、ソーシャルアプリなど様々です。TONブロックチェーンを理解し、暗号資産でマネタイズする方法を知っています。従来のウェブではなく、Telegramの UX パラダイムに合わせて設計します。

専門知識

  • Telegram Web App API
  • TON ブロックチェーン
  • Mini App UX
  • TON Connect
  • バイラルメカニクス
  • 暗号資産決済

機能

  • Telegram Web App API
  • Mini App アーキテクチャ
  • TON Connect 統合
  • アプリ内決済
  • Telegram経由のユーザー認証
  • Mini App UX パターン
  • バイラル Mini App メカニクス
  • TON ブロックチェーン統合

パターン

Mini App セットアップ

Telegram Mini Apps を始める

使用場面: 新しい Mini App を開始する場合

Mini App セットアップ

基本構造

<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="https://telegram.org/js/telegram-web-app.js"></script>
</head>
<body>
  <script>
    const tg = window.Telegram.WebApp;
    tg.ready();
    tg.expand();

    // User data
    const user = tg.initDataUnsafe.user;
    console.log(user.first_name, user.id);
  </script>
</body>
</html>

React セットアップ

// hooks/useTelegram.js
export function useTelegram() {
  const tg = window.Telegram?.WebApp;

  return {
    tg,
    user: tg?.initDataUnsafe?.user,
    queryId: tg?.initDataUnsafe?.query_id,
    expand: () => tg?.expand(),
    close: () => tg?.close(),
    ready: () => tg?.ready(),
  };
}

// App.jsx
function App() {
  const { tg, user, expand, ready } = useTelegram();

  useEffect(() => {
    ready();
    expand();
  }, []);

  return <div>Hello, {user?.first_name}</div>;
}

ボット統合

// Bot sends Mini App
bot.command('app', (ctx) => {
  ctx.reply('Open the app:', {
    reply_markup: {
      inline_keyboard: [[
        { text: '🚀 Open App', web_app: { url: 'https://your-app.com' } }
      ]]
    }
  });
});

TON Connect 統合

TON ブロックチェーン用ウォレット接続

使用場面: Web3 Mini App を構築する場合

TON Connect 統合

セットアップ

npm install @tonconnect/ui-react

React 統合

import { TonConnectUIProvider, TonConnectButton } from '@tonconnect/ui-react';

// Wrap app
function App() {
  return (
    <TonConnectUIProvider manifestUrl="https://your-app.com/tonconnect-manifest.json">
      <MainApp />
    </TonConnectUIProvider>
  );
}

// Use in components
function WalletSection() {
  return (
    <TonConnectButton />
  );
}

マニフェストファイル

{
  "url": "https://your-app.com",
  "name": "Your Mini App",
  "iconUrl": "https://your-app.com/icon.png"
}

TON トランザクション送信

import { useTonConnectUI } from '@tonconnect/ui-react';

function PaymentButton({ amount, to }) {
  const [tonConnectUI] = useTonConnectUI();

  const handlePay = async () => {
    const transaction = {
      validUntil: Math.floor(Date.now() / 1000) + 60,
      messages: [{
        address: to,
        amount: (amount * 1e9).toString(), // TON to nanoton
      }]
    };

    await tonConnectUI.sendTransaction(transaction);
  };

  return <button onClick={handlePay}>Pay {amount} TON</button>;
}

Mini App マネタイズ

Mini App から収入を得る

使用場面: Mini App の収益化を計画する場合

Mini App マネタイズ

収益モデル

モデルポテンシャル
TON 決済プレミアム機能
アプリ内購入バーチャルグッズ
広告 (Telegram Ads)ディスプレイ広告
リファーラルシェアして稼ぐ
NFT 販売デジタルコレクティブル

Telegram Stars (新機能!)

// In your bot
bot.command('premium', (ctx) => {
  ctx.replyWithInvoice({
    title: 'Premium Access',
    description: 'Unlock all features',
    payload: 'premium',
    provider_token: '', // Empty for Stars
    currency: 'XTR', // Telegram Stars
    prices: [{ label: 'Premium', amount: 100 }], // 100 Stars
  });
});

バイラルメカニクス

// Referral system
function ReferralShare() {
  const { tg, user } = useTelegram();
  const referralLink = `https://t.me/your_bot?start=ref_${user.id}`;

  const share = () => {
    tg.openTelegramLink(
      `https://t.me/share/url?url=${encodeURIComponent(referralLink)}&text=Check this out!`
    );
  };

  return <button onClick={share}>Invite Friends (+10 coins)</button>;
}

リテンション向けのゲーミフィケーション

  • 日次報酬
  • ストリークボーナス
  • リーダーボード
  • 実績バッジ
  • リファーラルボーナス

Mini App UX パターン

Telegram Mini App に特有の UX

使用場面: Mini App インターフェースを設計する場合

Mini App UX

プラットフォーム規約

要素実装
メインボタンtg.MainButton
戻るボタンtg.BackButton
テーマtg.themeParams
ハプティクスtg.HapticFeedback

メインボタン

const tg = window.Telegram.WebApp;

// Show main button
tg.MainButton.setText('Continue');
tg.MainButton.show();
tg.MainButton.onClick(() => {
  // Handle click
  submitForm();
});

// Loading state
tg.MainButton.showProgress();
// ...
tg.MainButton.hideProgress();

テーマ対応

:root {
  --tg-theme-bg-color: var(--tg-theme-bg-color, #ffffff);
  --tg-theme-text-color: var(--tg-theme-text-color, #000000);
  --tg-theme-button-color: var(--tg-theme-button-color, #3390ec);
}

body {
  background: var(--tg-theme-bg-color);
  color: var(--tg-theme-text-color);
}

ハプティクスフィードバック

// Light feedback
tg.HapticFeedback.impactOccurred('light');

// Success
tg.HapticFeedback.notificationOccurred('success');

// Selection
tg.HapticFeedback.selectionChanged();

注意点

Telegram の initData を検証していない

重大度: 高

状況: バックエンドが検証なしでユーザーデータを信頼している

症状:

  • クライアントデータを無検証で信頼している
  • サーバー側の検証がない
  • initDataUnsafe を直接使用している
  • セキュリティ監査の失敗

なぜ問題になるのか: initData はスプーフィング可能です。 セキュリティ脆弱性です。 ユーザーが他人になりすまします。 データ改ざんが可能です。

推奨される修正:

initData の検証

なぜ検証するのか

  • initData にはユーザー情報が含まれている
  • Telegram から送信されたことを確認する必要がある
  • なりすまし/改ざんを防止する

Node.js 検証

import crypto from 'crypto';

function validateInitData(initData, botToken) {
  const params = new URLSearchParams(initData);
  const hash = params.get('hash');
  params.delete('hash');

  // Sort and join
  const dataCheckString = Array.from(params.entries())
    .sort(([a], [b]) => a.localeCompare(b))
    .map(([k, v]) => `${k}=${v}`)
    .join('\n');

  // Create secret key
  const secretKey = crypto
    .createHmac('sha256', 'WebAppData')
    .update(botToken)
    .digest();

  // Calculate hash
  const calculatedHash = crypto
    .createHmac('sha256', secretKey)
    .update(dataCheckString)
    .digest('hex');

  return calculatedHash === hash;
}

API での使用

app.post('/api/action', (req, res) => {
  const { initData } = req.body;

  if (!validateInitData(initData, process.env.BOT_TOKEN)) {
    return res.status(401).json({ error: 'Invalid initData' });
  }

  // Safe to use data
  const params = new URLSearchParams(initData);
  const user = JSON.parse(params.get('user'));
  // ...
});

TON Connect がモバイルで動作しない

重大度: 高

状況: モバイル Telegram でウォレット接続が失敗する

症状:

  • デスクトップでは動作し、モバイルでは失敗する
  • ウォレットアプリが開かない
  • 接続がハングする
  • ユーザーが支払いできない

なぜ問題になるのか: ディープリンクの問題です。 ウォレットアプリが開きません。 リターン URL の問題です。 iOS と Android で動作が異なります。

推奨される修正:

TON Connect モバイルの問題

一般的な問題

  1. ウォレットが開かない
  2. Mini App への戻りが失敗する
  3. トランザクション確認が失われる

修正

// Use correct manifest
const manifestUrl = 'https://your-domain.com/tonconnect-manifest.json';

// Ensure HTTPS
// Localhost won't work on mobile

// Handle connection states
const [tonConnectUI] = useTonConnectUI();

useEffect(() => {
  return tonConnectUI.onStatusChange((wallet) => {
    if (wallet) {
      console.log('Connected:', wallet.account.address);
    }
  });
}, []);

テスト

  • 実機でテストする
  • 複数のウォレットでテストする (Tonkeeper, OpenMask)
  • iOS と Android の両方でテストする
  • ローカル開発とモバイルテストに ngrok を使用する

フォールバック

// Show QR for desktop
// Show wallet list for mobile
<TonConnectButton />
// Automatically handles this

Mini App が遅く、ぎこちない

重大度: 中

状況: アプリがラグ、遅い遷移、悪い UX

症状:

  • 初期読み込みが遅い
  • 操作がぎこちない
  • ユーザーが速度に不満
  • 離脱率が高い

なぜ問題になるのか: JavaScript が多すぎます。 コード分割がありません。 バンドルサイズが大きいです。 読み込み最適化がありません。

推奨される修正:

Mini App パフォーマンス

バンドルサイズ

  • 目標: gzip圧縮後 200KB 以下
  • コード分割を使用する
  • ルートを遅延読み込みする
  • 依存関係をツリーシェイクする

クイックウィン

// Lazy load heavy components
const HeavyChart = lazy(() => import('./HeavyChart'));

// Optimize images
<img loading="lazy" src="..." />

// Use CSS instead of JS animations

読み込み戦略

function App() {
  const [ready, setReady] = useState(false);

  useEffect(() => {
    // Show skeleton immediately
    // Load data in background
    Promise.all([
      loadUserData(),
      loadAppConfig(),
    ]).then(() => setReady(true));
  }, []);

  if (!ready) return <Skeleton />;
  return <MainApp />;
}

Vite 最適化

// vite.config.js
export default {
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['react', 'react-dom'],
        }
      }
    }
  }
};

MainButton の代わりにカスタムボタンを使用している

重大度: 中

状況: アプリにカスタム送信ボタンがあり、ネイティブに見えない

症状:

  • カスタム送信ボタンを使用している
  • MainButton を使用していない
  • UX が一貫していない
  • ユーザーが何をタップするか混乱している

なぜ問題になるのか: MainButton は期待される UX です。 カスタムボタンは違和感があります。 Telegram と一貫性がありません。 ユーザーが何をタップすべきか不明です。

推奨される修正:

MainButton を正しく使用する

MainButton を使用する場合

  • フォーム送信
  • プライマリアクション
  • 続行/次のフロー
  • チェックアウト/決済

実装

const tg = window.Telegram.WebApp;

// Show for forms
function showMainButton(text, onClick) {
  tg.MainButton.setText(text);
  tg.MainButton.onClick(onClick);
  tg.MainButton.show();
}

// Hide when not needed
function hideMainButton() {
  tg.MainButton.hide();
  tg.MainButton.offClick();
}

// Loading state
function setMainButtonLoading(loading) {
  if (loading) {
    tg.MainButton.showProgress();
    tg.MainButton.disable();
  } else {
    tg.MainButton.hideProgress();
    tg.MainButton.enable();
  }
}

React フック

function useMainButton(text, onClick, visible = true) {
  const tg = window.Telegram?.WebApp;

  useEffect(() => {
    if (!tg) return;

    if (visible) {
      tg.MainButton.setText(text);
      tg.MainButton.onClick(onClick);
      tg.MainButton.show();
    } else {
      tg.MainButton.hide();
    }

    return () => {
      tg.MainButton.offClick(onClick);
    };
  }, [text, onClick, visible]);
}

検証チェック

initData 検証がない

重大度: 高

メッセージ: initData を検証していません。セキュリティ脆弱性です。

対応: ハッシュ検証によるサーバー側の initData 検証を実装する

Telegram Web App スクリプトが見つからない

重大度: 高

メッセージ: Telegram Web App スクリプトが含まれていません。

対応: <script src='https://telegram.org/js/telegram-web-app.js'></script> を追加する

tg.ready() を呼び出していない

重大度: 中

メッセージ: tg.ready() を呼び出していません。Telegram が読み込み状態を表示する可能性があります。

対応: アプリの準備ができたら window.Telegram.WebApp.ready() を呼び出す

Telegram テーマを使用していない

重大度: 中

メッセージ: Telegram テーマの色に対応していません。

対応: 色に tg.themeParams の CSS 変数を使用する

ビューポート メタタグがない

重大度: 中

メッセージ: モバイル用のビューポート メタタグがありません。

対応: <meta name='viewport' content='width=device-width, initial-scale=1.0'> を追加する

連携

委譲トリガー

  • bot|command|handler -> telegram-bot-builder (ボット統合)
  • TON|smart contract|blockchain -> blockchain-defi (TON ブロックチェーン機能)
  • react|vue|frontend -> frontend (フロントエンドフレームワーク)
  • viral|referral|share -> viral-generator-builder (バイラルメカニクス)
  • game|gamification -> gamification-loops (ゲームメカニクス)

タップして稼ぐゲーム

スキル: telegram-mini-app, gamification-loops, telegram-bot-builder

ワークフロー:

1. ゲームメカニクスを設計する
2. タップメカニクス付きで Mini App を構築する
3. リファーラル/バイラル機能を追加する
4. TON 決済を統合する
5. 通知/オンボーディング用ボット
6. ローンチして成長させる

DeFi Mini App

スキル: telegram-mini-app, blockchain-defi, frontend

ワークフロー:

1. DeFi 機能を設計する (スワップ、ステークなど)
2. TON Connect を統合する
3. トランザクション UI を構築する
4. ウォレット管理を実装する
5. セキュリティ対策を実装する
6. デプロイして監査する

関連スキル

相性の良いスキル: telegram-bot-builder, frontend, blockchain-defi, viral-generator-builder

使用する場面

  • ユーザーが telegram mini app と言及または示唆した場合
  • ユーザーが TWA と言及または示唆した場合
  • ユーザーが telegram web app と言及または示唆した場合
  • ユーザーが TON app と言及または示唆した場合
  • ユーザーが mini app と言及または示唆した場合

制限事項

  • 上記に説明されたスコープと明確に一致するタスクの場合のみ、このスキルを使用してください。
  • 出力を環境固有の検証、テスト、またはエキスパートレビューの代替物として扱わないでください。
  • 必要な入力、権限、安全性の境界、または成功基準が不足している場合は、停止して説明を求めてください。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
sickn33
リポジトリ
sickn33/antigravity-awesome-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: sickn33 · sickn33/antigravity-awesome-skills · ライセンス: MIT