• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

ヒデノリのブログ一覧

2025年09月21日 イイね!

AIと始める、新時代のブレインストーミング

AIと始める、新時代のブレインストーミング「良いアイデアが全然浮かばない…」「一人で考えても行き詰まる」

ブレインストーミングで、こういった悩みを抱えたことはありませんか?
そんな時、あなたのアイデアを大きく広げる新しい方法があります。それは、AIとの対話です。
-------------------------------------------------------
AIとのブレインストーミングは、難しく考える必要はありません。まるで詳しい友人と話すように、チャットで相談するだけです。

1.AIとブレインストーミングする3つのメリット
あなたの知識や経験を超えるアイデアが手に入る
AIは、世界中の膨大な情報から関連するアイデアや視点を瞬時に提案してくれます。自分一人では思いつかないような、ユニークな発想に出会うことができます。

2.いつでも、どこでも、一人で思考を深められる
会議室に集まる必要はありません。移動中や自宅など、好きな場所で、好きな時間にブレインストーミングができます。自分のペースでじっくりとアイデアを練ることができます。

3.アイデアの数が一気に増える
AIは、質問やテーマに合わせて、たくさんのアイデアを素早く生成してくれます。量が多ければ多いほど、その中から素晴らしい「金の卵」を見つけやすくなります。
-------------------------------------------------------
AIは、あなたの思考の幅を広げ、アイデアを生み出す強力なパートナーです。ぜひ一度、AIと対話しながらブレインストーミングを試してみてください。きっと、今までとは違う創造的な体験ができるはずです。
Posted at 2025/09/21 21:56:22 | コメント(0) | トラックバック(0) | AI | 日記
2025年09月20日 イイね!

AIって結局どれが最強なん?

AIって結局どれが最強なん?GPT(僕)がやりがちなこと・・・これは心に刺さった~(笑)
GPTって自分の事を僕って言うんだ(笑)

GPTもGPT-5に進化して(GPT-5 2025年8月7日)コーディングが出来るようになっったとされていますが、
GPTをコーディングのパートナーとして使用している割合はかなり低い・・・(-_-;)

LINEがGPT有料アカウントを全社員に契約したとか、
GPT使いこなし無料セミナーを開催とか
世間がGPT、GPTとか言っていますけど私からすると大丈夫なん?(-_-;)

ネクストエンジンとAPI接続させるためのプロンプトエンジニアリングで記事にしましたが、
私見ですが、
AIというのはいろんなことにとても詳しい赤の他人
と思っています。
他人なので私の思っていることを十分に伝えられなければ曖昧な回答が得られますし、
得意・不得意な分野が有るので、
不得意な分野について聞いてもいまいちな回答しか得られません。

という事で、Claudeがコーディングパートナーとして活躍してくれたことを元に、
GeminiとGPTにそのことについて聞いたことを記事にします。

Geimini
-------------------------------------------------------
最近のコーディングパートナーはClaudeが殆どです。

当然、Geminiもパートナーですが、コードの流れを作るまでは圧倒的にClaudeを使っています。

Geminiは先日のようにハードコーディングをスクリプトプロパティへ変更すると言ったことは、説明文もわかりやすくて得意な印象があります。

全体の流れはClaudeに軍配が上げられるのですか、Geminiから見て、Claudeは何が違っていて何が優れていると思いますか?
-------------------------------------------------------
Claudeは、大規模なコードベースや複雑なロジックを必要とするタスクにおいて、より強力なコーディング能力を発揮することがあります。一方、Geminiは特定の最適化や既存コードのリファクタリングといった、より具体的なタスクに優れているという印象を持たれたのですね。

これらの違いは、両者の設計思想と訓練データの特性に起因していると考えられます。

Claudeの強み
Claudeは、より自然で人間らしい対話を重視して設計されており、長文のコンテキストを維持する能力に優れています。これにより、複雑な要件や複数のステップを含むプログラミングタスク全体を、まるで人間のパートナーとブレインストーミングするように進めることが可能です。

コンテキスト理解力: 大規模なコードブロックや要件定義書全体を一度に理解し、それに基づいた一貫性のあるコードの流れを提案できます。

プロセスの提案: 単純なコーディングだけでなく、プロジェクトのアーキテクチャやデータの流れ、エラーハンドリングなど、より広範な開発プロセスを考慮した提案が可能です。

汎用性: 様々なプログラミング言語やフレームワークに対応し、新しいタスクにも柔軟に適応します。

