ライブラリ不要で実現するモダンWeb開発:ブラウザネイティブAPIで脱npm依存を目指す実践ガイド

当ページのリンクには広告が含まれています。
IT女子 アラ美
🚀 まだ何でもnpm installしてるの?ネイティブAPIを学びなさい!
生成AIをビジネスで活かすオンライン講座【DMM 生成AI CAMP】

お疲れ様です!IT業界で働くアライグマです!

「とりあえずnpm install」が口癖になっていませんか?日付処理にmoment.js、HTTP通信にaxios、状態管理にRedux——気づけばnode_modulesが数百MBに膨れ上がり、ビルド時間もどんどん長くなっていく。

実は、これらの機能の多くはブラウザネイティブAPIだけで実現できます。Intl API、Fetch API、Web Storage API、Structured Cloneなど、モダンブラウザには強力な標準機能が揃っているのです。

この記事では、ライブラリに頼らずブラウザネイティブAPIで開発する実践的な手法を、コード例とケーススタディを交えて解説します。

目次

テーマの全体像と背景

IT女子 アラ美
💡 node_modules肥大化で消耗してるの?標準APIを使いなさい!
ネイティブAPIを使いこなせるエンジニアは市場価値が高いわよ。
ITエンジニアのハイクラス転職なら【TechGo(テックゴー)】

近年、Web開発の現場では「ライブラリ疲れ」が深刻な問題になっています。依存パッケージの脆弱性対応、破壊的変更への追従、バンドルサイズの肥大化——これらはすべて外部ライブラリへの過度な依存が原因です。

なぜ今「脱ライブラリ」なのか

  • セキュリティリスク:サプライチェーン攻撃の増加により、依存パッケージが攻撃ベクトルになるケースが急増しています
  • パフォーマンス劣化:不要なコードがバンドルに含まれ、初期ロード時間が悪化します
  • メンテナンスコスト:ライブラリのメジャーアップデートへの追従に膨大な工数がかかります

この流れはフレームワーク側でも加速しています。React Server Componentsの実践ガイドでも触れた通り、モダンWeb開発ではサーバーサイドとクライアントサイドの役割分担が進んでいます。クライアント側で動作するコードを最小限にする流れの中で、ネイティブAPIの活用は自然な選択肢です。

ブラウザAPIの進化

2020年以降、ブラウザAPIは劇的に進化しました。

  • Intl API:日付・数値・通貨のフォーマットをロケール対応で処理
  • Fetch API:HTTP通信の標準インターフェース
  • Web Crypto API:暗号化・ハッシュ処理をブラウザ内で完結
  • Structured Clone:オブジェクトのディープコピーをネイティブで実現

IT女子 アラ美
ネイティブAPIだけで本当に実用的なアプリが作れるんですか?

ITアライグマ
はい、多くのユースケースで十分に実用的です。特に日付処理やHTTP通信は、ネイティブAPIの方がバンドルサイズゼロで高速に動作します。

前提条件と環境整理

ネイティブAPIへの移行を始める前に、前提条件を整理します。

対象ブラウザ

  • Chrome 90+Firefox 90+Safari 15+Edge 90+
  • IE11のサポートが不要であれば、ほぼすべてのネイティブAPIが利用可能です

移行の優先順位

すべてのライブラリを一度に置き換える必要はありません。以下の順序で段階的に進めるのが現実的です。

  1. バンドルサイズが大きいものから着手(moment.js → Intl API)
  2. 代替が容易なものを次に(axios → Fetch API)
  3. 複雑なロジックを含むものは最後に検討

パッケージマネージャー自体の見直しも重要です。uvへの移行ガイドで解説したように、ツールチェーン全体を最適化する視点が大切です。

IT女子 アラ美
既存プロジェクトでも段階的に移行できますか?

ITアライグマ
はい、一括置換ではなく機能単位で段階的に移行できます。新規機能からネイティブAPIを使い始め、既存コードは余裕のあるタイミングで置き換えていくのがおすすめです。

ステップ1:基本的な実装・設定

代表的なライブラリをネイティブAPIで置き換える具体例を見ていきましょう。

moment.js → Intl.DateTimeFormat

