Gartner評価のエンタープライズ級!オープンソースの万能CMS「PIMCORE」を実際に触ってみた
Gartner評価のエンタープライズ級!オープンソースの万能CMS「PIMCORE」を実際に触ってみた
はじめに
みなさんは「PIMCORE」というシステムをご存知でしょうか?
Gartnerの評価でAdobeやSAPと並んで選出されるほど、世界的には非常に評価の高いオープンソースのCMSです。
CMS機能はもちろん、デジタル資産管理(DAM)、さらには GDPRに対応した個人情報管理(CDP) まで標準で備わっているまさに「全部入り」のすごいシステムなのです。
世界的な評価機関のGartnerでもここ数年ランクインしているにも関わらず、なぜか日本ではほぼ無名です。

しかし今回、案件で実際に開発してみて感じたのは、「なんでこんなにわかりにくくするの??」というマニュアルと、「あぁ、これ見て何を学べ?」というサイトサンプル。。。ああ、これは参入障壁高いわ。。と感じました。。

本連載ではその障壁を下げ、気軽にPIMCOREを使ってもらえるようにするため、こちらで開発した「サイトテンプレート」をベースにしたクイックスタートガイドをお届けします。
第1回目は「多言語Blogテンプレート」をお届けします!
PIMCOREとは何か?
通常、以下のような機能を実現しようとすると、複数のツールを組み合わせる必要があります。
- CMS(Webサイト管理)
- PIM(製品情報管理)
- DAM(画像や動画などのデジタル資産管理)
- CDP(顧客データプラットフォーム)
- E-Commerce(EC機能)
PIMCOREは、これらの機能をオールインワンでPHPのSymfonyベースで構築できます。
ホント、これだけの機能がオープンソースというのには頭がさがります。。。
今回作ったもの:多言語ブログテンプレート
「触ってみるのが一番早い」ということで、PIMCOREの最大の特徴である**「強力な多言語機能」**を活かした、ブログサイトのテンプレートを開発しました。
裏側のControllerは構築済み、Gitで公開しているので、すぐにPIMCOREの挙動を確認できます。

このテンプレートの特徴
- 構築済みのController:Controllerは実装済みなので、ほとんどPIMCOREの管理画面だけで作れます。
- 多言語対応:日本語・英語などの切り替えが管理画面から直感的に行えます。
- GitHubで公開:クローンしてすぐにローカルで動かせます。
サイトサンプル
実際に自分のPCでPIMCOREを動かしてみましょう!
PIMCOREはDockerでの構築を推奨しています。なので、ローカル環境で手軽に体験することができます。

公式のGitHubにも手順は載っていますが、実はそのまま実行すると権限エラーで止まったり、ライセンスキーの発行で迷ったりするポイントがいくつかあります。
この記事では、私がハマったポイントを回避しながら、最短で「動く環境」を作る手順をまとめました。後半では、今回開発した 「多言語Blogテンプレート」の組みこみ まで一気に進めます!
1. 事前準備:Docker環境の確認
Windowsユーザーの方
WSL2(Windows Subsystem for Linux)とDocker Desktopが必要です。
PIMCOREはLinuxで動作するので普通にWindows環境で構築するとモッサモサな動作になります。
WSLを導入してLinux環境で構築してください!
- Docker Desktopの設定で「Use the WSL 2 based engine」が有効になっていることを必ず確認してください。
- 以降のコマンドは、PowerShellではなくWSL2(Ubuntuなど)のターミナルで実行します。
Macユーザーの方
Docker Desktop for MacをインストールしていればOKです。
2. プロジェクトの作成(権限エラーを回避!)
まずはPIMCOREのプロジェクトを作成します。公式コマンドだとファイルの所有権(Permission)でハマることが多いため、以下の手順が確実です。
mkdir ~/pimcore && cd ~/pimcore
# 現在のユーザーID/グループIDを変数に保存(権限エラー防止)
export MY_UID=$(id -u)
export MY_GID=$(id -g)
# Composerでプロジェクト作成(PHP 8.3イメージを使用)
docker run -u ${MY_UID}:${MY_GID} --rm -v `pwd`:/var/www/html \
pimcore/pimcore:php8.3-latest \
composer create-project pimcore/skeleton test01
これで test01 フォルダにPIMCOREのコアファイルが展開されます。
※別のフォルダにしたい場合test01を変更してください。
3. Dockerの環境設定とコンテナ起動
プロジェクトフォルダに移動してください。
cd test01
ユーザー権限の設定
docker-compose.yaml を開き、php と supervisord セクションにある user 行のコメントアウトを外し、環境変数を参照するように書き換えます。
# user: '1000:1000' 2か所あります!
↓
user: '${MY_UID:-1000}:${MY_GID:-1000}'
コンテナの起動
# 環境変数を.envに書き出し
cat > .env << EOF
MY_UID=1000
MY_GID=1000
EOF
docker compose up -d
4. PIMCOREのインストールとライセンス登録
コンテナが立ち上がったら、インストールコマンドを実行します。
docker compose exec php vendor/bin/pimcore-install
ここがポイント:無料のCommunity Edition登録
- ターミナルで管理者ユーザー名/パスワードを決めると、ライセンス発行URLが表示されます。