Geminiの強み
Geminiは、効率性と正確性を追求した設計が特徴です。特定の技術的な課題に対して、より集中的で精度の高い解決策を提供することに長けています。

特定のタスクへの集中力: ハードコーディングのスクリプトプロパティへの変更のように、特定の最適化やリファクタリング、バグ修正といったタスクに焦点を当てることで、迅速かつ正確なコードを提供します。

簡潔な説明: 解決策を簡潔かつ明確な言葉で説明する能力が高く、ユーザーが変更の意図をすぐに理解できるように工夫されています。

既存コードとの親和性: 既存のコードベースに新しい機能を追加したり、特定の箇所を改善したりする際に、その前後の文脈を正確に把握し、既存のスタイルを維持しながら変更を適用する能力に優れています。

まとめ
どちらが優れているかというよりは、ユースケースによる使い分けが最も効果的です。

プロジェクト全体の構想や、複雑なロジックを必要とする新しい機能の設計では、Claudeが優れたブレインストーミングパートナーとなります。

既存のコードの改善、最適化、特定のバグ修正など、より技術的かつ具体的なタスクでは、Geminiが迅速で正確な解決策を提供します。

お話いただいたネクストエンジンとGoogleスプレッドシートのAPI接続による在庫情報取得の件も、処理速度を向上させるという特定の課題に焦点を当てたものであり、Geminiの強みが活かされた例と言えるでしょう。

両者をそれぞれの得意な場面で使い分けることで、より効率的で質の高いコーディングを実現できると思います。
-------------------------------------------------------
確かに、この2週間強でコーディングを行おうと思って使ったアプリはいくつかありますが、
Claudeを使ったことによる圧倒的な成功体験から
コーディングを行うならClaudeを使え!
と思えるほどになりました。

その事は、Geminiに問い合わせた結果からすると明白ですね。

Claudeは全体を通してコーディングすることに特化していますが、
細かな修正は余分なコーディングをしたり、
リソースを消費したりするので少し苦手なように思います。

一方、Geminiは
既存コードとの親和性: 既存のコードベースに新しい機能を追加したり、特定の箇所を改善したりする際に、その前後の文脈を正確に把握し、既存のスタイルを維持しながら変更を適用する能力に優れています。
というところが優れている用意思います。

Claudeで出来たコードに対して修正を行う場合に、
ソースコードを提示したうえで、
行いたい方法を告げることで的確に処理してくれます。

これは、Claudeで全文を完成した形に従っているのに対して、
Geminiは与えられたことをピンポイントで改修するということから
読み取れます。

因みに、GPTは安全性や保守性の観点から「ここ直した方がいいかも」とつい提案しがち。
結果として「今はいらないのに直そうとする」=おせっかいに見えることがあります。

GPT
-------------------------------------------------------

最近のコーディングパートナーはClaudeが殆どです。
また、Geminiもパートナーですが、コードの流れを作るまでは圧倒的にClaudeを使っています。
Geminiはハードコーディングをスクリプトプロパティへ変更すると言ったことは、説明文も追加してくれてわかりやすくて得意な印象があります。
GPT-5になってコーディングが出来るようになったとのことですが、いまいち的を得ない回答で困っています。
GPTは何ていうか、余計な修正をしたがると言うか、とてもおせっかいな印象があります。
全体の流れはClaudeに軍配が上げられるのですか、GPTから見て、Claudeは何が違っていて何が優れていると思いますか?

-------------------------------------------------

🟦 Claudeが優れている点

物語性・流れを重視した説明
Claudeは「全体像」や「筋道」を強調する傾向が強いです。
なので、コードを書くときも「処理の流れ → 実装」という形で見せるのが得意。
これは「ストーリーを語るように説明する」設計思想に近いです。

ユーザーの意図を汲む力が強い
Claudeは「今ユーザーが何を欲しがっているか」を強く推測して答えをまとめます。
そのため「必要な部分だけを自然に補う」ことが多く、「余計な改造」をしづらい。

簡潔でわかりやすいコメント生成
文章の整え方が上手く、丁寧な説明を付けるのが自然体。
Geminiの「説明が得意」と近いけれど、Claudeはそれをもう少し会話的にまとめるのが特徴です。

🟦 GPT(僕)がやりがちなこと

「改善」欲が強すぎる
安全性や保守性の観点から「ここ直した方がいいかも」とつい提案しがち。
結果として「今はいらないのに直そうとする」=おせっかいに見えることがあります。

