🐈

Nextra + Amplifyでさくっとオンラインマニュアルサイトを立ち上げる

2022/12/12に公開

お客様に依頼されて作成したWebサービスの管理サイトのマニュアルを作成することになり、最初パワポで作成して収めようかと思ったのですが、

  • 更新の度に、お客様に送付するのがめんどくさい
  • お客様の方で、最新版をちゃんとファイルを管理してもらえるのかわからない(それを負担させるのも申し訳ない)
  • 現場のお客様は、PCよりタブレットやスマフォがメインなので、パワポで作成したところで、現場でそれを閲覧できるのかどうかわからない
  • パワポで作成するのもしんどい

の理由から、オンラインマニュアルを検討することにしました。なお、検討する上で、普段よく使っているMarkdownで記載できると楽だなと思い、いくつか案を考えました。

案①:GROWI

昔会社員時代に、部内のナレッジ共有でつかってました。Markdownで投稿・編集できて、ナレッジ共有できるサービスです。やるとすればEC2などで、サーバーを立ち上げて実施する感じですが、正直投稿は私しかしないので、サービス側に投稿できるようにする必要があるのか?という気もして、この案は却下しました。

案②:esa.io

これも、昔所属した会社で利用していました。有料のクラウドナレッジマネジメントサービスです。簡単に利用できるのは便利ですが、閲覧するにもアカウントが必要で、結構お金がかかるので、却下です。

案③:microCMS + Next.js

microCMSとNext.jsのSSGでサイトを構築することが良くあるので、ありかなとも思いました。マニュアル程度であれば、無料プランに収まりそうな気もします。ただ、あまり更新しないマニュアルをわざわざCMSで管理するかといわれるとオーバースペックな気がします。

どれもしっくりこない・・・

どれもしっくりこないなーとおもい、単純にMarkdownで記載すれば、それがそのまま記事になればいいので、Next.jsとmarkdown-to-jsxで作ろうかなーと思いながら、もっと楽できないかとNext.jsのTemplatesを眺めていたところ、Nextraという、Starter Kitを発見し、ちょっとよく見るとまさに求めていたものでした。

Nextraとは?

Nextraは、Next.jsのSSGでMarkdownからドキュメントサイトを生成するNext.jsのStarter Kitです。特徴としては、

  • 記事は基本的にMarkdownで記載するだけ
  • 最初からテキスト検索機能などが組み込まれており、記事を書くことに集中できる
  • SSGなので、Next.jsをVercelやAmplifyなどにデプロイするだけでよい

等です。今回の

  • オンラインマニュアルを作成したい
  • マニュアルの作成者は限られており、編集機能をWebサイトに持たせる必要はない
  • コンポーネントや、検索機能など、めんどくさいことは一切したくない、とりあえず、早く立ち上げたい

という要望にまさにマッチしていました。

Nextraでサイトを作成

リポジトリを作成

最初に、GitHubでリポジトリを作成します。NextraのGitHubのリポジトリを開き、Use this templateボタンからCreate a new repositoryを選択し、テンプレートからリポジトリを作成します

リポジトリ名を適当に設定して、Create repository from templateから、リポジトリを作成します。なお、今回作成したのは、お客様向けのサイトなので、Privateなリポジトリにしています。

これでリポジトリは完成です。

ローカル環境で動かす

まず、ローカル環境で動かしてみます。作成したGitHubのリポジトリをcloneします。そして作成されたディレクトリに移動し、実行します。私の開発PCはyarnがインストールされているので、以下のコマンドで起動できます。

yarn install
yarn dev

起動すると、ブラウザで、http://localhost:3000にアクセスすると、初期状態で以下のようなサイトが表示されます。

ヘッダーをカスタマイズする

初期状態だと、ヘッダに、

  • ロゴ(My Project)
  • Aboutページへのリンク
  • 検索フォーム
  • Contact(Twitterへのリンク)
  • GitHubへのリンク
  • Discordへのリンク

がありますが、下の3つはいらないので削除します。theme.config.tsxを開き以下の行を削除します。

import React from 'react'
import { DocsThemeConfig } from 'nextra-theme-docs'

const config: DocsThemeConfig = {
  logo: <span>My Project</span>,
-  project: {
-    link: 'https://github.com/shuding/nextra-docs-template',
-  },
-  chat: {
-    link: 'https://discord.com',
-  },
-  docsRepositoryBase: 'https://github.com/shuding/nextra-docs-template',
  footer: {
    text: 'Nextra Docs Template',
  },
}

export default config

次に、pages/_meta.jsonを開き、以下の行を削除します。

{
  "index": "Introduction",
  "another": "Another Page",
  "advanced": "Advanced (A Folder)",
  "about": {
    "title": "About",
    "type": "page"
  },
-  "contact": {
-    "title": "Contact ↗",
-    "type": "page",
-    "href": "https://twitter.com/shuding_",
-    "newWindow": true
-  }
}

これでヘッダから、不要なコンポーネントがなくなりました。

内容を書く

内容は、pages内に、mdxを拡張しとして、Markdownの記事を書くだけです。私はTyporaを普段つかってMarkdownを作成しているので、ひたすらTyporaでMarkdownを書いていけば、オンラインマニュアルの完成です。

Typoraは、有償化されましたが、値段は15$ 程度で、買い切りなので、頑張って他のツールを探して、それに慣れるコストを考えると買ってしまった方が良いと思い。有償化されて即購入しました。

ストレスフリーにMarkdownをかけるので、とても重宝しています。

Amplifyにデプロイ

最後に、作成したサイトをホスティングします。Amplifyでも、VercelでもNetlifyでもなんでもよいのですが、普段AWSのAmplifyを使っているので、Amplifyでホスティングします。

GitHubアカウントと連携していれば、AWSのマネジメントコンソールにログインして、Amplifyのコンソールで、新しいアプリケーションを選択し、GitHubからリポジトリを選択して、次への選択していけば、ホスティングが完了です。

Amplifyを使用すれば、

  • カスタムドメインで公開する
  • Basic認証をかけて、限定公開にする

などの設定も簡単にできてしまいます。

ひたすらMarkdownを書く

GitHub ⇒ Amplifyの連携さえできてしまえば、あとは、ひたすらMarkdownを書いて、GitHubにpushしてしまえば、自動的にオンラインマニュアルが更新されます。
最初に仕組みさえ作ってしまえば、開発しながらマニュアルを書けますし、あとでマニュアル作るのめんどくさいなーと感じないのでお勧めです。

Discussion