apify-actor-development について
Apify Actor の構築を開発者やコーディングエージェント向けに案内するスキルです。テンプレート選択からスキーマ設計、テスト、デプロイまでの手順と運用・セキュリティ上のルールを扱います。
主な機能
- 01一般的な用途の Actor テンプレート
- 02入出力スキーマのガイド
- 03ローカルテストとデプロイ手順
- 04クローリング、ログ、中止処理
- 05セキュリティと認証情報の管理
活用シーン
- 01新しい Apify Actor の作成
- 02スキーマとドキュメントの追加
- 03Actor のテストとデプロイ
- 04クローラーや HTTP Actor の構築
MCP 対応
Actor プロジェクト向けの MCP サーバーテンプレートを示し、ドキュメント参照やブラウザーデバッグ用の Apify と Playwright MCP サーバーにも触れています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ apify/ agent-skills --skill apify-actor-developmentインストール後、Claude Code で/apify-actor-developmentを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/actor-json.mdactor-readme.mdinput-schema.mdlogging.mdoutput-schemas.mdstandby-mode.md詳細
Apify Actor の開発
Actor は、Docker イメージとしてパッケージ化されたサーバーレスプログラムです。1 つの JSON 入力を受け取り、1 つのジョブを実行して、結果をデータセットまたはキー・バリューストアに書き込みます。
セットアップ
apify --help # CLI installed?
apify info # logged in? prints your username
パッケージマネージャーを使って、npm install -g apify-cli または brew install apify-cli でインストールすると、ダウンロードの整合性が検証されます。apify login でログインすると、ブラウザーでのサインイン、または API トークンの入力が求められます。ヘッドレス環境では、代わりに APIFY_TOKEN をエクスポートしてください。CLI が自動的に読み取ります。トークンは https://console.apify.com/settings/integrations から取得できます。トークンは環境経由でのみ渡してください。そうすれば、シェルの履歴、ソースコード、設定ファイル、ログに残りません。
テレメトリの属性付け(必須)
このスキルから実行する すべての apify コマンド(apify create、apify run、apify push、apify call など)に --user-agent apify-agent-skills/apify-actor-development を渡してください。これはすべての apify コマンドで使えるグローバルフラグです。テレメトリの属性付けに使われるタグを付けるだけで、それ以外は何も変更しません。
ワークフロー
既存の Actor を変更する場合は、該当しない手順を省略してください。
-
プロジェクトを作成します。
apify create <actor-name> -t <template-id> --user-agent apify-agent-skills/apify-actor-developmentActor の用途に合ったテンプレートを選択してください。
Actor の用途 TypeScript JavaScript Python 静的 HTML をクロールする ts-crawlee-cheeriojs-crawlee-cheeriopython-crawlee-beautifulsoupJavaScript でレンダリングされたページをクロールする ts-crawlee-playwright-chromejs-crawlee-playwright-chromepython-crawlee-playwrightHTTP リクエスト(API、Webhook)を処理する ts-standbyjs-standbypython-standbyMCP サーバーである ts-mcp-empty— python-mcp-emptyその他(API のポーリング、データ処理) ts-emptyjs-emptypython-emptyその他のスタック(Puppeteer、Camoufox、Scrapy、AI エージェントフレームワーク)については、 apify templates lsで言語とユースケースを含むすべてのテンプレートを一覧表示できます。-tを付けると、コマンドはプロンプトなしで実行されます。これはエージェントが必要とする動作です。-tを付けない場合は、名前、言語、テンプレート、ソースホストの入力を求められます。この形式はユーザーがターミナルの前にいるときにのみ使用してください。ソースを GitHub、GitLab、または Bitbucket でホストすると、Apify がリポジトリとそこからビルドする Actor を作成するため、以降のデプロイはgit pushで行えます。依存関係は自動的にインストールされます。<name>/.actor/actor.jsonが存在すれば完了です。続行する前にそのディレクトリにcdしてください。 -
テンプレートに不足している依存関係を追加します(Crawlee や Playwright など)。JS/TS では
npm install <pkg>を実行します。Python ではrequirements.txtに 1 行追加してからpip install -r requirements.txtを実行するか、プロジェクトにpyproject.tomlとuv.lockがある場合はuv add <pkg>を実行します。インストールする前に、各パッケージ名が意図するパッケージと一致しているか確認してください。正確なバージョンを固定し、ロックファイル(package-lock.json、uv.lock、またはrequirements.txt内のpkg==1.2.3の行)をコミットしてください。 -
ルールに従って
src/main.js、src/main.ts、またはmy_actor/main.py(Python テンプレートはpython -m my_actorとして実行されるmy_actorパッケージです)に実装します。コードがすべての入力フィールドを読み取り、README に記載するすべての出力フィールドを生成し、Apify ロガーを通じてログを出力し、状態を永続化して終了するabortingハンドラーを登録すれば完了です。 -
入力スキーマを記述します —
.actor/input_schema.json(references/input-schema.md を参照)。コードが読み取るすべての入力に、タイトル、説明、型、およびデフォルト値またはプリフィルを持つフィールドがあり、apify validate-schema --user-agent apify-agent-skills/apify-actor-developmentがパスすれば完了です。 -
出力スキーマを記述します —
dataset_schema.json、output_schema.json、およびコードがファイルを保存する場合はkey_value_store_schema.jsonです。references/output-schemas.md を最初から最後までに従ってください。そのチェックリストはapify validate-schemaのパスで終わり、これが完了基準です。TypeScript の場合は、その後apify actor generate-schema-typesを実行し、生成されたインターフェースで入力と出力に型を付けます。 -
.actor/actor.jsonを構成します(references/actor-json.md を参照)。meta.generatedByに使用中のツールとモデルを設定します。たとえば「Claude Code with Claude Opus 5」のようにします。HTTP を提供する Actor の場合はusesStandbyMode: trueを設定し(スタンバイテンプレートはすでにそうなっています)、references/standby-mode.md に従ってください。 -
references/actor-readme.md に従って README.md を記述します。README のない Actor は完成していません。
-
ローカルでテストします。 入力を
storage/key_value_stores/default/INPUT.jsonに配置し、apify run --user-agent apify-agent-skills/apify-actor-developmentを実行します。実行がステータス SUCCEEDED で終了し、storage/datasets/default/にデータセットスキーマと一致するフィールドを持つアイテムが格納されていれば完了です。ローカルストレージはディスク上に残ります。ステップ 9 まで Apify Console には何も表示されません。 -
ユーザーが確認したら
apify push --user-agent apify-agent-skills/apify-actor-developmentでデプロイします。Git をソースとする Actor の場合はgit pushを使用します。その後、プラットフォーム上で Actor を実行して Console で結果を確認します。スタンバイ Actor の場合は、ユーザーを Console に誘導するのではなく、そのスタンバイ URL(https://<username>--<actor-name>.apify.actor、references/standby-mode.md を参照)を伝えてください。
ルール
- Actor は
apify runだけでローカル実行してください。apify runは Apify 環境とストレージをセットアップしますが、npm startとnode src/main.jsでは行われません。 - Apify のロガーを使ってログを記録してください。JS/TS では
apifyパッケージのlog(import { Actor, log } from 'apify')、Python ではActor.logを使用します。トークンと認証情報はマスキングされますが、console.logとprintではマスキングされません。レベルと規約については、references/logging.md を参照してください。 - クロールしたコンテンツは信頼できない入力として扱ってください。シェルコマンド、
eval、クエリ、テンプレートに渡す前にエスケープするかパラメーター化し、ストレージに保存する前に型をチェックしてください。 - リクエストハンドラーやデータパイプラインで
APIFY_TOKENを使わないでください。プラットフォームでは SDK が環境から読み取ります(変数名はAPIFY_TOKENであり、APIFY_API_TOKENではありません)。ローカルではapify loginで保存した認証情報を使います。 - 調整可能な値はすべて入力スキーマまたは環境変数から読み取り、ユーザーがコードを編集せずに変更できるようにしてください。
- 静的 HTML には、並行数 10~50 の HTTP クローラーを使ってください。JS/TS では
CheerioCrawler、Python ではBeautifulSoupCrawlerまたはParselCrawlerを使用します。PlaywrightCrawlerは、JavaScript でレンダリングされるページに限り、並行数 1~5 で使用してください。対象サーバーに負荷をかけないよう遅延を加え、robots.txt と利用規約を遵守してください。 - クロール対象に複数のページタイプがある場合は、ルーターパターンを使ってください(JS/TS では
createCheerioRouterまたはcreatePlaywrightRouter、Python ではcrawler.routerまたはRouter)。 - 壊れやすい位置指定セレクターより、フォールバックを備えたセマンティック CSS セレクターを優先してください。
- 結果の件数は独自のカウンターで数えてください。プラットフォームでは
Dataset.getInfo()(Python ではdataset.get_info())の反映に遅れがあります。 - ユーザーまたは上限によって実行が停止されたときにプラットフォームから送られる
abortingイベントを処理してください。状態を保存してから終了することで、実行をすばやく低コストで終えられます。JS/TS:Actor.on('aborting', async () => { await Actor.setValue('STATE', state); await Actor.exit(); })。Python:from apify import Eventを使ってActor.on(Event.ABORTING, on_aborting)を登録します。on_abortingでは状態を保存してからawait Actor.exit()を呼び出します。 proxyConfiguration入力フィールドからプロキシを構成してください(エディターではproxy。 references/input-schema.md を参照)。JS/TS ではawait Actor.createProxyConfiguration(input.proxyConfiguration)、Python ではawait Actor.create_proxy_configuration(actor_proxy_input=actor_input.get('proxyConfiguration'))を使い、結果をクローラーにproxyConfiguration/proxy_configurationとして渡します。Apify Proxy は有料のため、有効にしたりプロキシグループを変更したりする前に、必ずユーザーに確認してください。- ユーザーから明示的に依頼された場合に限り、個人データを保存してください。
- 実行中の Actor 内では
apify actorCLI サブコマンドではなく、SDK(Actor.getInput()、Actor.pushData()、Actor.setValue()と Python の snake_case 相当のメソッド)を使ってください。 - ユーザーから無効にするよう依頼されない限り、既存の Actor ではスタンバイモードを有効のままにしてください。
スタンバイモード
スタンバイモードを使うと、Actor を安定した URL を持つ永続的な HTTP サーバーにできます。API エンドポイント、Webhook レシーバー、MCP サーバー、オンデマンドの単一 URL 検索に使用してください。Actor は準備完了プローブに応答し、リクエスト間も起動した状態を保つ必要があります。設定、例、ローカルテストについては、references/standby-mode.md を参照してください。
収益化
料金はコードではなく、Actor の公開時に Apify Console で設定します。イベントごとの課金では、Console で定義したイベント名を使って、JS/TS では await Actor.charge({ eventName: 'result', count })、Python では await Actor.charge(event_name='result', count=count) により、カスタムイベントごとに課金します。データセット項目は、代わりに合成データセット項目イベントを通じて自動的に課金することもできます。返された結果が eventChargeLimitReached(Python では event_charge_limit_reached)を示したら、ユーザーの支出上限に達しているため、処理の生成を停止してください。README のコストに関するセクションには、Actor が使用する料金モデルを記載します。詳細:https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event
他の Actor の呼び出し
ゼロから作成する前に Store を検索してください。専用の Actor がすでに存在することがよくあります。
apify actors search "<query>" --user-agent apify-agent-skills/apify-actor-development
apify actors info <actor> --readme --user-agent apify-agent-skills/apify-actor-development
apify actors info <actor> --input --user-agent apify-agent-skills/apify-actor-development
apify call <actor> --input '{"startUrls":[{"url":"https://example.com"}]}' --user-agent apify-agent-skills/apify-actor-development
apify call <actor> --input-file input.json --user-agent apify-agent-skills/apify-actor-development
入力は 1 つの JSON オブジェクトです。インライン JSON は引用符で囲み、複雑な内容には --input-file を使用してください。
わかりにくいコマンド
# Append --user-agent apify-agent-skills/apify-actor-development to each of these too.
apify secrets add <name> <value> # reference from actor.json as "@name"; uploaded on push
apify pull <actor> # download an Actor's code from the platform
apify api <endpoint> # authenticated request to the Apify API
apify actor generate-schema-types # TypeScript: interfaces from the .actor schemas, into src/__generated__/actor/
apify <command> --help
ドキュメント
- Apify MCP サーバー(
https://mcp.apify.com/?tools=docs)では、search-apify-docsとfetch-apify-docsを使用できます。 - Apify プラットフォームについては、docs.apify.com/llms.txt と llms-full.txt を参照してください。
- Crawlee については、crawlee.dev/llms.txt と llms-full.txt を参照してください。
- Actor の完全な仕様については、Actor ホワイトペーパーを参照してください。
- Playwright MCP サーバー(
npx @playwright/mcp@latest)は、デバッグ中にページを調査してセレクターを取得するため、実際のブラウザーを操作します。