Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Apple Silicon Mac 時代の PHP 開発環境構築 2021 / php-dev...

shin1x1
December 21, 2021

Apple Silicon Mac 時代の PHP 開発環境構築 2021 / php-dev-env-on-m1-mac-era

shin1x1

December 21, 2021
Tweet

More Decks by shin1x1

Other Decks in Programming

Transcript

  1. Mac アプリの種類 Intel Mac 用 (x86_64) Apple Silicon Mac(M1 Mac)

    用(aarch64) Universal x86_64 と aarch64 アプリが同梱 いずれも Apple Silicon Mac で動作 x86_64 は Rosseta 2 により aarch64 に自動変換して動作 6
  2. file コマンドで確認 Apple Silicon Mac 用(aarch64) $ file Docker Docker:

    Mach-O 64-bit executable arm64 Universal $ file iTerm2 iTerm2 (for architecture x86_64): Mach-O 64-bit executable x86_64 iTerm2 (for architecture arm64): Mach-O 64-bit executable arm64 Intel Mac 用 (x86_64) $ file Dropbox Dropbox: Mach-O 64-bit executable x86_64 7
  3. Homebrew Apple Silicon Mac(3.0.0) + Monterey(3.3.0) 対応済 aarch64 アプリは、 /opt/homebrew

    にインストールされる 環境変数 PATH に /opt/homebrew/bin /opt/homebrew/sbin を追加 x86_64 アプリは、 /usr/local 9
  4. Apple Silicon Mac + Mac アプリ 全く問題無い! 2021/12 時点で多くのアプリで Apple

    Silion 対応が行われている Universal 版が多い印象 ダウンロード選択肢が無いからといって Apple Silicon 未対応ではない x86_64 アプリのみでも、Rosetta 2 で普通に動作する 今のところアプリで困ったことは無い 10
  5. Apple Silion Mac + Vagrant + VirtualBox Vagrant は動作する (x86_64)

    現時点では VirtulBox は Apple Silion Mac で動作しない Apple Silion サポートについてオフィシャルには情報が無い 12
  6. Apple Silion Mac + Vagrant + VMWare Fusion VMware Fusion

    for Apple silicon Public Tech Preview https://blogs.vmware.com/teamfusion/2021/09/fusion-for-m1-public-tech- preview-now-available.html Vagrant を使いたいなら選択肢の一つ 有償 13
  7. Apple Silicon Mac + Vagant VirtualBox が動作しないので厳しい Apple Silicon Mac

    以前に Docker 環境を利用していたので、個人的にはモチベーシ ョンはあまりない このタイミングで Docker に移行するプロジェクトもいくつかある 14
  8. Apple Silion Mac + Docker Docker Desktop アプリは Apple Silion

    対応済 Docker イメージにも種類がある linux/amd64: Intel Mac で利用するイメージ linux/arm64: Apple Silion Mac で利用するイメージ Docker Desktop では amd64 イメージも動作する QEMU によるエミュレート 動作は遅くなったり、挙動が不安になるケースも 特に JVM をランタイムとしたイメージは要注意 (arm64 は問題無し) 16
  9. Docker イメージの対応状況 オフィシャルイメージは amd64 / arm64 両対応が多い php, postgres, redis,

    nginx, composer 等 mysql は amd64 のみ mysql/mysql の 8.0 は arm64 イメージあり 独自ビルドイメージは amd64 のみが多い傾向 これまで amd64 のみ利用する場面が多かったので 17
  10. docker コマンド, Dockefile, docker-compose.yml docker コマンド操作は基本そのまま Dockerfile や docker-compose.yml はそのままで

    OK CPU アーキテクチャ固有の情報以外 Docker イメージ amd64/arm64: Intel=amd64 / Apple Silicon=arm64 が動く amd64 のみ: Intel=amd64 / Apple Silicon=amd64 が動く いかに 両サポートイメージを作るかがポイント 18
  11. Intel Mac と Apple Silicon Mac との共存 案1. Mac で利用するイメージは、自身の

    Mac でビルド Intel Mac では amd64、Apple Silicon Mac では arm64 をビルド services: php: build: ./docker/php # docker/php/Dockerfile をビルド 案2. Docker Buildx でマルチアーキテクチャビルドして共有 GitHub Actions 上でのマルチアーキテクチャビルド例 https://blog.shin1x1.com/entry/docker-multi-arch-build-on-github-actions 19
  12. amd64/arm64 イメージ速度差 M1 MacBook Pro では arm64 イメージの方が速い phpunit 実行時間

    (php + postgres) M1 MBP(php: arm64): 2.36 minutes M1 MBP(php: amd64): 4.90 minutes [参考] Intel MBP(php: amd64) : 2.23 minutes 20
  13. arm64 で発生: postgres イメージ接続遅延 php(arm64) + postgres(arm64) で発生 時折、PHP から

    PostgreSQL への接続に 5 秒かかる現象 pg_connect / PDO ともに php:X-apache-buster ベースで発生 php:X-apache-bullseys や amazonlinux:2 では発生せず 21
  14. Apple Silicon Mac + Docker 基本は arm64 イメージを使えば問題無し amd64 はうまく動かない場合がある(ex.

    JVM 系) amd64 と arm64 両イメージを用意しておくとスムーズ チームで Intel Mac と Apple Silicon Mac が混在 22
  15. Apple Silicon Mac 時代の PHP 開発環境 2021 Mac アプリ +

    Docker で構成 マルチアーキテクチャ対応の Docker イメージを用意するのがポイント Mac だけではなく、本番環境含めたマルチアーキテクチャ時代に 23