IBM Cloud Code Engine 用のシンプルな Hono サーバーを動かしたメモ

IBM Cloud Code Engine 用のシンプルな Hono サーバーを動かしたメモ

IBM Cloud Code Engine 用のシンプルな Hono サーバーを動かしたメモです。

この記事は IBM Cloud Advent Calendar 2025 の 22 日目の記事です。

背景

IBM Cloud Code Engine 用のシンプルな Node.js リポジトリを作ったメモ - 1ft-seabass.jp.MEMO

以前は、このような仕組みを作っていたのですが、いつも Express に頼ってしまうので今回は Hono も動くのかなーというところでやってみます。

今回は、ついつい以前の仕組みを使いがちな、私の Code Engine 力の整備として、

  • Hono を使ってみる
  • 最近の alpine バージョンを使ってみる
  • 他の仕組みについては同じ

というフォーカスでやってみます。

Dockerfile の変更

FROM icr.io/codeengine/node:22-alpine
COPY package.json .
RUN npm install
RUN mkdir public
COPY public/ public/
COPY server.js .
EXPOSE 8080
CMD [ "node", "server.js" ]

今回は 22 にバージョンアップしてみました。

package.json

hono に関しては hono と @hono/node-server を入れました。

  • hono
    • フレームワーク本体
    • ルーティング、ミドルウェアなどのコア機能
  • @hono/node-server
    • Node.js 用アダプター
    • Node.js の http サーバーと Hono を接続
    • 静的ファイル配信機能(serveStatic)も含む

となっています。

{
  "name": "ibm-ce-simple-nodejs-hono-base",
  "version": "1.0.0",
  "description": "This is a simple Node.js Hono IBM Code Engine base repository.",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/1ft-seabass/ibm-ce-simple-nodejs-hono-base.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/1ft-seabass/ibm-ce-simple-nodejs-hono-base/issues"
  },
  "homepage": "https://github.com/1ft-seabass/ibm-ce-simple-nodejs-hono-base#readme",
  "dependencies": {
    "hono": "^4.0.0",
    "@hono/node-server": "^1.0.0"
  }
}

Hono サーバー

Hono サーバーはこうしました。Express で行っていたコードが移植できたはずです。

// Hono フレームワーク本体(Express の代わり)
const { Hono } = require('hono');
// Node.js でサーバーを起動するための関数
const { serve } = require('@hono/node-server');
// 静的ファイル配信用のミドルウェア
const { serveStatic } = require('@hono/node-server/serve-static');

// Hono アプリケーションの初期化(Express は関数呼び出し、Hono はクラス)
const app = new Hono();

// 静的ファイル配信の設定(public フォルダの内容を公開)
app.use('/*', serveStatic({ root: './public' }));

// API エンドポイントの例(c は Context オブジェクト、Express の req/res を統合したもの)
app.get('/api/hello', (c) => {
  return c.json({ message: 'Hello from Hono!' });
});

// ポート設定(IBM Code Engine が PORT 環境変数を自動設定)
const port = process.env.PORT || 8080;

// サーバー起動(Hono は Web 標準の fetch API を使用)
serve({
  fetch: app.fetch,
  port: port,
}, (info) => {
  console.log("server start!");
  console.log(`app listening at http://localhost:${info.port}`);
});

Git リポジトリ

出来上がったリポジトリはこちらです!

1ft-seabass/ibm-ce-simple-nodejs-hono-base

Code Engine にアプリケーションで反映

リポジトリができたので Code Engine にこれをベースにコンテナイメージをビルドします。

エラーもなくうまくいきました!

アクセスしてみる

実際にアプリケーションの URL からアクセスしてみましょう!

無事 Hono サーバーが動くのを確認できました!