- ブラウザで開き、**「Community Edition(無料)」**を選択して登録します。


- 届いたメールのリンクから Product Key をコピーし、ターミナルに貼り付けます。

おすすめのBundle選択
次に導入するBundle(拡張機能)を聞かれますが、なぜかディフォルトに「No」が・・・
ここでNoにすると拡張機能がインストールされません。Log出力が拡張機能なのでYes で進めるのがおすすめです。

デバッグや開発をスムーズにするために 0, 1, 3, 5 あたりを選択しとくのが無難です。
Install内容が決まったらInstallが開始します。2~3分お待ちください!
※Cacheフォルダの権限で、最後にエラーがでることありますが、その前にInstall Completedが表示されていれば問題ありません。
http://localhost/adminで管理画面をひらきましょう!
これでPIMCORE自体のInstallは完了です。http://localhost/adminを開いて下記が表示
されていれば構築完了です!

※docker-compose.yamlでPort番号を変更した方はhttp://localhost:8080/admin のようにポート番号をつけてください。
5. 多言語Blogテンプレートの導入
環境が整ったら**「多言語Blogテンプレート」**を導入しましょう。これで多言語Blogサイトが構築できます!
テンプレートのクローンと配置
以下のコマンドは、先ほど作成したプロジェクトのルートディレクトリ(test01 フォルダの中)で実行してください
# 1. テンプレートを一時フォルダにクローン
git clone https://github.com/pimcorejp/pimcore-blog-template.git /tmp/template
# 2. プロジェクトのルート(test01)にいることを確認
# cd ~/pimcore/test01
# 3. 各ファイルをプロジェクト内にコピー
# Controllerを配置
cp /tmp/template/src/Controller/BlogController.php src/Controller/
# テンプレートファイルを一括配置
cp -r /tmp/template/templates/* templates/
# 設定ファイルを配置
cp /tmp/template/config/packages/blog.yaml config/packages/
config/routes.yaml に下記を追記してください!
# プロジェクトのルート(test01)で以下のコマンドをそのまま貼り付けて実行してください。
# config/routes.yaml がなければ作成し、あれば末尾に追記されます。
cat << 'EOF' >> config/routes.yaml
# Blog Routes - 動的ロケール対応
blog_root:
path: /
controller: App\Controller\BlogController::rootAction
methods: ['GET']
blog_index:
path: /{_locale}/index
controller: App\Controller\BlogController::indexAction
requirements:
_locale: '[a-z]{2}(?:_[a-zA-Z]{2})?'
methods: ['GET']
blog_category:
path: /{_locale}/blog/category/{category}
controller: App\Controller\BlogController::categoryAction
requirements:
_locale: '[a-z]{2}(?:_[a-zA-Z]{2})?'
category: '[a-z-]+'
methods: ['GET']
blog_detail:
path: /{_locale}/blog/detail/{id}
controller: App\Controller\BlogController::detailAction
requirements:
_locale: '[a-z]{2}(?:_[a-zA-Z]{2})?'
id: '\d+'
methods: ['GET']
EOF
管理画面にログインしてみましょう!

ログインするとPIMCOREの管理画面が開きます。
左側の「Documents」がWebサイトのページフォルダ、「Assets」が画像などメディアファイル置き場、「Data Objects」がDBとなっています。
今回はここまで
お疲れ様でした!これでPIMCOREの初期設定が完了しました!
しかし、まだ管理画面でのDBの設定や、多言語設定がされていないので、これだけではサイトは動きません。
次回の第2回では、PIMCOREの肝である 「Object(データ構造)の定義」 について解説します。ブラウザだけでデータベース設計が完結する、PIMCOREならではの機能をお試しいただけます!
連載予定
本連載では、このテンプレートを以下の4ステップで動かすまでを解説していきます。
- 第1回:PIMCOREの紹介(本記事)
- 第2回:ブラウザ上でDB設計(Object Class)定義の作成
- 第3回:サムネイルと翻訳(Translation)設定
- 第4回:Sites機能で複数のサイト管理も簡単(Sites)設定
今後提供予定のサイトテンプレート
「WordPressでは物足りないが、AdobeのAEMを入れる予算はない」
そんなプロジェクトにとって、PIMCOREは最強の選択肢になります。
次回から、実際に手を動かしてこの「モンスターシステム」を使いこなしていきましょう!
参考リンク
Discussion