- 1 医療記事の難しさ2
目次
医療記事の難しさ2
- 前提条件: Git および Heroku CLI のインストール
- Git でのアプリの追跡
- Heroku リモートの作成
- コードのデプロイ
- ビルドプロセスからの分離
- 同時デプロイの解決
- HTTP Git 認証
- SSH Git トランスポート
- 複数のリモートおよび環境
- ビルドキャッシュ
- リポジトリサイズ
- その他の制限
- Subversion またはその他のリビジョン管理システムの使用
- 追加リソース
Heroku は、ポピュラーな VCS (バージョン管理システム) である Git でアプリのデプロイを管理します。Heroku にコードをデプロイするには、決して Git の専門家である必要はありませんが、基本を学習しておくと役立ちます。
前提条件: Git および Heroku CLI のインストール
アプリが Git リポジトリですでに追跡されている場合は、「Heroku リモートの作成」に進んでください。
Heroku にアプリをデプロイするには、その前にローカル Git リポジトリを初期化し、アプリケーションコードをそれにコミットする必要があります。
次の例では、myapp ディレクトリで稼働するアプリ用の Git リポジトリの初期化について説明します。
$ cd myapp
$ git init
Initialized empty Git repository in .git/
$ git add .
$ git commit -m "My first commit"
Created initial commit 5df2d09: My first commit
44 files changed, 8393 insertions(+), 0 deletions(-)
create mode 100644 README
create mode 100644 Procfile
create mode 100644 app/controllers/source_file
...
必ずアプリのルートディレクトリで Git リポジトリを初期化してください。アプリがリポジトリのサブディレクトリにある場合、アプリは Heroku にプッシュされるときに実行しません。
アプリのコードは現在、ローカル Git リポジトリで追跡されています。まだ、リモートサーバーにプッシュされていません。
Git リモートは、他のサーバー上で稼働するリポジトリのバージョンです。アプリに関連付けられた、Heroku でホストされる特別なリモートにコードをプッシュすることにより、アプリをデプロイします。
heroku create CLI コマンドは、関連した空の Git リポジトリとともに新しい空のアプリケーションを Heroku 上に作成します。アプリのルートディレクトリからこのコマンドを実行した場合、空の Heroku Git リポジトリがローカルリポジトリのリモートとして自動的に設定されます。
$ heroku create
Creating app... done, ⬢ thawing-inlet-61413
https://thawing-inlet-61413.herokuapp.com/ | https://git.heroku.com/thawing-inlet-61413.git
git remote コマンドを使用して、heroku という名前のリモートがアプリに合わせて設定されていることを確認できます。
$ git remote -v
heroku https://git.heroku.com/thawing-inlet-61413.git (fetch)
heroku https://git.heroku.com/thawing-inlet-61413.git (push)
Heroku アプリをすでに作成している場合は、heroku git:remote コマンドでローカルリポジトリにリモートを簡単に追加できます。必要なものは、Heroku アプリの名前だけです。
$ heroku git:remote -a thawing-inlet-61413
set git remote heroku to https://git.heroku.com/thawing-inlet-61413.git
デフォルトで、Heroku CLI は、アプリ heroku に対して作成するすべての Heroku リモートに名前を付けます。git remote rename コマンドで、リモートの名前を変更できます。
$ git remote rename heroku heroku-staging
同じコードベースを使用する複数の Heroku アプリがある場合、Heroku リモートの名前を変更しておくと便利です (アプリのステージングバージョンと本番環境バージョンなど)。この場合、各 Heroku アプリには、ローカルリポジトリに独自のリモートがあります。
この記事の残りでは、アプリには heroku という名前の単一の Heroku リモートがあると想定しています。
アプリを Heroku にデプロイするには、通常、次のように git push コマンドを使用して、ローカルリポジトリの master ブランチから heroku リモートにコードをプッシュします。
$ git push heroku master
Initializing repository, done.
updating 'refs/heads/master'
...
最新のコミット済みバージョンのコードを Heroku にデプロイしようとする場合はいつでも、この同じコマンドを使用します。
Heroku は、heroku リモートの master ブランチにプッシュするコードだけをデプロイすることに注意してください。リモートの別のブランチにコードをプッシュしても効果はありません。
ローカルリポジトリの非 master ブランチ (testbranch など) から Heroku にコードをデプロイする場合、次の構文を使用して、リモートの master ブランチにプッシュされるようにします。
$ git push heroku testbranch:master
他の多くの依存関係の解決方針に加え、Git サブモジュールに依存するアプリケーションがサポートされます。
git lfs はサポートされておらず、これを使用するとプッシュが失敗することがあります。
git push で Heroku デプロイを開始した後、Ctrl + C を押して、結果のビルドプロセスから分離できます。これによってビルドもデプロイもキャンセルされることはありません。ビルドはバックグラウンドで続行し、完了するとすぐに、新しいリリースを作成します。
同じアプリの以前のデプロイが完了する前にデプロイを開始することができます。たとえば、アプリの 2 人の共同作業者がほぼ同時に別々のコミットを heroku リモートにプッシュすることがあります。
これが行われた場合、異なるバージョンのアプリが、それぞれのビルドが完了した順序で Heroku にデプロイされます。この順序は、プッシュが行われた順序とは異なる場合があることに注意してください。
たとえば、A と B の 2 つのビルドを考えてみます。ビルド B がビルド A の後に開始したが、その前に終了した場合、Heroku はビルド B を最初にデプロイします。その後、やがてビルド A が完了すると、Heroku はこれをデプロイして、ビルド B を置き換えます。