EC-CUBE3.0.11がリリース、サーバ選定について

9月28日にEC-CUBE3.0.11がリリースされました。

www.ec-cube.net

EC-CUBE3.0.11で特徴的なものとしては、

  • PHP7 対応
  • パフォーマンス向上
  • URLからhtmlを取り除くことが可能

が大きな特徴となります。

このブログで度々URLからhtmlを削除する方法を書いてきましたが、 3.0.11から公式にhtmlの削除ができる方法が提供されるようになりました。 削除する方法はこちらのURLを参考にしてください。

インストール時にURLからhtmlを無くす | EC-CUBE 開発ドキュメント

3.0.11のパフォーマンス結果についてより詳しく知りたい方は、こちらのURLも参考にしてください。

パフォーマンス | EC-CUBE 開発ドキュメント

サーバ選定について

今回のバージョンよりパフォーマンス向上及びPHP7に対応したということで、
EC-CUBE3を今後利用したいという方のためにどのサーバを選べば良いのか書かせてもらいます。

既にEC-CUBE3を利用されている方はお気付きのように、3系は2系に比べて動作がもっさりしており表示速度も芳しくありませんでした。

EC-CUBE3.0.11ではあれこれ手を加えてパフォーマンス向上を行いましたが、 さらにストレスなく動作させる上で重要となるのがサーバとなります。

EC-CUBEを利用するには必ず

等と契約する必要がありますが、インフラに詳しい方がいる場合、

先ずはこの基準で検討してもらって問題ありません。

次に必要となるのがサーバスペックとなります。 EC-CUBE3のパフォーマンスを色々と調査した結果、一番効果が期待できるサーバ要件としては、

  1. SSDを使う
  2. PHP7を使う
  3. OPcacheを使う
  4. apcuを使う

これらが適用できる環境であればストレスなく動作させる事が可能です。

クラウドVPSを利用できる方は是非この組み合わせでサーバを構築してください。SSDは必須です。

レンタルサーバをご利用される方についてはレンタルサーバ会社によってスペックが異なりますが、 今ならPHP7が使えるレンタルサーバを是非ご利用ください。

代表的なところとしては、以下のレンタルサーバがPHP7に対応しておりレンタルサーバ選びに迷っている方は参考にしてください。

www.xserver.ne.jp

heteml.jp

www.cpi.ad.jp

個人的には昔からさくらサーバを長年愛用していますので、早くさくらサーバもphp7に対応して欲しいところではありますが。

今回DBのパフォーマンスについて言及しませんでしたが、機会があればまた書きたいと思います。

データベースの型を変更したEC-CUBE3.0.10のリポジトリの作成

本日4月25日にec-cube3.0.10がリリースされました。

www.ec-cube.net

EC-CUBE3.0.10の修正点などはリリースノートを参照してもらうこととして、 現在、EC-CUBE3ではデータベースの型が全てtext型で定義されています。

このままだとmysqlの場合、longtext型になったり、Oracleでは利用できなかったりと非常に不便なためデータベースの型を変更したEC-CUBEを下記リポジトリに用意してみました。

https://github.com/k-yamamura/ec-cube3-modify-type-database

こちらの内容はtextをstringに変更したり、notnull条件の見直しなどしています。

インストールまでは確認していますが動作確認まではしていませんのでご利用の際はご注意ください。

EC-CUBE3に対してGoogleAnalyticsタグ、Googleタグマネージャ、Yahooタグマネージャーの設置方法

EC-CUBE3でサイト運用されている方が徐々に増えてきているのですが、ECサイト如何に関わらずサイト運営に必要になってくるのかGoogleタグマネージャやYahooタグマネージャー等のサイト解析を行うためのツールです。

EC-CUBE3でこのタグを簡単に埋め込む方法を説明します。

GoogleAnalyticsタグの設置方法

GoogleAnalyticsタグは</head>の上に設置するのですが、こちらはブロック管理を使って簡単に埋め込む事が可能です。

先ず、管理画面よりブロック管理機能を使ってサイト用のトラッキングコードを入力してブロックを作成します。

管理画面から 、 [コンテンツ管理]→[ブロック管理]→[新規入力]を選択し、ブロック名とファイル名には分かるように
ブロック名 : GoogleAnalytics(任意)
ファイル名 : analytics(任意)

