An open API service indexing awesome lists of open source software.

https://github.com/linyows/rotion

Rotion is a set of components and tools that utilize the Notion API and React to generate a static website from your Notion databases and pages.
https://github.com/linyows/rotion

hacktoberfest nextjs notion-api react

Last synced: 2 months ago
JSON representation

Rotion is a set of components and tools that utilize the Notion API and React to generate a static website from your Notion databases and pages.

Awesome Lists containing this project

README

          

English | 日本語





Rotion




Github Actions


NPM

**Rotion**は、Notion APIとReactを活用して、Notionのデータベースやページを静的ウェブサイトとして生成するためのコンポーネント&ツール群です。
Next.jsをはじめとしたReact系フレームワークでの利用を想定していますが、他のフレームワークでも動作します。
画像や必要なファイルはローカルに保存されるため、完全な静的サイト生成が可能です。

公式サイト: https://rotion.linyo.ws

主な特徴
--

- Notion APIからデータベース・ページを取得し、静的サイト用データとして変換
- 画像やPDFなどのファイルもローカル保存
- 豊富なReactコンポーネント(Gallery, Table, List, Page, 各種Blockなど)
- Next.jsなどの静的サイトジェネレーターと親和性が高い
- **Next.js App Router サポート** - `createClientLink` ヘルパー(v2.0.1以降)
- **Next.js Page Router サポート** - 従来のSSGワークフロー
- TypeScript対応

インストール
--

```bash
npm install rotion
```

または

```bash
yarn add rotion
```

使い方
--

### 1. Notion APIのセットアップ

Notionインテグレーションを作成し、APIキーとデータベースIDを取得します:

1. [Notion Integrations](https://www.notion.so/my-integrations) にアクセス
2. 新しいインテグレーションを作成
3. インテグレーショントークンをコピー
4. Notionページ/データベースをインテグレーションと共有
5. ページ/データベースIDをURLからコピー

### 2. データの取得

`rotion` から提供されるAPIを使ってNotionからデータを取得します:

```ts
import { FetchDatabase, FetchBlocks, FetchPage } from 'rotion'

// データベースを取得
const db = await FetchDatabase({ database_id: 'YOUR_DATABASE_ID' })

// ページブロックを取得
const blocks = await FetchBlocks({ block_id: 'YOUR_PAGE_ID' })

// ページ情報を取得
const page = await FetchPage({ page_id: 'YOUR_PAGE_ID' })
```

### 3. Reactコンポーネントで表示

#### Next.js App Router (v15+)

Next.js App Router では、`createClientLink` ヘルパーのセットアップが必要です:

**ステップ1:** `app/lib/rotion.ts` を作成:
```tsx
'use client'

import { createClientLink } from 'rotion/ui'
import NextLink from 'next/link'

export const ClientLink = createClientLink(NextLink)
```

**ステップ2:** Server Component で使用:
```tsx
// app/page.tsx
import { Page } from 'rotion/ui'
import { FetchBlocks } from 'rotion'
import { ClientLink } from './lib/rotion'
import type { Link } from 'rotion/ui'

export default async function MyPage() {
const blocks = await FetchBlocks({ block_id: 'YOUR_PAGE_ID' })
return
}
```

#### Next.js Page Router

Page Router では、Next.js の Link を直接使用できます:

```tsx
// pages/index.tsx
import type { GetStaticProps } from 'next'
import { Page } from 'rotion/ui'
import { FetchBlocks } from 'rotion'
import NextLink from 'next/link'

export const getStaticProps: GetStaticProps = async () => {
const blocks = await FetchBlocks({ block_id: 'YOUR_PAGE_ID' })
return { props: { blocks } }
}

export default function MyPage({ blocks }) {
return
}
```

#### データベースビュー

Notionデータベースをさまざまな形式で表示:

```tsx
import { Gallery, Table, List, Calendar } from 'rotion/ui'
import { FetchDatabase } from 'rotion'

const db = await FetchDatabase({ database_id: 'YOUR_DATABASE_ID' })

// ギャラリービュー

// テーブルビュー

// リストビュー

// カレンダービュー

```

##### Calendar オプション

カレンダービューは月単位のグリッドを描画します。`start` と `end` を持つ複数日のイベントは、対象のセルにまたがる1本の帯としてレンダリングされ、週境界では帯が分割されて続きが描かれます。

```tsx

```

主なエクスポート
--

### データ取得用関数(`rotion` から)

- `FetchDatabase` - Notionデータベースの取得とキャッシュ
- `FetchBlocks` - ページブロックの取得とキャッシュ
- `FetchPage` - ページ情報の取得
- `FetchBreadcrumbs` - パンくずリスト情報の取得

### UIコンポーネント(`rotion/ui` から)

**データベースビュー:**
- `Gallery` - ギャラリービュー
- `Table` - テーブルビュー
- `List` - リストビュー
- `Calendar` - 月単位のカレンダービュー(指定したdateプロパティに従って予定を配置)

**ページとブロック:**
- `Page` - Notionページ全体を表示
- 各種Blockコンポーネント(TextBlock, ImageBlock, CodeBlock, CalloutBlock など)

**ユーティリティ:**
- `Icon` - Notionアイコンの表示
- `RichText` - Notionリッチテキストの表示
- `Checkbox` - チェックボックスの表示
- `createClientLink` - Next.js App Router用ヘルパー(v2.0.1以降)

サンプル
--

`examples/` ディレクトリには、Notionデータベース連携を実演する完全なサンプルが含まれています。

### データベースのセットアップ

すべてのサンプルは、以下のプロパティを持つNotionデータベースが必要です:

| プロパティ名 | プロパティ型 |
|------------|-------------|
| Title | `title` |
| Tags | `multi_select`|
| Date | `date` |

### [nextjs-approuter](./examples/nextjs-approuter)
データベース対応のNext.js App Routerサンプル:
- インデックスページにデータベーステーブルビュー
- 個別記事用の動的 `[id]` ルート
- `generateStaticParams` を使ったServer Components
- CSS Modulesによるスタイリング

```bash
cd examples/nextjs-approuter
cp .env.example .env.local
# NOTION_TOKENとNOTION_DATABASE_IDを設定
npm install
npm run dev
```

### [nextjs-pagerouter](./examples/nextjs-pagerouter)
データベース対応のNext.js Pages Routerサンプル:
- `getStaticProps` を使ったデータベーステーブルビュー
- `getStaticPaths` による動的 `[id]` ルート
- 従来のSSGワークフロー

```bash
cd examples/nextjs-pagerouter
cp .env.example .env.local
# NOTION_TOKENとNOTION_DATABASE_IDを設定
npm install
npm run dev
```

### [astro](./examples/astro)
データベース対応のAstroサンプル:
- `.astro` ファイルでのデータベーステーブルビュー
- `getStaticPaths` による動的ルート
- `client:load` によるReactコンポーネント

```bash
cd examples/astro
cp .env.example .env
# NOTION_TOKENとNOTION_DATABASE_IDを設定
npm install
npm run dev
```

各サンプルのデモ内容:
- 3つのプロパティすべてを表示するデータベーステーブルビュー
- 完全なコンテンツを持つ個別記事ページ
- データベースと記事ビュー間のナビゲーション

スクリプト
--

- `npm run build` - ビルド
- `npm run test` - テスト
- `npm run story` - Storybookの起動

必要な環境
--

- Node.js 18以上推奨
- React 17、18、または19
- Next.js 13以上(App Router機能を使う場合はNext.js 15以上推奨)

ライセンス
--

MIT

作者
--

[@linyows](https://github.com/linyows)