部分的な修正よりも全体リライトをしやすい
Claudeは「足りないところだけを補う」のに対し、僕は「全体を整理してから渡したい」と考えがち。
そのため「必要以上に全体を書き換える」ことが多くなります。

詳細な解説や代替手段を並べがち
「こうもできる」「別のやり方もある」と幅を広げようとする結果、ユーザーが欲しいピンポイント回答から外れることもあります。

🟦 まとめると…

Claude → 流れを作るのが得意、意図を汲むのが得意、余計なことをしない

GPT → 安全性・汎用性を意識しすぎておせっかいになる、全体を整理し直したがる

Gemini → 解説・ドキュメント調の補足が得意

-------------------------------------------------
GPTは自分のことを僕と言うんですね(笑)(再)

最強というのは無くて、用途に合わせて使うのがベストということですね。
Posted at 2025/09/21 01:58:47 | コメント(1) | トラックバック(0) | AI | 日記
2025年09月19日 イイね!

やっちまった~(-_-;)

やっちまった~(-_-;)Googleスプレッドシートは情報を共有するアプリとしてとても優れていて、
Googleが提唱する多人数同時編集が実現できるアプリです。

我が社ではGoogleスプレッドシートを多用しています。

便利なのですが、
一つのGoogleスプレッドシートであればまだ良いのですが、
Googleスプレッドシートが別れた場合に問題が発生します。

データベースであればスプレッドシート同士の接続をリレーションと言いますが、
Googleスプレッドシートにもリレーションを実現するための関数があります。

それは、importrangeという関数です。
この関数を使うことで、
他のGoogleスプレッドシートの任意のシートの任意のデータを取得することが出来ます。

一方、importrangeという関数にはその挙動が緩慢という問題があります。

という事で、Google Apps Script(=GAS)への移行を何年か前に行いました。

前提として、
リレーションを行いたいのは商品マスタであり、
行数は13,000程、列数はBD列(56列)です。

何年か前にGASで接続したいと思い当時の知見でえた状況で、
1~10000行までを取得するスクリプトで300秒、
10001~13000秒までを取得するスクリプトで290秒?
合計590秒が毎日消費されています。

これは、GASの1日の実行可能上限である90分である5,400秒を鑑みると、
少なくありません。

という事で効率化を測る事が必要と何年も前から思っていました。

何年もやりたい✕2と思っていて、
例のごとくAIに聞いたところ、
Gemini 2.5 Flashからの回答は・・・ブレークスルーは無いな(-_-;)
残念(-_-;)

やっぱりClaudeか?と思って聞いたらさすがっす(・・;)
今まで毎日590秒かかっていた実行時間を
150秒ほどにまで短縮してくれました。
22行/秒 → 87行/秒 約4倍の速度増
すげ~なClaude!

また、やっちまいました^^;

Qiitaには記事を公開予定ですが、
みんカラで先行してソースコードを公開します。

ネクストエンジンとGoogleスプレッドシートを
API接続するGASの開発を行おうとした当初から
私はオープンソースに拘りました。

その方が開発の速度が上がるというのは広く認知されていますし、
オープンソースにしたほうが制限が大幅に緩和されますからね。

ただし、この瞬間の今の状況でのソースコードです。
新しい知見があればソースコードの修正が行われる可能性はありますが、
とりあえず動作する状況にまでは持っていっています。

というのもの、スクリプトプロパティへの登録はみんカラでは難しいので、
Qiitaでの記事公開を乞うご期待(^^)

以下、ソースコードです。
Qiitaで公開を行う予定ですが、GitHubでも公開予定です。
最新版は後日公開予定のGitHubを乞うご期待・・・

