1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バニラで作る理由 - いまさらながら Javaフレームワークを自作した(10年ぶり3回目) #11

1
Last updated at Posted at 2026-04-02

はじめに

#02 から #10 までの記事で、SIcore フレームワークの設計と特徴を紹介してきました。最後に、これまでの記事で触れてきた設計判断の根底にある思想——なぜバニラ(素の Java・JavaScript・HTML)で作ったのか をまとめます。

SIcore は、Java はアノテーションを使わず、JavaScript はフレームワークを使わず、HTML はテンプレートエンジンを使いません。CSS も Bootstrap や Tailwind を使わず約400行の自作CSSです。

バニラであることは、AI生成との親和性初心者・新人が学びやすい設計 という2つの実利に直結しています。

バニラであること

改めて SIcore が「使っていないもの」を並べます。

レイヤー 使っていないもの SIcore の代替手段
Java Spring Boot、アノテーション、DI URL直結マッピング(#02)、リフレクション
Java(SQL) MyBatis、JPA、XML定義 Java直書きSQL — SqlBuilder / SqlConst(#10)
Java(データ) Entity / DTO / Bean Map型設計 — Ioクラス(#07)
JavaScript React、Vue、Angular バニラJS + フレームワークユーティリティ
HTML JSP、Thymeleaf、テンプレートエンジン 静的HTML + JSON通信(#03, #04)
CSS Bootstrap、Tailwind 約400行の自作CSS(#08)
サーバー Tomcat、Jetty JDK標準 HttpServer

要するに「JDK と ブラウザの標準機能だけで業務アプリが作れる」状態です。

これは技術的なこだわりではなく、実利を追求した結果です。

実利:AI によるコード生成に強い

#01 で書いた通り、初心者向けの設計は AI 向けの設計と似ている という発見がありました。具体的にその理由を整理します。

パターンが統一されている

SIcore の業務コードは、どの画面・どの処理も同じパターンで書きます。

JavaScript 側:

const req = PageUtil.getValues();
const res = await HttpUtil.callJsonService('/services/module/ClassName', req);
PageUtil.setValues(res);

Java 側:

public void doExecute(Io io) throws Exception {
    IoItems row = SqlUtil.selectOne(getDbConn(), LOAD_SQL.bind(io));
    io.putAll(row);
}

HTML・JS・Java の 3ファイルだけで 1画面が動きます。ルーティング設定も Bean定義も不要です。

AI はパターンが統一されているほど精度が高くなります。SIcore では画面のコーディングパターンをドキュメント化(21-event-coding-pattern.md)しており、AI に事前に読み込ませることで、業務コードを高精度に生成できます。

トークン消費が少ない

GitHub Copilot などの AI は、コンテキストとして読み込むコード量(トークン数)に制限があります。

Spring Boot の場合、AI の学習データには大量に含まれていますが、バージョン差異が大きく、古いバージョンのコードを生成したり、プロジェクト固有のカスタム設定を誤推論したりするリスクが高くなります。一方、自作フレームワーク は学習データに存在しないため、コンテキストとして毎回渡す必要がありますが、ここで重要なのはその量です。

SIcore はフレームワーク本体が小さく(Java約5,000行、JavaScript約2,000行)、APIリファレンスも AI向けに圧縮したドキュメントを用意しています。フレームワークの全体像を AI のコンテキストに収められるサイズです。

「魔法」がない

アノテーション、DI、AOP——これらはコードの裏で何かが「自動的に」動く仕組みです。人間にとっては便利ですが、AI はこれらの概念自体は知っていても、そのプロジェクト固有の動作はコンテキストにコードがなければ推論できません

SIcore では、処理の流れがすべてコード上で追えます。URL がクラス名に変換される過程(#02)も、HTML と JSON が変換される過程(#04)も、すべてソースコードで確認できます。AI がコードを生成するとき、「見えない部分を推測する」必要がありません。

SQL も同様で、SIcore では Java に直書きするため(#10)、MyBatis のような XML との紐づけをたどることなく、AI が「どんな SQL が実行されるか」を一目で把握できます。

初心者・新人にも向いている

AI に優しい設計は、人間の初心者にも優しい設計です。

パターンが統一されているため「次に何を書くか」が迷いません。魔法がないため「なぜ動くのか」が追えます。SQL がコード内にあるため「どんなデータが動いているか」がわかります。これらはすべて、業務アプリ開発の入門として理想的な条件でもあります。

「とにかく動かして読む」が成立するフレームワークなので、Java の基礎さえあれば新人でも短期間で業務コードを書き始められます。(願望)

AIという新たな「開発者」を迎えるとき

フレームワークはこれまで「人間が使うもの」として作られてきました。しかし今、AI という新たな開発者が現場に加わっています。

SIcore は、人間向けの道具をそのまま AI に使わせ続けるのではなく、AI を開発者の一人として想定して一から作りました。バニラで書くという選択は、その答えです。

連載のふりかえり

# テーマ ひとこと
01 動機 初心者向け設計がAI向け設計と似ていた
02 直結型URLマッピング URL = クラス名。ルーティング設定不要
03 JSON限定 サーバーはHTMLを返さない割り切り
04 モックアップ=実装コード name属性を付けるだけでモックが実装に
05 動的リスト表示 テンプレート行で配列データを自動展開
06 独自HTML属性 data-*属性でよくあるパターンを簡潔に
07 Map型設計 Entity不要。全部Mapで回す
08 1ファイルCSS設計 約400行で業務アプリのCSSをカバー
09 クライアント側データ管理とJWT認証 サーバー側セッション不要のステートレス設計
10 Java直書きSQL XML不要。SQLインジェクション対策済み
11 バニラで作る理由(本記事) フレームワーク全体の設計思想

こうして並べてみると、すべての設計判断が一本の軸で繋がっています。足さないことで、AI が扱いやすく、新人でも読みやすいフレームワークになりました。

おわりに

「バニラで書く」と聞くと「古い」「非効率」という印象を持つかもしれません。でも実際には、バニラであることが AI 時代の強みになっています。

  • AI が理解しやすいコード → 生成精度が高い
  • 新人が読みやすいコード → AI を使って短期間で戦力になれる

バニラで書くことは「古い」のではなく、「余計なものを足さない」という選択です。フレームワークは「何を足すか」ではなく「何を足さないか」で価値が決まる(キリッ)——10年ぶり3回目の自作を通して、たどり着いた結論です。

実際に GitHub でサンプルコードを動かしてみると、VS Code とブラウザだけで画面が確認できます。セットアップ手順は README に書いてあります。もし興味を持っていただけたら、ぜひ一度試してみてください。

SIcoreフレームワーク リンク

実装コードと資料はすべてこちらで公開しています。

関連記事リンク

他の記事もぜひご覧ください!


読んでいただきありがとうございました!
❤いいね!をしていただけると励みになります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?