ザマの戦い（ザマのたたかい、英語:Battle of Zama）は、紀元前202年10月19日に北アフリカのザマで起こったローマ軍とカルタゴ軍の戦い。大スキピオ率いるローマ軍がハンニバル率いるカルタゴ軍を破り、第二次ポエニ戦争の趨勢を決した。

 前段階 

 ヌミディア王国、ローマ側へ 
イベリア半島のカルタゴ領を制圧し終えた大スキピオは、カルタゴ本土への侵攻作戦を開始した。紀元前204年春、スキピオ率いるローマ軍は北アフリカのウティカ付近へ上陸した。カルタゴ軍はヌミディア軍と共同してローマ軍を迎撃に向かったが、スキピオは二度の戦いでこれを破った。さらに、退却するヌミディア軍を本国まで追撃し、王のシファックスを捕虜とした。スキピオは自軍の保護下にあったマシニッサを後継のヌミディア王に即位させて和平同盟を結び、ヌミディアをローマの味方とすることに成功した。そしてこれは屈強なヌミディア騎兵をカルタゴから奪い取ることでもあった。

 和平交渉と決裂 
敗北を喫したカルタゴは、イタリア半島のハンニバルを呼び戻して戦力を再編する一方で、ローマに休戦を打診した。
スキピオは以下の条件を提案した。

ローマ側では、元老院と市民集会がスキピオの条件を了承し、一時は休戦が結ばれるかと思われた。ところが、スキピオへ送られたローマの補給船団が嵐にあい、カルタゴから約40kmの海岸へ上陸したところを、カルタゴ海軍が拿捕するという事件が起こった。ローマは返還を要求したが、この事件とハンニバルの帰国で強気になったカルタゴは、上の条件を拒否し、和平交渉は決裂した。カルタゴはハドゥルメトゥムに上陸したハンニバルに、約50,000名の兵と80頭の戦象を派遣した。

 騎兵の補充 

スキピオ、ハンニバルの両名とも、当時の戦闘において騎兵が非常に重要であることを認識していた。ハンニバルはヌミディアを失ったことによる騎兵不足を補うため、逃亡中であるシファックスの息子に参戦を求めると、息子は騎兵2000を率いて参戦すると約束した。スキピオ側は、王になったばかりのマシニッサに参戦を求め、マシニッサは歩兵6000・騎兵4000で参戦すると約束した。

両軍は、これらヌミディアからの援軍と早めに合流するため、近づきつつも西へと行軍した。ハンニバルは行軍中、カルタゴ政府からの「早くスキピオを撃破せよ」との命令を拒絶している。

 カルタゴの斥候 
ハンニバルはザマの町に到着したところで、ローマ軍が100kmほど西にいることを知り、斥候を3人出した。しかし、これはローマ軍に捕らえられた。スキピオが斥候に目的を尋ねると、彼らは死を覚悟していたので偵察だと本当のことを答えた。スキピオは将官の1人に「彼らの望むものを全て見せよ」と言った。

斥候は3日かけてローマ軍の陣地を全て見てまわった。スキピオは偵察に満足したかを聞き、3人から「十分に見た」との答えを得ると、ハンニバルに全てを報告するように言って彼らを解放した。この間、マシニッサと彼の兵がローマ軍に合流している。

ハンニバルは斥候の報告を聞くと、スキピオに会談を申し入れた。

 会談 

両軍はお互いに向かって進軍した。その6kmほどになったところでスキピオが使者を送ったため、両軍は停止し、陣地の設営を開始した。

翌日、スキピオとハンニバルはそれぞれ騎兵一隊を連れて、両軍の中間にある低い丘へ出向いた。2人とも丘の中腹ほどに騎兵を置き、通訳だけを連れて進み、会談を始めた。

ハンニバルは、一時はイタリア半島を席巻した自分が今は自国の危機を救う立場になっていることを挙げ、現状がどうあれ戦闘で国の運命を決めることは危険な賭けであると説き、ローマがシチリア、サルデーニャ、スペインを領有することを条件に和平を提案した。スキピオは、この戦争を始めたのがカルタゴ側であること、ハンニバルのイタリア撤退が自発的なものではなくローマのアフリカ侵攻を受けてのものであることを挙げ、和平の条件を変えるわけにはいかないと言った。会談は終わり、明朝に決戦が行われることになった。

紀元前202年10月19日、ザマの西方で戦いが始まった。

 布陣 
この戦闘に参加した両軍の兵力は以下のようなものである。

ローマ軍
 歩兵-23,000-29,000
 騎兵-1,500-2,5000

ヌミディア軍
 歩兵-6,000
 騎兵-4,000

