要チェック!フロントエンド開発ツール・サービス・フレームワーク集

TwitterFacebookHatena

TL;DR

モダンなフロントエンド開発におけるツール・サービス・フレームワーク・基盤技術について整理してみました。少しゴチャついてますが、独断で私が好きなものや興味あるものを羅列しているだけなので、全てを学ぶ必要はありません。「こんなツールがあるんだ」という感じで見ていただければと思います。面白いフレームワークを見つけたらこのページに追加していきます。

項目 内容
対象者 フロントエンド開発に興味がある方
購読時間 60 分 ~ 120 分
必要なツール 特になし

Front-end Framework

Svelte

Svelte は、フロントエンドフレームワークですが、他のフレームワークとは異なり、ビルド時にコンポーネントを効率的な命令セットにコンパイルします。これによって、ランタイムのパフォーマンスが大幅に向上します。

// Svelteコンポーネントの例
<script lang="ts">
  let count = 0;

  function handleClick() {
    count += 1;
  }
</script>

<button on:click={handleClick}>
  Clicked {count} {count === 1 ? 'time' : 'times'}
</button>

Svelte

WebIDE

AI サポート付きのマルチプラットフォーム向け WebIDE。ウェイトリストに登録する必要があります。Google Cloud 上に構築されるブラウザベース。Firebase でウェブに公開。Next.js のようなフルスタック フレームワークにも最適。

Project IDX は、フルスタックのアプリケーション開発のための完全なウェブベースのワークスペースを提供する新しいプロジェクトです。Google Cloud のセキュリティとスケーラビリティに裏打ちされ、ブラウザを開いてから数秒でアプリケーション開発に取り掛かることができます。また、Codey という AI モデルを用いてコード生成やコード補完などを行い、開発を効率化します。

Project IDX

バリデーションライブラリ

Zod

Zod は、TypeScript ファーストのスキーマ宣言およびバリデーションライブラリです。Zod は、開発者にとってできるだけ使いやすいように設計されています。目標は、重複する型宣言を排除することです。Zod を使用すると、バリデータを一度宣言するだけで、Zod が自動的に静的な TypeScript 型を推論します。シンプルな型を複雑なデータ構造に組み合わせるのは簡単です。

特徴

  • 依存関係がない
  • Node.js とすべての現代のブラウザで動作します
  • サイズが小さい:8kb(minified + zipped)
  • 不変:メソッド(例えば、.optional())は新しいインスタンスを返します
  • 簡潔でチェーン可能なインターフェース
  • 関数型のアプローチ:パースする、バリデートしない
  • 純粋な JavaScript でも動作します
import { z } from "zod";

const User = z.object({
  username: z.string(),
});

User.parse({ username: "Ludwig" });

type User = z.infer<typeof User>;
// { username: string }

Zod

RPC フレームワーク

API に静的な型をつけることができます。

tRPC

tRPC は、エンドツーエンドの型安全な API を簡単に作成できるツールです。TypeScript の推論をフルに活用して、フルスタックアプリケーションの生産性を向上させます。サーバーサイドで変更を行った場合、ファイルを保存する前にクライアントでのエラーを TypeScript が警告してくれます。また、tRPC はビルドやコンパイルのステップがなく、コード生成やランタイムの膨張、ビルドステップが不要です。すべての JavaScript フレームワークとランタイムと互換性があり、既存のプロジェクトに追加するのも簡単です。

import { createTRPCProxyClient, httpBatchLink } from "@trpc/client";
import { AppRouter } from "./server";

const trpc = createTRPCProxyClient<AppRouter>({
  links: [
    httpBatchLink({
      url: "http://localhost:3000",
    }),
  ],
});

async function main() {
  const res = await trpc.greeting.query({ name: "John" });
  console.log(res); // `Hello John`
}

main();

tRPC 公式サイト

Linter, Formatter

ESLint

ESLint は、JavaScript と TypeScript のためのリンティングツールで、コードの品質と一貫性を保つために使用されます。カスタムルールを設定して、特定のコーディングスタイルやパターンを強制することができます。

// ファイル名: .eslintrc.json
{
  "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
  "parser": "@typescript-eslint/parser",
  "plugins": ["@typescript-eslint"],
  "env": {
    "browser": true,
    "node": true
  }
}

ESLint

Prettier

Prettier は、JavaScript、TypeScript、CSS などのコードフォーマッタで、コードの書式を一貫して美しく保つために使用されます。Prettier は、コードの書式を自動的に修正し、開発者がコードの書式について考える必要を減らします。

