はじめに
#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フレームワーク リンク
実装コードと資料はすべてこちらで公開しています。
- HP: https://onepg.com/ja/
- GitHub: https://github.com/sugaiketadao/sicore-ja
- サンプル画面の確認方法: https://github.com/sugaiketadao/sicore-ja#%EF%B8%8F-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E7%94%BB%E9%9D%A2%E3%81%AE%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95---vs-code
- AI開発の始め方: https://github.com/sugaiketadao/sicore-ja#-ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A7%8B%E3%82%81%E6%96%B9
関連記事リンク
他の記事もぜひご覧ください!
読んでいただきありがとうございました!
❤いいね!をしていただけると励みになります。