TypeScript学習備忘録_04
ちょっとバタバタしていて間が空いてしまいましたが、復習がてら自分のペースで再開していこうと思います。無理せず細く長く続けていくのが一番ですね。
前も同じことを言っているので、きっとこれからも言い続けていくんだと思います。
今回は、git diff から自動でQiita原稿を作成するスクリプトにGemini APIを組み込んでみたので、その変更点を振り返ります。
目次
1.dotenv
2.Google_Gen_AI_SDKの初期化
3.外部テンプレートの読み込み
4.async/await
1-dotenv
- 安全にAPIキーを読み込み、未設定時に処理を安全に中断する仕組み
require('dotenv').config();
const apikey = process.env.GEMINI_API_KEY;
if (!apikey) {
console.error('エラー:.envにGEMINI_API_KEYが設定されていません');
process.exit(1);
}
うっかりAPIキーを直書きしてGitHubに公開したら大事故なので、しっかり .env から引っ張ってくるようにしました。この手のガード節やエラーハンドリングはまだスラスラ暗唱できませんが、安全第一のために必ずスタメンにしたいお決まりパターンです。
2-Google_Gen_AI_SDKの初期化
- 公式SDKを読み込んでGeminiクライアントを使える状態にする仕組み
const { GoogleGenAI } = require('@google/genai');
const AI = new GoogleGenAI({ apiKey: apikey });
Googleの新しいSDK(@google/genai)を導入してみました。普段使い慣れたライブラリと比べるとまだ「よっ友」状態ですが、引数にオブジェクトでAPIキーを渡すだけのシンプルな設計でとっつきやすかったです。
3-外部テンプレートの読み込み
- 外部ファイルから指示文を読み込み、動的なdiffデータとガッチャンコする仕組み
const promptTemplate = fs.readFileSync('AI_prompt.txt', 'utf-8');
const fullPrompt = promptTemplate + '\n\n【入力データ(git diff)】\n' + diff;
長いプロンプトをスクリプト内にベタ書きするとコードの見通しが一気に悪くなるので、別ファイル(AI_prompt.txt)に逃がしました。fs.readFileSync の文字コード指定(utf-8)を毎回忘れそうになるのはご愛嬌です。
4-async/await
- 非同期処理でAPIレスポンスの到着を待ち受け、生成結果を取り出す仕組み
const response = await AI.models.generateContent({
model: 'gemini-3.8-flash',
contents: fullPrompt,
});
const reportContent = response.text;
API通信などの時間のかかる処理は非同期になるので、関数全体を async にして await で待ち受けます。「どこに await を置くんだっけ?」とたまに迷子になりますが、こうして無事にレスポンスのテキストが返ってくるとやっぱりテンションが上がりますね。
今回は4個でしたね。片手に収まるくらいがお揃いみたいです。
実はこれは、さっそく上記の学習内容を使ったGeminiAPIを用いてまとめてもらった内容を
ほぼ変えずに(目次とかを整えただけ)使ってみました
結構私の文章っぽくはなっていますが、
やはり過去の語彙のそのままの流用であったり、学習の幅のみの文章出力だなという感じがして、
私であればAIが一目でわかるって感じですね
ほかの人に見せたら、ちょっとわかんないレベルかなと感じています
業務とかで使うものもこれくらいの感じで出てくれたら本当に工数削減なのに