開発室ブログ

EC-CUBE4 PHP Vagrant VurtualBox 開発環境 雑談

EC-CUBE4 の雑多な話

開発室員(お父さん)です。
あついです。外に出たくないです! 公園に行きたくないです!!

最新のEC-CUBE

EC-CUBE4。国産のECサイト用CMSの最新バージョンです。
しかし出たばっかりだからか、なかなか情報が分散しているな…と思ったのでメモ。

Vagrantで動かす

ローカルの開発環境が欲しいので、いつも通り Ansible_local で Vagrantマシンを作成します。EC-CUBE は Composer で入れてしまいましょう。
が、ちょいちょいと問題が…。

環境

  • ホスト Windows 10
  • ゲスト CentOS 7
  • PHP 7.2.19
    • yumリポジトリは remi-php72 を使います
  • EC-CUBE 4.0.2

Ansibleがコケる

Ansible でプロビジョンするときに失敗。Composer で止まる。

GihHub

はい。
EC-CUBE を composer で入れると普通に警告が出るので、そのせいで Ansible が止まるんですねー。

というわけで ignore_errors: True としてしまいます。仕方がない。

    - name: EC-CUBE 4 インストール
      shell: composer create-project ec-cube/ec-cube ec-cube "4.0.2" --keep-vcs
      ignore_errors: True
      args:
        chdir: /var/www
        creates: /var/www/ec-cube

synced_folder 使うと重すぎる

え、なんで? ってくらい遅いです。キャッシュされてないページは10秒? 15秒? みたくかかるので、これでは開発はきびしい…。Intel i7 + SanDisk の SSD でも無理。

共有ディレクトリにキャッシュを生成する処理が大変らしく、それで重くなるようです。キャッシュ置き場を変えればいいんですが、EC-CUBE本体にごにょごにょしなければならないようなので、別の方法でどうにか。

同期方式にNFSを使う

通常は type: "virtualbox" にするかと思いますが、どうやらこれが遅いようなので NFS を利用してみます。

プラグインをインストールしてから…
vagrant plugin install vagrant-winnfsd

Vagrantfileをこうする
eccube.vm.synced_folder "C:\\path\\to", "/var/www", type: "nfs", nfs_export: true, nfs_version: 3

割とマシになるかと思います。

OPcache と APCu でがんばる

公式でも記載されていますね。 GihHub

まず OPcache。これは、PHPスクリプトをバイトコードでキャッシュしておく仕組みです。

yum install php72-php-opcache.x86_64

次の APCu はデータの方をキャッシュしておく仕組みですね。

yum install php72-php-pecl-apcu.x86_64

自分の環境ではなぜか有効になってなかったので、find で探してあるべき場所へコピーしてしまいます。

cp -a /etc/opt/remi/php72/php.d/40-apcu.ini /etc/php.d/40-apcu.ini
cp -a /opt/remi/php72/root/usr/lib64/php/modules/apcu.so /usr/lib64/php/modules/apcu.so
systemctl restart httpd php-fpm

# 終わったら一応 bin/console cache:clear --no-warmup

php -i | grep -Ei 'apc|opcache' これで探して apcopcache の両方が引っかかればOKです。

APCu を一応確認。

apcu

んー、ちゃんと使われているようですね。

余談

GihHub

これでたぶん戦えるのでは?

自分の環境では、これで普通に使えるようになった感じです。
xDebug 動かしてもまぁ大丈夫!

メールの設定

.env などに設定します。

ローカルのPostfixから投げるとか

MAILER_URL=smtp://localhost:25

認証+暗号化のSMTPサーバーに接続する

MAILER_URL=smtp://(接続先):(ポート)?encryption=ssl&auth_mode=login&username=(ユーザー名)&password=(パスワード)

コンソール

コマンドの確認

php bin/console list

パッケージだと動かない?

composer でインストールしている場合は問題ないのですが、ZIPのパッケージ版だと console コマンドが正しく動作しません。

GihHub

GitHub から testsディレクトリを引っ張ってきて配置するのが早いかと。

キャッシュ消す

bin/console cache:clear --no-warmup

--no-warmup オプションをつけないと、メモリ不足で落ちる。PHPに3GBくらい当てたけどダメなのであきらめた。

bin/console cache:clear --no-warmup --env=prod

--env=APP_ENV で環境も指定できます。(キャッシュは環境ごとに用意されています)

全部のルートを確認

php bin/console debug:route

地味に便利だったので。自分で作ったわけではないので、ルーティングが一覧できると便利ですね。

ストアのプラグインが入らない…?

さて、なんかプラグイン入れてみよっと。ということでキーを登録したりなんなりして管理画面から入れてみるものの…入らない。
真っ赤で禍々しいエラー画面を見ると EC-CUBE のサイトから持ってくる packages.json がなんかパースできてない? っぽいようなエラーが出ています。

composer.json を見ると

    "repositories": {
        "eccube": {
            "type": "composer",
            "url": "https://package-api.ec-cube.net",
            "options": {
                "http": {
                    "header": ["X-ECCUBE-KEY: 1234cdef"]
                }
            }
        }
    }

あー。コイツにアクセスできねーのかな?

curl -sS https://package-api.ec-cube.net/packages.json \
       -H 'X-ECCUBE-KEY: 1234cdef' | jq .

   ↓

{
  "packages": {
    "ec-cube/SSCsvUploadprice": {
      "1.0.1": {
        "name": "ec-cube/SSCsvUploadprice",
        "version": "1.0.1",
        "description": "価格のみCSVアップロードプラグイン for EC-CUBE4",
        "type": "eccube-plugin",
        "extra": {
          "code": "SSCsvUploadprice",
          "id": 1909
        },
        "dist": {
          "type": "tar",
          "url": "https://package-api.ec-cube.net/ec-cube/SSCsvUploadprice/1.0.1/SSCsvUploadprice-1.0.1.tgz"
        }
      }
    },
    "ec-cube/StockShow4": {
  (以下略)

えー、見れるじゃん! jqでパースもできてるし!!

一部パッケージをアップデート

髭2号先生がググってくれまして…

cd /path/eccube_root
composer update symfony/flex --no-plugins --no-scripts

これで解決! Vagrant上でカード決済の試験などもできますね~。

以上、雑多なメモでした

まだあるのですが、ひとまず。
ECシステムはフルスクラッチで作ることもあるかもですが、ローカルにインストールして参考にするのも。「あー、なるほどスゲェ」「いやー、そうするかなぁ?」ってなる。ぜひどうぞ。

RecentPost