「Cloud Run は好きだけど、コールドスタートが気になる」
「ランタイムの起動に毎回ドキドキしたくない」
そんなときに相性が良いのが Nim + Cloud Run です。
今回は、以下のテンプレートリポジトリを使って、
Nim で作る軽量Webを Cloud Run に安全にデプロイする方法 をまとめます。
- Basolato + Nim + Tailwind CSS のテンプレート
-
nimble build/nimble devですぐ開発開始 - Secret Manager 連携など公開前提のセキュリティ対策込み
作成したテンプレート
このテンプレートの特徴:
- Nim製Webアプリ(Basolatoフレームワーク)を最小構成で起動
- Tailwind CSS を standalone binary でビルド(Node.js 依存を最小化)
- Docker マルチステージで軽量コンテナ化
- Cloud Run デプロイ時に Secret Manager を利用してセキュアに
なぜ Nim + Cloud Run が良いのか
Cloud Run は「使ったぶんだけ課金」「運用が楽」で最高ですが、
リクエストが来たときにインスタンスを起動する都合上、コールドスタートは無視できません。
Nimだと以下が効きます:
- ネイティブバイナリなので起動がめちゃくちゃ軽い
- ランタイムの初期化コストが小さい
- コンテナイメージを絞りやすい(軽量化しやすい)
もちろんゼロにはできないのですが、
体感をかなり速くしやすいのが Nim + Cloud Run の強みです。
実際にこの構成で作成したのがNim日本コミュニティの公式サイトです。
クイックスタート
git clone <your-repo-url>
cd nim-cloudrun-template
cp .env.example .env
NIMBLE_DIR=.nimble nimble build
./main
起動後: http://localhost:8080
ホットリロード開発:
NIMBLE_DIR=.nimble nimble dev
.env のポイント
CloudRunデプロイのために、最低限ここを設定します:
PROJECT_ID=your-gcp-project-id
SERVICE=play-nim
REGION=asia-northeast1
PORT=8080
SECRET_NAME=play-nim-secret-key
SECRET_KEY=replace-with-a-random-secret
SITE_NAME=PlayNim
SITE_URL=https://example.com
Tailwind の SHA256 について
このテンプレートでは、Tailwind バイナリの改ざん対策として SHA256 検証を行います。
ただし、今は 手動取得しなくてもOK です。
-
TAILWIND_SHA256/TAILWIND_SHA256_LINUX_X64が未設定 or プレースホルダ値 -
scripts/tailwind_checksum.shが自動で解決
必要なら明示的に固定値を入れて、より厳密に運用できます。
Cloud Run デプロイ
sh deploy.sh
このスクリプトがやってくれること:
-
.envを安全に読み込み(sourceしない) - Artifact Registry へコンテナ push
- Secret Manager の作成/更新(
SECRET_KEYがある場合) - Cloud Run に
--set-secretsでSECRET_KEYを注入してデプロイ
「環境変数に平文シークレットを直接積む」構成を避けられるので、
公開リポジトリとしても扱いやすいです。
このテンプレートで入れている公開向けセキュリティ対策
1. シークレットの取り扱い
-
SECRET_KEYは Secret Manager へ格納 - Cloud Run には
--set-secretsで注入
2. サプライチェーン対策
- Basolato はコミット固定でインストール
- Tailwind standalone binary は SHA256 検証
3. .env の安全な読み込み
-
source .envを使わず、専用ローダーでkey=valueのみ取り込み
4. コンテナ最終段の hardening
-
USER app:appの non-root 実行
ディレクトリ構成(最小)
.
├── app/
│ └── http/
│ ├── controllers/
│ └── views/
├── scripts/
│ ├── build.sh
│ ├── dev.sh
│ ├── tailwind.sh
│ ├── tailwind_checksum.sh
│ └── install_basolato.sh
├── Dockerfile
├── deploy.sh
├── main.nim
└── .env.example
コールドスタート体感をさらに詰めるコツ
ここから先は運用で効く部分です:
- Cloud Run の最小インスタンス数(
min-instances)を用途に応じて設定 - コンテナサイズを継続的に小さく保つ
- 初期化処理(DB接続や重いセットアップ)を起動時に寄せすぎない
- メモリ/CPUの設定を現実的な負荷に合わせる
Nim の起動の軽さを活かしつつ、Cloud Run 側の設定と合わせると効果が出ます。
まとめ
Nim + Cloud Run は、シンプルで速く、運用コストも低い です。
特に「最小構成で速く立ち上がるWeb」を作りたいときに強い組み合わせです。
このテンプレートを土台にすると:
- ローカル開発をすぐ始められる
- Cloud Run までのデプロイ導線が短い
- 公開リポジトリとしてのセキュリティ配慮も入っている
「コールドスタートの心理的コストを減らしたい」人は、
ぜひ一度 Nim + Cloud Run を触ってみてください。