VSCodeのスクリプト例

JavaScriptでTensorFlow.jsを動的に読み込む方法|HTMLに直接書かずに機械学習を実行する

HTMLファイルを編集せず、JavaScriptからTensorFlow.jsを安全に読み込む実装パターンを、実行可能なコードと共に解説

2025年8月20日

HTMLに<script>を直書きしない理由

最小実装:動的読み込み + tf.tensor()

以下が本記事の核心となるスニペットです。F12 のコンソールでも試せます。

const script = document.createElement("script");
script.src = "https://cdn.jsdelivr.net/npm/@tensorflow/tfjs";
script.onload = () => {
  const t = tf.tensor([1, 2, 3, 4]); // ← ロード完了後ならOK
  t.print();
};
document.head.appendChild(script);
ポイント:必ず script.onload の中で tf.tensor() を呼び出してください。未ロードだと "tensor is not a function" 等のエラーになります。

仕組みの解説

  1. script要素生成document.createElement("script")
  2. CDNを指定script.src = "https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"
  3. onloadで初期化:完全ロード後にTensorFlow.js APIを利用
  4. DOMへ追加document.head.appendChild(script)

この流れにより、HTMLを編集せずJavaScriptのみで導入できます。

応用:複数ライブラリやバージョン切替

Promiseで順序制御

function loadScript(src){
  return new Promise((resolve,reject)=>{
    const s=document.createElement("script");
    s.src=src; s.async=false; // 明示的に順序を維持
    s.onload=()=>resolve();
    s.onerror=()=>reject(new Error(`Failed to load ${src}`));
    document.head.appendChild(s);
  });
}

(async ()=>{
  //https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.22.0/dist/tf.min.js
  await loadScript("https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest");
  await loadScript("https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-vis@latest");

  const t = tf.tensor([1, 2, 3, 4]);
  t.print();
  // 可視化例(開発時のみ)
  if (window.tfvis) {
    tfvis.show.valuesDistribution({ name: "My Tensor" }, t);
  }
})();

必要なときだけ読み込む(遅延ロード)

let tfReady;
function ensureTF(){
  if (tfReady) return tfReady; // 2回目以降は同じPromiseを返す
  tfReady = new Promise((resolve)=>{
    const s=document.createElement('script');
    s.src='https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest';
    s.onload=resolve; document.head.appendChild(s);
  });
  return tfReady;
}

async function run(){
  await ensureTF();
  const t = tf.tensor([0,1,2,3]).reshape([2,2]);
  t.print();
}

// ボタン等のイベントで実行
// document.querySelector('#run').addEventListener('click', run);

バージョン固定・検証

// プロダクションは互換性のため固定推奨
await loadScript("https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.21.0");

よくあるエラーと対処

まとめ


.htaccessは階層で引き継がれる?Apacheの挙動を徹底解説

MBTI診断

SEO対策に必須!検索上位を狙うsitemap.xmlの完全ガイド

Google Search Consoleの「代替ページ(適切なcanonicalタグあり)」とは?原因と解決法を徹底解説!

Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法

Googleサイト確認のTXTレコードをnslookupで確認する方法【SEO対策】

Googleサーチコンソールに反映されるための最低限のSEO構造とは

PHPで複数ファイルを順番に削除する方法

MBTI診断 | あなたの性格タイプを分析

PDFファイル結合|パスワード設定ツール

【Anker Soundcore Liberty 4】イヤーピース紛失!代替品はAmazonで購入

JavaScriptでタイムゾーン変換!UTCとJST(日本時間)の変換方法

pnpmとは?npmとの違いとインストール方法

CSS・JSの更新が反映されない時のキャッシュ対策方法3選

HTMLとJavaScriptモジュールでクラスを定義し、ボタンから呼び出す方法

JavaScriptでTensorFlow.jsを動的に読み込む方法|HTMLに直接書かずに機械学習を実行する

ChatGPT風リンクバッジをCSSで作成する

ffmpegでMOVファイルを逆再生する方法【音声付き対応】

macOSでドメイン名から情報を取得する方法【初心者向け】

JavaScriptでPCの空き容量やメモリ量を取得できる?Chromeの制限と代替手法

PowerShellでNode.jsの最新バージョン一覧を確認する方法【Volta/Windows対応】

Next.jsでbasePathを/homepage2にしてS3へ静的デプロイする完全手順

Homebrewの「update」と「upgrade」の違い+バージョン確認方法|Macのパッケージ管理

.DS_StoreをGitでアップしない方法|macユーザー向け