さくらのAppRunにNode.js+SQLiteアプリを簡単デプロイできるGitHub Actionを作った
はじめに
さくらのクラウドに新しく登場した「AppRun」は、コンテナアプリケーションを簡単にデプロイできるマネージドサービスです。しかし、デプロイの手順が少し煩雑で、Dockerfileの作成やレジストリへのプッシュなど、いくつかの手順を踏む必要があります。
また、コンテナ環境では通常、SQLiteのようなファイルベースのデータベースは永続化が難しいという課題があります。コンテナが再起動するたびにデータが失われてしまうからです。
そこで、Node.jsアプリケーションをGitHub Actionsから簡単にAppRunへデプロイできる上に、SQLiteデータベースの永続化も自動で行えるカスタムアクション「sakura-apprun-action」を作成しました!
sakura-apprun-actionの特徴
🚀 簡単セットアップ
- GitHub Secretsに認証情報を設定
- ワークフローファイルに数行追加するだけ
- 自動的にビルド・デプロイが完了
🎯 フレームワーク自動検出
package.jsonから以下のフレームワークを自動検出してビルド:
- HonoX
- Next.js
- React Router
📦 TypeScriptサポート
TypeScriptで書かれたアプリケーションも自動的にビルドします。
💾 SQLiteデータベース対応
Litestreamを使用したSQLiteデータベースのレプリケーション機能を内蔵。永続的なデータ保存が可能です。月495円かかりますが、複数のアプリから合計で100GBになるまで定額で利用可能です。
使い方
1. 必要な認証情報の準備
以下の情報をGitHub Secretsに登録します:
-
SAKURA_API_KEY
: さくらのクラウドAPIキー -
SAKURA_API_SECRET
: さくらのクラウドAPIシークレット -
REGISTRY_USER
: コンテナレジストリのユーザー名 -
REGISTRY_PASSWORD
: コンテナレジストリのパスワード
SQLiteを使用する場合は、追加で以下も登録:
-
STORAGE_ACCESS_KEY
: オブジェクトストレージのアクセスキー -
STORAGE_SECRET_KEY
: オブジェクトストレージのシークレットキー
2. ワークフローファイルの作成
.github/workflows/deploy.yml
を作成:
name: Deploy to Sakura AppRun
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to Sakura AppRun
uses: meso/sakura-apprun-action@v3
with:
sakura-api-key: ${{ secrets.SAKURA_API_KEY }}
sakura-api-secret: ${{ secrets.SAKURA_API_SECRET }}
container-registry: MYREGISTRY.sakuracr.jp # MYREGISTRYを自分のレジストリ名に置き換えてください
container-registry-user: ${{ secrets.REGISTRY_USER }}
container-registry-password: ${{ secrets.REGISTRY_PASSWORD }}
これだけで、mainブランチへのプッシュ時に自動デプロイが実行されます!
SQLiteデータベースを使用する場合
SQLiteデータベースを使用するアプリケーションの場合、Litestreamによる自動バックアップ機能が利用できます:
- name: Deploy to Sakura AppRun with SQLite
uses: meso/sakura-apprun-action@v3
with:
sakura-api-key: ${{ secrets.SAKURA_API_KEY }}
sakura-api-secret: ${{ secrets.SAKURA_API_SECRET }}
container-registry: MYREGISTRY.sakuracr.jp # MYREGISTRYを自分のレジストリ名に置き換えてください
container-registry-user: ${{ secrets.REGISTRY_USER }}
container-registry-password: ${{ secrets.REGISTRY_PASSWORD }}
sqlite-db-path: ./database.sqlite #実際のSQLiteのデータベースファイル
object-storage-bucket: my-backup-bucket #さくらのオブジェクトストレージで作成したバケット名
object-storage-access-key: ${{ secrets.STORAGE_ACCESS_KEY }}
object-storage-secret-key: ${{ secrets.STORAGE_SECRET_KEY }}
この設定により、SQLiteデータベースが定期的にオブジェクトストレージにバックアップされ、コンテナが再起動してもデータが保持されます。
実際のデプロイフロー
- コードのプッシュ: mainブランチにコードをプッシュ
- GitHub Actions起動: ワークフローが自動的に開始
- フレームワーク検出: package.jsonから使用フレームワークを自動検出
- ビルド実行: TypeScriptのコンパイルやフレームワーク固有のビルドを実行
- Dockerイメージ作成: 最適化されたDockerイメージを自動生成
- レジストリへプッシュ: さくらのコンテナレジストリにイメージをプッシュ
- AppRunへデプロイ: 新しいバージョンとしてデプロイ完了
もっと気軽にデプロイできる日本のサービスがあってもいい
最近、VibeCodingという言葉をよく耳にします。AIと対話しながら、プログラミング経験が浅い人でも気軽にアプリケーションを作れる時代が来ています。
しかし、作ったアプリケーションをどこにデプロイするか?となると、選択肢として挙がるのは AWS, Google Cloud, Cloudflare, Vercel、Netlify、Render...と、海外のサービスばかり。もちろん素晴らしいサービスですが、日本の開発者として少し寂しさを感じることもあります。
さくらのAppRunの可能性
さくらのAppRunは、この現状を打開できるポテンシャルを持っています。日本のインフラ事業者が提供する、日本の開発者のためのサービス。レイテンシも低く、サポートも日本語で受けられる。
現在のベータ版には「5アプリケーションまで」という制限がありますが、もしこの制限がなくなれば...AppRunを基盤とした、日本版のVercelのようなサービスを作れるんじゃないかなと画策しています。
さくらの中の人と協力できるといいなぁ。
まとめ
sakura-apprun-actionを使えば、Node.jsアプリケーションのAppRunへのデプロイが格段に簡単になります。CI/CDパイプラインの構築も最小限の設定で完了し、開発に集中できる環境が整います。
ぜひ試してみてください!フィードバックやPRもお待ちしています。
今後の展望
まずは SQLite が標準であり Dockerfile も作られる Rails に対応するかな、と思ってます。
他にも要望などがあれば是非教えてください。
おまけ
この文章のほとんどは Claude Code によって作成されました。
Discussion