LaradockでImageMagick使えるようにする

# 前提
今回でLaradockでImageMagickを使うために色々調べたがなかなか欲しい情報がみつからなかった(~~調べ方が悪かったかも~~)のでメモとして記事に残します。

## 環境
・macOS 10.13.6
・Docker for mac
・Laradock
・Laravel 5.8.35

## imageMagickのインストール
1.まずLaradockにはImageMagickを使うための設定が記述されているので設定を変更する。(アプリケーション側の.envではなくLaradockの.envなので注意:warning:)

```php:laradock/.env
WORKSPACE_INSTALL_IMAGEMAGICK=true // falseから変更
```

2.こちらは不必要かもしれませんが、updateが入るようにしている(?)行を追加します。

```php:laradock/php-fpm/Dockerfile
###########################################################################
# ImageMagick:
###########################################################################

USER root

ARG INSTALL_IMAGEMAGICK=false

RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then \
    apt-get update && \ // この一行を追加
    apt-get install -y libmagickwand-dev imagemagick && \
    pecl install imagick && \
    docker-php-ext-enable imagick \
;fi
```

3.laradockのディレクトリに移動し作業中であればサービスを停止してください

```terminal:laradock
docker-compose stop
```

4.すべての止まっているコンテナを削除

```terminal:laradock
$ docker rm `docker ps -a -q`
// or
$ docker rm $(docker ps -aq)
```

5.イメージの一覧を表示

```terminal:laradock
$ docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
laradock_workspace                 latest              b576054942ca        2 hours ago         1.26GB
laradock_php-fpm                   latest              80be845e6fb7        20 hours ago        795MB
php                                7.2-alpine          aaee3469b18d        2 weeks ago         80.3MB
<none>                             <none>              ec4b0d8dfca2        2 months ago        3.54GB
laradock_gitlab                    latest              a20034c08621        2 months ago        1.84GB
laradock_portainer                 latest              b10195297548        2 months ago        77.7MB
laradock_thumbor                   latest              ce79e06a5d4f        2 months ago        1.3GB
laradock_solr                      latest              9b11c0805800        2 months ago        408MB
laradock_laravel-echo-server       latest              108b91a67fa1        2 months ago        327MB
laradock_grafana                   latest              3021624bbdd2        2 months ago        254MB
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　⋮
```

6.php-fpmのイメージを削除する。(自分はworkspaceも関係あるかも...と思ってそちらも削除しました)

```terminal:laradock
$ docker rmi 80be845e6fb7
$ docker rmi b576054942ca
```

7.コンテナを再作成します (少し時間かかります)

```terminal:laradock
// こちらはご自身の環境によって変えてください。
$ docker-compose up -d nginx mysql phpmyadmin redis workspace
```

8.workspaceに入り、ImageMagickが入っているか確認します。

```terminal:laradock
$ docker-compose exec --user=laradock workspace bash
```

```terminal:workspace
// ImageMagickのバージョン確認
$ convert -version
Version: ImageMagick 6.8.9-9 Q16 x86_64 2019-06-15 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules OpenMP
Delegates: bzlib cairo djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png rsvg tiff wmf x xml zlib
```

こちらが出れば完了となります。

## intervention/imageのインストール

1.composerを使って引っ張ってきます

```terminal:workspace
$ composer require intervention/image
```

2.laravelの[app]/config/app.phpに以下を記述

```php:config/app.php
'providers' => [
    .
    .
    .
    /*
     * Package Service Providers...
     */
    Intervention\Image\ImageServiceProvider::class, // こちらの1行追加
]

'aliases' => [
    .
    .
    .
    'Image' => Intervention\Image\Facades\Image::class // こちらの1行追加
]
```

３.設定ファイルを生成する

```terminal:workspace
$ php artisan vendor:publish
 Which provider or tag's files would you like to publish?:
  [0 ] Publish files from all providers and tags listed below
  [1 ] Provider: BeyondCode\DumpServer\DumpServerServiceProvider
  [2 ] Provider: Fideloper\Proxy\TrustedProxyServiceProvider
  [3 ] Provider: Illuminate\Foundation\Providers\FoundationServiceProvider
  [4 ] Provider: Illuminate\Mail\MailServiceProvider
  [5 ] Provider: Illuminate\Notifications\NotificationServiceProvider
  [6 ] Provider: Illuminate\Pagination\PaginationServiceProvider
  [7 ] Provider: Intervention\Image\ImageServiceProviderLaravel5 // 1で記述した箇所の番号を選択
  [8 ] Provider: Laravel\Tinker\TinkerServiceProvider
  [9 ] Tag: config
  [10] Tag: laravel-errors
  [11] Tag: laravel-mail
  [12] Tag: laravel-notifications
  [13] Tag: laravel-pagination
 > 7

Copied File [/vendor/intervention/image/src/config/config.php] To [/config/image.php]
Publishing complete.
```

5.5からこのようになったようです。
[Laravel 5.5では、「vendor：publish」がプロバイダープロンプトを取得します](https://laravel-news.com/vendorpublish)

4.設定を変更

```php:config/image.php
'driver' => 'imagick' // gdから変更
```

5.使用してみる

```php:xxx.controller
use Intervention\Image\Facades\Image;

// intervention/imageのお作法に沿ってImageMagickを使う
$photo = Image::make($file)->getCore(); // $photo = new Imagick($file)と同じ意味
```