posthog-analytics
PostHogのアナリティクス機能、イベントトラッキング、フィーチャーフラグ、ダッシュボードの操作を支援するスキルです。ユーザー行動の計測や機能フラグの管理、データの可視化が必要な場面で活用できます。
description の原文を見る
PostHog analytics, event tracking, feature flags, dashboards
SKILL.md 本文
PostHog Analytics スキル
PostHog を使った製品分析の実装 - イベント追跡、ユーザー識別、機能フラグ、プロジェクト固有のダッシュボード。
参考資料: PostHog Docs | Product Analytics | Feature Flags
Philosophy
重要なことを測定する、すべてではなく。
分析は特定の質問に答えるべきです:
- ユーザーは価値を得ているか?(アクティベーション、リテンション)
- ユーザーはどこで困っているか?(ファネル、ドロップオフ)
- どの機能がエンゲージメントを生み出すか?(機能使用)
- 製品は成長しているか?(獲得、紹介)
すべてを追跡しないこと。意思決定を知らせるものを追跡すること。
インストール
Next.js (App Router)
npm install posthog-js
// lib/posthog.ts
import posthog from 'posthog-js';
export function initPostHog() {
if (typeof window !== 'undefined' && !posthog.__loaded) {
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST || 'https://us.i.posthog.com',
person_profiles: 'identified_only', // Only create profiles for identified users
capture_pageview: false, // We'll handle this manually for SPA
capture_pageleave: true,
loaded: (posthog) => {
if (process.env.NODE_ENV === 'development') {
posthog.debug();
}
},
});
}
return posthog;
}
export { posthog };
// app/providers.tsx
'use client';
import { useEffect } from 'react';
import { usePathname, useSearchParams } from 'next/navigation';
import { initPostHog, posthog } from '@/lib/posthog';
export function PostHogProvider({ children }: { children: React.ReactNode }) {
const pathname = usePathname();
const searchParams = useSearchParams();
useEffect(() => {
initPostHog();
}, []);
// Track pageviews
useEffect(() => {
if (pathname) {
let url = window.origin + pathname;
if (searchParams.toString()) {
url += `?${searchParams.toString()}`;
}
posthog.capture('$pageview', { $current_url: url });
}
}, [pathname, searchParams]);
return <>{children}</>;
}
// app/layout.tsx
import { PostHogProvider } from './providers';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<PostHogProvider>
{children}
</PostHogProvider>
</body>
</html>
);
}
React (Vite/CRA)
// src/posthog.ts
import posthog from 'posthog-js';
posthog.init(import.meta.env.VITE_POSTHOG_KEY, {
api_host: import.meta.env.VITE_POSTHOG_HOST || 'https://us.i.posthog.com',
person_profiles: 'identified_only',
});
export { posthog };
// src/main.tsx
import { PostHogProvider } from 'posthog-js/react';
import { posthog } from './posthog';
ReactDOM.createRoot(document.getElementById('root')!).render(
<PostHogProvider client={posthog}>
<App />
</PostHogProvider>
);
Python (FastAPI/Flask)
pip install posthog
# analytics/posthog_client.py
import posthog
from functools import lru_cache
@lru_cache()
def get_posthog():
posthog.project_api_key = os.environ["POSTHOG_API_KEY"]
posthog.host = os.environ.get("POSTHOG_HOST", "https://us.i.posthog.com")
posthog.debug = os.environ.get("ENV") == "development"
return posthog
# Usage
def track_event(user_id: str, event: str, properties: dict = None):
ph = get_posthog()
ph.capture(
distinct_id=user_id,
event=event,
properties=properties or {}
)
def identify_user(user_id: str, properties: dict):
ph = get_posthog()
ph.identify(user_id, properties)
Node.js (Express/Hono)
npm install posthog-node
// lib/posthog.ts
import { PostHog } from 'posthog-node';
const posthog = new PostHog(process.env.POSTHOG_API_KEY!, {
host: process.env.POSTHOG_HOST || 'https://us.i.posthog.com',
});
// Flush on shutdown
process.on('SIGTERM', () => posthog.shutdown());
export { posthog };
// Usage
export function trackEvent(userId: string, event: string, properties?: Record<string, any>) {
posthog.capture({
distinctId: userId,
event,
properties,
});
}
export function identifyUser(userId: string, properties: Record<string, any>) {
posthog.identify({
distinctId: userId,
properties,
});
}
環境変数
# .env.local (Next.js) - 安全: 公開される想定
NEXT_PUBLIC_POSTHOG_KEY=phc_xxxxxxxxxxxxxxxxxxxx
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
# .env (Backend) - プライベートに保つ
POSTHOG_API_KEY=phc_xxxxxxxxxxxxxxxxxxxx
POSTHOG_HOST=https://us.i.posthog.com
credentials.md パターンに追加:
'POSTHOG_API_KEY': r'phc_[A-Za-z0-9]+',
ユーザー識別
識別するべき時
// サインアップ時に識別
async function handleSignup(email: string, name: string) {
const user = await createUser(email, name);
posthog.identify(user.id, {
email: user.email,
name: user.name,
created_at: user.createdAt,
plan: 'free',
});
posthog.capture('user_signed_up', {
signup_method: 'email',
});
}
// ログイン時に識別
async function handleLogin(email: string) {
const user = await authenticateUser(email);
posthog.identify(user.id, {
email: user.email,
name: user.name,
plan: user.plan,
last_login: new Date().toISOString(),
});
posthog.capture('user_logged_in');
}
// ログアウト時にリセット
function handleLogout() {
posthog.capture('user_logged_out');
posthog.reset(); // 識別情報をクリア
}
ユーザープロパティ
// 追跡すべき標準プロパティ
interface UserProperties {
// Identity
email: string;
name: string;
// Lifecycle
created_at: string;
plan: 'free' | 'pro' | 'enterprise';
// Engagement
onboarding_completed: boolean;
feature_count: number;
// Business
company_name?: string;
company_size?: string;
industry?: string;
}
// プロパティが変更されたときに更新
posthog.capture('$set', {
$set: { plan: 'pro' },
});
イベント追跡パターン
イベント命名規則
// 形式: [object]_[action]
// snake_case を使用、アクションは過去形
// ✅ 良いイベント名
'user_signed_up'
'feature_created'
'subscription_upgraded'
'onboarding_completed'
'invite_sent'
'file_uploaded'
'search_performed'
'checkout_started'
'payment_completed'
// ❌ 悪いイベント名
'click' // Too vague
'ButtonClick' // Not snake_case
'user signup' // Spaces
'creatingFeature' // Not past tense
カテゴリ別の主要イベント
// === AUTHENTICATION ===
posthog.capture('user_signed_up', {
signup_method: 'google' | 'email' | 'github',
referral_source: 'organic' | 'paid' | 'referral',
});
posthog.capture('user_logged_in', {
login_method: 'google' | 'email' | 'magic_link',
});
posthog.capture('user_logged_out');
posthog.capture('password_reset_requested');
// === ONBOARDING ===
posthog.capture('onboarding_started');
posthog.capture('onboarding_step_completed', {
step_name: 'profile' | 'preferences' | 'first_action',
step_number: 1,
total_steps: 3,
});
posthog.capture('onboarding_completed', {
duration_seconds: 120,
steps_skipped: 0,
});
posthog.capture('onboarding_skipped', {
skipped_at_step: 2,
});
// === FEATURE USAGE ===
posthog.capture('feature_used', {
feature_name: 'export' | 'share' | 'duplicate',
context: 'dashboard' | 'editor',
});
posthog.capture('[resource]_created', {
resource_type: 'project' | 'document' | 'team',
// Resource-specific properties
});
posthog.capture('[resource]_updated', {
resource_type: 'project',
fields_changed: ['name', 'description'],
});
posthog.capture('[resource]_deleted', {
resource_type: 'project',
});
// === BILLING ===
posthog.capture('pricing_page_viewed', {
current_plan: 'free',
});
posthog.capture('checkout_started', {
plan: 'pro',
billing_period: 'monthly' | 'annual',
price: 29,
});
posthog.capture('subscription_upgraded', {
from_plan: 'free',
to_plan: 'pro',
mrr_change: 29,
});
posthog.capture('subscription_downgraded', {
from_plan: 'pro',
to_plan: 'free',
reason: 'too_expensive' | 'missing_features' | 'not_using',
});
posthog.capture('subscription_cancelled', {
plan: 'pro',
reason: 'string',
feedback: 'string',
});
// === ERRORS ===
posthog.capture('error_occurred', {
error_type: 'api_error' | 'validation_error' | 'network_error',
error_message: 'string',
error_code: 'string',
page: '/dashboard',
});
React 追跡フック
// hooks/useTrack.ts
import { useCallback } from 'react';
import { posthog } from '@/lib/posthog';
export function useTrack() {
const track = useCallback((event: string, properties?: Record<string, any>) => {
posthog.capture(event, {
...properties,
timestamp: new Date().toISOString(),
});
}, []);
return { track };
}
// Usage
function CreateProjectButton() {
const { track } = useTrack();
const handleCreate = async () => {
track('project_creation_started');
try {
const project = await createProject();
track('project_created', {
project_id: project.id,
template_used: project.template,
});
} catch (error) {
track('project_creation_failed', {
error_message: error.message,
});
}
};
return <button onClick={handleCreate}>Create Project</button>;
}
機能フラグ
セットアップ
// 機能フラグをチェック (クライアント側)
import { useFeatureFlagEnabled } from 'posthog-js/react';
function NewFeature() {
const showNewUI = useFeatureFlagEnabled('new-dashboard-ui');
if (showNewUI) {
return <NewDashboard />;
}
return <OldDashboard />;
}
// ペイロード付き
import { useFeatureFlagPayload } from 'posthog-js/react';
function PricingPage() {
const pricingConfig = useFeatureFlagPayload('pricing-experiment');
// pricingConfig = { price: 29, showAnnual: true }
return <Pricing config={pricingConfig} />;
}
サーバーサイド (Next.js)
// app/dashboard/page.tsx
import { PostHog } from 'posthog-node';
import { cookies } from 'next/headers';
async function getFeatureFlags(userId: string) {
const posthog = new PostHog(process.env.POSTHOG_API_KEY!);
const flags = await posthog.getAllFlags(userId);
await posthog.shutdown();
return flags;
}
export default async function Dashboard() {
const cookieStore = cookies();
const userId = cookieStore.get('user_id')?.value;
const flags = await getFeatureFlags(userId);
return (
<div>
{flags['new-dashboard'] && <NewFeature />}
</div>
);
}
A/B テスト
// 実験の表示を追跡
function ExperimentComponent() {
const variant = useFeatureFlagEnabled('checkout-experiment');
useEffect(() => {
posthog.capture('experiment_viewed', {
experiment: 'checkout-experiment',
variant: variant ? 'test' : 'control',
});
}, [variant]);
return variant ? <NewCheckout /> : <OldCheckout />;
}
プロジェクト固有のダッシュボード
SaaS 製品
## 必須 SaaS ダッシュボード
### 1. 獲得ダッシュボード
**答える質問:** ユーザーはどこから来るか?何が変換するか?
作成するインサイト:
- [ ] ソース別サインアップ (日次/週次トレンド)
- [ ] ランディングページ別サインアップ変換率
- [ ] 初回訪問からサインアップまでの時間
- [ ] サインアップファネル: 訪問 → サインアップページ → フォーム開始 → 完了
### 2. アクティベーションダッシュボード
**答える質問:** 新規ユーザーは価値を得ているか?
作成するインサイト:
- [ ] オンボーディング完了率
- [ ] 初回キーアクションまでの時間
- [ ] アクティベーション率 (最初の 7 日間で「アハ・モーメント」に到達したユーザーの %)
- [ ] オンボーディングステップ別ドロップオフ
- [ ] 最初のセッションでの機能採用
### 3. エンゲージメントダッシュボード
**答える質問:** ユーザーは製品をどのように使用しているか?
作成するインサイト:
- [ ] DAU/WAU/MAU トレンド
- [ ] 機能使用ヒートマップ
- [ ] セッション期間分布
- [ ] セッションあたりのアクション数
- [ ] パワーユーザーと一般ユーザー
### 4. リテンションダッシュボード
**答える質問:** ユーザーは戻ってくるか?
作成するインサイト:
- [ ] リテンションコホート (D1, D7, D30)
- [ ] プラン別チャーン率
- [ ] リアクティベーション率
- [ ] チャーン前の最後のアクション
- [ ] リテンションと相関した機能
### 5. 収益ダッシュボード
**答える質問:** ビジネスは成長しているか?
作成するインサイト:
- [ ] MRR トレンド
- [ ] アップグレードとダウングレード
- [ ] トライアルから有料への変換
- [ ] プラン別収益
- [ ] 獲得ソース別 LTV
Eコマース
## 必須 Eコマース ダッシュボード
### 1. コンバージョンファネル
作成するインサイト:
- [ ] 完全なファネル: 閲覧 → 商品ページ → カートに追加 → チェックアウト → 購入
- [ ] カート放棄率
- [ ] チェックアウトステップ別ドロップオフ
- [ ] 支払い失敗率
### 2. 商品パフォーマンス
作成するインサイト:
- [ ] 商品閲覧 → 購入 (商品別)
- [ ] カテゴリ別カートに追加率
- [ ] 検索 → 購入の相関
- [ ] クロスセル効果
コンテンツ/メディア
## 必須コンテンツダッシュボード
### 1. 消費ダッシュボード
作成するインサイト:
- [ ] タイプ別コンテンツビュー
- [ ] 読了/視聴完了率
- [ ] コンテンツ上の時間
- [ ] スクロール深度分布
### 2. エンゲージメントダッシュボード
作成するインサイト:
- [ ] コンテンツ別シェア
- [ ] 記事別コメント
- [ ] 保存/ブックマーク率
- [ ] 同じコンテンツへの再訪問
### 3. 成長ダッシュボード
作成するインサイト:
- [ ] 新規訪問者対リピーター
- [ ] メールサインアップ率
- [ ] リファーラルトラフィックソース
AI/LLM アプリケーション
## 必須 AI アプリダッシュボード
### 1. 使用ダッシュボード
作成するインサイト:
- [ ] ユーザー1人あたりの 1 日のクエリ数
- [ ] トークン使用量分布
- [ ] レスポンス時間 p50/p95
- [ ] クエリタイプ別エラー率
### 2. 品質ダッシュボード
作成するインサイト:
- [ ] ユーザーフィードバック (親指アップ/ダウン)
- [ ] 再生成率 (ユーザーが新しいレスポンスを要求)
- [ ] 編集率 (ユーザーが AI 出力を編集)
- [ ] フォローアップクエリ率
### 3. コストダッシュボード
作成するインサイト:
- [ ] ユーザーあたりのトークンコスト
- [ ] モデル別コスト
- [ ] 機能別コスト
- [ ] 効率トレンド (価値/コスト)
ダッシュボードの作成
PostHog MCP を使用
プロジェクト用の分析をセットアップする場合:
1. 最初に既存のダッシュボードをチェック:
- `dashboards-get-all` を使用して現在のダッシュボードをリスト表示
2. プロジェクトに適したダッシュボードを作成:
- `dashboard-create` を説明的な名前で使用
3. 各ダッシュボード用のインサイトを作成:
- `query-run` を使用してクエリをテスト
- `insight-create-from-query` を使用して保存
- `add-insight-to-dashboard` を使用して整理
4. 主要なファネルをセットアップ:
- サインアップファネル
- オンボーディングファネル
- 購入/コンバージョンファネル
ダッシュボード作成ワークフロー
// 例: MCP 経由で SaaS ダッシュボードを作成
// 1. ダッシュボードを作成
const dashboard = await mcp_posthog_dashboard_create({
name: "Activation Metrics",
description: "Track new user activation and onboarding",
tags: ["saas", "activation"],
});
// 2. インサイトを作成
const signupFunnel = await mcp_posthog_query_run({
query: {
kind: "InsightVizNode",
source: {
kind: "FunnelsQuery",
series: [
{ kind: "EventsNode", event: "user_signed_up", name: "Signed Up" },
{ kind: "EventsNode", event: "onboarding_started", name: "Started Onboarding" },
{ kind: "EventsNode", event: "onboarding_completed", name: "Completed Onboarding" },
{ kind: "EventsNode", event: "first_value_action", name: "First Value" },
],
dateRange: { date_from: "-30d" },
},
},
});
// 3. 保存してダッシュボードに追加
const insight = await mcp_posthog_insight_create_from_query({
name: "Signup to Activation Funnel",
query: signupFunnel.query,
favorited: true,
});
await mcp_posthog_add_insight_to_dashboard({
insightId: insight.id,
dashboardId: dashboard.id,
});
プライバシーとコンプライアンス
GDPR コンプライアンス
// オプトアウト処理
export function handleCookieConsent(consent: boolean) {
if (consent) {
posthog.opt_in_capturing();
} else {
posthog.opt_out_capturing();
}
}
// 同意ステータスを確認
const hasConsent = posthog.has_opted_in_capturing();
// 同意チェック付きで初期化
posthog.init(key, {
opt_out_capturing_by_default: true, // 明示的なオプトインが必要
respect_dnt: true, // Do Not Track を尊重
});
決してトラックすべきではないデータ
// ❌ 決してトラックしないこと
posthog.capture('event', {
password: '...', // 認証情報
credit_card: '...', // 支払い情報
ssn: '...', // 政府 ID
medical_info: '...', // 健康データ
full_address: '...', // 詳細位置情報
});
// ✅ トラック OK
posthog.capture('event', {
country: 'US', // 一般的な位置情報
plan: 'pro', // 製品情報
feature_used: 'export', // 使用法
});
プロパティサニタイゼーション
// lib/analytics.ts
const SENSITIVE_KEYS = ['password', 'token', 'secret', 'credit', 'ssn'];
function sanitizeProperties(props: Record<string, any>): Record<string, any> {
return Object.fromEntries(
Object.entries(props).filter(([key]) =>
!SENSITIVE_KEYS.some(sensitive => key.toLowerCase().includes(sensitive))
)
);
}
export function safeCapture(event: string, properties?: Record<string, any>) {
posthog.capture(event, sanitizeProperties(properties || {}));
}
分析のテスト
開発モード
// 開発では無効化
if (process.env.NODE_ENV === 'development') {
posthog.opt_out_capturing();
// または debug モードを使用
posthog.debug();
}
E2E テスト
// playwright/fixtures.ts
import { test as base } from '@playwright/test';
export const test = base.extend({
page: async ({ page }, use) => {
// PostHog をモックしてイベントをキャプチャ
await page.addInitScript(() => {
window.capturedEvents = [];
window.posthog = {
capture: (event, props) => {
window.capturedEvents.push({ event, props });
},
identify: () => {},
reset: () => {},
};
});
await use(page);
},
});
// テスト内で
test('tracks signup event', async ({ page }) => {
await page.goto('/signup');
await page.fill('[name=email]', 'test@example.com');
await page.click('button[type=submit]');
const events = await page.evaluate(() => window.capturedEvents);
expect(events).toContainEqual({
event: 'user_signed_up',
props: expect.objectContaining({ signup_method: 'email' }),
});
});
デバッグ
PostHog ツールバー
// デバッグ用のツールバーを有効化
posthog.init(key, {
// ...
loaded: (posthog) => {
if (process.env.NODE_ENV === 'development') {
posthog.debug();
// PostHog ダッシュボード経由でツールバーが利用可能
}
},
});
イベントデバッグ
// 開発時にすべてのイベントをログ出力
posthog.init(key, {
_onCapture: (eventName, eventData) => {
if (process.env.NODE_ENV === 'development') {
console.log('PostHog Event:', eventName, eventData);
}
},
});
クイックリファレンス
ユーザーライフサイクル別イベントチェックリスト
## トラック必須のイベント
### 獲得
- [ ] `page_viewed` (capture_pageview で自動)
- [ ] `user_signed_up`
- [ ] `user_logged_in`
### アクティベーション
- [ ] `onboarding_started`
- [ ] `onboarding_step_completed`
- [ ] `onboarding_completed`
- [ ] `first_[key_action]` (あなたの「アハ・モーメント」)
### エンゲージメント
- [ ] `[feature]_used`
- [ ] `[resource]_created`
- [ ] `search_performed`
- [ ] `invite_sent`
### 収益
- [ ] `pricing_page_viewed`
- [ ] `checkout_started`
- [ ] `subscription_upgraded`
- [ ] `subscription_cancelled`
### リテンション
- [ ] `session_started`
- [ ] `feature_[x]_used` (パワー機能)
ダッシュボードテンプレート
| プロジェクトタイプ | 主要ダッシュボード |
|---|---|
| SaaS | 獲得、アクティベーション、エンゲージメント、リテンション、収益 |
| Eコマース | コンバージョンファネル、商品パフォーマンス、顧客 LTV |
| コンテンツ | 消費、エンゲージメント、成長 |
| AI/LLM | 使用、品質、コスト |
| モバイルアプリ | インストール、オンボーディング、DAU/MAU、クラッシュ |
常に含めるべきプロパティ
// PostHog で自動的に充実
$current_url
$browser
$device_type
$os
// これらは自分で追加
user_plan // 'free' | 'pro' | 'enterprise'
user_role // 'admin' | 'member'
company_id // B2B の場合
feature_context // アプリ内のどこか
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- alinaqi
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/alinaqi/claude-bootstrap / ライセンス: MIT
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。