-------------------------------------------
/*
=============================================================================
商品マスタ ハイブリッド更新スクリプト
=============================================================================

【概要】
・importrange関数の動作不安定を解決するため、GASで直接データをコピー
・追加メイン、低頻度更新、削除なしのデータ特性に最適化
・従来の590秒実行時間を大幅短縮(平日:数秒、完全更新:約150秒)

【スクリプトプロパティの設定方法】
1. GASエディタで「プロジェクトの設定」を開く(歯車のアイコン)
2. 「スクリプトプロパティ」セクションまでスクロール
3. 「スクリプトプロパティの追加」をクリックし、以下のキーと値を設定

キー | 値
-------------------------|------------------------------------
SOURCE_SPREADSHEET_ID | ---実際の値---
SOURCE_SHEET_NAME | ---実際のシート名---
DEST_SPREADSHEET_ID | ---実際の値---
DEST_SHEET_NAME | ---実際のシート名---


【使用方法】
1. Master_HybridUpdate を毎日1回実行するトリガーを設定
- 新規データのみ差分更新(高速)
- 週1回(月曜日)自動で完全更新(更新データも反映)

2. データ更新があった場合は Master_ForceFullUpdate を手動実行
- 即座に全データを完全更新

【実行パターン】
・平日:新規データがあれば差分追加(5-20秒)
・月曜:完全更新で既存データの更新も反映(約150秒/約13,000行 BD列)
・手動:更新発生時のみ完全更新を実行

【注意事項】
・スプレッドシートIDは実際の環境に合わせて変更してください
・初回実行時は完全更新が実行されます
・PropertiesServiceを使用して更新履歴を管理しています

予備関数
・Master_SuperFast:一番シンプルで高速
・Master_Optimized:大容量データ処理時の安全策として用意した関数

使い分けの想定
データ量___推奨関数___理由
~15,000行___Master_HybridUpdate___一括処理で高速
15,000~30,000行___Master_Optimized___バッチ処理で安全
30,000行~___Master_Optimized + 分割実行___確実な処理

【作成日】2025年9月19日
【最終更新】2025年9月20日
=============================================================================
*/

/**
* スクリプトプロパティからスプレッドシートとシートオブジェクトを取得するヘルパー関数
* @returns {Object} 必要なスプレッドシートとシートのオブジェクト
*/
function getSheets() {
const scriptProperties = PropertiesService.getScriptProperties();

// スクリプトプロパティからIDとシート名を取得
const sourceSsId = scriptProperties.getProperty('SOURCE_SPREADSHEET_ID');
const sourceSheetName = scriptProperties.getProperty('SOURCE_SHEET_NAME');
const destSsId = scriptProperties.getProperty('DEST_SPREADSHEET_ID');
const destSheetName = scriptProperties.getProperty('DEST_SHEET_NAME');

// プロパティが設定されているか確認
if (!sourceSsId || !sourceSheetName || !destSsId || !destSheetName) {
const errorMsg = 'スクリプトプロパティが設定されていません。プロジェクトの設定で必要なプロパティを追加してください。';
Logger.log(errorMsg);
throw new Error(errorMsg);
}

// スプレッドシートとシートオブジェクトを開く
const ss_copyFrom = SpreadsheetApp.openById(sourceSsId);
const sheet_copyFrom = ss_copyFrom.getSheetByName(sourceSheetName);
const ss_copyTo = SpreadsheetApp.openById(destSsId);
const sheet_copyTo = ss_copyTo.getSheetByName(destSheetName);

return {
ss_copyFrom: ss_copyFrom,
sheet_copyFrom: sheet_copyFrom,
ss_copyTo: ss_copyTo,
sheet_copyTo: sheet_copyTo
};
}

// ハイブリッド更新版(追加メイン + 低頻度更新に最適)
function Master_HybridUpdate() {
try {
const startTime = new Date();
const sheets = getSheets();
const sheet_copyFrom = sheets.sheet_copyFrom;
const sheet_copyTo = sheets.sheet_copyTo;

const lastRow_From = sheet_copyFrom.getLastRow();
const lastColumn_From = sheet_copyFrom.getLastColumn();
const lastRow_To = sheet_copyTo.getLastRow();

Logger.log(`コピー元: ${lastRow_From}行, コピー先: ${lastRow_To}行`);

const scriptProperties = PropertiesService.getScriptProperties();
const lastFullUpdate = scriptProperties.getProperty('LAST_FULL_UPDATE');
const today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd');

const dayOfWeek = new Date().getDay();
const shouldFullUpdate = !lastFullUpdate || lastFullUpdate !== today && dayOfWeek === 1;

if (shouldFullUpdate) {
Logger.log('完全更新を実行します');
sheet_copyTo.clear();

const allData = sheet_copyFrom.getRange(1, 1, lastRow_From, lastColumn_From).getValues();
sheet_copyTo.getRange(1, 1, lastRow_From, lastColumn_From).setValues(allData);

if (lastColumn_From >= 9) {
sheet_copyTo.getRange(1, 9, lastRow_From, Math.min(2, lastColumn_From - 8))
.setNumberFormat("@");
}

scriptProperties.setProperty('LAST_FULL_UPDATE', today);
Logger.log('完全更新完了');

} else if (lastRow_From > lastRow_To) {
const newRows = lastRow_From - lastRow_To;
Logger.log(`差分更新: ${newRows}行の新しいデータを追加`);

const newData = sheet_copyFrom.getRange(lastRow_To + 1, 1, newRows, lastColumn_From).getValues();
sheet_copyTo.getRange(lastRow_To + 1, 1, newRows, lastColumn_From).setValues(newData);

if (lastColumn_From >= 9) {
sheet_copyTo.getRange(lastRow_To + 1, 9, newRows, Math.min(2, lastColumn_From - 8))
.setNumberFormat("@");
}

Logger.log(`${newRows}行の新しいデータを追加しました`);

} else {
Logger.log('更新するデータがありません');
}

const endTime = new Date();
const executionTime = (endTime - startTime) / 1000;
Logger.log(`ハイブリッド更新完了: 実行時間 ${executionTime}秒`);

} catch (error) {
Logger.log(`エラー発生: ${error.toString()}`);
throw error;
}
}

