Vercel

Web HostingJAMstackEdge FunctionsCI/CDFrontendNext.jsReactVueSvelte

Web Hosting Platform

Vercel

Overview

Vercel is a cloud platform for web applications, APIs, and static sites by the creators of Next.js. Offering zero-configuration deployments, Edge Functions, and preview deployments, it has become the most popular platform among frontend developers. With deep optimization for frameworks like Next.js, React, and Vue, Vercel leads in edge computing capabilities and modern web development workflows.

Details

Founded in 2015 as the company behind Next.js, Vercel provides a specialized cloud platform for modern web application development. With a frontend-focused design, it offers integrated solutions including Git-connected automatic deployments, preview URL generation, Edge Functions, high-speed CDN, and analytics features. Prioritizing developer experience, the platform enables code-to-production deployment in seconds and provides comprehensive preview capabilities for team development. As a competitor to Cloudflare, Vercel actively develops edge computing and performance optimization technologies.

Advantages and Disadvantages

Advantages

  • Zero-Configuration Deployment: Automatic Git-connected deployments without setup
  • High-Speed Edge Network: Ultra-fast delivery via globally distributed CDN
  • Preview Features: Automatic unique preview URL generation for each Pull Request
  • Framework Optimization: Deep integration and optimization with Next.js, React, Vue, etc.
  • Edge Functions: Low-latency server-side processing capabilities
  • Rich Analytics: Detailed performance analysis with Web Analytics, Speed Insights
  • Excellent Developer Experience: Intuitive dashboard and comprehensive documentation

Disadvantages

  • Higher Pricing: Expensive costs for large-scale sites and team usage
  • Vendor Lock-in: Migration becomes difficult when dependent on Vercel-specific features
  • Limitations: Restrictions on execution time, memory, and file sizes
  • Limited Japanese Support: Official Japanese support is limited

Reference Pages

Code Examples

Basic Setup and Project Configuration

# Install Vercel CLI
npm install -g vercel@latest

# Initialize and link project
vercel link

# Set environment variables
vercel env add NEXT_PUBLIC_API_URL

# Run in development environment
vercel dev

Static Site Deployment

{
  "name": "my-static-site",
  "version": "2",
  "builds": [
    {
      "src": "package.json",
      "use": "@vercel/static-build",
      "config": {
        "distDir": "dist"
      }
    }
  ],
  "routes": [
    {
      "handle": "filesystem"
    },
    {
      "src": "/(.*)",
      "dest": "/index.html"
    }
  ]
}

Framework Integration (Next.js, React, Vue)

// next.config.js - Next.js optimization settings
/** @type {import('next').NextConfig} */
const nextConfig = {
  // Vercel optimization
  output: 'standalone',
  
  // Edge Runtime configuration
  experimental: {
    runtime: 'edge',
  },
  
  // Image optimization
  images: {
    domains: ['example.com'],
    formats: ['image/webp', 'image/avif'],
  },
  
  // Headers configuration
  async headers() {
    return [
      {
        source: '/api/:path*',
        headers: [
          {
            key: 'Cache-Control',
            value: 's-maxage=1, stale-while-revalidate=59',
          },
        ],
      },
    ];
  },
};

module.exports = nextConfig;
# Vue.js project deployment
npx create-vue@latest my-vue-app
cd my-vue-app
npm install
npm run build
vercel deploy

Custom Domains and SSL

# Add custom domain
vercel domains add example.com

# Check domain configuration
vercel domains ls

# Automatic SSL certificate setup (Let's Encrypt)
# SSL certificates are automatically issued by Vercel
// vercel.json - Custom domain configuration
{
  "github": {
    "enabled": false
  },
  "functions": {
    "app/api/**/*.js": {
      "runtime": "nodejs18.x"
    }
  },
  "routes": [
    {
      "src": "/(.*)",
      "dest": "/app/$1"
    }
  ],
  "headers": [
    {
      "source": "/api/(.*)",
      "headers": [
        {
          "key": "Access-Control-Allow-Origin",
          "value": "https://example.com"
        }
      ]
    }
  ]
}

Serverless Functions and APIs

// api/hello.js - Basic serverless function
export default function handler(req, res) {
  const { name = 'World' } = req.query;
  
  res.setHeader('Cache-Control', 's-maxage=1, stale-while-revalidate=59');
  res.status(200).json({
    message: `Hello ${name}!`,
    timestamp: new Date().toISOString()
  });
}
// api/users/[id].ts - Dynamic routing
import { NextApiRequest, NextApiResponse } from 'next';

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  const { id } = req.query;
  
  if (req.method === 'GET') {
    // Get user information
    const user = await getUserById(id as string);
    res.status(200).json(user);
  } else if (req.method === 'PUT') {
    // Update user information
    const updatedUser = await updateUser(id as string, req.body);
    res.status(200).json(updatedUser);
  } else {
    res.setHeader('Allow', ['GET', 'PUT']);
    res.status(405).end(`Method ${req.method} Not Allowed`);
  }
}

CI/CD and Production Optimization

# .github/workflows/deploy.yml
name: Deploy to Vercel
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'
          cache: 'npm'
      
      - name: Install dependencies
        run: npm ci
      
      - name: Run tests
        run: npm test
      
      - name: Build project
        run: npm run build
      
      - name: Deploy to Vercel
        uses: amondnet/vercel-action@v25
        with:
          vercel-token: ${{ secrets.VERCEL_TOKEN }}
          vercel-org-id: ${{ secrets.ORG_ID }}
          vercel-project-id: ${{ secrets.PROJECT_ID }}
          vercel-args: '--prod'
// middleware.js - Edge Middleware
import { NextResponse } from 'next/server';
import { geolocation } from '@vercel/functions';

export function middleware(request) {
  // Redirect based on geolocation
  const { country } = geolocation(request);
  
  if (country === 'JP') {
    return NextResponse.rewrite(new URL('/ja', request.url));
  }
  
  // A/B testing
  const bucket = Math.random() < 0.5 ? 'a' : 'b';
  const response = NextResponse.next();
  response.cookies.set('bucket', bucket);
  
  return response;
}

export const config = {
  matcher: [
    '/((?!api|_next/static|_next/image|favicon.ico).*)',
  ],
};
# Performance optimization commands
vercel inspect    # Check deployment details
vercel logs       # View logs
vercel analytics  # Display analytics data

# Manual production deployment
vercel --prod

# Deploy to specific regions
vercel --regions iad1,hnd1