日付フォーマットは、Intl APIで完全に代替できます。


// ❌ moment.js(バンドルサイズ: 約70KB gzip)
import moment from 'moment';
const formatted = moment().format('YYYY年MM月DD日');

// ✅ Intl.DateTimeFormat(バンドルサイズ: 0KB)
const formatted = new Intl.DateTimeFormat('ja-JP', {
  year: 'numeric', month: 'long', day: 'numeric'
}).format(new Date());
// → "2026年2月9日"

axios → Fetch API

HTTP通信もネイティブのFetch APIで十分です。


// ❌ axios(バンドルサイズ: 約14KB gzip)
const res = await axios.get('/api/users');
const data = res.data;

// ✅ Fetch API(バンドルサイズ: 0KB)
const res = await fetch('/api/users');
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();

lodash.cloneDeep → structuredClone


// ❌ lodash(バンドルサイズ: 約25KB gzip)
import cloneDeep from 'lodash/cloneDeep';
const copy = cloneDeep(original);

// ✅ structuredClone(バンドルサイズ: 0KB)
const copy = structuredClone(original);

たとえばPitCMSのようなヘッドレスCMSと組み合わせる場合も、Fetch APIだけでコンテンツ取得が完結するため、追加のHTTPクライアントライブラリは不要です。

ブラウザネイティブAPI vs ライブラリ バンドルサイズ比較

上のグラフが示す通り、ネイティブAPIに置き換えるだけでバンドルサイズを大幅に削減できます。

IT女子 アラ美
Fetch APIにはaxiosのインターセプター機能がないですよね?

ITアライグマ
その通りです。ただし、Fetch APIのラッパー関数を自作すれば同等の機能を実現できます。20行程度のコードで認証ヘッダーの自動付与やエラーハンドリングを共通化できます。

ステップ2:発展的な活用・応用パターン

基本的な置き換えを押さえたら、さらに高度なネイティブAPIの活用パターンを見ていきましょう。

Web Crypto APIによる暗号化処理

トークンのハッシュ化やデータの暗号化も、外部ライブラリなしで実現できます。


// SHA-256ハッシュの生成
async function sha256(message) {
  const encoder = new TextEncoder();
  const data = encoder.encode(message);
  const hash = await crypto.subtle.digest('SHA-256', data);
  return Array.from(new Uint8Array(hash))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
}

Intersection Observer APIによる遅延読み込み

スクロール監視ライブラリを使わずに、画像やコンポーネントの遅延読み込みを実装できます。


const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.src = entry.target.dataset.src;
      observer.unobserve(entry.target);
    }
  });
}, { rootMargin: '200px' });

document.querySelectorAll('img[data-src]')
  .forEach(img => observer.observe(img));

AbortControllerによるリクエストキャンセル


const controller = new AbortController();
setTimeout(() => controller.abort(), 5000); // 5秒でタイムアウト

const res = await fetch('/api/data', {
  signal: controller.signal
});

実際にFunstackのようなSPAフレームワークでも、これらのネイティブAPIを活用することで依存パッケージを最小限に抑えた軽量なアプリケーションを構築できます。

IT女子 アラ美
ネイティブAPIだけだとTypeScriptの型定義はどうなりますか?

ITアライグマ
ブラウザネイティブAPIの型定義はTypeScriptに標準で含まれています。lib.dom.d.tsに定義されているため、追加の型パッケージは不要です。

実装後の効果検証(ケーススタディ)

IT女子 アラ美
💡 バンドルサイズの肥大化を放置してるの?ユーザー体験を改善しなさい!
パフォーマンス改善の実績は転職でも強力なアピールポイントになるわよ。
自分らしく働けるエンジニア転職を目指すなら【strategy career】

実際のプロジェクトでネイティブAPI移行を実施した効果を検証します。

状況(Before)

  • Next.js + TypeScriptのECサイト。依存パッケージ数は187個
  • バンドルサイズ(gzip)が合計420KB。初期ロード時間がモバイルで4.2秒
  • moment.js、axios、lodash、uuid、crypto-jsなどの汎用ライブラリが多数含まれていた
  • Lighthouseのパフォーマンススコアは62点