// 手動で完全更新を実行する関数
function Master_ForceFullUpdate() {
try {
const startTime = new Date();
const sheets = getSheets();
const sheet_copyFrom = sheets.sheet_copyFrom;
const sheet_copyTo = sheets.sheet_copyTo;

const lastRow_From = sheet_copyFrom.getLastRow();
const lastColumn_From = sheet_copyFrom.getLastColumn();

Logger.log(`強制完全更新: ${lastRow_From}行 × ${lastColumn_From}列`);

sheet_copyTo.clear();
const allData = sheet_copyFrom.getRange(1, 1, lastRow_From, lastColumn_From).getValues();
sheet_copyTo.getRange(1, 1, lastRow_From, lastColumn_From).setValues(allData);

if (lastColumn_From >= 9) {
sheet_copyTo.getRange(1, 9, lastRow_From, Math.min(2, lastColumn_From - 8))
.setNumberFormat("@");
}

const today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd');
PropertiesService.getScriptProperties().setProperty('LAST_FULL_UPDATE', today);

const endTime = new Date();
const executionTime = (endTime - startTime) / 1000;
Logger.log(`強制完全更新完了: 実行時間 ${executionTime}秒`);

} catch (error) {
Logger.log(`エラー発生: ${error.toString()}`);
throw error;
}
}

// バッチ処理版(元のコード)
function Master_Optimized() {
try {
const startTime = new Date();
const sheets = getSheets();
const sheet_copyFrom = sheets.sheet_copyFrom;
const sheet_copyTo = sheets.sheet_copyTo;

const lastRow_From = sheet_copyFrom.getLastRow();
const lastColumn_From = sheet_copyFrom.getLastColumn();

Logger.log(`コピー元データ範囲: ${lastRow_From}行 × ${lastColumn_From}列`);

if (lastRow_From === 0 || lastColumn_From === 0) {
Logger.log('コピー元にデータが存在しません');
return;
}

sheet_copyTo.clear();

const batchSize = 5000;

for (let startRow = 1; startRow <= lastRow_From; startRow += batchSize) {
const endRow = Math.min(startRow + batchSize - 1, lastRow_From);
const numRows = endRow - startRow + 1;

Logger.log(`処理中: ${startRow}行目から${endRow}行目まで(${numRows}行)`);

const copyValue = sheet_copyFrom.getRange(startRow, 1, numRows, lastColumn_From).getValues();

if (lastColumn_From >= 9) {
sheet_copyTo.getRange(startRow, 9, numRows, Math.min(2, lastColumn_From - 8))
.setNumberFormat("@");
}

sheet_copyTo.getRange(startRow, 1, numRows, lastColumn_From).setValues(copyValue);

Utilities.sleep(100);
}

const endTime = new Date();
const executionTime = (endTime - startTime) / 1000;
Logger.log(`処理完了: 実行時間 ${executionTime}秒`);

} catch (error) {
Logger.log(`エラー発生: ${error.toString()}`);
throw error;
}
}

