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

ヒデノリのブログ一覧

2025年09月22日 イイね!

「GPTは優等生、Claudeは参謀、Geminiは職人!? AI三者三様レビュー

「GPTは優等生、Claudeは参謀、Geminiは職人!? AI三者三様レビューAIってキャラ濃すぎません?

最近は「AIが仕事を奪う!」なんてニュースもありますが、実際に使ってみるとむしろ
**「キャラの濃い仲間が増えた」**みたいな感覚です。
GPT → 安全第一の優等生タイプ
Claude → 頼れる参謀キャラ
Gemini → 職人気質でサッと仕事を終わらせるタイプ
まるで少年マンガのパーティ編成みたいで、つい笑ってしまいます。

三者三様、使ってみた印象
GPT:「それって危なくないですか? こっちの方法の方が安全ですよ!」と、先生っぽいことを言ってくる。優しいけど、ちょっとおせっかい。
Claude:「まず全体の戦略を考えましょう。大局的に見ると…」と、軍師みたいに語り出す。気づいたらノートが図解でいっぱいになってるタイプ。
Gemini:「はい、修正完了っス。あと説明は3行でいいっスよね?」と、必要最小限の仕事をサッとやってくれる、無口な職人。

実際の体験談
この前、ネクストエンジンとGoogleスプレッドシートをつなぐスクリプトを作ったんですが、
細かい修正は Gemini が速すぎて「もう終わったの?」って感じ。ですが、結果まではたどりつかず(-_-;)
設計全体を考えるときは Claude に相談すると「まるで会議資料」みたいな提案をしてくれる。→結果まで到着可能
GPT はというと、「それ危ないからこう直した方が…」と安全確認ばかりしてきて、まるでベテラン上司(笑)。と思うが結果までたどり着かずコーディングに関しては実は無能?(-_-;)

AIが有能か無能かを判断するのは人間なのですが、
その判断能力が高いのは私のようなエンジニアのように思います^^;

結論:最強は誰? →「あなたのパーティ編成次第」
RPGで「戦士」「魔法使い」「僧侶」を使い分けるみたいに、
AIも「目的に合わせて選ぶ」方が絶対楽しい。
Claude → 作戦会議で必須の軍師
Gemini → 手先の器用な職人
GPT → 優しいが口うるさい先輩(ただし、スイートスポットの狭いパイセン)
…と、まるでAI冒険パーティの完成です。

おまけ:AIをもっと楽しく使うコツ
雑に振ってみる → 思わぬキャラが見えて笑える。
無茶ぶりしてみる → 「川柳で答えて」って言ったら、本当にやる。
三者同時に質問して比べる → まるで討論番組の司会者になった気分。

ブログなので好きなことを書いてみました(笑)
Posted at 2025/09/22 21:40:26 | コメント(0) | トラックバック(0) | 日記
2025年09月22日 イイね!

2025年 金麦 華やか皿

申し込んでいた今年の金麦 華やか皿が届きました。

去年はハガキで申し込んで、締切からかなり時間が経ってから届いたのですが、
(見返してみたら2024年12月12日に到着)
今年は2025年9月22日に到着しました。

因みに締切は8月22日で、
レシートを撮って応募方式にしたからか締切から1ヶ月というスピード感でした(・・;)


メーカー Canon
カメラ Canon EOS 7D
画像方向 回転なし
露出時間 1/60
F値 F4
露出制御モード プログラムAE
ISO感度 ISO 400
EXIFバージョン 0230

撮影回数を増やさないと上達しないので、Canon EOS 7Dを持ち出して撮影しました(^^)
Posted at 2025/09/22 20:53:33 | コメント(1) | トラックバック(0) | 日記
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 | 日記

プロフィール

「バイブコーディングという新しい開発手法 http://cvw.jp/b/11052/48699400/
何シテル?   10/07 22:37
2025/06/23追記 ヘッダー画像について興味をお持ちの方もいらっしゃると思いますが、こちらは2025/06/21に香川県で開催されました、GAZOO 愛...
みんカラ新規会員登録

ユーザー内検索

<< 2025/10 >>

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