// ファイル名: .prettierrc.json
{
  "semi": true,
  "singleQuote": true,
  "printWidth": 80,
  "tabWidth": 2
}

Prettier

ビルドツール

TurboPack

TurboPack は、JavaScript と TypeScript に最適化されたインクリメンタルバンドラで、Next.js に組み込まれています。ローカル開発を高速化するために、Next.js の pages ディレクトリと app ディレクトリの両方で TurboPack を使用できます。TurboPack を有効にするには、Next.js の開発サーバーを起動する際に --turbo フラグを使用します。現在、TurboPack は next dev のみをサポートしており、 next build はサポートしていません。

{
  "scripts": {
    "dev": "next dev --turbo",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  }
}

TurboPack

Vite

Vite は、高速な開発サーバーとビルドツールを提供するフレームワークです。Vue.js の作者である Evan You 氏 によって開発され、Vue.js だけでなく React や Preact、Lit など、様々なフレームワークに対応しています。TypeScript、JSX、CSS などがすぐに使えるようにサポートされています。

npm create vite@latest

Vite

Rome

Rome は JavaScript、TypeScript、および Web 向けの統合開発ツールです。フォーマッターとリンターを一体化したもので、開発スタックを統一することで、複数のツールの機能を組み合わせて使用することができます。設定ファイルは 1 つだけで、パフォーマンスは高く、どんなスタックでも動作します。

Rome は、Rust と rust-analyzer に触発された革新的なアーキテクチャで構築されており、沢山のことを高速に行うことができます。開始するためにはゼロの設定が必要で、必要なときには広範なオプションが利用可能です。どんなサイズのコードベースでも扱うことができ、製品の成長に焦点を当てることができます。

# Romeのインストール
$ npm install rome

# チェックの実行
$ npx rome check .

# フォーマットの実行
$ npx rome format .

Rome

パッケージマネージャー

npm

npm(Node Package Manager)は、JavaScript のパッケージマネージャで、Node.js のデフォルトのパッケージマネージャとして広く使用されています。npm を使用すると、パッケージのインストール、更新、削除などのタスクを簡単に行うことができます。

# パッケージのインストール
npm install <package-name>

# パッケージの更新
npm update <package-name>

# パッケージの削除
npm uninstall <package-name>

npm

yarn

yarn は、Facebook によって開発された JavaScript のパッケージマネージャで、npm と互換性があります。yarn は、パフォーマンスの最適化とセキュリティの強化に重点を置いています。

# パッケージのインストール
yarn add <package-name>

# パッケージの更新
yarn upgrade <package-name>

# パッケージの削除
yarn remove <package-name>

yarn

JavaScript ランタイム

Bun

Bun は、JavaScript と TypeScript のプロジェクトを開発、テスト、実行、バンドルするためのオールインワンの JavaScript ランタイムとツールキットです。Bun は、速度を重視した設計で、バンドラ、テストランナー、Node.js 互換のパッケージマネージャーを備えています。

また、Bun は Node.js の代替品として設計されており、fs、path、Buffer などの Node.js と Web API をネイティブに実装しています。

# Bunのインストール
curl -fsSL https://bun.sh/install | bash

# Bunでのコードの実行
bun index.tsx

Bun

Deno

Deno は、JavaScript と TypeScript のためのシンプルでモダンなランタイムです。V8 を使用し、Rust で構築されています。Deno は、開発者にとって最も簡単で、最も安全な JavaScript ランタイムを目指しています。

特徴

  • インストールせずに依存関係を回避:セットアップをスキップしてすぐにコードに飛び込むことができます。
  • Web 標準 API:サーバー上で動作するブラウザ API を使用した、Web に似たランタイム。
  • TypeScript のアウトオブザボックスサポート:依存関係を更新するとすぐに壊れるようなものを設定する時間を費やす必要がありません。
  • 優れたオールインワンツール:組み込みのリンター、コードフォーマッター、自己完結型の実行可能ファイルをビルドする機能、テストランナー、IDE 統合などがあります。
  • デプロイが簡単:一行のコードで Deno Deploy にローンチし、サーバーの設定をゼロにするか、選択した他のプラットフォームでホストできます。

Deno

Testing

Vitest

Vitest は、Vite によって動力を得ている超高速なユニットテストフレームワークです。Vite のネイティブなユニットテストフレームワークとして設計されており、その速度は驚異的です。Jest との互換性があります。Expect、スナップショット、カバレッジなど、Jest からの移行が容易です。

// Example of a test with Vitest
import { test } from "vitest";

test("basic", () => {
  // Your test code here
});

