Construa apps Shopify, extensões e temas usando GraphQL Admin API, Shopify CLI, Polaris UI e Liquid. TRIGGER: "shopify", "app shopify", "extensão checkout", "extensão admin", "extensão POS", "tema shopify", "template liquid", "polaris", "shopify graphql", "webhook shopify", "cobrança shopify", "assinatura app", "metafields", "shopify functions"
Scanned 9/8/2026
Install to Claude Code
npx -y skills add artubss/SKILLS-CLAUDE-CODE --skill shopify-development --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Shopify Development?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/artubss-shopify-development)More formats (shields.io, HTML) on the badges page.
---
name: shopify-development
description: |
Construa apps Shopify, extensões e temas usando GraphQL Admin API, Shopify CLI, Polaris UI e Liquid.
TRIGGER: "shopify", "app shopify", "extensão checkout", "extensão admin", "extensão POS",
"tema shopify", "template liquid", "polaris", "shopify graphql", "webhook shopify",
"cobrança shopify", "assinatura app", "metafields", "shopify functions"
---
# Habilidade de Desenvolvimento Shopify
Use essa habilidade quando o usuário perguntar sobre:
- Construir apps ou extensões Shopify
- Criar customizações de UI checkout/admin/POS
- Desenvolver temas com templating Liquid
- Integrar com GraphQL ou APIs REST Shopify
- Implementar webhooks ou cobrança
- Trabalhar com metafields ou Shopify Functions
---
## ROTEAMENTO: O que Construir
**SE o usuário quer integrar serviços externos OU construir ferramentas merchant OU cobrar por funcionalidades:**
→ Construa um **App** (veja `references/app-development.md`)
**SE o usuário quer customizar checkout OU adicionar UI admin OU criar ações POS OU implementar regras de desconto:**
→ Construa uma **Extensão** (veja `references/extensions.md`)
**SE o usuário quer customizar design da loja OU modificar páginas de produto/coleção:**
→ Construa um **Tema** (veja `references/themes.md`)
**SE o usuário precisa de lógica backend E UI da vitrine:**
→ Construa combinação **App + Theme Extension**
---
## Comandos Shopify CLI
Instalar CLI:
```bash
npm install -g @shopify/cli@latest
```
Criar e executar app:
```bash
shopify app init # Criar novo app
shopify app dev # Iniciar servidor dev com tunnel
shopify app deploy # Build e upload para Shopify
```
Gerar extensão:
```bash
shopify app generate extension --type checkout_ui_extension
shopify app generate extension --type admin_action
shopify app generate extension --type admin_block
shopify app generate extension --type pos_ui_extension
shopify app generate extension --type function
```
Desenvolvimento de tema:
```bash
shopify theme init # Criar novo tema
shopify theme dev # Iniciar preview local em localhost:9292
shopify theme pull --live # Puxar tema em produção
shopify theme push --development # Fazer push para tema de desenvolvimento
```
---
## Escopos de Acesso
Configure em `shopify.app.toml`:
```toml
[access_scopes]
scopes = "read_products,write_products,read_orders,write_orders,read_customers"
```
Escopos comuns:
- `read_products`, `write_products` - Acesso ao catálogo de produtos
- `read_orders`, `write_orders` - Gerenciamento de pedidos
- `read_customers`, `write_customers` - Dados de clientes
- `read_inventory`, `write_inventory` - Níveis de estoque
- `read_fulfillments`, `write_fulfillments` - Fulfillment de pedidos
---
## Padrões GraphQL (Validados contra API 2026-01)
### Consultar Produtos
```graphql
query GetProducts($first: Int!, $query: String) {
products(first: $first, query: $query) {
edges {
node {
id
title
handle
status
variants(first: 5) {
edges {
node {
id
price
inventoryQuantity
}
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
```
### Consultar Pedidos
```graphql
query GetOrders($first: Int!) {
orders(first: $first) {
edges {
node {
id
name
createdAt
displayFinancialStatus
totalPriceSet {
shopMoney {
amount
currencyCode
}
}
}
}
}
}
```
### Definir Metafields
```graphql
mutation SetMetafields($metafields: [MetafieldsSetInput!]!) {
metafieldsSet(metafields: $metafields) {
metafields {
id
namespace
key
value
}
userErrors {
field
message
}
}
}
```
Exemplo de variáveis:
```json
{
"metafields": [
{
"ownerId": "gid://shopify/Product/123",
"namespace": "custom",
"key": "care_instructions",
"value": "Manipule com cuidado",
"type": "single_line_text_field"
}
]
}
```
---
## Exemplo de Extensão de Checkout
```tsx
import {
reactExtension,
BlockStack,
TextField,
Checkbox,
useApplyAttributeChange,
} from "@shopify/ui-extensions-react/checkout";
export default reactExtension("purchase.checkout.block.render", () => (
<GiftMessage />
));
function GiftMessage() {
const [isGift, setIsGift] = useState(false);
const [message, setMessage] = useState("");
const applyAttributeChange = useApplyAttributeChange();
useEffect(() => {
if (isGift && message) {
applyAttributeChange({
type: "updateAttribute",
key: "gift_message",
value: message,
});
}
}, [isGift, message]);
return (
<BlockStack spacing="loose">
<Checkbox checked={isGift} onChange={setIsGift}>
Este é um presente
</Checkbox>
{isGift && (
<TextField
label="Mensagem de Presente"
value={message}
onChange={setMessage}
multiline={3}
/>
)}
</BlockStack>
);
}
```
---
## Exemplo de Template Liquid
```liquid
{% comment %} Snippet de Cartão de Produto {% endcomment %}
<div class="product-card">
<a href="{{ product.url }}">
{% if product.featured_image %}
<img
src="{{ product.featured_image | img_url: 'medium' }}"
alt="{{ product.title | escape }}"
loading="lazy"
>
{% endif %}
<h3>{{ product.title }}</h3>
<p class="price">{{ product.price | money }}</p>
{% if product.compare_at_price > product.price %}
<p class="sale-badge">Promoção</p>
{% endif %}
</a>
</div>
```
---
## Configuração de Webhook
Em `shopify.app.toml`:
```toml
[webhooks]
api_version = "2026-01"
[[webhooks.subscriptions]]
topics = ["orders/create", "orders/updated"]
uri = "/webhooks/orders"
[[webhooks.subscriptions]]
topics = ["products/update"]
uri = "/webhooks/products"
# Webhooks obrigatórios GDPR (requeridos para aprovação de app)
[webhooks.privacy_compliance]
customer_data_request_url = "/webhooks/gdpr/data-request"
customer_deletion_url = "/webhooks/gdpr/customer-deletion"
shop_deletion_url = "/webhooks/gdpr/shop-deletion"
```
---
## Boas Práticas
### Uso da API
- Use GraphQL em vez de REST para novo desenvolvimento
- Solicite apenas campos que você precisa (reduz custo de query)
- Implemente paginação baseada em cursor com `pageInfo.endCursor`
- Use operações em bulk para processar mais de 250 itens
- Trate limites de taxa com backoff exponencial
### Segurança
- Armazene credenciais da API em variáveis de ambiente
- Sempre valide assinaturas HMAC de webhook antes de processar
- Valide parâmetro de estado OAuth para prevenir CSRF
- Solicite escopos de acesso mínimos
- Use session tokens para apps incorporados
### Performance
- Cache respostas da API quando os dados não mudam frequentemente
- Use lazy loading em extensões
- Otimize imagens em temas usando filtro `img_url`
- Monitore custos de query GraphQL através de headers de resposta
---
## Solução de Problemas
**SE você vir erros de limite de taxa:**
→ Implemente lógica de retry com backoff exponencial
→ Mude para operações em bulk para grandes volumes de dados
→ Monitore o header `X-Shopify-Shop-Api-Call-Limit`
**SE a autenticação falhar:**
→ Verifique se o token de acesso ainda é válido
→ Confirme que todos os escopos requeridos foram concedidos
→ Garanta que o fluxo OAuth foi completado com sucesso
**SE a extensão não está aparecendo:**
→ Verifique se o alvo da extensão está correto
→ Confirme que a extensão foi publicada via `shopify app deploy`
→ Valide que o app está instalado na loja de teste
**SE o webhook não está recebendo eventos:**
→ Verifique se a URL do webhook é acessível publicamente
→ Confira lógica de validação de assinatura HMAC
→ Revise logs de webhook no Partner Dashboard
**SE query GraphQL falhar:**
→ Valide a query contra o schema (use explorador GraphiQL)
→ Verifique se há campos descontinuados na mensagem de erro
→ Confirme que você possui os escopos de acesso requeridos
---
## Arquivos de Referência
Para guias detalhados de implementação, leia esses arquivos:
- `references/app-development.md` - Fluxo de autenticação OAuth, mutações GraphQL para produtos/pedidos/cobrança, handlers de webhook, integração com API de billing
- `references/extensions.md` - Componentes de UI de checkout, extensões admin UI, extensões POS, Shopify Functions para descontos/pagamento/entrega
- `references/themes.md` - Referência de sintaxe Liquid, estrutura de diretório de tema, seções e snippets, padrões comuns
---
## Scripts
- `scripts/shopify_init.py` - Scaffolding interativo de projeto. Execute: `python scripts/shopify_init.py`
- `scripts/shopify_graphql.py` - Utilitários GraphQL com templates de query, paginação, rate limiting. Importe: `from shopify_graphql import ShopifyGraphQL`
---
## Links da Documentação Oficial
- Shopify Developer Docs: https://shopify.dev/docs
- Referência GraphQL Admin API: https://shopify.dev/docs/api/admin-graphql
- Referência Shopify CLI: https://shopify.dev/docs/api/shopify-cli
- Polaris Design System: https://polaris.shopify.com
Versão da API: 2026-01 (lançamentos trimestrais, janela de descontinuação de 12 meses)Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!