はじめに:2015年の「HSP++」構想と挫折

HSP (Hot Soup Processor) は素晴らしい言語です。手軽にウィンドウを出し、絵を描き、ゲームを作れる。しかし、規模が大きくなるとC++のような「本格的な言語」への移行を考え始めます。

私は2015年、HSPTV!掲示板でこう書き込みました。

Velgail (2015/12/29) HSPで作っていて、だんだんと「本格的な言語でやってみたい」と思った人ってどれくらいいるのかなと思ってスレ立て。 (…) 文法はHSPに出来る限り近づける(C++的に困難なものは再現しない) でもC++らしい書き方もできていい。 C++への架け橋になれるようなそんなライブラリを目指したいなと。

これが「HSP++(仮称)」の始まりでした。 当時思い描いていたコードはこのようなものです。

// 2015年当時の構想
void hspMain(){
  Screen& clock=Screen(0,320,80);
  clock.font(msgothic,30,1);
  // ...
  clock.redraw(0);
  clock.color(255,255,255); clock.boxf();
  // ...
}

なぜ挫折したのか?

掲示板では多くの反響をいただき、longintQt対応、Boostライブラリの活用など、議論は白熱しました。しかし、プロジェクトは頓挫しました。理由は明白です。

  1. 実装コストの壁: HSPの独特な挙動(statシステム変数、パラメータの省略、画像バッファの管理など)をC++で再現するのは、想像以上に泥臭く、工数が膨大でした。
  2. 環境の壁: 当時のVisual Studio 2015/2017やBoostライブラリのセットアップは初心者には敷居が高く、「手軽さ」と「高機能」の板挟みになりました。
  3. バグの嵐: 当時の私の技術力が至らない……だけでなく、その後も定期的にやろうとしては謎のバグ(例えば斜めに線を引くとアンチエイリアスがおかしい とか)で満足な結果を得られませんでした。
  4. モチベーションの維持: 「あったらいいな」で作るには、あまりにも作業量が多すぎました。

結果、「いつかやる」と言い残し、10年の時が流れました。

転機:AIエージェント時代の到来 (2025年)

しかし、時代は変わりました。 GitHub Copilot Agent が誕生し、Claude 4.5 Opus が登場し、Claude Code がコンソールで自律的にコードを書き殴る時代がやってきました。

かつて私が「面倒だ」「時間が足りない」と放置していた実装作業は、今やAIエージェントへの「指示(プロンプト)」だけで完結します。

  • 「HSPのscreen命令の仕様はこうだ。C++23のモジュール機能を使って、パラメータ省略可能な設計で実装して」
  • 「Direct2Dを使ってHSPライクな描画パイプラインを構築して」
  • 「テストコードを書いて」

これらを指示するだけで、AIは疲れを知らず、数千行のボイラープレートを瞬時に生成し、リファクタリングまで行います。 やる気や工数の多さを理由に頓挫する時代は終わったのです。

新生「HSPPP (HSP Plus Plus)」の設計

AIの力を借りて現在実装が進んでいるのが、C++23 / Windows (Direct2D) ベースのライブラリ 「HSPPP」 です。

コンセプト:Pragmatic Hybrid

HSPの「手軽さ(命令型記述)」とC++の「拡張性(オブジェクト指向)」を完全に融合させます。どちらのスタイルでも記述可能です。

1. HSP互換スタイル(移植重視)

昔ながらのHSPユーザーが安心できる書き方です。

// C++23
import hsppp;
using namespace hsppp;

int hspMain() {
    screen(0, 800, 600);
    color(255, 0, 0);
    boxf(100, 100, 200, 200);
    pos(10, 10);
    mes("Hello, HSPPP!");
    return 0;
}

2. オブジェクト指向スタイル(モダンC++)

C++の恩恵を受けたい人向けの書き方です。メソッドチェーンもサポートしています。

auto win = screen({.width = 800, .height = 600, .title = "Modern Style"});
win.color(0, 0, 255)
   .boxf() // 画面クリア
   .pos(100, 100)
   .mes("Hello, Object Oriented World!");

技術的な挑戦:パラメータ省略の実現

HSPの特徴である「任意のパラメータ省略」(screen , 800, 600 など) をC++でどう再現するか? 昔なら可変長引数やオーバーロード地獄で悩んだところですが、今回はモダンな設計を採用しました。

C++26で _ (アンダースコア) が特別な意味を持つことを考慮し、明示的な omit 定数と、OptInt 型ラッパーを導入しています。

// HSP: screen 1, , , 2
// C++:
screen(1, omit, omit, screen_hide);

このあたりの設計判断や実装も、AIとディスカッションしながら数分で決定・実装されました。

おわりに:もう迷いはない

10年前、掲示板で熱く語りながらも、IDEの前でその作業量に圧倒され、手を止めてしまった自分に伝えたい。

「未来では、お前が設計図を書くだけで、AIがものすごい速度で実装してくれるぞ」

HSPPPは現在、GitHub Copilot Agent等の支援を受けながら、驚異的なペースで開発が進んでいます。 かつて夢見た「C++への架け橋」が、AIという強力なエンジンを積んで、今まさに現実のものになろうとしています。

実装の詳細やリポジトリは、進捗があり次第また共有します。


※この記事は、かつてHSPTV!掲示板でHSP++構想を語っていたVelgailによる、AI共創開発の記録です。