Vitest

※ In-source testing は、ソースコード内でテストを実行する方法を提供します。これは、Rust のモジュールテストに似た概念で、実装と並行してテストを行うことができます。特に、Vitest というツールはこの方法をサポートしており、JavaScript のテストツールキットとして設計されています。Vitest を使用すると、テストの設定、作成、実行が容易になります。

Playwright

Playwright は、モダンな Web アプリケーションのための信頼性の高いエンドツーエンドテストを可能にします。全てのモダンなレンダリングエンジン、つまり Chromium、WebKit、Firefox をサポートしています。また、Windows、Linux、macOS でのテストが可能で、ローカルでも CI でも、ヘッドレスでもヘッドありでも実行できます。さらに、Playwright の API は TypeScript、JavaScript、Python、.NET、Java で使用できます。

npm init playwright@latest

Playwright

Jest

Jest は、Facebook が開発した JavaScript のテストフレームワークで、React や Node.js のアプリケーションのテストに広く使用されています。Jest は、モック機能、スナップショットテスト、並列テスト実行などの機能を提供します。

// ファイル名: SimpleComponent.test.tsx
import React from "react";
import { render } from "@testing-library/react";
import SimpleComponent from "./SimpleComponent";

test("renders learn react link", () => {
  const { getByText } = render(<SimpleComponent message="Test message" />);
  const linkElement = getByText(/Test message/i);
  expect(linkElement).toBeInTheDocument();
});

Jest

React Testing Library

React Testing Library は、React コンポーネントのテストを行うためのライブラリです。React Testing Library は、ユーザーの視点からテストを行うことを重視しており、DOM に対するクエリやイベントの発火などの機能を提供します。

// ファイル名: SimpleComponent.test.tsx
import React from "react";
import { render, screen } from "@testing-library/react";
import SimpleComponent from "./SimpleComponent";

test("renders learn react link", () => {
  render(<SimpleComponent message="Test message" />);
  const linkElement = screen.getByText(/Test message/i);
  expect(linkElement).toBeInTheDocument();
});

React Testing Library

CSS-in-JS

Emotion

Emotion は、JavaScript で CSS を記述するためのライブラリで、React コンポーネント内でスタイルを直接管理することができます。Emotion は、動的なスタイル、サーバーサイドレンダリング、テーマのサポートなどの機能を提供します。

// ファイル名: StyledComponent.tsx
/** @jsxImportSource @emotion/react */
import { css } from "@emotion/react";
import React from "react";

type Props = {
  color: string;
};

const StyledComponent = ({ color }: Props) => {
  return (
    <div
      css={css`
        color: ${color};
      `}
    >
      This is a styled component.
    </div>
  );
};

export default StyledComponent;

Emotion

Styled Components

Styled Components は、React コンポーネント内でスタイルを管理することができます。Styled Components は、動的なスタイル、テーマのサポート、サーバーサイドレンダリングなどの機能を提供します。

// ファイル名: StyledComponent.tsx
import styled from "styled-components";
import React from "react";

type Props = {
  color: string;
};

const StyledDiv = styled.div<Props>`
  color: ${(props) => props.color};
`;

const StyledComponent = ({ color }: Props) => {
  return <StyledDiv color={color}>This is a styled component.</StyledDiv>;
};

export default StyledComponent;

Styled Components

Mobile & Desktop

Tauri

Electron 代替です。Tauri は、すべての主要なデスクトッププラットフォーム向けに小さく、驚異的に高速なバイナリを構築するためのフレームワークです。開発者は、ユーザーインターフェースの構築に HTML、JS、CSS にコンパイルする任意のフロントエンドフレームワークを統合できます。既存のフロントエンドフレームワークとの互換性あり。Rust による構築。

npm create tauri-app@latest

Tauri

Capacitor

ネイティブアプリ変換 Capacitor。Web アプリを iOS、Android、ウェブを横断して同じコードで一つのアプリにすることができる。TypeScript を最初からサポートしていて、設定や依存関係の管理を最小限に抑えることができる。

Capacitor

Figma to Code

Figma for VS Code

Figma for VS Code は、デザインと開発の間のギャップを埋めるためのツールです。この拡張機能を使用すると、VS Code 内から直接 Figma のデザインファイルにアクセスし、コードに必要なデザイン要素を簡単に取得することができます。

Figma for VS Code

コンパイラ

TypeScript

TypeScript は、JavaScript のスーパーセットで、静的型付けとクラスベースのオブジェクト指向を提供します。これにより、大規模なコードベースの管理やバグの早期発見が容易になります。