と入力し、ブロックデータにはサイト用のトラッキングコードを入力してブロックを作成します。

<!-- Google Analytics -->
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-xxxxxxx-x', 'auto');
  ga('send', 'pageview');

</script>

その後、作成したブロックをページ管理機能を使って配置します。

配置方法は、 [ページ管理]→[TOPページのレイアウト編集]を選択し、
未使用ブロック欄に先ほど作成したブロックが含まれているためそれをheadに配置します。 #headerではありませんのご注意ください。

全ページに適用させるなら「全ページ」にチェックし登録するとGoogleAnalyticsタグが設置されます。

Googleタグマネージャの設置方法

Googleタグマネージャは<body>タグ直後に設置します。
GoogleAnalyticsタグと同じようにブロック管理とページ管理を使って設置できればいいのですが、<body>タグ直後に設置するための方法が用意されていませんので、直接タグを埋め込む必要があります。

default_frame.twigに対して<body>直下にGoogleタグマネージャ用タグを設置します。

{# ▲Head COLUMN #}

</head>
<body id="page_{{ app.request.get('_route') }}" class="{{ body_class|default('other_page') }}">
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-XXXXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager --> 
<div id="wrapper">
    <header id="header">

というように直接タグを埋め込んで保存すればGoogleタグマネージャの設置が完了です。

Yahooタグマネージャーの設置方法

Yahooタグマネージャーは</body>タグ直前に設置します。
こちらもGoogleAnalyticsタグと同じようにブロック管理とページ管理を使って設置できればいいのですが、</body>タグ直前に設置するための方法が用意されていませんので、直接タグを埋め込む必要があります。

こちらもdefault_frame.twigに対して</body>直前にYahooタグマネージャー用タグを設置します。

</script>
{% block javascript %}{% endblock %}
<!-- Yahoo Tag Manager -->
<script type="text/javascript">
  (function () {
  var tagjs = document.createElement("script");
  var s = document.getElementsByTagName("script")[0];
  tagjs.async = true;
  tagjs.src = "//s.yjtag.jp/tag.js#site=xxxxxxx";
  s.parentNode.insertBefore(tagjs, s);
  }());
</script>
<noscript>
  <iframe src="//b.yjtag.jp/iframe?c=xxxxxxx" width="1" height="1" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>
</noscript>
<!-- Yahoo Tag Manager -->
</body>
</html>

というように直接タグを埋め込んで保存すればYahooタグマネージャーの設置が完了です。

Googleタグマネージャ、Yahooタグマネージャーについてはdefault_frame.twigに対してタグを埋め込む方法を説明しましたが、
ECCUBEROOT/src/Eccube/Resource/template/default/default_frame.twig
に対して直接変更をする方法はEC-CUBE3では推奨していません。

ではどのように編集するかというと、default_frame.twigファイルを ECCUBEROOT/app/template/default
直下にコピーし、そのファイルに対して修正を加えます。

この仕組みは説明すると長くなりますのでこういうものだと覚えてください。

ブロック管理やdefault_frame.twigの仕組みさえ理解できれば簡単にタグが設置する事が可能になりますし、 facebook Page pluginやTwitterInstagramなども簡単に設置可能なので、ぜひお試しください。

EC-CUBE3でテンプレートとして採用しているTwigのお話

今年に入ってから毎週水曜日にEC-CUBE3の勉強会を開催しているのですが、 EC-CUBE3の話であったり、Symfony2やSilexの話をしたりとまとまりのないことを話ししています。

先日デザイナー向け勉強会を開催したのですがTwigの内容をまとめたところ割と簡潔にまとまった資料ができましたので公開します。

こちらの資料はEC-CUBE3以外でもTwigを少し触れたことがあるという方に導入編として読んでもらえれば理解の手助けになると思います。

次回はForm周りなどの解説をする予定です。

hetemlにEC-CUBE3をインストールする方法

前回の記事から随分と間が空いてしまいました。

過去にさくらのレンタルサーバさくらのクラウドに対してEC-CUBE3のインストール方法を書きました。

今回はhetemlというレンタルサーバに対してのインストール記事を書きます。

heteml.jp

hetemlには標準でEC-CUBE3をインストールしてくれる機能が用意されていますが、 最新のEC-CUBE3を使いたいという方を対象としています。

また、URL形式は http://ドメイン名/html ではなく http://ドメイン名 で接続できるようにします。

事前準備としてhetemlにsshで接続できるように設定をしておいてください。

SSH のご利用方法 - レンタルサーバー「heteml(ヘテムル)」

hetemlの公開ディレクトリですが、

/home/sites/heteml/users/[ユーザディレクトリ名]/web

に対して設定されています。

今回は http://ドメイン名 でアクセスできるようにするため、その準備を行います。

まず、EC-CUBE3をユーザディレクトリ直下(ログインした時のディレクトリ)において解凍してください。 解凍するとユーザディレクトリはこんな感じになります。 今回はパッケージ版ではなく、Gitからcloneしたものを置いていますので人によっては若干異なります。

.
|-- COPYING
|-- LICENSE.txt
|-- README.md
|-- app
|-- apps
|-- appveyor.yml
|-- autoload.php
|-- cli-config.php
|-- composer.json
|-- composer.lock
|-- composer.phar
|-- eccube_install.sh
|-- html
|-- index.html
|-- phpunit.xml.dist
|-- src
|-- tests
|-- vendor
`-- web

この中にある

apps
index.html
web

はhetemlが標準で用意しているディレクトリとファイルになります。

ではEC-CUBE3をインストールしてみましょう。 ただ、EC-CUBE3をインストールする際に、 標準のままだとインストールが行えないため以下の変更を行います。

  • htmlディレクトリをwebにリネーム
mv web webold
mv html web

webをリネームして、htmlディレクトリをwebに変更します。

  • path.yml.distの変更 src/Eccube/Resource/config/path.yml.dist を開きhtmlと記載している箇所をwebに変更
# realdir::image
image_save_realdir: ${ROOT_DIR}/web/upload/save_image
image_temp_realdir: ${ROOT_DIR}/web/upload/temp_image

# realdir::user_data
user_data_realdir: ${ROOT_DIR}/web/user_data

# realdir::block
block_default_realdir: ${ROOT_DIR}/src/Eccube/Resource/template/default/Block
block_realdir: ${ROOT_DIR}/app/template/${TEMPLATE_CODE}/Block

# realdir::template
template_default_realdir: ${ROOT_DIR}/src/Eccube/Resource/template/default
template_default_html_realdir: ${ROOT_DIR}/web/template/default
template_admin_realdir: ${ROOT_DIR}/src/Eccube/Resource/template/admin
template_admin_html_realdir: ${ROOT_DIR}/web/template/admin
template_realdir: ${ROOT_DIR}/app/template/${TEMPLATE_CODE}
template_html_realdir: ${ROOT_DIR}/web/template/${TEMPLATE_CODE}
template_temp_realdir: ${ROOT_DIR}/app/cache/eccube/template

webに変更した結果となります。

  • InstallController.phpの変更 src/Eccube/Controller/Install/InstallController.php を開き615行目の/htmlを/webに変更
'/html',
から
'/web',
に変更

こちらの変更を先に行った後、

http://ドメイン名/install.php

よりEC-CUBE3のインストールを行ってください。

これらを行うことで http://ドメイン名 でアクセスできるようになります。

出来ないという方や分からないという方はコメントにでも書いてください。

さくらのクラウドを使ってEC-CUBE3の環境を作成してみよう

EC-CUBE Advent Calendar 2015 22日目の記事です。

22日目はさくらのクラウドを使ってEC-CUBE3の環境を作成してみようという記事です。

EC-CUBE3をインストールする環境としては、例えばレンタルサーバであったり、VPSクラウドであったりと色々な条件によって異なります。

過去にインストール方法や設定方法などを記事で書いてきましたが、実際にさくらのクラウドを使ってEC-CUBE3をインストールをしてみましょう。

さくらのクラウドについてはこちら。

cloud.sakura.ad.jp

今回はすでにさくらのクラウドのアカウントを利用できる前提で書いていきます。

続きを読む

EC-CUBE3で頻繁に出てくる$appにセットされているもの

EC-CUBE3ではSilexを利用しているため、お作法としてApplication.phpを起点に処理を行っています。

ではControllerで$appと頻繁に使われているこの変数(twigだとappのことです)には何がセットされているのかを見てみましょう。

表示の仕方は、3.0.8からの機能になりますがdumpという関数が使えるようになりますので、こちらを使って表示してみます。

  • Controllerでの使用方法
    dump($app)

  • Twigでの使用方法
    {{ dump(app) }}

Application {#8 ▼
  #providers: array:21 [▼
    0 => EccubeMonologServiceProvider {#34}
    1 => MonologServiceProvider {#35}
    2 => TranslationServiceProvider {#46}
    3 => SessionServiceProvider {#55 ▶}
    4 => TwigServiceProvider {#59}
    5 => HttpFragmentServiceProvider {#84}
    6 => UrlGeneratorServiceProvider {#99}
    7 => FormServiceProvider {#102}
    8 => SerializerServiceProvider {#119}
    9 => ValidatorServiceProvider {#126}
    10 => SwiftmailerServiceProvider {#140}
    11 => DoctrineServiceProvider {#155}
    12 => DoctrineOrmManagerRegistryProvider {#170}
    13 => DoctrineOrmServiceProvider {#194}
    14 => SecurityServiceProvider {#171 ▶}
    15 => RememberMeServiceProvider {#188}
    16 => EccubeServiceProvider {#259}
    17 => ServiceControllerServiceProvider {#585}
    18 => WebProfilerServiceProvider {#1068}
    19 => DebugServiceProvider {#1134}
    20 => SaxulumWebProfilerProvider {#1147}
  ]
  #booted: true
  #values: array:318 [▼
    "logger" => Closure {#36 ▶}
    "routes" => Closure {#9 ▶}
    "controllers" => Closure {#11 ▶}
    "controllers_factory" => Closure {#12 ▶}
    "route_class" => "Silex\Route"
    "route_factory" => Closure {#13 ▶}
    "exception_handler" => Closure {#15 ▶}
    "dispatcher_class" => "Symfony\Component\EventDispatcher\EventDispatcher"
    "dispatcher" => Closure {#1186 ▶}
    "callback_resolver" => Closure {#19 ▶}
    "resolver" => Closure {#588 ▶}
    "kernel" => Closure {#23 ▶}
    "request_stack" => Closure {#25 ▶}
    "request_context" => Closure {#27 ▶}
    "url_matcher" => Closure {#29 ▶}
    "request_error" => Closure {#31 ▶}
    "request" => Request {#1139 ▶}
    "request.http_port" => 80
    "request.https_port" => 443
    "debug" => true
    "charset" => "UTF-8"
    "locale" => "ja"
    "config" => Closure {#1026 ▶}
    "monolog.handler.debug" => Closure {#38 ▶}
    "monolog.logger.class" => "Symfony\Bridge\Monolog\Logger"
    "monolog" => Closure {#39 ▶}
    "monolog.handler" => Closure {#44 ▶}
    "monolog.level" => Closure {#41 ▶}
    "monolog.listener" => Closure {#43 ▶}
    "monolog.name" => "myapp"
    "monolog.bubble" => true
    "monolog.permission" => null
    "listener.requestdump" => Closure {#45 ▶}
    "monolog.logfile" => "/XXXX/XXXX/ECCUBEROOT/src/Eccube/../../app/log/site.log"
    "translator" => Closure {#54 ▶}
    "translator.resources" => Closure {#50 ▶}
    "translator.message_selector" => Closure {#52 ▶}
    "translator.domains" => []
    "locale_fallbacks" => array:1 [▶]
    "translator.cache_dir" => null
    "session.test" => false
    "session" => Closure {#57 ▶}
    "session.storage.handler" => Closure {#64 ▶}
    "session.storage.native" => Closure {#61 ▶}
    "session.storage.test" => Closure {#63 ▶}
    "session.storage.options" => array:5 [▶]
    "session.default_locale" => "en"
    "session.storage.save_path" => null
    "session.db_options" => array:1 [▶]
    "twig.options" => array:3 [▶]
    "twig.form.templates" => array:1 [▶]
    "twig.path" => []
    "twig.templates" => []
    "twig" => Closure {#658 ▶}
    "twig.loader.filesystem" => Closure {#1153 ▶}
    "twig.loader.array" => Closure {#69 ▶}
    "twig.loader" => Closure {#71 ▶}
    "fragment.handler" => Closure {#86 ▶}
    "fragment.renderer.inline" => Closure {#88 ▶}
    "fragment.renderer.hinclude" => Closure {#90 ▶}
    "fragment.renderer.esi" => Closure {#92 ▶}
    "fragment.listener" => Closure {#94 ▶}
    "uri_signer" => Closure {#96 ▶}
    "uri_signer.secret" => "e777a79cd661dbad23978972d11ee82d"
    "fragment.path" => "/_fragment"
    "fragment.renderer.hinclude.global_template" => null
    "fragment.renderers" => Closure {#98 ▶}
    "url_generator" => Closure {#101 ▶}
    "form.secret" => "e777a79cd661dbad23978972d11ee82d"
    "form.types" => Closure {#584 ▶}
    "form.type.extensions" => Closure {#1113 ▶}
    "form.type.guessers" => Closure {#108 ▶}
    "form.extension.csrf" => Closure {#110 ▶}
    "form.extensions" => Closure {#176 ▶}
    "form.factory" => Closure {#114 ▶}
    "form.resolved_type_factory" => Closure {#1082 ▶}
    "form.csrf_provider" => Closure {#118 ▶}
    "serializer" => Closure {#121 ▶}
    "serializer.encoders" => Closure {#123 ▶}
    "serializer.normalizers" => Closure {#125 ▶}
    "validator" => Closure {#128 ▶}
    "validator.mapping.class_metadata_factory" => Closure {#130 ▶}
    "validator.validator_factory" => Closure {#132 ▶}
    "validator.object_initializers" => Closure {#181 ▶}
    "swiftmailer.options" => array:7 [▶]
    "swiftmailer.use_spool" => true
    "mailer.initialized" => true
    "mailer" => Closure {#142 ▶}
    "swiftmailer.spooltransport" => Closure {#144 ▶}
    "swiftmailer.spool" => Closure {#146 ▶}
    "swiftmailer.transport" => Closure {#148 ▶}
    "swiftmailer.transport.buffer" => Closure {#150 ▶}
    "swiftmailer.transport.authhandler" => Closure {#152 ▶}
    "swiftmailer.transport.eventdispatcher" => Closure {#154 ▶}
    "db.default_options" => array:5 [▶]
    "dbs.options.initializer" => Closure {#157 ▶}
    "dbs" => Closure {#159 ▶}
    "dbs.config" => Closure {#161 ▶}
    "dbs.event_manager" => Closure {#163 ▶}
    "db" => Closure {#165 ▶}
    "db.config" => Closure {#167 ▶}
    "db.event_manager" => Closure {#169 ▶}
    "dbs.options" => array:2 [▶]
    "doctrine" => Closure {#173 ▶}
    "doctrine.orm.validator.unique_validator" => Closure {#177 ▶}
    "validator.validator_service_ids" => array:2 [▶]
    "orm.proxies_dir" => "/XXXX/XXXX/ECCUBEROOT/src/Eccube/../../app/cache/doctrine"
    "orm.proxies_namespace" => "DoctrineProxy"
    "orm.auto_generate_proxies" => true
    "orm.default_cache" => "array"
    "orm.custom.functions.string" => []
    "orm.custom.functions.numeric" => []
    "orm.custom.functions.datetime" => []
    "orm.custom.hydration_modes" => []
    "orm.class_metadata_factory_name" => "Doctrine\ORM\Mapping\ClassMetadataFactory"
    "orm.default_repository_class" => "Doctrine\ORM\EntityRepository"
    "orm.em.default_options" => array:3 [▶]
    "orm.ems.options.initializer" => Closure {#192 ▶}
    "orm.em_name_from_param_key" => Closure {#190 ▶}
    "orm.ems" => Closure {#196 ▶}
    "orm.ems.config" => Closure {#197 ▶}
    "orm.cache.configurer" => Closure {#199 ▶}
    "orm.cache.locator" => Closure {#201 ▶}
    "orm.cache.factory.backing_memcache" => Closure {#203 ▶}
    "orm.cache.factory.memcache" => Closure {#205 ▶}
    "orm.cache.factory.backing_memcached" => Closure {#207 ▶}
    "orm.cache.factory.memcached" => Closure {#209 ▶}
    "orm.cache.factory.backing_redis" => Closure {#211 ▶}
    "orm.cache.factory.redis" => Closure {#213 ▶}
    "orm.cache.factory.array" => Closure {#215 ▶}
    "orm.cache.factory.apc" => Closure {#217 ▶}
    "orm.cache.factory.xcache" => Closure {#219 ▶}
    "orm.cache.factory.filesystem" => Closure {#221 ▶}
    "orm.cache.factory" => Closure {#223 ▶}
    "orm.mapping_driver_chain.locator" => Closure {#225 ▶}
    "orm.mapping_driver_chain.factory" => Closure {#227 ▶}
    "orm.add_mapping_driver" => Closure {#229 ▶}
    "orm.generate_psr0_mapping" => Closure {#231 ▶}
    "orm.strategy.naming" => Closure {#233 ▶}
    "orm.strategy.quote" => Closure {#235 ▶}
    "orm.entity_listener_resolver" => Closure {#237 ▶}
    "orm.repository_factory" => Closure {#239 ▶}
    "orm.em" => Closure {#578 ▶}
    "orm.em.config" => Closure {#243 ▶}
    "orm.em.options" => array:1 [▶]
    "security.role_hierarchy" => []
    "security.access_rules" => array:6 [▶]
    "security.hide_user_not_found" => true
    "security.authorization_checker" => Closure {#244 ▶}
    "security.token_storage" => Closure {#246 ▶}
    "security" => Closure {#248 ▶}
    "user" => Closure {#448 ▶}
    "security.authentication_manager" => Closure {#251 ▶}
    "security.encoder_factory" => Closure {#446 ▶}
    "security.encoder.digest" => Closure {#255 ▶}
    "security.user_checker" => Closure {#257 ▶}
    "security.access_manager" => Closure {#468 ▶}
    "security.voters" => Closure {#466 ▶}
    "security.firewall" => Closure {#263 ▶}
    "security.channel_listener" => Closure {#265 ▶}
    "security.authentication_listener.factory.logout" => Closure {#267 ▶}
    "security.authentication_listener.factory.pre_auth" => Closure {#269 ▶}
    "security.authentication_listener.factory.form" => Closure {#271 ▶}
    "security.authentication_listener.factory.http" => Closure {#273 ▶}
    "security.authentication_listener.factory.remember_me" => Closure {#184 ▶}
    "security.authentication_listener.factory.anonymous" => Closure {#277 ▶}
    "security.firewall_map" => Closure {#279 ▶}
    "security.access_listener" => Closure {#281 ▶}
    "security.access_map" => Closure {#283 ▶}
    "security.trust_resolver" => Closure {#285 ▶}
    "security.session_strategy" => Closure {#287 ▶}
    "security.http_utils" => Closure {#289 ▶}
    "security.last_error" => Closure {#291 ▶}
    "security.context_listener._proto" => Closure {#293 ▶}
    "security.user_provider.inmemory._proto" => Closure {#295 ▶}
    "security.exception_listener._proto" => Closure {#297 ▶}
    "security.authentication.success_handler._proto" => Closure {#299 ▶}
    "security.authentication.failure_handler._proto" => Closure {#301 ▶}
    "security.authentication_listener.form._proto" => Closure {#303 ▶}
    "security.authentication_listener.http._proto" => Closure {#305 ▶}
    "security.authentication_listener.anonymous._proto" => Closure {#307 ▶}
    "security.authentication.logout_handler._proto" => Closure {#309 ▶}
    "security.authentication_listener.logout._proto" => Closure {#311 ▶}
    "security.authentication_listener.switch_user._proto" => Closure {#313 ▶}
    "security.entry_point.form._proto" => Closure {#315 ▶}
    "security.entry_point.http._proto" => Closure {#317 ▶}
    "security.authentication_provider.dao._proto" => Closure {#319 ▶}
    "security.authentication_provider.anonymous._proto" => Closure {#321 ▶}
    "security.validator.user_password_validator" => Closure {#323 ▶}
    "security.remember_me.response_listener" => Closure {#183 ▶}
    "security.remember_me.service._proto" => Closure {#274 ▶}
    "security.authentication_listener.remember_me._proto" => Closure {#324 ▶}
    "security.authentication_provider.remember_me._proto" => Closure {#326 ▶}
    "orm.ems.options" => array:1 [▶]
    "orm.ems.default" => "default"
    "orm.cache.instances.default.metadata" => ArrayCache {#331 ▶}
    "orm.cache.instances.default.query" => ArrayCache {#329 ▶}
    "orm.cache.instances.default.result" => ArrayCache {#332 ▶}
    "orm.cache.instances.default.hydration" => ArrayCache {#333 ▶}
    "orm.mapping_driver_chain.instances.default" => MappingDriverChain {#338 ▶}
    "dbs.default" => "default"
    "security.firewalls" => array:2 [▶]
    "eccube.password_encoder" => Closure {#444 ▶}
    "eccube.event_listner.security" => Closure {#252 ▶}
    "authority_voter" => Closure {#464 ▶}
    "eccube.service.system" => Closure {#469 ▶}
    "view" => Closure {#471 ▶}
    "eccube.service.cart" => Closure {#473 ▶}
    "eccube.service.order" => Closure {#475 ▶}
    "eccube.service.tax_rule" => Closure {#477 ▶}
    "eccube.service.plugin" => Closure {#479 ▶}
    "eccube.service.mail" => Closure {#481 ▶}
    "eccube.service.csv.export" => Closure {#483 ▶}
    "eccube.service.shopping" => Closure {#485 ▶}
    "eccube.repository.master.authority" => Closure {#487 ▶}
    "eccube.repository.master.tag" => Closure {#489 ▶}
    "eccube.repository.master.pref" => Closure {#491 ▶}
    "eccube.repository.master.sex" => Closure {#493 ▶}
    "eccube.repository.master.disp" => Closure {#495 ▶}
    "eccube.repository.master.product_type" => Closure {#497 ▶}
    "eccube.repository.master.page_max" => Closure {#499 ▶}
    "eccube.repository.master.order_status" => Closure {#501 ▶}
    "eccube.repository.master.device_type" => Closure {#503 ▶}
    "eccube.repository.master.csv_type" => Closure {#505 ▶}
    "eccube.repository.delivery" => Closure {#507 ▶}
    "eccube.repository.delivery_date" => Closure {#509 ▶}
    "eccube.repository.delivery_fee" => Closure {#511 ▶}
    "eccube.repository.delivery_time" => Closure {#513 ▶}
    "eccube.repository.payment" => Closure {#515 ▶}
    "eccube.repository.payment_option" => Closure {#517 ▶}
    "eccube.repository.category" => Closure {#519 ▶}
    "eccube.repository.customer" => Closure {#521 ▶}
    "eccube.repository.news" => Closure {#523 ▶}
    "eccube.repository.mail_history" => Closure {#525 ▶}
    "eccube.repository.member" => Closure {#527 ▶}
    "eccube.repository.order" => Closure {#553 ▶}
    "eccube.repository.product" => Closure {#531 ▶}
    "eccube.repository.product_image" => Closure {#533 ▶}
    "eccube.repository.product_class" => Closure {#535 ▶}
    "eccube.repository.product_stock" => Closure {#537 ▶}
    "eccube.repository.class_name" => Closure {#539 ▶}
    "eccube.repository.class_category" => Closure {#541 ▶}
    "eccube.repository.customer_favorite_product" => Closure {#543 ▶}
    "eccube.repository.base_info" => Closure {#545 ▶}
    "eccube.repository.tax_rule" => Closure {#547 ▶}
    "eccube.repository.page_layout" => Closure {#549 ▶}
    "eccube.repository.block" => Closure {#551 ▶}
    "eccube.repository.customer_address" => Closure {#528 ▶}
    "eccube.repository.shipping" => Closure {#555 ▶}
    "eccube.repository.customer_status" => Closure {#557 ▶}
    "eccube.repository.order_status" => Closure {#559 ▶}
    "eccube.repository.mail_template" => Closure {#561 ▶}
    "eccube.repository.csv" => Closure {#563 ▶}
    "eccube.repository.template" => Closure {#565 ▶}
    "eccube.repository.authority_role" => Closure {#567 ▶}
    "paginator" => Closure {#569 ▶}
    "eccube.repository.help" => Closure {#571 ▶}
    "eccube.repository.plugin" => Closure {#573 ▶}
    "eccube.repository.plugin_event_handler" => Closure {#575 ▶}
    "eccube.event.dispatcher" => Closure {#993 ▶}
    "profiler.mount_prefix" => "/_profiler"
    "data_collector.templates" => array:12 [▶]
    "data_collectors" => array:12 [▶]
    "data_collectors.form.extractor" => Closure {#1065 ▶}
    "twig.profiler.profile" => Closure {#1110 ▶}
    "web_profiler.controller.profiler" => Closure {#1104 ▶}
    "web_profiler.controller.router" => Closure {#1100 ▶}
    "web_profiler.controller.exception" => Closure {#1081 ▶}
    "web_profiler.toolbar.listener" => Closure {#1084 ▶}
    "profiler" => Closure {#1120 ▶}
    "profiler.storage" => Closure {#1122 ▶}
    "profiler.request_matcher" => null
    "profiler.only_exceptions" => false
    "profiler.only_master_requests" => false
    "web_profiler.debug_toolbar.enable" => true
    "web_profiler.debug_toolbar.position" => "bottom"
    "web_profiler.debug_toolbar.intercept_redirects" => false
    "profiler.listener" => Closure {#1124 ▶}
    "stopwatch" => Closure {#1126 ▶}
    "code.file_link_format" => null
    "profiler.templates_path" => Closure {#1133 ▶}
    "profiler.cache_dir" => "/XXXX/XXXX/ECCUBEROOT/html/../app/cache/profiler"
    "var_dumper.cloner" => Closure {#1136 ▶}
    "data_collector.dump" => Closure {#1071 ▶}
    "debug.templates_path" => Closure {#1146 ▶}
    "debug.max_items" => -1
    "debug.max_string_length" => -1
    "security.user_provider.admin" => MemberRepository {#397 ▶}
    "security.context_listener.admin" => Closure {#1189 ▶}
    "security.entry_point.admin.form" => Closure {#1191 ▶}
    "security.authentication_listener.admin.form" => Closure {#1193 ▶}
    "security.authentication_provider.admin.dao" => Closure {#1195 ▶}
    "security.authentication_listener.admin.logout" => Closure {#1197 ▶}
    "security.authentication_listener.admin.anonymous" => Closure {#1199 ▶}
    "security.authentication_provider.admin.anonymous" => Closure {#1201 ▶}
    "security.exception_listener.admin" => Closure {#1203 ▶}
    "security.user_provider.customer" => CustomerRepository {#443 ▶}
    "security.context_listener.customer" => Closure {#1205 ▶}
    "security.entry_point.customer.form" => Closure {#1207 ▶}
    "security.authentication_listener.customer.form" => Closure {#1209 ▶}
    "security.authentication_provider.customer.dao" => Closure {#1211 ▶}
    "security.authentication_listener.customer.logout" => Closure {#1213 ▶}
    "security.remember_me.service.customer" => Closure {#1215 ▶}
    "security.authentication_listener.customer.remember_me" => Closure {#1217 ▶}
    "security.authentication_provider.customer.remember_me" => Closure {#1219 ▶}
    "security.authentication_listener.customer.anonymous" => Closure {#1221 ▶}
    "security.authentication_provider.customer.anonymous" => Closure {#1223 ▶}
    "security.exception_listener.customer" => Closure {#1225 ▶}
    "security.authentication_providers" => array:5 [▶]
    "security.authentication.logout_handler.admin" => Closure {#1249 ▶}
    "security.authentication.success_handler.admin" => Closure {#591 ▶}
    "security.authentication.failure_handler.admin" => Closure {#992 ▶}
    "session.storage" => NativeSessionStorage {#980 ▶}
    "security.authentication.logout_handler.customer" => Closure {#922 ▶}
    "security.authentication.success_handler.customer" => Closure {#910 ▶}
    "security.authentication.failure_handler.customer" => Closure {#906 ▶}
    "twig.form.engine" => Closure {#766 ▶}
    "twig.form.renderer" => Closure {#762 ▶}
  ]
}

Application.phpでDIでセットしたものが格納されています。 そのため、$app['orm.em]とするとEntityManagerなどが呼び出されるわけです。

最初はとまどうかもしれませんが、こちらはこういうものだと覚えておいてください。