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

ヒデノリのブログ一覧

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 | 日記
2025年09月17日 イイね!

Claudeの無い生活・・・

Claudeの無い生活・・・4週間ほど前に何年も抱えていた課題を解決すべく行ったのが、
生成AIと友に行うコーディングでした。

目的はOMSであるネクストエンジンと
社内の情報共有を行っているGoogleスプレッドシートで
CSV連携しているのをAPI接続に変更するというものです。

人が間に立ってネクストエンジンからCSVをダウンロードして、
Googleスプレッドシートにアップロードすると言うのは簡単そうですが、
日本の法律では人は1日8時間しか働いてはイケないと決まっています。

一方、コンピューター(クラウドでもオンプレミスでも)は、
24時間365日動作させても文句を言うことはありません。

オンプレミス(クラウドが出てくる前の言い方はサーバー)は故障する可能性がありますが、
クラウドであればリソースは全てその供給側ですので、
サービス停止以外であれば故障する可能性を考慮する必要がありません。

人が間に立って・・・人間という言葉ですが、
私は特にコンピューター関係で人間を分離して人が間に立ってという状況に対して
異常な拒否感があります。

コンピューターってプログラムしたら、
その作業を延々と繰り返してくれるのに、
なんで人間が作業をやらないといけないの?

今どきであればDX(Digital Transformation)化やRPA(Robotic Process Automation)ということでしょか?
とりあえず、自分で作業したくない。
パソコンに作業をやらせたいと幼少期から思っていました。

N88-BASICを学んだのは小学生の頃なので・・・
38年ほど前でしょうか?

当時はパソコンと言うとオタクと貶される状況でしたが、
私は”お前ら、絶対に後から見とけよ!”と思って数十年・・・
平成の後半から私の時代が来ました(笑)

そこで、API接続したい!と何年も前から行いたいと思っていましたが、
私の年齢(今49歳)でGoogle Apps Script(=GAS)のコーディングを一から学ぶには、
その年齢からくる学習速度と、定年までの時間を鑑みると時間が圧倒的に無い(-_-;)

ウチの会社は金が無いからEAI(Enterprise Application Integration)とされるTepsや、ASTERIA Warp、ハイパーオートメーションツールであるYoomを有料契約する金はない◯ンボ~(-_-;)

という事で、2025年の令和であれば生成AIにコーディングさせられるのでは?
と思ったのが2025年8月17日です。
生成AIに聞いて答えてくれたのはYoomでしたが思ったより消費が激しすぎてイマイチ・・・
追加で聞いたら、コーディングの必要はあるけれど、GASでアプリを開発したらスケーラビリティに優れますよと言われて・・・
なら、アプリを開発するか!となったのがその日だったように思います。

この4週間ほどでいくつも生成AIを使ってきましたが、
コーディングが出来るとされている生成AIが使えるようになったのを調べてみたところ、
GPT-5 2025年8月7日
Gemini 2.5 pro 2025 年6月17日
Claude Sonnet 3.7 2025年2月19日 すべてのユーザー向け
Claude Sonnet 4.0 2025年9月16日 すべてのユーザー向け(私調べ)
でした。
という事は、2025年8月17日にAIにコーディングさせようと思って行ったことは
令和の今の瞬間でなければ実現不可能であったということですね。

コーディングは最初はGPT-5を使っていましたが、
同じところをぐるぐる回っている感じがしました。

Gemini 2.5 Proはコーディング能力が有るとされていましたが、
無料の制限枠が狭すぎてすぐに限界が来る感じでした。

コーディングに特化しているGitHub Copilot & VS Codeという組み合わせでコーディングを行ったのですが、
コード補完を行ってくれるのは良いのですが、
認証すらたどり着かない状況で無料枠の上限に達してしまい・・・

で、生成AI(Gemini 2.5 Flashだったか?)にコーディングに特化した生成AIは何?
と聞いたところ、タイトル画像のClaudeが挙げられました。

ClaudeはGPT-5と比べるとマイナーなのですが、
そのコーディング能力は特筆すべきものがあります。

何なら、Claude Sonnet 3.7に出会ってからはClaudeでしかコーディングをしていません。

そのClaude Sonnet 3.7も私の環境で2025年9月16日からClaude Sonnet 4.0に進化しました。

その違いをClaudeに聞いたところ・・・
かなり進化したようで・・・

数年来の課題を今日の午前中で解決できました。
しかも、当初予想していた以上の素晴らしい成果です。

Claudeが無ければGASを殆ど学んだことのない私が、
3000行強の在庫情報を取得するGASの開発を、
2500行程のコーディングを、
行うことは出来なかったと思います。

Claudeの無い生活・・・
この4週間ほどではもはや考えられなくなりました。

ネクストエンジンとGoogleスプレッドシートをAPI接続するために、
認証を行うスクリプトを書いてくれました。

API接続するにはまずそれを行うことが必要で、
それが出来たことでようやくスタートラインに立つことが出来ます。
(と言うもののそこまでいかずに挫折することが多々あるとか・・・)

認証ができたら求めている情報を取得するのですが、
試験接続はClaudeが1.5日程で実現可能になりました。

その高速バージョン&1000行程まで取得可能なスクリプトは、
わずか1時間ほどで作ってくれました。

そこから3000行強を25秒で取得するという
当初は想定すらしていなかったところまで上り詰めるには時間がかかりましたが、
それでも、生成AIとコーディングをやろうと思ってから4週間強でたどり着けました。

因みに、直近のコーディングはハードコーディングされていたのをスクリプトプロパティに修正しました。
エンジニア語です^^;

というものの、Claudeで全ての疑問を解決できるわけではありませんし、
生成AI事にその得意不得意の分野がありますので、
どれだけをつかうと言うのは難しいと思います。

なので、私は用途に合わせて数社の生成AIを気分で使い分けています。

でも、コーディングを行うにはClaude一択かな~^^;

GitHubと接続できるのもいいですよね。

ネクストエンジンの認証ができて、
3000件超の在庫情報がわずか25秒ほどで取得できたら、
ネクストエンジンAPIのエンドポイントを見ていくと・・・

無限の発送が浮かんできます(笑)
いゃまじで、その情報が取得できるのであればアレをしてコレをして・・・

と制限がありません。

また、我が社の一番売上が高いモールは楽天市場でして、
楽天市場も楽天APIというものが存在します。

ネクストエンジンAPIで得た知見を活かして、
楽天APIと接続するというのも夢ではありません。

それぞれのシステム同士をつなげるAPIというのに
何年も前から興味を持っていたのですが、
それが2025年8月からコーディングが出来るようになっているとは・・・

今を生きているという感じがとてもしますね(^^♪
Posted at 2025/09/17 22:39:53 | コメント(0) | トラックバック(0) | AI | 日記

プロフィール

「勇者召喚に巻き込まれたけど、異世界は平和でした http://cvw.jp/b/11052/48691539/
何シテル?   10/03 20:12
2025/06/23追記 ヘッダー画像について興味をお持ちの方もいらっしゃると思いますが、こちらは2025/06/21に香川県で開催されました、GAZOO 愛...
みんカラ新規会員登録

ユーザー内検索

<< 2025/10 >>

    1 2 34
567891011
12131415161718
19202122232425
262728293031 

リンク・クリップ

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