[Java] なぜ日本では「MyBatis」が最強なのか?業務システムで愛される4つの理由

こんにちは。ゆうせいです。

「世界的にはJPAが主流なのに、なんで日本の現場はMyBatisばかりなんだろう?」

新人エンジニアの皆さんが現場に入って最初に抱く疑問のトップ3に、間違いなくこれが入ります。

最新の技術書を読むとJPA(Hibernate)が推奨されているのに、会社の先輩は当たり前のようにMyBatis(マイバティス)を使っている……。これ、不思議ですよね。

実は、日本でMyBatisが圧倒的なシェアを誇るのには、日本のシステム開発特有の「切実な事情」があるのです。

単なる技術の優劣ではなく、「日本の仕事の進め方」 にMyBatisが驚くほどフィットしているからです。

今回は、なぜ日本の業務システムや大規模システムでMyBatisが選ばれ続けるのか、その「4つの理由」を裏話を交えて解説します!


理由1:データベースが「スパゲッティ」だから

これが最大の理由と言っても過言ではありません。

JPAは、データベースが「綺麗に整理整頓されていること(正規化されていること)」を前提としています。

「1つのテーブルは、1つの役割を持つ」という教科書通りの設計なら、JPAは最高のパフォーマンスを発揮します。

しかし、日本の歴史ある企業のデータベースはどうなっているでしょうか?

  • 10年以上前から継ぎ足しで作られた「秘伝のタレ」状態
  • 1つのテーブルにカラム(項目)が200個以上ある
  • 「パフォーマンスのため」という理由で、あえて正規化されていない

こんな「スパゲッティ状態」のデータベースに対して、JPAのような「お行儀の良いツール」を使おうとすると、設定が複雑怪奇になり、逆に開発が大変になってしまうのです。

その点、MyBatisは 「どんなに汚いデータベース構造でも、SQLさえ書ければなんとかなる」 という力技が使えます。

泥臭い現場であればあるほど、MyBatisの柔軟さが救世主になるのです。

理由2:顧客の「0.1秒」へのこだわりが凄い

日本のシステム開発、特にお客様(クライアント)向けのシステムでは、パフォーマンス(速度)に対する要求が非常に厳しい傾向があります。

「検索ボタンを押したら、絶対に3秒以内に結果を出してほしい。できれば1秒以内で」

このような厳しい要求仕様書が渡されることは日常茶飯事です。

もしJPAを使っていて、自動生成されたSQLがほんの少し非効率で、検索に5秒かかってしまったらどうなるでしょう?

「JPAの仕様なので直せません」という言い訳は、日本のビジネス現場では通用しません。

MyBatisなら、SQLを人間が手書きするので、以下のような「職人芸」が可能です。

  • 「ヒント句」を使って、データベースに命令を強制する
  • 無駄な結合を極限まで減らす
  • データベース製品特有の特殊な高速化機能を使う

「最後の最後は人間が手作業でチューニングできる」という安心感が、責任重大な大規模システムでは必須なのです。

理由3:「超・複雑な検索画面」が存在する

日本の業務システムあるあるですが、「検索条件が50個くらいある画面」 を見たことはありませんか?

  • 名前(あいまい検索)
  • 部署(複数選択可)
  • 入社日(範囲指定)
  • ステータス(チェックボックス)
  • ……以下延々と続く

しかも、「入力された項目だけを条件にして検索する(入力がなければ無視する)」という仕様です。

これをJPAで実現しようとすると、Javaのコードで複雑な組み立てロジックを書く必要があり、非常に読みにくくなります。

一方、MyBatisには「動的SQL(Dynamic SQL)」という強力な機能があります。

XMLファイルの中に、まるでプログラムのように「もし(if)名前が入力されていたら、このWHERE句を追加する」という条件分岐を書くことができるのです。

XML

<select ...>
  SELECT * FROM employee
  <where>
    <if test="name != null">
      AND name like #{name}
    </if>
    <if test="dept != null">
      AND dept_id = #{dept}
    </if>
    </where>
</select>

この「可読性の高さ」と「メンテナンスのしやすさ」が、複雑な検索画面を作る日本のエンジニアに愛されている理由です。

理由4:SQLなら「全員が読める」という安心感

最後は、チーム構成の問題です。

大規模なプロジェクトには、いろいろな人が参加します。

  • Javaバリバリの若手エンジニア
  • Javaは苦手だけど業務知識が豊富なベテラン
  • データベース専門のエンジニア(DBA)

もしJPAを使っていると、何かトラブルがあった時に「JPAの内部挙動に詳しいJavaエンジニア」しか手出しができなくなります。

しかし、MyBatis(=SQL)ならどうでしょう?

SQLは、IT業界の「共通言語」です。

Javaが読めないベテラン社員でも、データベース担当者でも、「SQLなら読めるし、どこが悪いか指摘できる」 のです。

「誰でも直せる」「属人化(その人しか分からない状態)を防げる」という点は、リスクを嫌う日本の組織においては非常に大きなメリットになります。


今後の学習の指針

いかがでしたか?

MyBatisが日本で選ばれるのは、「技術的に優れているから」というよりは、「日本の複雑なシステム事情や、リスク管理の考え方に合っているから」 という側面が強いことがお分かりいただけたかと思います。

だからこそ、新人エンジニアの皆さんに伝えたいのは以下のことです。

  1. 「JPA vs MyBatis」ではない「どちらが優れているか」ではなく、「作るシステムの規模や古さによって使い分ける」のが正解です。新規の小規模アプリならJPA、歴史ある大規模システムならMyBatis、というように視点を持ちましょう。
  2. SQLからは逃げられない日本でエンジニアを続ける以上、SQLを「ゴリゴリ書く力」は最強の武器になります。MyBatisの現場に入ったら、それをSQLマスターになるチャンスだと捉えてください。

「なんで古い技術を使うんだ!」と嘆くのではなく、「なるほど、こういう理由で選ばれているんだな」と背景を理解できるエンジニアは、現場でとても重宝されますよ。

SQLという共通言語を武器に、日本のシステム開発の現場で活躍してくださいね。応援しています!

それでは、また次の記事でお会いしましょう。

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。