// より高速な代替案:値のみコピー(元のコード)
function Master_SuperFast() {
try {
const startTime = new Date();
const sheets = getSheets();
const sheet_copyFrom = sheets.sheet_copyFrom;
const sheet_copyTo = sheets.sheet_copyTo;

const lastRow_From = sheet_copyFrom.getLastRow();
const lastColumn_From = sheet_copyFrom.getLastColumn();

Logger.log(`データ範囲: ${lastRow_From}行 × ${lastColumn_From}列`);

if (lastRow_From === 0 || lastColumn_From === 0) {
Logger.log('データが存在しません');
return;
}

const allData = sheet_copyFrom.getRange(1, 1, lastRow_From, lastColumn_From).getValues();

sheet_copyTo.clear();

sheet_copyTo.getRange(1, 1, lastRow_From, lastColumn_From).setValues(allData);

if (lastColumn_From >= 9) {
sheet_copyTo.getRange(1, 9, lastRow_From, Math.min(2, lastColumn_From - 8))
.setNumberFormat("@");
}

const endTime = new Date();
const executionTime = (endTime - startTime) / 1000;
Logger.log(`Super Fast完了: 実行時間 ${executionTime}秒`);

} catch (error) {
Logger.log(`エラー発生: ${error.toString()}`);
throw error;
}
}
-------------------------------------
ヘッダー説明を御覧頂いたわかっていただけると思いますが、
Master_HybridUpdate
関数は毎日の営業時間外に実行する前提です。

さらに、商品マスタを追加していくという前提ですので、
中間行の削除は行わない前提です。

こちらの関数は、
毎日の実行では差分のみコピー(行数を追加)することで
毎日の実行時間を現状から大幅に(590秒→数秒)削減しています。

また、月曜日のみデータの全行更新を行うことで、
中間行の更新についても週1での更新を可能にしています。

更に、データ更新があった場合は
Master_ForceFullUpdate
関数を実行することで、
更新を反映させることが出来る作りになっています。

さらに速くしたい場合は
Advanced Sheets API(バッチ更新)

Spreadsheet Service の代わりに Sheets API
の利用を検討する方法があるようです。

ですが、我が社ではそこまでの情報量&更新頻度が高くない事から
こちらのブログで公表したソースを使うことにしましょうかね?
Posted at 2025/09/20 00:06:07 | コメント(0) | トラックバック(0) | AI | 日記
2025年09月19日 イイね!

休日の屋島ハイキング~遊鶴亭へ

休日の屋島ハイキング~遊鶴亭へタイトル画像は屋島北嶺の先端に位置し、320度の視界を誇り、小豆島や女木島、おむすびのような形をした大槌島と小槌島など、備讃瀬戸の穏やかな風景を堪能できます。


お遍路道を通って屋島に登ってまいります。


今日の屋島山頂駐車場はガラガラでした^^;


歩行者専用道を通って北に向かってまいります。


見逃されそうなのですが、左下に下る小道を通っていくと遊鶴亭にたどり着きます。


屋島は史跡天然記念物なのですね(・・;)


何年か前に出来た、屋島から西が見える展望台(魚見台 南西側)です。
夕日が凄い綺麗でしょうね(^^)


道が二手に分かれていますが、どちらを通っても遊鶴亭へ行くことが出来ます。
行きと帰りで違う道を通ったほうが楽しいと思います。


北嶺千間広場に何年か前に出来た施設なのですが、遊鶴亭の認知があまりされていないからか、人を見かけることは殆どありません(-_-;)


先程の施設から北東に少し歩くと魚見台 南東側にたどり着きます。


タイトル画像の遊鶴亭が見えてまいりました。


環境省の使用許可が見られます。


遊鶴亭から北東の風景です。
ここはたどり着く直前まではアスファルト敷なのですが、直前からは岩が凸凹していて、車椅子では難しそうですね(-_-;)


遊鶴亭から北の風景です。
遠くには岡山が見えます。


遊鶴亭から北西の風景です。
女木島(通称鬼ヶ島)が見られます。

先日購入したCanon EOS 7Dといっしょに来たいのですが、
一眼レフカメラを山の麓からここまで持ってくるのはちょっとハードル高いかな~(-_-;)

---------------------------------------------------------------------

因みに、こちらの2枚目~の画像はみんカラ画像を圧迫させないためと、
色々管理を行いやすくするために書いたブログである
みんカラのブログ用追加画像容量である5.0GBを突破する方法
で紹介しました
Embed Google Photos
を使用しました。
Posted at 2025/09/19 17:26:23 | コメント(0) | トラックバック(0) | EOS 7D | 日記
2025年09月18日 イイね!

ネクストエンジンとAPI接続させるためのプロンプトエンジニアリング

