はじめに
2025年11月25日、Anthropicから最新モデル「Claude Opus 4.5」がリリースされました。
Opus4.5は、他のAIモデルと比較しても、現段階では最先端のモデルとなったようです。
トークン出力時にかかるコストも従来のOpusから67%削減され、Maxプランだと、普段使いではほぼ上限に行くことはなくなり、Opusでの開発がより一層楽しめます。
私は、会社のサブスク補助制度を利用して、Maxプラン($100)に加入させていただいています。100ドルの補助はありがたすぎます!!感謝です。
また、Claude Codeがデスクトップアプリで利用可能になったことで、アプリ上から並列実行が可能になったり、プランモードが進化したりなど、大幅なアップグレードも加わっているようです。
詳細はこちらから確認ができます。
そこで今回は、Claude Opus 4.5とSonnet 4.5に全く同じプロンプトを与え、Next.js 16での無限スクロール一覧ページを実装させることで、両モデルの特性を比較検証してみようと思います。
やったこと
検証環境
・Next.js 16.0.5(App Router)
・React 19.2
・TypeScript 5.x
・Tailwind CSS 4.x
検証の流れ
1. まず共通のCLAUDE.mdを用意
2. 両モデルに同じプロンプトで無限スクロールの実装をお願い
3. できあがったコードを見比べてみる
CLAUDE.mdで決めたルール
ざっくり下記のような感じです。
・サーバーファースト: 基本はサーバーコンポーネント、クライアントは最小限に
・useEffect禁止
・境界を明確に: server-onlyなど使用してコードの役割をはっきりさせる
・新機能試してみてね
生成されたコードを見てみる
ファイル構成の違い
Opus4.5の場合
src/
├── app/items/
│ ├── page.tsx # Server Component
│ ├── actions.ts # Server Actions
│ └── loading.tsx
├── components/features/items/
│ ├── infinite-scroll-container.tsx # 統合型
│ ├── item-card.tsx
│ └── item-list.tsx
└── lib/server/items.ts # server-onlySonnet4.5の場合
src/
├── app/items/
│ ├── page.tsx
│ ├── actions.ts
│ └── loading.tsx
├── components/
│ ├── items-list.tsx
│ ├── infinite-scroll-trigger.tsx # 独立コンポーネント
│ ├── item-card.tsx
│ └── item-card-skeleton.tsx
└── lib/server/items.ts面白いところが、SonnetがInfiniteScrollTriggerを独立したコンポーネントにしているところです。
実はCLAUDE.mdファイルに無限スクロールの実装例を書いていたのですが、その設計とそっくりそのままでした。逆にOpus4.5はそんな実装ではダメだと判断したのか、統合型のコンテナを作ってきました。
状態管理のアプローチ
Opus4.5ではuseReducerとuseTransitionを使用した実装となっていました。
// infinite-scroll-container.tsx
'use client'
import { useCallback, useTransition, useReducer } from 'react'
type State = {
items: Item[]
hasMore: boolean
page: number
}
type Action = {
type: 'LOAD_MORE'
payload: { items: Item[]; hasMore: boolean }
}
function reducer(state: State, action: Action): State {
switch (action.type) {
case 'LOAD_MORE':
return {
items: [...state.items, ...action.payload.items],
hasMore: action.payload.hasMore,
page: state.page + 1,
}
default:
return state
}
}
export function InfiniteScrollContainer({
initialItems,
initialHasMore,
fetchMoreAction,
}: InfiniteScrollContainerProps) {
const [isPending, startTransition] = useTransition()
const [state, dispatch] = useReducer(reducer, {
items: initialItems,
hasMore: initialHasMore,
page: 1,
})
const loadMore = useCallback(() => {
if (isPending || !state.hasMore) return
startTransition(async () => {
const nextPage = state.page + 1
const result = await fetchMoreAction(nextPage)
dispatch({
type: 'LOAD_MORE',
payload: { items: result.items, hasMore: result.hasMore },
})
})
}, [isPending, state.hasMore, state.page, fetchMoreAction])
// ...
}対するSonnetはオーソドックスなuseStateで実装
…
記事の続きは下のURLをクリック!
https://rightcode.co.jp/blogs/53998
エンジニア積極採用中です!
現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!
採用ページはこちら:https://rightcode.co.jp/recruit
社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life
フリーランスエンジニア大募集中!
現在、「WEBエンジニア」「フロントエンジニア」「データサイエンティスト」など、様々な職種のフリーランスエンジニア様を募集中です。まずは以下よりお気軽にご応募ください!
採用ページはこちら:https://itanken.com/register
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。
Wantedly:https://www.wantedly.com/companies/rightcode
コーポレート:https://rightcode.co.jp/