// ファイル名: SimpleComponent.tsx
import React from "react";

type Props = {
  message: string;
};

const SimpleComponent = ({ message }: Props) => {
  return <div>{message}</div>;
};

export default SimpleComponent;

TypeScript

Rendering Framework

Nextra

Nextra は、Next.js と MDX を使用して素早くウェブサイトを作成するためのシンプルな静的サイト生成フレームワークです。Next.js の全ての機能を活用しながら、MDX を使用してマークダウン内で React コンポーネントを使用することができます。

Markdown のリンクと画像を自動的に Next.js の Link と Image に変換します。これにより、遅いナビゲーションやレイアウトシフトが発生しません。Shiki によってパワーを供給された、パフォーマンスと信頼性の高いビルド時のシンタックスハイライトソリューションを提供します。Next.js のファイルシステムルーティングを利用して、ページを直感的に整理できます。

import { useData } from 'nextra/data'

export const getStaticProps = ({ params }) => {
  return fetch(`https://api.github.com/repos/shuding/nextra`)
    .then(res => res.json())
    .then(repo => ({
      props: {
        ssg: {
          stars: repo.stargazers_count
        }
      },
      revalidate: 60
    }))
}

export const Stars = () => {
  const { stars } = useData()
  return <strong>{stars}</strong>
}

Nextra has <Stars /> stars on GitHub!

Nextra

Astro

MPA 思想である Astro は、複数の UI コンポーネントライブラリ(React、Vue、Svelte など)と組み合わせて使用することができます。HTML、CSS、JavaScript のベストプラクティスを維持しながら、Web サイトのパフォーマンスを最適化します。

Astro の最大の利点の一つは、JavaScript の送信量を大幅に削減できることです。Astro は、ページに必要な JavaScript だけをロードします。これにより、ページのパフォーマンスが向上し、特にモバイルデバイスでの体験が改善します。

// ファイル名: src/pages/index.astro
---
import SimpleComponent from '../components/SimpleComponent.astro';
---

<h1>Welcome to My Website!</h1>
<SimpleComponent message="This is a simple message." />

※ また、Astro は完全に静的な HTML を出力するため、サーバーサイドレンダリング(SSR)や JavaScript のバンドルが不要な場合には、Astro が生成した HTML をそのまま納品(少し編集が必要なこともある)することも可能です。これは、SEO 対策や初期ロード時間の短縮にも役立ちます。

Astro

Gatsby

Gatsby は、React ベースの静的サイトジェネレータで、パフォーマンスと開発体験に重点を置いています。Gatsby は、GraphQL をデータ取得のためのインターフェースとして使用します。

// ファイル名: src/pages/index.tsx
import React from "react";
import SimpleComponent from "../components/SimpleComponent";

const HomePage = () => {
  return (
    <div>
      <h1>Welcome to My Website!</h1>
      <SimpleComponent message="This is a simple message." />
    </div>
  );
};

export default HomePage;

Gatsby

Next.js

Next.js は、React のフレームワークで、サーバーサイドレンダリング(SSR)や静的サイト生成(SSG)、API ルートなど、モダンなウェブ開発のための機能を提供します。

// ファイル名: pages/index.tsx
import React from "react";
import SimpleComponent from "../components/SimpleComponent";

const HomePage = () => {
  return (
    <div>
      <h1>Welcome to My Website!</h1>
      <SimpleComponent message="This is a simple message." />
    </div>
  );
};

export default HomePage;

Next.js

3D レンダリングライブラリ

Three.js

Three.js は、WebGL を使った 3D コンテンツ作成を簡単にするための JavaScript ライブラリです。Three.js を使えば、3D グラフィックスをブラウザ上で描画することが可能になり、ユーザーに魅力的な視覚体験を提供することができます。

Three.js は、3D オブジェクトの作成、光源の設定、カメラの制御、マテリアルとテクスチャの設定など、3D シーンを作成するための多くの機能を提供しています。また、GLSL(OpenGL Shading Language)を使ってカスタムシェーダーを作成することも可能です。

// Three.jsの基本的な使用例
import * as THREE from "three";

// シーンの作成
const scene = new THREE.Scene();

// カメラの作成
const camera = new THREE.PerspectiveCamera(
  75,
  window.innerWidth / window.innerHeight,
  0.1,
  1000
);
camera.position.z = 5;

// レンダラーの作成
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// ジオメトリの作成
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

// アニメーションループ
function animate() {
  requestAnimationFrame(animate);
  cube.rotation.x += 0.01;
  cube.rotation.y += 0.01;
  renderer.render(scene, camera);
}
animate();

