はじめに
Herokuへのデプロイで、プロジェクトのサブディレクトリをデプロイしたい!
そんな時に実践したことの共有記事です。
Heroku CLIを使用してサブディレクトリをデプロイする具体的な手順を解説します。
前提条件
- Heroku CLIがインストールされていること
- Herokuアカウントを持っていること
- Gitを使用していること
実装手順
1. Herokuアプリケーションの作成
Herokuのアプリケーションを作成します
heroku create <your-app-name>
ログインしていない方は以下のコマンド(q
以外のキーを押して、Webでログイン)
heroku login
2. Git Remoteの追加
Herokuのリモートリポジトリを追加します
heroku git:remote -a <your-app-name>
以下のようにすると一つのgitリポジトリに複数のHerokuリモートリポジトリを設定することも可能
git remote add heroku-staging https://git.heroku.com/<your-app-name1>.git
git remote add heroku-production https://git.heroku.com/<your-app-name2>.git
3. サブディレクトリのデプロイ
サブディレクトリをデプロイするには、git subtree push
を使用します
git subtree push --prefix=<サブディレクトリ名> heroku main
4. デプロイの確認
デプロイが成功したかどうかを確認するためには、heroku logs
を使用します
heroku logs --tail
簡易デモ
1. デプロイするアプリ作成(Go)
mkdir heroku-demo
cd heroku-demo
## main.goの作成
cat << EOF > go/main.go
package main
import (
"fmt"
"net/http"
"os"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
// $PORT 環境変数を取得
port := os.Getenv("PORT")
if port == "" {
port = "8080" // デフォルトポート(ローカル開発用)
}
http.HandleFunc("/", handler)
// 指定されたポートでサーバーを開始
fmt.Printf("Listening on port %s...\n", port)
err := http.ListenAndServe(":"+port, nil)
if err != nil {
fmt.Printf("Error starting server: %v\n", err)
}
}
EOF
## Dockerfileの作成
cat << EOF > go/Dockerfile
# 使用するベースイメージ
FROM golang:1.23-alpine
# 作業ディレクトリを作成
WORKDIR /app
# Goコードをコンテナにコピー
COPY . .
# Goアプリケーションのビルド
RUN go mod tidy
RUN go build -o main .
# アプリケーションを8080ポートで実行
CMD ["./main"]
EXPOSE 8080
EOF
## heroku.ymlの作成
cat << EOF > go/heroku.yml
build:
docker:
web: Dockerfile
EOF
go mod init heroku-demo
2. デプロイ
アプリ作成
## demo0013は任意のアプリ名に変更してください
heroku create demo0013
Herokuのリモートリポジトリ追加
heroku git:remote -a demo0013
サブディレクトリgo/
でのデプロイ
git subtree push --prefix=go heroku main
3. 確認
heroku open
heroku logs --tail
おわりに
Heroku CLIとGitのsubtreeコマンドを使用することで、簡単にサブディレクトリもデプロイできます。
また、学生の場合はHerokuは無料枠が存在するのでおすすめです。
是非お試しください!!