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

ヒデノリのブログ一覧

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

アルテシマが激成長してきました。

アルテシマが激成長してきました。お部屋にグリーンを取り入れたいなら、アルテシマはいかがでしょうか。正式には「フィカス・アルテシマ」といい、ゴムの木の仲間で、その育てやすさから初心者にも大人気です。

最大の特徴は、ライムグリーンの斑入りが美しいつややかな葉。お部屋に置くだけでパッと明るい雰囲気を演出してくれます。また、「永遠の幸福」という花言葉を持つことから、新築祝いや結婚祝いなど、お祝いのギフトとしても喜ばれています。

育てる上でのポイントは、日光を好むので明るい場所に置くことと、水やりの頻度を季節によって変えることです。春から秋は土が乾いたらたっぷりと、冬は乾燥気味に管理しましょう。

もし、葉が落ちてきたら、それは環境の変化や水の与えすぎ・不足のサインかもしれません。アルテシマの小さな変化に気づいて、素敵なグリーンライフを楽しんでみませんか?
------------------------------------------------

タイトル画像では縮小されてしまいましたので、
Googleフォトの新しいアカウントから画像を貼り付けました。
フィカス・アルテシマですが、
斑入りと言われる白い部分が多い個体を買ってきたものの、
室内の明るいところで育てていたものの
斑といわれる白い部分が少なくなってまいりました。

これは日光が足らないのか?
しかし、オリーブは別として一般的な観葉植物は直射日光はNGでは?
と思っていたのですが、
今年の夏前にベランダにオーニングをしたのに合わせて
室内の観葉植物全てをベランダに出しました。

特に、日光の当たる量が少ないと思われているフィカス・アルテシマは
ベランダの西側手すりに置いておきました。

すると・・・
見事な斑入りに復活!

この斑の入り方はすごくないですか?

アルテシマはかなり強い光が必要なのですかね?
---------------------------------------------
ゴムの木には他に仲間がおりまして
フィカス・ウンベラータ
というのがおります。


こちらは斑が入ることなく、斑も単色なのですが、
なにがすごいってアルテシマと比べてあかから様に成長がすごい(・・;)

こんなに大きくなるん?(・・;)

今年の夏は暑かったのですが
我が家の植物にとっては快適だったようで、
数ヶ月でものすごく成長してくれました。

その他はちょくちょく小出しにしていきたいと思いますm(_ _)m
Posted at 2025/09/16 23:49:03 | コメント(2) | トラックバック(0) | 日記

プロフィール

「OTGケーブルで一眼レフカメラとスマホを接続してみました。 http://cvw.jp/b/11052/48700796/
何シテル?   10/08 21:25
2025/06/23追記 ヘッダー画像について興味をお持ちの方もいらっしゃると思いますが、こちらは2025/06/21に香川県で開催されました、GAZOO 愛...
みんカラ新規会員登録

ユーザー内検索

<< 2025/10 >>

    1 2 34
5 6 7 891011
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