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?

Nim + Cloud Runでコールドスタートを気にしない爆速Web

0
Posted at

「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

このスクリプトがやってくれること:

  1. .env を安全に読み込み(source しない)
  2. Artifact Registry へコンテナ push
  3. Secret Manager の作成/更新(SECRET_KEY がある場合)
  4. Cloud Run に --set-secretsSECRET_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 を触ってみてください。

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?