「初心者がRailsアプリをHerokuにデプロイする方法」のような情報はたくさん出回っています。
しかし、表題のような「1つリポジトリで複数のアプリをデプロイ」みたいな情報は日本ではあまり出回っていません。
ある程度経験を積んでいくと、「DBとのやり取りはAPIサーバー、フロントエンドはWebサーバー」みたいな構成で開発を行う機会が出てくると思います。
今回はその方法を簡単に解説していきます。
こんな人向けの記事
- 簡単なWebアプリをHerokuでデプロイした経験がある
- 複数のアプリケーションを1つのリポジトリでデプロイする必要が出てきた
【結論】 Buildpackを使えば簡単
「1つのリポジトリ、複数のApp」のためのBuildpackが2つほど提供されているので、どちらかをBuildpackに含めれば難なくデプロイすることが可能です。
※Buildpackとは
- Pushしたソースコードをコンパイルするためのスクリプトを集めたもの
- 今回の表題のような、特殊な用途に対応してくれるスクリプトもある
利用できるBuildpack
heroku-buildpack-multi-procfile
Herokuが公式に提供しているBuildpackですね。
Pushされた時点で環境変数PROCFILE
に書かれたPathを参照し、そのディレクトリにあるProcfile
をルートディレクトリにコピーしてくれます。
なので、各Appそれぞれに対応するようなPathを環境変数PROCFILE
に記述しておけば、「1つのリポジトリ、複数のApp」が可能なわけです。
※Procfileとは
- Appの起動時に行なってくれるコマンドを指定するためのファイル
-
プロセスタイプ: command
の形式で記述する
heroku-buildpack-monorepo
こちらも公式(?)だと思います。
前者とは違い、環境変数APP_BASE
に書かれたPathを参照し、そのディレクトリ丸々をルートディレクトリにコピーしてくれます。
筆者はGolangでAPI側の開発も行なっていたのですが、前者のBuildpackだとGo modules
を読み込んでくれず、デプロイできませんでした。
一方、後者は指定ディレクトリがルートディレクトリとなっているため、そのような問題を被ることなくデプロイできました。
終わりに
個人的にはheroku-buildpack-multi-procfile
がおすすめですが、他にも利用できるBuildpackがあると思うので、自身で探してみるのもいいかと思います。