0
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?

【Deno 2.0】Reactなしで構築する株価シミュレーター開発ログ (Hono + HTMX + Alpine.js)

0
Last updated at Posted at 2026-02-14

はじめに

Google AI Pro を活用して、株価逆算シミュレーターを開発しました。
前回の記事では、開発に入る前の「環境構築」をAIエージェントに自律的に行わせるプロセスを紹介しました。

今回は、その環境上でエージェントと共に実装したWebアプリケーション 「Stock Target Price Calculator (目標株価逆算ツール)」 の中身について解説します。

完成したアプリはこちらです。

Stock Target Price Calculator (目標株価逆算ツール)

技術選定:シンプルさを追求する

今回の開発テーマは 「Reactを使わずに、現代的な開発体験とパフォーマンスを両立する」 ことでした。
そのため、以下の技術スタックを選定しました。

  • Runtime: Deno 2.0
    • Node.js互換性が向上し、npmパッケージもスムーズに使えるようになった最新バージョンです。
    • 標準でTypeScriptをサポートしており、設定ファイル地獄から解放されます。
  • Backend: Hono
    • Web標準APIに準拠した超高速Webフレームワーク。
    • Deno、Cloudflare Workers、Node.jsなどどこでも動きます。
  • Frontend: HTMX + Alpine.js
    • HTMX: HTML属性だけでAjaxリクエストやDOM更新を行うライブラリ。
    • Alpine.js: HTMLに直接リアクティビティを記述できる軽量ライブラリ。Vue.jsのような構文で書けます。
  • CSS: Pico.css
    • クラスレスCSSフレームワーク。HTMLタグを書くだけで、いい感じのデザインになります。

これらを組み合わせることで、ビルドステップなし、複雑な構成なしで、サクサク動くWebアプリを作ることができました。

実装のポイント

1. HonoによるSSR (Server-Side Rendering)

画面のレンダリングはHonoのJSX Middlewareを使用しています。
Reactのような書き心地ですが、サーバーサイドでHTML文字列に変換されてクライアントに送信されます。

src/server.tsx
app.get('/', (c) => {
  return c.html(
    <Layout>
      <main class="container">
        <h1>目標株価逆算ツール</h1>
        {/* ... */}
      </main>
    </Layout>
  )
})

これにより、初期表示が非常に高速になります。

2. Alpine.jsによるクライアントサイド計算 (Activity的な役割)

「目標株価」の計算ロジックは、サーバーへの通信を行わず、クライアントサイド(ブラウザ)で完結させています。
ここでAlpine.jsが活躍します。

参考にした記事では、 「HTMXがFragment(画面の断片)、Alpine.jsがActivity(画面の振る舞い)」 を担うというアーキテクチャが提唱されています。
今回のアプリでも、以下のように役割を分担しました。

  • HTMX: サーバーとの通信、画面遷移(今回はSSRメインなので出番は控えめ)
  • Alpine.js: 入力値の計算、即時のUI反映(Activity的な役割)
<div x-data="{ 
    currentPrice: 1000, 
    targetReturn: 10,
    get targetPrice() {
        return this.currentPrice * (1 + this.targetReturn / 100);
    }
}">
    <label>
        現在株価:
        <input type="number" x-model.number="currentPrice">
    </label>
    <label>
        目標リターン (%):
        <input type="number" x-model.number="targetReturn">
    </label>
    
    <p>目標株価: <span x-text="targetPrice"></span></p>
</div>

x-data で状態を定義し、x-model で入力値とバインド、x-text で計算結果を表示します。
このように、「サーバーに聞くまでもない計算」をAlpine.js(Activity)に任せることで、ユーザー体験を損なうことなく実装をシンプルに保てました。
JavaScriptを別ファイルに書くことなく、HTMLの中にロジックを凝縮できるのも大きなメリットです。

3. Pico.cssによる爆速UI構築

デザインに関しては、Pico.cssを採用したことで、CSSをほとんど書かずに済みました。
セマンティックなHTML(<header>, <main>, <article>, <button>)を書くだけで、レスポンシブ対応の整ったデザインが適用されます。

<article>
  <header>計算結果</header>
  ...
  <footer>
    <button class="secondary">リセット</button>
  </footer>
</article>

開発環境 (Skillの恩恵)

前回の記事で作成した「Skill」のおかげで、開発環境の構築はエージェント任せで完了しました。

  • mise: エージェントが自動で mise install を実行し、Denoのバージョン管理やタスクランナーを準備。
  • lefthook: コミット前のLint/Formatチェックも、エージェントが配置した設定ファイルにより自動化。

あとは「アプリを作って」と指示するだけで、「環境構築の試行錯誤」ゼロ時間で、最初から実装に集中できました。

圧倒的な軽量性

完成したアプリのパフォーマンスを確認すると、かなり軽量なページにできました。

  • HTML: 約25KB
  • JS/CSS (Gzipped): 合計 約40KB程度 (HTMX + Alpine.js + Pico.css)

ReactやNext.jsで作られた同様のアプリが、初期ロードで数百KB〜数MBのJavaScriptを読み込むのに対し、このスタックでは合計50KB〜100KB程度に収まっています。
モバイル回線でも一瞬で表示され、Lighthouseのスコアも自然と高くなりました。

まとめ

Deno 2.0 + Hono + HTMX + Alpine.js + Pico.css というスタックは、「小〜中規模の個人開発」において始めやすい組み合わせの一つだと感じました。

  • シンプル: 複雑なビルド設定がない。
  • 高速: DenoとHonoのパフォーマンス。
  • : HTML中心の開発体験。

ReactやNext.jsがオーバースペックに感じる時は、ぜひこのスタックを検討してみてください。

Stock Target Price Calculator (目標株価逆算ツール)

参考記事

開発のプロセスや設計思想は自分で思いついたわけではなく、以下の記事を最初に参考にさせていただきました。
特にHTMXをAlpine.jsで補う考え方は、自分では思いもよりませんでした。


※この記事の文章は、Antigravityで作成したベースをもとに、筆者が構成・加筆したものです。

0
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
0
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?