
Docker版NextcloudでHEIC画像の表示に対応する方法
iPhoneで撮ったHEIC画像をNextcloudでプレビュー表示する方法を解説します。Docker環境での設定手順も紹介!

今回は、最近取り組んで無事に解決した「Docker版NextcloudでHEIC画像を表示する」というテーマです。iPhoneで撮った写真はデフォルトだとHEIC形式で、Nextcloudにアップロードしても、そのままではプレビューが表示されなくて困っていたので、インターネットの情報を参考にしながら、Docker環境での設定を行いました。[1]
何が問題だったのか?
NextcloudがHEIC画像をプレビューするには、サーバー側でImageMagickという画像処理ツールと、PHPからImageMagickを使うためのPHP Imagick拡張が必要です。さらに、ImageMagickがHEIC形式を理解するためには、libheifというライブラリも必要になります。
Nextcloudの公式Dockerイメージは、シンプルさを重視しているためか、これらのライブラリや設定がデフォルトでは不足していることが多いんです。特に、最新のiOSで撮影されたHEICファイルは、古いlibheifのバージョンだと対応できないことがあって、それがまた厄介でした。
試行錯誤
最初は、NextcloudのDockerイメージに直接これらのライブラリを組み込もうとしました。Dockerfileを書いてビルドするわけですが、これがなかなかうまくい来ません。「imagick拡張が既にロードされている」みたいなエラーが出て、ビルドがこけてしまいました。
試行錯誤の末、Dockerイメージのビルドには成功!ポイントは、PECLを使わずに、apt-getで必要なパッケージをインストールする方法でした。以下がそのDockerfileの内容です。
FROM nextcloud:latest
# aptパッケージリストを更新し、必要なパッケージをインストール
RUN apt-get update && \
apt-get install -y --no-install-recommends \
imagemagick \
libmagickwand-dev \
libheif-dev \
pkg-config && \
rm -rf /var/lib/apt/lists/*
このドッカーファイルを使ってビルドに成功しました。
docker build -t nextcloud-heic .
これでカスタムイメージの準備は済んだので、次にdocker-compose.ymlを更新して、この新しいイメージを使うようにしました。
services:
db:
image: mariadb:10.11
restart: always
command: --transaction-isolation=READ-COMMITTED
volumes:
- /home/cli/nextcloud/db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=xxxxxxxxxxxx
- MYSQL_PASSWORD=xxxxxxxxxxxx
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- nextcloud_network
redis:
image: redis:alpine
restart: always
container_name : redis-nextcloud
ports:
- 16379:6379
volumes:
- redis.d:/data
networks:
- nextcloud_network
app:
image: my-nextcloud-heic:latest
# image: nextcloud
restart: always
ports:
- 8080:80
depends_on:
- redis
- db
volumes:
- /home/hogehoge/nextcloud/data:/var/www/html
environment:
- MYSQL_PASSWORD=xxxxxxxxxxxx
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
- REDIS_HOST=redis-nextcloud
- REDIS_PORT=6379
networks:
- nextcloud_network
networks:
nextcloud_network:
volumes:
nextcloud:
db:
redis.d:
ここで、HEICプレビューを有効にする設定をconfig.phpに追記しました。
既存のファイルもバッチリ表示!
設定を終えてNextcloudを再起動すると、アップロード済みのHEICファイルはまだプレビューが表示されない状態でした。新しいHEICファイルをアップロードしてみると、こちらはちゃんとプレビューされます。
既存のファイルもプレビューさせるには、Nextcloudの「Preview Generator」というアプリがあるので、早速インストール。そして、以下のコマンドを実行しました。
docker exec -it --user www-data nextcloud-app-1 php occ preview:generate-all
このコマンドは時間がかかりましたが、実行が完了すると、既存のHEICファイルもすべてプレビューが表示されるようになりました!
まとめ
Docker版NextcloudでHEIC画像のプレビュー表示を実現するための手順を紹介しました。ImageMagickとPHP Imagick拡張、さらにlibheifライブラリを組み込むことで、iPhoneで撮影したHEIC画像も問題なく表示できるようになりました。
これで、iPhoneを使う人でも、気軽にHEICをアップロードできるようになりました。
もし同じようにHEIC画像のプレビューで困っている方がいたら、ぜひ参考にしてみてください。