Three.js

UI デザイン CSS

CSS Modules

CSS Modules は、CSS をモジュールとして扱うためのツールです。CSS Modules を使用すると、CSS のクラス名がローカルスコープになり、他の CSS クラス名との衝突を防ぐことができます。

// ファイル名: ComponentWithCssModule.tsx
import React from "react";
import styles from "./ComponentWithCssModule.module.css";

const ComponentWithCssModule = () => {
  return (
    <div className={styles.container}>This is a component with CSS Module.</div>
  );
};

export default ComponentWithCssModule;

CSS Modules

Tailwind CSS

Tailwind CSS は、ユーティリティファーストの CSS フレームワークで、HTML のマークアップ内に直接スタイルを適用することができます。Tailwind CSS は、レスポンシブデザイン、ダークモード、カスタムテーマなどの機能を提供します。

<!-- ファイル名: ComponentWithTailwind.html -->
<div
  class="p-6 max-w-sm mx-auto bg-white rounded-xl shadow-md flex items-center space-x-4"
>
  <div class="flex-shrink-0">
    <img class="h-12 w-12" src="/img/logo.svg" alt="ChitChat Logo" />
  </div>
  <div>
    <div class="text-xl font-medium text-black">ChitChat</div>
    <p class="text-gray-500">You have a new message!</p>
  </div>
</div>

Tailwind CSS

ヘッドレス UI

Radix

Radix は、React で高品質でアクセシブルなデザインシステムやウェブアプリを構築するためのオープンソースのコンポーネントライブラリです。スタイルが適用されていないコンポーネントを提供しており、開発者は自分の好みの CSS 技術を使用してスタイルを追加できます。また、各コンポーネントは独立してバージョン管理されているため、新しいコンポーネントを既存のコードと並行して追加することが可能です。

import * as React from "react";
import { Tooltip } from "@radix-ui/react-tooltip";
import { styled } from "@emotion/react";

// Add styles with your preferred CSS technology
const StyledTooltipContent = styled(Tooltip.Content, {
  backgroundColor: "black",
  color: "white",
  borderRadius: "3px",
  padding: "5px",
});

type Props = {
  children: React.ReactNode;
  label: string;
};

const TooltipComponent = ({ children, label }: Props) => {
  return (
    <Tooltip>
      <Tooltip.Trigger>{children}</Tooltip.Trigger>
      <StyledTooltipContent sideOffset={5}>{label}</StyledTooltipContent>
    </Tooltip>
  );
};

export default TooltipComponent;

Radix

Headless UI

Headless UI は、完全にスタイルが適用されていない、完全にアクセシブルな UI コンポーネントを提供するライブラリです。これは、Tailwind CSS と美しく統合するように設計されています。

import { Disclosure } from "@headlessui/react";

function Example() {
  return (
    <Disclosure>
      {({ open }) => (
        <>
          <Disclosure.Button>Open Panel</Disclosure.Button>
          <Disclosure.Panel>
            {open ? "Panel is open" : "Panel is closed"}
          </Disclosure.Panel>
        </>
      )}
    </Disclosure>
  );
}

Headless UI

コンポーネントライブラリ

Chakra UI

Chakra UI は、React のためのシンプルでモジュラーなコンポーネントライブラリです。Chakra UI は、アクセシビリティに重点を置いていて、スタイルのカスタマイズが容易。テーマのサポートも提供しています。

// ファイル名: ChakraComponent.tsx
import { Box, Button } from "@chakra-ui/react";
import React from "react";

const ChakraComponent = () => {
  return (
    <Box padding="4" bg="gray.100">
      <Button colorScheme="teal">Chakra Button</Button>
    </Box>
  );
};

export default ChakraComponent;

Chakra UI

Ant Design

Ant Design は、React のためのエンタープライズ級の UI デザイン言語とフレームワークです。Ant Design は、多数の高品質な React コンポーネントを提供し、デザインの一貫性と効率性を向上させます。

// ファイル名: AntComponent.tsx
import { Button } from "antd";
import React from "react";

const AntComponent = () => {
  return <Button type="primary">Ant Button</Button>;
};

export default AntComponent;

Ant Design

コンポーネント駆動開発(CDD)

コンポーネントを組み合わせて、大きな機能を実装していく開発手法です。

Atomic Design

Atomic Design は、UI を再利用可能なコンポーネントに分割するための設計方法論です。Atomic Design は、UI を 5 つの階層(Atoms, Molecules, Organisms, Templates, Pages)に分割します。

