この記事は何?
MarkdownAIは簡単にWebサイトを公開できるサイトですがServer AI
を用いることでサイト上にAIを用いたコンテンツを用意することができます
MarkdownAIのServer AI
にはKnowledge
という機能があり、AIに知識を与えることが出来ます
このKnowledge
をmicroCMSで管理することによって柔軟なAI管理を目指します
全体の構成
登場人物
- GitHub
- GitHub Actions
- GitHub Pages
- MarkdownAI
- ServerAI
- microCMS
- コンテンツAPI
構成
デプロイまでのフロー
- microCMSでコンテンツを更新
- webhookでGitHub Actionsワークフローを呼び出し
- node.jsのアプリケーションがmicroCMSコンテンツをAPIから最新のコンテンツを取得
- 取得したコンテンツをHTMLに書き出し
- 生成されたHTMLをGitHub Pagesへデプロイ
- MarkdownAIのServerAIがGitHub PagesのHTMLをKnowledgeとして参照
GitHubの設定
repository
GitHubにPages用のrepositoryを作成します
特別な設定はないです
microCMS コンテンツAPI呼び出し/html生成用のプログラム
ActionsのWorkflowでmicroCMSのコンテンツAPIを呼び出し、取得したコンテンツをHTMLに書き出すプログラムをNode.jsで用意します
httpのリクエスト及びHTMLの生成ができれば環境に制約はありません
APIの呼び出しにはmicroCMSでSDKが用意されていますのでそちらを利用すると簡単に実装できますのでSDKが用意されている環境で実装するのがおすすめです
Actions
microCMSのコンテンツAPIを呼び出してJSON形式のファイルに書き出します
書き出されたJSONファイルをHTMLに書き出します、HTMLへの書き出しは(ejs)[https://github.com/mde/ejs]を用いています
microCMSのAPIを呼び出すコード
import getList from "./module/microcms";
import * as fs from 'fs';
(async () => {
const res = await getList("markdownai");
const json = JSON.stringify(res);
console.log(json);
fs.writeFileSync('./dist/contents.json', json);
})();
import { createClient } from "microcms-js-sdk";
export const getList = async (content: string) => {
const API_KEY = process.env.X_MICROCMS_API_KEY ? process.env.X_MICROCMS_API_KEY : "" ;
const SERVICE_DOMAIN = process.env.SERVICE_DOMAIN ? process.env.SERVICE_DOMAIN : "" ;
const client = createClient({
serviceDomain: SERVICE_DOMAIN,
apiKey: API_KEY,
});
const res = await client.get({
endpoint: content,
});
return res;
}
export default getList;
以下の2点の値はmicroCMSを利用開始すると取得できます
詳しくは(公式ドキュメント)[https://document.microcms.io/content-api/x-microcms-api-key]を参照してください
- X_MICROCMS_API_KEY
- SERVICE_DOMAIN
HTMLを生成するコード
今回はサンプルなので凝ったことはしていません
プログラマブルにHTMLを生成できればなんでもよかったので(ejs)[https://github.com/mde/ejs]を利用しています
<html>
<head>
</head>
<body>
<table>
<thead>
<th>title</th>
<th>content</th>
</thead>
<tbody>
<% for(let i = 0; contents.length > i; i++) { %>
<tr>
<td><%= contents[i]["title"] %></td>
<td><%= contents[i]["content"] %></td>
</tr>
<% } %>
</tbody>
</table>
</body>
</html>
前述のコードで./dist/contents.json
が生成されていますので以下のようにejs
のコマンドで
contents.json
を読み込むことでコード内でJSONのデータとして扱うことが出来ます
詳しくは公式ドキュメントを参照お願いします
$ ejs ./src/index.ejs -f ./dist/contents.json -o ./_site/index.html
Pages
GitHub Pagesは生成されるHTMLのホスト先です
こちらもインターネットに公開できる環境であればなんでもよいです、GitHub Actionsでの公開が楽なのでオススメです
Pagesに公開されたHTMLをMarkdown AIのKnowledge
とします
microCMSの設定
microCMSのコンテンツが更新された際にGitHub Pages上のHTMLが更新されるようにします
microCMSにWebhook
の機能があるのでコンテンツ更新時にGitHub ActionsのWorkflowが稼働するように設定します
追加
をクリックすることで`GitHub Actions
- Webhookの名前
- 任意の値
- GitHubトークンの設定
- GitHubのsettingsから作成して設定します
- ユーザ名
- ユーザ名をそのまま入力
- リポジトリ名
- Pagesで公開するHTML生成するGitHub Actionsのリポジトリ名
- イベントトリガー名
- GitHub Actionsの
on.repository_dispatch.types
と合わせる(以下に例示)
- GitHub Actionsの
name: Node.js CI
on:
repository_dispatch:
types: ["githubpages_update4markdownai"]
あとはチェックボックスからWebhook発火のイベントを設定すればOKです
MarkdownAIの設定
MarkdownAIの管理画面にログインをして(Googleのアカウントでログインできます)
Create Model(ロボのアイコン)
をクリックしてAIのモデルを作成します
Select Model
の選択及びModel Name/Prompt
を入力します
このKnowledge
> の部分をLink
に選択してGitHub PagesのURLを入力したらCreate
をクリックでAIモデルの設定は完了
+
をクリックするとInsert
ボタンがアクティブになるのでクリックしてscript
を選択
テキストフィールドにスクリプトが挿入されます
Save
をクリックすれば保存され完成です
その後View
> URL
> Publish
この手順でインターネットにサイトが公開がされます
ポップアップ上のURLにアクセスすれば公開されたサイトへ訪問することができます
これで完了です!
最後に
MarkdownAI,microCMS,GitHub(Pages)の連携によるAIを用いたWebサイトの構築について紹介しました
MarkdownAIによる容易なAIの実装とmicroCMSのリッチなUIによるAIのカスタムが本稿の目指すところです
本稿はAI要素を組み込んだサイトをMarkdownAIとmicroCMSの連携で簡単に作成するを重きを置いております