3分だけコピペエンジニアになって、genkitでAIアプリを作ってみよう！

こんにちは。 webとかアプリとかの開発やってます、中嶋です。

自作アプリに[genkit](https://firebase.google.com/products/genkit?hl=ja)を利用してカテゴライズAI機能を追加したのですが、導入の簡単さに感動してしまいました。

https://0s-think-app.vercel.app/ja/


いざ導入してみると数分でできてしまうような簡単さでしたが、

「何ができるのかよくわからん」
「何か面倒な手順が必要なんじゃないか」

など、二の足を踏んでしまっていました。


僕と同じような人、とりあえず簡単にgenkitに触れてみたい人向けに、**3分ほどで頭を使わずに手を動かしてgenkitでアプリを作成できる**よう、簡単に導入方法をまとめました。是非、試してみてください！


**ファインチューニングなどは全く考えてません。強い人、すみません！**


## genkitとは

極限まで簡単にいうと「いろんな生成AIのモデルを簡単に開発に組み込めるようにしたライブラリ」かなと思います。

今回は、`gemini 1.5 Flash`というモデルでアプリを作成しますが、OpenAIのGPT4oなどのモデルを利用するように変更することも簡単にできます。LangChainを触ったことある人は、それと似たようなものと考えていただければ、大体合ってるかと...!



## 導入フロー(ここから3分)

今回は簡単さを最優先として、npm, commonjsで実装していきましょう。

### 1. geminiのAPIキーを作成する

「[Google AI Studio](https://aistudio.google.com/app/apikey?hl=ja)」からAPIキーを作成・コピーしておいてください。
※プランを無料に設定しておけば、課金はされません


### 2. 適当なディレクトリを作成する

```bash
mkdir genkit-qiita && cd $_
```

### 3. npmアプリとして初期化 & 必要なpackageをinstallする

```bash
npm init -y # 初期化
npm install genkit @genkit-ai/googleai # genkitとAIモデルをinstall
```

### 4. `Hello, Gemini!, What you can do?`と質問するコードを書く

```js
// index.js
const { gemini15Flash, googleAI } = require("@genkit-ai/googleai");
const { genkit } = require("genkit");

const ai = genkit({ plugins: [googleAI()], model: gemini15Flash });

export const execute = async () => {
  const { text } = await ai.generate("Hello, Gemini!, What you can do?");
  console.log(text);
};

execute();
```

### 5. 実行する

```bash
# 1で作成したAPIキーを環境変数としてexport
export GOOGLE_GENAI_API_KEY=xxx
node ./index.js
```

これで、nodeから生成AIにリクエストを送り出力を得ることができました！

---

これだと静的な質問しか投げることができないので、外部から質問を受け付けるようにしていきましょう。

### 6. 「入力された文章をAIに送り、結果を返却する」flowの作成

index.jsを編集して、flowをexportするようにします. 
execute周りはいらないので消してしまいましょう。

```js
const { gemini15Flash, googleAI } = require("@genkit-ai/googleai");
const { genkit } = require("genkit");

const ai = genkit({ plugins: [googleAI()], model: gemini15Flash });

const flow = ai.defineFlow("myFlow", async (input) => {
  const { text } = await ai.generate(
    `Hello, Gemini!, ${input ?? "what you can do?"}`
  );
  return text;
});

module.exports = { flow };

```

### 7. developerツールのinstallと起動

```bash
npm install -D genkit-cli
npx genkit start -- node --watch ./index.js
```

![スクリーンショット 2024-12-02 15.34.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266081/1bff6450-3597-f6fe-e6fc-77e79229072b.png)

![スクリーンショット 2024-12-02 15.38.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266081/1ab6232e-ab5f-18f8-4ae0-0da3ac991fbe.png)

任意の文章をgeminiに投げ、回答を得るアプリを作成することができました！ :clap: :clap: :clap:  


## 終わりに

3分でできたでしょうか...? :smiley: 
できなかった人は、コピペエンジニアになりきることが出来ていません :punch::punch::punch: 

今回はとりあえず触ってみることを目標としましたが、

「pluginとはなんぞや」
「flowをもっと活用するにはどうすればいいんや」
「RAGはできんのか？(できる)」

など、たくさん勉強すべきことはあると思うので、[genkit公式ドキュメント](https://firebase.google.com/docs/genkit?hl=ja)もみてみてください...! 

自分もAIチンプンカンプン人間なので、頑張って勉強します...



## アプリも触ってくれると嬉しいです。 🥰🥰🥰

「[0s思考アプリ(非公式)](https://0s-think-app.vercel.app/ja/)」は、赤羽雄二氏が提唱した「頭が良くなる世界一シンプルなトレーニング」として有名な「0秒思考」を、デジタルでやってみよう、というアプリです。


```md
0秒思考のざっくり説明

- A4用紙にテーマを書いて、1分間思いつくままにメモを取る
- 思考整理を行うことができる
- 悩むことが減る
- 頭の回転が速くなる

赤羽氏からは紙とペンで行うことが推奨されている
```


紙に書くメリットは重々承知していますが、現在AIが高度化してきた中で、「"紙に書く"以上のメリットをデジタルで生み出すことができるのではないか」と思い、アプリを作成しています。(詳細は「[note](https://note.com/nakajiman0329/n/n2915e668391b)」)

まだまだ開発途上のアプリですが、是非使ってみてください！
FBなどもいただけたらめちゃめちゃ嬉しいです！


https://0s-think-app.vercel.app/ja/