スキピオは、重装歩兵を中央に配置、その前面に軽装歩兵を展開させ、左翼にローマ騎兵、右翼にヌミディア騎兵を配置した。敵軍に戦象が存在することを知ったスキピオは、各中隊（マニプルス）の間隔を広めにとらせ、隊列に抜け道を作り出すことによって戦象の突撃を逸らせるようにした。彼は直進のみで小回り利かない象の習性を熟知していたわけである。スキピオ自身は中央で指揮を執り、左翼のローマ騎兵はガイウス・ラエリウス、右翼のヌミディア騎兵はマシニッサに指揮を任せた。ローマ軍の戦術目的は、数において優勢にある騎兵を活かした敵軍の包囲にあった。スキピオはカルタゴ軍によってローマ軍が包囲殲滅されたカンナエの戦いの再現を狙っていた。

カルタゴ軍
 歩兵 - 4-50,000
 騎兵 - 1-2,000
 戦象 - 80

ハンニバルは、最前列に戦象を配置、その後方に三列の歩兵戦列を並べ、その両翼には半数に分けた騎兵を置いた。カルタゴ軍の歩兵は、リグリア人やケルト人からなる傭兵、リビア人およびカルタゴ市民兵、イタリア以来の古参兵という三種類に大別できる。ハンニバルはこれを戦力として信頼できない順番、すなわち傭兵、市民兵、古参兵の順番に並べていた。これまでの戦術の要となっていた騎兵戦力で劣るハンニバルは、歩兵による中央突破を意図しており、そのための総予備が信頼する古参兵であった。前二列は敵の疲労を誘うためのいわば捨て石であり、戦象も敵の戦列を混乱させるためであった。歩兵戦列の第一列はマゴ、第二列はハンノ・ボミルカルに指揮させ、ハンニバル自身は第三列の指揮を執った。

 戦闘展開 

戦いは戦象による突撃で始まった。しかし、スキピオの事前の配置が活き、戦象はローマ軍の隊列の隙間を通り抜け、突撃は大きな効果をもたらさなかった。前進以外の行動が不可能である戦象は、方向転換のために停止したところを、ローマ軍軽装歩兵の投槍や鉦によって混乱し、無力化してしまった。戦象の突撃失敗を見たハンニバルは、自軍の騎兵を後退させた。ローマ軍騎兵は直ちに追撃を開始したが、これはハンニバルによる陽動作戦だった。ハンニバルは自軍の騎兵戦力が劣勢であることを知り、偽装後退させることによって、追撃に向かうローマ軍の騎兵を戦場から引き離そうとしたのだ。この狙いが成功したカルタゴ軍は、騎兵の脅威を気にすることなく、歩兵同士の戦いに移行することができた。

しかしながら、歩兵同士の戦いは、傭兵からなるカルタゴ軍に対し、質で勝るローマ軍が有利だった。カルタゴ軍第一列の傭兵は、ほどなく圧倒されだした。ハンニバルは第二列の市民兵に攻撃を命令したが、大半が新兵で構成されていた第二列は、怖気づいて前進を拒否した。そのため、第一列と第二列の間で同士討ちまで発生した。やむなくハンニバルは事前の予定よりも早く第三列の古参兵を投入することにした。

疲労したローマ軍に対し、第三列の古参兵は優勢に戦闘を進めた。ローマ軍戦列中央を大きく押し込んだが、このためにカルタゴ軍は、湾曲したローマ軍戦列の両翼に包み込まれるような形になっていた。中央を突破すればカルタゴ軍の勝利は確実だったが、そうなる前に、カルタゴ軍騎兵を駆逐したローマ軍騎兵が戦場へ復帰した。ローマ軍騎兵はカルタゴ軍の後方へ回り込み、歩兵戦列の両翼もカルタゴ軍の側面へ機動した。スキピオの企図したとおりにカンナエの包囲が再現された。包囲されたカルタゴ軍はパニックに陥り、傭兵や市民兵は大半が降伏した。古参兵は必死に抵抗したが殲滅され、ハンニバル自身はわずかな供回りとともに逃亡した。

この戦闘でカルタゴ軍は約20,000名の戦死者と同数の捕虜を出し、ローマ軍は約1,500名が戦死したという。戦いの帰趨を決したのは、カンナエの戦いと同様に騎兵の後方機動にあったといえる。また、スキピオが採用したといわれるグラディウスが、歩兵同士の白兵戦を有利に進めたのも勝利の一因といえるだろう。

 戦後と影響 
ザマの戦いに敗れたカルタゴはスキピオに講和を申し入れ、スキピオは以前提示した条件を更に厳しくする形で以下の条件を要求した。
 外征とローマの許可が無いアフリカ内での戦争禁止。
 全ての戦象と軍艦500隻を引き渡す。
 有力者の子弟100人を人質として引き渡す。
 50年以内の銀1万タラント支払い。
 マシニッサに対する先祖伝来の領土と資産返還。

 ヒスパニア等全海外領土の放棄。
カルタゴは条約を受け入れた。これによってカルタゴは海外領土をほぼ喪失して海軍もわずかに10隻となり、ローマの属国に零落して地中海における覇権を喪失した。