行動(Action)

  • moment.jsをIntl.DateTimeFormatに完全置換。日付処理のユーティリティ関数を30行で再実装
  • axiosをFetch APIベースのラッパー関数に置換。インターセプター相当の機能を自作
  • lodashの使用箇所を精査し、structuredClone・Array.prototype.flatMap等で代替
  • crypto-jsをWeb Crypto APIに移行。非同期処理への書き換えが必要だったが、パフォーマンスは向上

結果(After)

  • 依存パッケージ数が187個から142個に24%削減
  • バンドルサイズが420KBから285KBに32%削減
  • 初期ロード時間がモバイルで4.2秒から2.8秒に33%改善
  • Lighthouseスコアが62点から84点に向上

この結果が示す通り、VanishChatのDB不要アーキテクチャのように、ブラウザAPIを最大限活用する設計思想は、パフォーマンスとメンテナンス性の両方を向上させます。

IT女子 アラ美
移行にはどのくらいの工数がかかりましたか?

ITアライグマ
段階的に進めて約2週間です。moment.jsの置換が最も工数がかかりましたが、他のライブラリは数時間で完了しました。テストが整備されていれば安全に進められます。

さらなる実践・活用に向けて

ネイティブAPI活用をさらに深めるためのステップを紹介します。

Web Components による再利用可能なUI

Custom Elementsを使えば、フレームワークに依存しないUIコンポーネントを作成できます。Shadow DOMによるスタイルのカプセル化も標準機能です。

Service Worker によるオフライン対応

Cache APIとService Workerを組み合わせることで、PWA(Progressive Web App)としてオフライン対応を実現できます。

Web Workers による並列処理

重い計算処理をメインスレッドから分離し、UIのブロッキングを防止できます。Tokentapのリアルタイム可視化のような大量データ処理にも有効です。

本記事で解説したようなAI技術を、基礎から体系的に身につけたい方は、以下のスクールも検討してみてください。

比較項目 DMM 生成AI CAMP Aidemy Premium
目的・ゴール ビジネス活用・効率化非エンジニア向け エンジニア転身・E資格Python/AI開発
難易度 初心者◎プロンプト作成中心 中級者〜コード記述あり
補助金・給付金 最大70%還元リスキリング補助金対象 最大70%還元教育訓練給付金対象
おすすめ度 S今の仕事に活かすなら AAIエンジニアになるなら
公式サイト 詳細を見る
IT女子 アラ美
AIスキルを身につけたいけど、どのスクールを選べばいいかわからないです…
ITアライグマ
現場で即・AIを活用したいならDMM 生成AI CAMPがおすすめです!プロンプト中心で初心者でも取り組みやすいですよ。

まとめ

ブラウザネイティブAPIの活用は、モダンWeb開発における確実なパフォーマンス改善策です。

  • バンドルサイズ削減:主要ライブラリの置換だけで30%以上の削減が見込める
  • セキュリティ向上:依存パッケージを減らすことでサプライチェーン攻撃のリスクを低減
  • メンテナンス性向上:ブラウザ標準APIは破壊的変更が極めて少なく、長期的に安定

まずは次のプロジェクトで、moment.jsの代わりにIntl.DateTimeFormatを使ってみてください。バンドルサイズゼロで同等の機能が手に入ることを実感できるはずです。

ネイティブAPIを使いこなせるエンジニアは、パフォーマンスとアーキテクチャの両方を語れる貴重な存在です。この機会にぜひスキルセットに加えてみてください。

IT女子 アラ美
ネイティブAPIの学習を始めるのに、おすすめの方法はありますか?

ITアライグマ
MDN Web Docsが最も信頼できるリファレンスです。まずはFetch APIとIntl APIから始めて、実際のプロジェクトで使ってみるのが最短の学習方法です。

厳しめIT女子 アラ美による解説ショート動画はこちら

この記事をシェアする
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ITアライグマのアバター ITアライグマ ITエンジニア / PM

都内で働くPM兼Webエンジニア(既婚・子持ち)です。
AIで作業時間を削って実務をラクにしつつ、市場価値を高めて「高年収・自由な働き方」を手に入れるキャリア戦略を発信しています。

目次