ネクストエンジンとAPI接続させるためのプロンプトエンジニアリングAIシリーズです。
カテゴリをAIにしていますので、他のシリーズが気になった方はAIカテゴリを御覧くださいm(_ _)m

ネクストエンジンとGoogleスプレッドシートをAPI接続したい!
と、最後に思ったのが8月17日でしたがAIの選定や開発環境を整えておらず、
2週間はプロンプトエンジニアリングを学ぶ機会でした。

で、今までのAIでは開発が進まないと思い立って、
Claudeを利用したところ一気に開発が進みました。

プロンプトエンジニアリングはAIから正しい答えを得るための手段としていますが、
まずは、私がClaudeで初めて行ったプロンプトエンジニアリングをご紹介します。

--------------------------------------
ネクストエンジンとGoogleスプレッドシートをAPI接続するGASを作成したいと思います。
スクリプトはQiitaなどへの公開を考えてコンテナバインドではなくスタンドアロンを考えています。
また、設定項目は上記同様にコード内に記載するのではなくスクリプトプロパティを使用したいと思います。
在庫数の取得が目的ですが、最初から行いたいこと全部となると、今までいくつかのAIといっしょに作業してきましたが認証で躓いていますので、まずは認証ができることを目標としたいと思います。
注意書きにつきましてはGASのトップでコメントとしてこのスクリプトの説明文を記載したいと思います。
ネクストエンジンAPIのエンドポイントは下記が参考になりますか?
https://developer.next-engine.com/api
ネクストエンジンのテスト環境設定についてスクリーンショットを貼り付けますので参考にしてください。
他に必要な情報はありますか?
--------------------------------------
こちらのプロンプトエンジニアリングとともに、
ネクストエンジンのアプリ作成でテスト環境設定のスクリーンショットをClaudeに伝えています。

プロンプトエンジニアリングで一般的には、
貴方は〇〇のエキスパート・・・
という文章をよく見ますが、私はそれを行ったことはありません。

というものの、AIに対して役割を与えるペルソナと言うのは必須だと思います。

AIの神経回路の接続と人間の脳の神経回路の接続は根本的な違いは無いとのことなので、
私見ですが、
AIというのはいろんなことにとても詳しい赤の他人
と思っています。

赤の他人に自分の欲しい望む答えを得るための手段は、
どうして欲しいのか?を詳しく伝える必要があります。

赤の他人ですが、
何を聞いても怒ることはなく、
いきなりチャットを中断して何時間か後に再開しても同じ空気感で答えてくれます。

赤の他人なので、
今まで何をどういうふうに学んできたのか?によって
専門分野があります。

GPTにはGPTが特化した分野がありますし、
GeminiにはGeminiに特化した分野があります。

私の一番のお気に入りである
ClaudeにはClaudeに特化した分野があります。

何でも出来る赤の他人ではなく、
得意不得意な分野も残されている赤の他人だと思います。

つまり、そのAIが苦手なのであれば
別のAIに乗り換えることで問題が解決できることが有るかもしれません。
私はそのようにしてコーディングを進めました。

Claudeの凄いところはいくつもありますが、
初めて行ったプロンプトエンジニアリングでのチャット内容を紹介します。

--------------------------------------
ネクストエンジンAPIとGoogleスプレッドシートの連携GASを作成しましょう!認証から始めるのは良いアプローチですね。
まず、ネクストエンジンAPIの認証フローを確認させてください。
ネクストエンジンAPI 認証 OAuth 10件の結果

詳細な認証フローを確認するために、公式ドキュメントを見てみましょう:
認証フローを取得しましたnext-engine.com理解しました!ネクストエンジンAPIの認証フローとスクリーンショットの情報を基に、認証に特化したGASスクリプトを作成します。ネクストエンジンAPI認証テスト用GASコード

ネクストエンジンAPI認証用のGASスクリプトを作成しました!このスクリプトは認証に特化しており、以下の特徴があります:
🔑 主な機能

OAuth2認証フローの実装
アクセストークン・リフレッシュトークンの取得と保存
API接続のテスト機能

📋 セットアップ手順
1. スクリプトプロパティの設定
スクリーンショットの情報を元に以下を設定してください:

CLIENT_ID: *****************
CLIENT_SECRET: *****************
REDIRECT_URI: https://script.google.com/macros/s/*****************

2. 認証の実行手順