// ファイル名: AtomicComponent.tsx
import React from "react";

// Atoms
const Label = ({ text }: { text: string }) => <label>{text}</label>;
const Input = ({
  value,
  onChange,
}: {
  value: string;
  onChange: (value: string) => void;
}) => <input value={value} onChange={(e) => onChange(e.target.value)} />;

// Molecules
const LabeledInput = ({
  labelText,
  inputValue,
  onInputChange,
}: {
  labelText: string;
  inputValue: string;
  onInputChange: (value: string) => void;
}) => (
  <div>
    <Label text={labelText} />
    <Input value={inputValue} onChange={onInputChange} />
  </div>
);

// Organisms, Templates, Pages are composed of Molecules and Atoms

Atomic Design

Ladle

Ladle は React のストーリーを迅速に開発・テストするためのツールです。既存のツールとの互換性があり、リンク、テーマ、右から左へのテキスト、ソースコード、アクセシビリティ(axe)、TypeScript、Flow などをすぐにサポートします。Vite によって動かされ、esbuild を使用し、ES モジュールとコード分割を採用しており、HMR/Fast Refresh が各ストーリーで利用可能です。

npm install ladle --save-dev
ladle

Ladle の公式サイトへ

Storybook

Storybook は、UI コンポーネントを開発するためのオープンソースツールです。Storybook は、コンポーネントの状態を視覚的に探索でき、再利用可能なコンポーネントのライブラリを作成するのに役立ちます。

// ファイル名: Button.stories.tsx
import React from "react";
import { Story, Meta } from "@storybook/react/types-6-0";
import Button, { ButtonProps } from "./Button";

export default {
  title: "Example/Button",
  component: Button,
} as Meta;

const Template: Story<ButtonProps> = (args) => <Button {...args} />;

export const Primary = Template.bind({});
Primary.args = {
  primary: true,
  label: "Button",
};

Storybook

デプロイ

Vercel

Vercel は、フロントエンドの Web アプリケーションをデプロイするためのプラットフォームです。Vercel は、特に Next.js との統合が深く、プロジェクトを GitHub、GitLab、Bitbucket と連携して、コードの変更を自動的にデプロイすることができます。

# Vercel CLIをインストール
npm i -g vercel

# プロジェクトのディレクトリに移動
cd my-project

# デプロイ
vercel

Vercel

Amazon S3

Amazon S3 は、インターネット上でデータを保存するためのオブジェクトストレージサービスです。静的な Web サイトのホスティングや、大量のデータを保存するためのバックアップとして使用されます。

# AWS CLIをインストール
pip install awscli

# AWSの認証情報を設定
aws configure

# バケットにファイルをアップロード
aws s3 cp index.html s3://my-bucket

Amazon S3

ORM

Prisma

Prisma は、Node.js と TypeScript のためのオープンソースのデータベース ORM です。Prisma を使用すると、データベースのスキーマを定義し、そのスキーマに基づいてデータベースとのやり取りを行うことができます。

// ファイル名: PrismaExample.ts
import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

async function main() {
  const allUsers = await prisma.user.findMany();
  console.log(allUsers);
}

