4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

M1 MacからHerokuにデプロイするには(1)

Last updated at Posted at 2021-03-19

はじめに

この記事の和訳です。エッセイ風味の部分や背景説明は省いて、手順だけを抜粋しました。

※ 動作確認はしていません

結論:Rosettaを噛ませる

2021年3月現在、M1 MacからHerokuにデプロイするにはRosettaを使うしかないようです。以下その手順です。

1. 「ターミナル」アプリを複製

ファインダー>アプリケーション>ユーティリティに「ターミナル」アプリを複製して、適当な名前をつけます(「ターミナル with Rosetta」とか)。

右クリック→「情報を見る」→「Rosettaで開く」にチェックします。

これでARM用とIntel用、計2つのターミナルができた感じです。

2. Rosettaをインストール

さっき複製した「ターミナル with Rosetta」の初回使用時にRosettaインストールが促されます(ここでインストールするのが楽)。

手動で入れたい時は下記です。

/usr/sbin/softwareupdate --install-rosetta

3. brewを(再)インストール

Homebrewが事前にインストールしてあれば、M1対応のはず。下記で確認できます。

% which brew
/opt/homebrew/bin/brew

複製したほうの「ターミナル with Rosetta」を開いていることを確認して、Homebrewを再インストールします。

/bin/bash -c "$(curl -fsSL 
https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

==> Checking for `sudo` access (which may request your password).Password:
==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
....

これで/usr/local/binにインストールされているはずです。

Homebrewが2つ入っていることになりますが、brewで先に呼び出された方だけが走る感じなので大丈夫。紛らわしくないようにaliasしておくと良さげです。

alias rbrew='/usr/local/bin/brew'

# Rosetta brew
% which rbrew
rbrew: aliased to /usr/local/bin/brew

# Native brew
% which brew
/opt/homebrew/bin/brew

4. Herokuをインストール

複製したほうの「ターミナル with Rosetta」を開いていることを確認して、Herokuインストールです。

rbrew tap heroku/brew && rbrew install heroku

これでHerokuが使えるはず。ログインします。

% heroku --version
% heroku login
% heroku apps

以上です!

補足:Dockerを使う場合

Dockerを使う場合、HerokuのコマンドラインでもOKですが、GitHubのCIツール(GitHub Actions)でさらにいい感じになります。下記の要領です。

1. GitHubに新規Workflowを作成

Git repositoryのActionsタブで新規Workflowを作成します。

下記はJDK11とMavenを使ったJavaのアプリケーションの例ですが、他言語でも同じような感じになります。

name: Build & Push to Heroku Docker Registry
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    # checkout source
    - name: Git Checkout
      uses: actions/checkout@v1
    # config JDK
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: 11
    # Build the Jar
    - name: Build with Maven
      run: mvn -B package --file pom.xml
    # Login in Heroku
    - name: Heroku Container Registry login
      env: 
        HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
      run: heroku container:login 
    # Build and push Docker image
    - name: Build and push
      env:
        HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
      run: heroku container:push -a ${{ secrets.HEROKU_APP_NAME }} web 
    # Release 
    - name: Release
      env:
        HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
      run: heroku container:release -a ${{ secrets.HEROKU_APP_NAME }} web

上記のパイプラインが、main branchでgit pushするたびに走ります。手動なら下記です。

on:
  push:
    branches: [ main ]

2. 補足の補足:APIキーとアプリ名について

上記パイプラインにはHEROKU_API_KEYHEROKU_APP_NAMEが必要になりますが、大丈夫。いずれもGitHubリポジトリ(Settings->Secrets->New repository secret)に格納され、ソースコードには表れない感じです。

おわりに

初心者なので記事内容の良し悪しがわかりませんが、訳してみました。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?