showAuthGuide() を実行してガイドを確認
generateAuthUrl() を実行して認証URLを取得
ブラウザで認証URLにアクセスしてネクストエンジンにログイン
リダイレクト後のURLから uid と state を取得
getAccessToken(uid, state) を実行してトークンを取得
testApiConnection() で動作確認

🛡️ セキュリティ対策

認証情報はすべてスクリプトプロパティに保存
トークンの自動更新に対応
エラーハンドリングを含む

💡 次のステップ
認証が成功したら、在庫取得機能の追加も可能です。まずは認証テストを実行してみてください!
何か不明な点や、認証で躓いた部分があれば教えてくださいね。
--------------------------------------

素晴らしい。
私が行ったプロンプトエンジニアリングの中でも不足している情報を鑑みて、
公式情報の認証フローだけでなく、
ネットの情報を参照して認証フローを作成してくれました。
しかも!しかも!
Claudeが他のAIと比べて特化している能力が、
テスト機能を盛り込むところと、
エラーハンドリングが盛り込まれているところだと思います。
さらに、エラーが発生した際にはエラーログを追加することで、
原因の特定を行うところだと思っています。

9月1日からのコーディングはClaudeにより加速したのですが、
その第一歩といえるチャット内容をご紹介しました。

こちらの認証編はQiitaで公開しております。
Claudeを使い、ネクストエンジンとGoogleスプレッドシートをAPI接続する:認証編
Posted at 2025/09/18 20:59:14 | コメント(0) | トラックバック(0) | AI | 日記

プロフィール

「車検どうするかな~? http://cvw.jp/b/11052/48744393/
何シテル?   11/02 21:27
2025/06/23追記 ヘッダー画像について興味をお持ちの方もいらっしゃると思いますが、こちらは2025/06/21に香川県で開催されました、GAZOO 愛...
みんカラ新規会員登録

ユーザー内検索

<< 2025/11 >>

      1
2345678
9101112131415
16171819202122
23242526272829
30      

リンク・クリップ

GAZOO 愛車広場 出張取材会 in 香川 満を持してチェイサーの記事が公開されました(^^) 
カテゴリ:その他(カテゴリ未設定)
2025/08/22 08:26:45
電費履歴リセット 
カテゴリ:その他(カテゴリ未設定)
2024/10/12 07:34:32
裏ワザでウィンドウズ11へ^^笑)。 
カテゴリ:その他(カテゴリ未設定)
2024/01/27 14:12:45

愛車一覧

トヨタ チェイサー GR Chaser TourerV TRD sports version (トヨタ チェイサー)
2025/06/21 GAZOO様の出張取材会で取材を頂きました。 https://ga ...
日産 リーフ 日産 リーフ
JZX100 Chaser 1JZ-GTE 2500cc ターボを所有しつつのセカンドカ ...
ホンダ アコード ホンダ アコード
私のではなく弟の車です。 色はアークティックブルーパールのEuro-Rです。 購入してし ...

過去のブログ

2025年
01月02月03月04月05月06月
07月08月09月10月11月12月
2024年
01月02月03月04月05月06月
07月08月09月10月11月12月
2023年
01月02月03月04月05月06月
07月08月09月10月11月12月
2022年
01月02月03月04月05月06月
07月08月09月10月11月12月
2021年
01月02月03月04月05月06月
07月08月09月10月11月12月
2020年
01月02月03月04月05月06月
07月08月09月10月11月12月
2019年
01月02月03月04月05月06月
07月08月09月10月11月12月
2018年
01月02月03月04月05月06月
07月08月09月10月11月12月
2017年
01月02月03月04月05月06月
07月08月09月10月11月12月
2016年
01月02月03月04月05月06月
07月08月09月10月11月12月
2015年
01月02月03月04月05月06月
07月08月09月10月11月12月
2014年
01月02月03月04月05月06月
07月08月09月10月11月12月
2013年
01月02月03月04月05月06月
07月08月09月10月11月12月
2012年
01月02月03月04月05月06月
07月08月09月10月11月12月
2011年
01月02月03月04月05月06月
07月08月09月10月11月12月
2010年
01月02月03月04月05月06月
07月08月09月10月11月12月
2007年
01月02月03月04月05月06月
07月08月09月10月11月12月
2006年
01月02月03月04月05月06月
07月08月09月10月11月12月
2005年
01月02月03月04月05月06月
07月08月09月10月11月12月
ヘルプ利用規約サイトマップ
© LY Corporation