main()
  .catch((e) => {
    throw e;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

Prisma

データベース

PlanetScale

PlanetScale は、MySQL 互換のリレーショナルデータベースサービスで、Vitess 技術をベースにしています。PlanetScale は、データベースのスケーリングと管理を容易にするための機能を提供します。

# PlanetScale CLIをインストール
curl -L https://github.com/planetscale/cli/releases/latest/download/pscale-cli-darwin-amd64 -o /usr/local/bin/pscale
chmod +x /usr/local/bin/pscale

# PlanetScaleにログイン
pscale auth login

# データベースに接続
pscale connect my-database main

PlanetScale

バックエンドサービス(認証あり)

Supabase

Postgres ベースの RDB、認証、即時 API、エッジ関数、リアルタイムのサブスクリプション、ストレージ、ベクターエンベッディングを使用してプロジェクトを開始することができます。オープンソースの Firebase の代替品として注目を集めています。料金は、Free 版、Pro 版(月額$25)、チーム版(月額$599)。

import { createClient } from "@supabase/supabase-js";

// Initialize
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!;
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!;
const supabase = createClient(supabaseUrl, supabaseKey);

// Create a new user
const { user, error } = await supabase.auth.signUpWithPassword({
  email: "example@email.com",
  password: "example-password",
});

Supabase

認証

Auth.js

Auth.js は、Web 向けの認証ライブラリです。69 以上の人気のあるサービス(Google、Facebook、Auth0、Apple など)に対する組み込みのサポートがあり、任意の OAuth 2 または OpenID Connect プロバイダーと一緒に使用することができます。

また、組み込みのメール/パスワードレス/マジックリンクを使用したり、任意のユーザー名/パスワードストアと一緒に使用したりすることも可能です。

// Next.jsでのAuth.jsの使用例
// /pages/api/auth/[...nextauth].ts
import NextAuth from "next-auth";
import GitHub from "next-auth/providers/github";
import Facebook from "next-auth/providers/facebook";
import Google from "next-auth/providers/google";

export default NextAuth({
  providers: [
    GitHub({
      clientId: process.env.GITHUB_ID,
      clientSecret: process.env.GITHUB_SECRET,
    }),
    Facebook({
      clientId: process.env.FACEBOOK_ID,
      clientSecret: process.env.FACEBOOK_SECRET,
    }),
    Google({
      clientId: process.env.GOOGLE_ID,
      clientSecret: process.env.GOOGLE_SECRET,
    }),
  ],
});

Auth.js

Auth0

Auth0 は、アプリケーションの認証と認可を管理するためのフレキシブルなソリューションです。Auth0 は、多数の認証プロバイダーをサポートし、ユーザー管理、ログインページのカスタマイズ、セキュリティ機能などを提供します。

// ファイル名: Auth0Component.tsx
import React from "react";
import { useAuth0 } from "@auth0/auth0-react";

const Auth0Component = () => {
  const { loginWithRedirect, logout, user, isAuthenticated } = useAuth0();

  return (
    <div>
      {!isAuthenticated && (
        <button onClick={() => loginWithRedirect()}>Log In</button>
      )}
      {isAuthenticated && <button onClick={() => logout()}>Log Out</button>}
      {isAuthenticated && <p>Welcome, {user.name}</p>}
    </div>
  );
};

export default Auth0Component;

Auth0

Form ライブラリ

React Hook Form

React Hook Form は、React のフォームを簡単に扱うためのライブラリです。React Hook Form は、パフォーマンスを最適化し、再レンダリングを最小限に抑えることができます。

// ファイル名: HookFormComponent.tsx
import React from "react";
import { useForm } from "react-hook-form";

type FormData = {
  firstName: string;
  lastName: string;
};

const HookFormComponent = () => {
  const { register, handleSubmit } = useForm<FormData>();
  const onSubmit = (data: FormData) => console.log(data);

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input {...register("firstName")} placeholder="First name" />
      <input {...register("lastName")} placeholder="Last name" />
      <button type="submit">Submit</button>
    </form>
  );
};

export default HookFormComponent;

React Hook Form

メール送信 API

Resend

Resend は、開発者が大量のメールを一斉に送信するための API を提供するサービスです。例えば、ユーザーへの通知メールやマーケティングメール、パスワードリセットメールなど、アプリケーションから自動的に送信するメールを管理する際に使用します。

また、React を使用して美しいメールテンプレートを作成することも可能です。API を提供しているので、Next.js のサーバーサイドロジックから直接呼び出すことができます。

// app/api/send/route.ts
import { EmailTemplate } from "../../../components/EmailTemplate";
import { NextResponse } from "next/server";
import { Resend } from "resend";

const resend = new Resend(process.env.RESEND_API_KEY);

export async function POST() {
  try {
    const data = await resend.emails.send({
      from: "Acme <onboarding@resend.dev>",
      to: ["delivered@resend.dev"],
      subject: "Hello world",
      react: EmailTemplate({ firstName: "John" }),
    });

    return NextResponse.json(data);
  } catch (error) {
    return NextResponse.json({ error });
  }
}

Resend

バージョン管理

GitHub

GitHub は、ソフトウェア開発プロジェクトをホストするためのプラットフォームです。GitHub は、Git のバージョン管理機能に加えて、コードレビュー、プロジェクト管理、連携アプリケーションの統合など、開発チームが効率的に作業を進めるための機能を提供します。

# リモートリポジトリを追加
git remote add origin https://github.com/user/repo.git

# ローカルの変更をリモートリポジトリにプッシュ
git push -u origin master

GitHub

CI/CD

GitHub Actions

GitHub Actions は、ソフトウェアワークフローの自動化を支援するためのツールです。GitHub Actions を使用すると、プロジェクトのビルド、テスト、デプロイなどのタスクを自動化し、ワークフローを効率化することができます。

# ファイル名: .github/workflows/main.yml
name: CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Run a one-line script
        run: echo Hello, world!

GitHub Actions

CircleCI

CircleCI は、ソフトウェアのビルド、テスト、デプロイを自動化するための CI/CD プラットフォームです。CircleCI は、高速なフィードバックと効率的なデリバリーを可能にするための機能を提供します。

# ファイル名: .circleci/config.yml
version: 2.1
jobs:
  build:
    docker:
      - image: circleci/node:10
    steps:
      - checkout
      - run: echo "Hello, CircleCI!"

CircleCI

API 設計

GraphQL

GraphQL は、API のクエリ言語とランタイムで、既存のデータを効率的に提供することを可能にします。GraphQL を使用すると、クライアントは必要なデータの種類を指定し、サーバーは正確にそのデータを返すことができます。

// ファイル名: graphqlServer.ts
import { ApolloServer, gql } from "apollo-server";

const typeDefs = gql`
  type Query {
    hello: String
  }
`;

const resolvers = {
  Query: {
    hello: () => "Hello, world!",
  },
};

const server = new ApolloServer({ typeDefs, resolvers });

server.listen().then(({ url }) => {
  console.log(`🚀 Server ready at ${url}`);
});

GraphQL

REST API

REST API は、ウェブサービス間の通信を可能にする設計パラダイムです。REST API は、HTTP メソッド(GET、POST、PUT、DELETE など)を使用してリソースを操作します。

// ファイル名: restServer.js
const express = require("express");
const app = express();
const port = 3000;

app.get("/", (req, res) => {
  res.send("Hello, world!");
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

REST API

GraphQL API ハブ

Apollo GraphQL

Apollo GraphQL は、GraphQL API を構築し、管理するための全体的なソリューションを提供します。Apollo は、クライアントサイドとサーバーサイドの両方で動作し、データの取得と管理を効率化します。

// ファイル名: ApolloClientComponent.tsx
import React from "react";
import {
  ApolloProvider,
  ApolloClient,
  InMemoryCache,
  gql,
  useQuery,
} from "@apollo/client";

const client = new ApolloClient({
  uri: "https://48p1r2roz4.sse.codesandbox.io",
  cache: new InMemoryCache(),
});

const GET_DOGS = gql`
  query GetDogs {
    dogs {
      id
      breed
    }
  }
`;

const Dogs = () => {
  const { loading, error, data } = useQuery(GET_DOGS);

  if (loading) return "Loading...";
  if (error) return `Error! ${error.message}`;

  return (
    <div>
      {data.dogs.map((dog) => (
        <div key={dog.id}>
          <p>{dog.breed}</p>
        </div>
      ))}
    </div>
  );
};

const ApolloClientComponent = () => (
  <ApolloProvider client={client}>
    <Dogs />
  </ApolloProvider>
);

export default ApolloClientComponent;

Apollo GraphQL

API 呼び出し

Axios

Axios は、ブラウザと Node.js のための Promise ベースの HTTP クライアントです。Axios を使用すると、簡単に HTTP リクエストを作成し、レスポンスを処理することができます。

// ファイル名: axiosExample.tsx
import React, { useEffect, useState } from "react";
import axios from "axios";

const AxiosExample = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
    const fetchData = async () => {
      const result = await axios("https://api.example.com/data");
      setData(result.data);
    };

    fetchData();
  }, []);

  return <div>{data ? data : "Loading..."}</div>;
};

export default AxiosExample;

Axios

Apollo Client

Apollo Client は、GraphQL API との通信を簡単にするためのライブラリです。Apollo Client を使用すると、データの取得、キャッシュ、更新などを効率的に行うことができます。

// ファイル名: ApolloClientExample.tsx
import React from "react";
import {
  ApolloProvider,
  ApolloClient,
  InMemoryCache,
  gql,
  useQuery,
} from "@apollo/client";

const client = new ApolloClient({
  uri: "https:XXXX",
  cache: new InMemoryCache(),
});

const GET_DOGS = gql`
  query GetDogs {
    dogs {
      id
      breed
    }
  }
`;

const Dogs = () => {
  const { loading, error, data } = useQuery(GET_DOGS);

  if (loading) return "Loading...";
  if (error) return `Error! ${error.message}`;

  return (
    <div>
      {data.dogs.map((dog) => (
        <div key={dog.id}>
          <p>{dog.breed}</p>
        </div>
      ))}
    </div>
  );
};

const ApolloClientExample = () => (
  <ApolloProvider client={client}>
    <Dogs />
  </ApolloProvider>
);

export default ApolloClientExample;

Apollo Client

要チェック!フロントエンド開発ツール・サービス・フレームワーク集