🌸

さくらのAppRunにNode.js+SQLiteアプリを簡単デプロイできるGitHub Actionを作った

に公開

はじめに

さくらのクラウドに新しく登場した「AppRun」は、コンテナアプリケーションを簡単にデプロイできるマネージドサービスです。しかし、デプロイの手順が少し煩雑で、Dockerfileの作成やレジストリへのプッシュなど、いくつかの手順を踏む必要があります。

また、コンテナ環境では通常、SQLiteのようなファイルベースのデータベースは永続化が難しいという課題があります。コンテナが再起動するたびにデータが失われてしまうからです。

そこで、Node.jsアプリケーションをGitHub Actionsから簡単にAppRunへデプロイできる上に、SQLiteデータベースの永続化も自動で行えるカスタムアクション「sakura-apprun-action」を作成しました!

https://github.com/meso/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データベースが定期的にオブジェクトストレージにバックアップされ、コンテナが再起動してもデータが保持されます。

実際のデプロイフロー

  1. コードのプッシュ: mainブランチにコードをプッシュ
  2. GitHub Actions起動: ワークフローが自動的に開始
  3. フレームワーク検出: package.jsonから使用フレームワークを自動検出
  4. ビルド実行: TypeScriptのコンパイルやフレームワーク固有のビルドを実行
  5. Dockerイメージ作成: 最適化されたDockerイメージを自動生成
  6. レジストリへプッシュ: さくらのコンテナレジストリにイメージをプッシュ
  7. AppRunへデプロイ: 新しいバージョンとしてデプロイ完了

もっと気軽にデプロイできる日本のサービスがあってもいい

最近、VibeCodingという言葉をよく耳にします。AIと対話しながら、プログラミング経験が浅い人でも気軽にアプリケーションを作れる時代が来ています。

しかし、作ったアプリケーションをどこにデプロイするか?となると、選択肢として挙がるのは AWS, Google Cloud, Cloudflare, Vercel、Netlify、Render...と、海外のサービスばかり。もちろん素晴らしいサービスですが、日本の開発者として少し寂しさを感じることもあります。

さくらのAppRunの可能性

さくらのAppRunは、この現状を打開できるポテンシャルを持っています。日本のインフラ事業者が提供する、日本の開発者のためのサービス。レイテンシも低く、サポートも日本語で受けられる。

現在のベータ版には「5アプリケーションまで」という制限がありますが、もしこの制限がなくなれば...AppRunを基盤とした、日本版のVercelのようなサービスを作れるんじゃないかなと画策しています。

さくらの中の人と協力できるといいなぁ。

まとめ

sakura-apprun-actionを使えば、Node.jsアプリケーションのAppRunへのデプロイが格段に簡単になります。CI/CDパイプラインの構築も最小限の設定で完了し、開発に集中できる環境が整います。

ぜひ試してみてください!フィードバックやPRもお待ちしています。

https://github.com/meso/sakura-apprun-action

今後の展望

まずは SQLite が標準であり Dockerfile も作られる Rails に対応するかな、と思ってます。

他にも要望などがあれば是非教えてください。

おまけ

この文章のほとんどは Claude Code によって作成されました。

Aidemy Tech Blog

Discussion