こんにちは。ファンリピートの鳴海です。
今回は機能名を事前に入れておくだけで、一括で要件定義を行う処理について、社内開発を行ったので、概要だけ説明します!
Azure OpenAI
機能名から機能要件を出力するために自然言語処理を活用します。OpenAIでも使用することは可能ですが、今回は情報保護するためにAzure OpenAIを使用します。
Azure OpenAIについて詳しく知りたい方は以下の記事をご覧ください。
![](https://funrepeat.com/wp-content/uploads/2023/11/3e1f428403bfc4cab45db452deca0dcd-300x169.png)
モデルの作成
検索ボックスで「Azure OpenAI」と検索し、該当する項目を開きます。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-40.png)
作成を押下します。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-41.png)
項目を入力します。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-42-1024x529.png)
こちらの種類は必要に応じて選択し、次へを押下してください。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-43.png)
エラーが起きなければ、作成ボタンを押下してください。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-44.png)
作成後に画面に進み、Go to Azure OpenAI Studioをクリックしてください。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-45-1024x282.png)
デプロイを押下します。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-46.png)
新しいデプロイを押下します。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-47.png)
モデル名や駆動させるモデルを選択し、作成を押下します。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-48.png)
API Keyの発行
デプロイしたモデルを開きます。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-49.png)
プレイグラウンドで開きます。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-50-1024x601.png)
コードの表示を押下します。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-51-1024x601.png)
①URL、②API Keyをメモしておきます。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-52-1024x601.png)
Notion
Notionで行う作業としてはテーブルの作成、API keyの発行を行います。
テーブルの作成
対象ページで、データベースを作成します。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-53-1024x601.png)
プロパティを最低限以下で設定します。
- name
- title
- status
- セレクト
![](https://funrepeat.com/wp-content/uploads/2024/02/image-54.png)
statusは以下で設定しておきます。
- 開発くんで生成
- 開発くんで生成中
- 開発くんでエラーが発生
- 開発くんで生成完了
- クローズ
タスクを作成する時は、デフォルトで開発くんで生成に設定しておきます。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-55.png)
次にdatabase IDを取得したいので、フルページとして開きます。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-56-1024x601.png)
URLからコピーします。
notion.so/{ここがdatabase id}?~~~
![](https://funrepeat.com/wp-content/uploads/2024/02/image-57.png)
API Keyの発行
以下のURLを開き、新しいインテグレーションを押下します。
![](https://www.notion.so/images/meta/default.png)
上記作成したテーブルのワークスペースを選択し、名前を入力できたら、送信ボタンを押下します。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-58-1024x601.png)
表示されるAPI Keyをメモしておきます。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-59-1024x601.png)
コードについて
環境はNode.jsベースで、処理の内容としては以下のようになります。
package.jsonの処理内容について
@notionhq/client
![](https://static-production.npmjs.com/338e4905a2684ca96e08c7780fc68412.png)
- 用途: Notion APIとの通信を容易にするための公式Node.jsクライアントライブラリです。このライブラリを使用することで、Notionのデータベースへのクエリ、ページの更新、ブロックの操作など、多くのAPI機能を簡単に利用できます。
- 主な機能: ページの作成と更新、データベースのクエリ、ブロックの追加と更新など。
@azure/openai
![](https://static-production.npmjs.com/338e4905a2684ca96e08c7780fc68412.png)
- 用途: Microsoft AzureのOpenAIサービスへのアクセスを提供するNode.jsクライアントライブラリです。OpenAIのAPIを介して自然言語処理や機械学習モデルを利用することができます。
- 主な機能: テキスト生成、テキスト解析、会話モデルへのアクセスなどが可能です。このコードでは、OpenAIのチャット機能を利用して、開発チケットの自動生成に関する応答を生成しています。
@tryfabric/martian
![](https://static-production.npmjs.com/338e4905a2684ca96e08c7780fc68412.png)
- 用途: Markdown形式のテキストをNotionのブロック形式に変換するためのライブラリです。NotionのAPIは独自のブロック形式を使用してコンテンツを扱うため、この変換プロセスが必要になります。
- 主な機能: MarkdownからNotionのブロック形式への変換を行い、NotionページにMarkdownコンテンツを簡単に追加できるようにします。
dotenv
![](https://static-production.npmjs.com/338e4905a2684ca96e08c7780fc68412.png)
- 用途: Node.jsプロジェクトで環境変数を簡単に管理するためのゼロ依存ライブラリです。.envファイルから環境変数を読み込み、プロジェクト内で安全に使用できるようにします。
- 主な機能: .envファイルから環境変数をプロセス環境にロードします。これにより、APIキーやデータベースの接続情報などの機密情報をコードから分離し、安全に管理できます。
index.jsの処理内容について
- 環境変数の読み込み:
- dotenvモジュールを使用して、.envファイルから環境変数を読み込みます。これにより、Notion APIキー、Azure OpenAIのエンドポイント、APIキー、デプロイメントIDがプログラム内で利用可能になります。
- 関数の定義:
- bulkCreateDevTicketsは、HTTPリクエストを受け取り、Notionのデータベース内の特定のステータスを持つページに開発チケットを生成する非同期関数です。
- NotionとOpenAIクライアントの初期化:
- Notion APIとAzure OpenAIサービスに接続するためのクライアントインスタンスを作成します。
- 開発チケットのテンプレート読み込み:
- fsモジュールを使用して、createDevTickets.txtファイルから開発チケットのテンプレートを読み込みます。
- Notionデータベースからのデータ取得:
- 指定されたデータベースIDを使って、ステータスが「開発くんで生成」のページを検索します。
- ページごとの処理:
- ステータスを「開発くんで生成中」に更新します。
- ページのタイトルをOpenAIに送信し、開発チケットの内容を生成します。
- OpenAIからの応答を受け取り、Markdown形式のテキストをNotionのブロック形式に変換します。
- ページ内の既存ブロックを全てアーカイブ(削除と同様)し、新しい内容のブロックを追加します。
- ステータスを「開発くんで生成完了」に更新します。
- エラー処理:
- 何らかのエラーが発生した場合、ページのステータスを「開発くんでエラーが発生」に変更し、エラーメッセージをログに記録します。また、HTTPレスポンスとしてエラーを返却します。
- 完了:
- 全ての処理が無事に完了したら、HTTPレスポンスとして200 OKを返却します。
createDevTickets.txtについて
こちらは出力させたいフォーマットを事前に読み込ませるような内容となっています。
もし出力内容を変更したい場合は、こちらで変更が可能です。
Google cloud functions
Google cloud functionsで上記のコードをデプロイし、使えるようにしたいと思います。
デプロイ
自身のアカウントで、GCPのコンソールを開きます。
cloud functionsを開きます。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-60-1024x176.png)
ファンクションを作成を押下します。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-61-1024x173.png)
APIを有効にします。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-62-1024x357.png)
①関数名は「bulkCreateDevTickets」にします。
②認証について
- 認証はもし使用する関数が今後外部でも使用したいという方は、「未認証の呼び出しを許可」を選択します。※今回はこちらを推奨します。
- Google認証が必要であれば「認証が必要」を選択します。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-63.png)
ランタイム環境変数は以下のようにセットします。
名前 | 値 |
NOTION_API_KEY | 上記で取得したNotionのAPI Key |
AZURE_OPENAI_ENDPOINT | 上記で取得したAzure OpenAIのURLのドメインhttps://~~~~.openai.azure.com/ |
AZURE_OPENAI_API_KEY | 上記で取得したAzure OpenAIのAPI Key |
AZURE_OPENAI_DEPLOYMENT_ID | 上記で取得したAzure OpenAIのURLのdeploymentsの後の値 |
セットができたら、次へ進みます。
エントリポイントはbulkCreateDevTicketsにします。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-64-1024x508.png)
package.json、index.jsは上記のコードをそのまま貼り付けしてください。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-65-1024x508.png)
+ボタンを押下して、ファイル名を「createDevTickets.txt」で作成します。内容自体は上記を貼り付けしてください。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-66-1024x508.png)
対応できたら、デプロイを押下すれば、完了です。
使用方法
Notionで事前に「slack通知機能」という名前で追加しておきます。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-67.png)
デプロイした関数のテスト中を開き、トリガーとなるイベントの構成で以下のを入力し、関数をテストするを押下して、Notionに反映されていればOKです!
※databaseIdの値は上記手順で取得したdatabaseIdを入力してください。
![](https://funrepeat.com/wp-content/uploads/2024/02/image-68-1024x328.png)
![](https://funrepeat.com/wp-content/uploads/2024/02/image-69.png)
まとめ
今回はGPTを活用して、機能名から機能要件定義を一括で作成できる関数を作成しました。
こちら以外でも自動化できそうな内容があれば、今後も共有できればなと思います。
![](https://nocoderi.co.jp/wp-content/uploads/2024/08/36b6779aa5f69386f9eb183bcf532c30.png)