過去最大のプラグイン(当社比)
プラグインの名前は 「ココから選択」 プラグイン

ロゴに機能の概要が書かれていて、分かりやすいですよね ^^;
[Ver6.0]
EC-CUBE関連を中心に扱っております。
EC-CUBE4のプラグインを色々と作ってます。(EC-CUBE3系のプラグインもあります)
もうAndroidに戻れそうにないのでweb + google関連で進んでいきたいと思っております。

namespace Plugin\PlgPatch; // 環境に合わせて変更
use Eccube\Entity\Plugin;
use Eccube\Exception\PluginException;
use Eccube\Plugin\AbstractPluginManager;
use Eccube\Repository\PluginRepository;
use Eccube\Service\PluginService;
use Eccube\Util\CacheUtil;
use Eccube\Util\StringUtil;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Finder\Finder;
class PluginManager extends AbstractPluginManager
{
/** @var PluginRepository */
protected $pluginRepository;
/** @var CacheUtil */
protected $cacheUtil;
/** @var PluginService */
protected $pluginService;
private $upFileName;
private $plgCode;
private const PLG_PATH = __DIR__ . '/Resource/upfile/';
/**
* @param array $meta
* @param ContainerInterface $container
* @throws PluginException
*/
public function enable(array $meta, ContainerInterface $container)
{
log_info('[PlgPatch]パッチ適用開始');
$this->initialize($container);
log_info('[PlgPatch]更新対象プラグインの存在チェック開始');
$Plugin = $this->getPlugin();
log_info('[PlgPatch]更新対象プラグインの存在チェック終了');
// プラグインの手動アップデート
$this->plgManualUpdate($Plugin);
log_info('[PlgPatch]パッチ適用完了');
}
/**
* @param ContainerInterface $container
*/
private function initialize(ContainerInterface $container)
{
$this->pluginRepository = $container->get(PluginRepository::class);
$this->cacheUtil = $container->get(CacheUtil::class);
$this->pluginService = $container->get(PluginService::class);
$finder = Finder::create()
->in(self::PLG_PATH)
->files();
/** @var \SplFileInfo $item */
foreach ($finder as $item) {
$this->upFileName = $item->getFilename();
$fileName = explode(".", $item->getFilename());
$this->plgCode = $fileName[0];
}
}
/**
* @param string $plgCode
* @return Plugin
* @throws PluginException
*/
private function getPlugin($plgCode = "")
{
if (empty($plgCode)) {
$plgCode = $this->plgCode;
}
/** @var Plugin $Plugin */
$Plugin = $this->pluginRepository->findOneBy(['code' => $plgCode]);
if (!$Plugin) {
log_error("[PlgPatch]更新対象プラグインがインストールされていません。");
throw new PluginException("[PlgPatch]更新対象プラグインがインストールされていません。");
}
return $Plugin;
}
/**
* @param Plugin $Plugin
* @param string $upFileName
* @throws PluginException
*/
private function plgManualUpdate(Plugin $Plugin, $upFileName = "")
{
$fs = new Filesystem();
if ($upFileName == "") {
$upFileName = $this->upFileName;
}
$upFilePath = self::PLG_PATH . $upFileName;
/** @var CacheUtil $cacheUtil */
$cacheUtil = $this->cacheUtil;
/** @var PluginService $pluginService */
$pluginService = $this->pluginService;
// ファイル配置
$tmpDir = null;
try {
$cacheUtil->clearCache();
$tmpDir = $pluginService->createTempDir();
$tmpFile = sha1(StringUtil::random(32)) . '.tar.gz';
log_info('[PlgPatch]プラグインファイルコピー開始', [
'origin' => $upFilePath,
'target' => $tmpDir . '/' . $tmpFile,
]);
$fs->copy($upFilePath, $tmpDir . '/' . $tmpFile, true);
log_info('[PlgPatch]プラグインファイルコピー完了');
log_info('[PlgPatch]Update', [$Plugin]);
$pluginService->update($Plugin, $tmpDir . '/' . $tmpFile);
log_info('[PlgPatch]一時ディレクトリから削除', [$tmpDir]);
$fs->remove($tmpDir);
log_info('[PlgPatch]一時ディレクトリから削除完了');
return;
} catch (PluginException $e) {
if (!empty($tmpDir) && file_exists($tmpDir)) {
$fs = new Filesystem();
$fs->remove($tmpDir);
}
$message = $e->getMessage();
log_error('[PlgPatch]' . $message);
throw $e;
} catch (\Exception $er) {
// Catch composer install error | Other error
if (!empty($tmpDir) && file_exists($tmpDir)) {
$fs = new Filesystem();
$fs->remove($tmpDir);
}
log_error('plugin install failed.', ['original-message' => $er->getMessage()]);
throw $er;
}
}
}
SYSTEM_KDです。
EC-CUBE4でのプラグイン開発時メモです。
EC-CUBE4系では、traitを用いてEntityを拡張できるようにEntityの拡張機構が用意されています。
※Entity拡張機構
これによって、プラグインから本体のEntityを拡張することができるのですが、プラグインで追加したEntityを別のプラグインから拡張しようとして、微妙にハマってしまったとメモになります。
/**
* Trait LabTrait
* @Eccube\EntityExtension("Plugin\TargetPlugin\Entity\TargetClass")
*/
trait LabTrait
{
public function getDummy()
{
return "xxx";
}
}
※これを実施しておかないと、proxy生成は成功するけど生成されたファイルを削除しないと、それ以降どうしようもなくなってしまうので注意
if (!class_exists('\Plugin\TargetPlugin\Entity\TargetClass')) {
/**
* TargetClass
*
* [略]
*/
class TargetClass extends \Eccube\Entity\AbstractEntity
{
・・・
}
}
これでOKっと思ったけど、ここがハマりポイントでした。
これだと、bin/console eccube:generate:proxies を実行した際にエラーが発生してしまいました。
プラグインのEntityは拡張できないのかなと思いつつ、EC-CUBEの拡張機構部分のコードを追ってみると、}の後に改行が欲しそうな雰囲気だったので、付け足してみたら解決しました。
(実は環境の問題とかって可能性もあるのかな・・・)
if (!class_exists('\Plugin\TargetPlugin\Entity\TargetClass')) {
/**
* TargetClass
*
* [略]
*/
class TargetClass extends \Eccube\Entity\AbstractEntity
{
・・・
}
}
// ← 最後の空行部分
ということで、Pluginで追加したEntityを別Pluginにて拡張する際のメモでした。
bin/console doctrine:migrations:generate
public function enable(array $meta, ContainerInterface $container)
{
$this->migration($meta['code'], $container);
}
public function uninstall(array $meta, ContainerInterface $container)
{
$this->migration($meta['code'], $container, 0);
}
use ContainerAwareTraitを差し込んであげれば、ContainerInterfaceを使えるようになると見せかけて、ならない。Eccube\Plugin\AbstractPluginManagerのmigration 関数をベースにちょっと書き換えます。class PluginManager extends AbstractPluginManager
{
/**
* @param array $meta
* @param ContainerInterface $container
* @throws MigrationException
*/
public function uninstall(array $meta, ContainerInterface $container)
{
$this->pluginMigration($meta, $container, 0);
}
/**
* * @param array $meta
* @param ContainerInterface $container
* @throws MigrationException
*/
public function enable(array $meta, ContainerInterface $container)
{
$this->pluginMigration($meta, $container);
}
protected function pluginMigration(array $meta, ContainerInterface $container, $version = null)
{
$migrationFilePath = __DIR__ . '/DoctrineMigrations';
$connection = $container->get('database_connection');
$pluginCode = $meta['code'];
$config = new Configuration($connection);
$config->setMigrationsNamespace('\Plugin\\' . $pluginCode . '\DoctrineMigrations');
$config->setMigrationsDirectory($migrationFilePath);
$config->registerMigrationsFromDirectory($migrationFilePath);
$config->setMigrationsTableName(self::MIGRATION_TABLE_PREFIX . $pluginCode);
/** @var Version $objVersion */
foreach ($config->getMigrations() as $objVersion) {
$versionMigration = $objVersion->getMigration();
if ($versionMigration instanceof ContainerAwareInterface) {
$versionMigration->setContainer($container);
}
}
$migration = new Migration($config);
$migration->migrate($version, false);
}
}
/** @var Version $objVersion */
foreach ($config->getMigrations() as $objVersion) {
$versionMigration = $objVersion->getMigration();
if ($versionMigration instanceof ContainerAwareInterface) {
$versionMigration->setContainer($container);
}
}
final class VersionXXX extends AbstractMigration implements ContainerAwareInterface
{
use ContainerAwareTrait;
public function up(Schema $schema): void
{
/** @var EntityManagerInterface $entityManager */
$entityManager = $this->container->get('doctrine.orm.entity_manager');
$ProductRepository = $entityManager->getRepository(Product::class);
}
public function down(Schema $schema): void
{
}
}




apiVersion: apps/v1
kind: Deployment
metadata:
name: mycentos7
labels:
app: mycentos7
spec:
replicas: 2
selector:
matchLabels:
app: mycentos7
template:
metadata:
labels:
app: mycentos7
spec:
containers:
- name: mycentos7
image: localhost:5000/web/mycentos7:2
ports:
- containerPort: 80
volumeMounts:
- mountPath: /var/www
name: docroot
volumes:
- name: docroot
persistentVolumeClaim:
claimName: centos7-volume-claims
kubectl apply -f centos7.yml
NAME READY STATUS RESTARTS AGE mycentos7-884464574-m5952 1/1 Running 0 58s mycentos7-884464574-qb99x 1/1 Running 0 14h mysql-server-5b9788cc57-2wvmq 1/1 Running 0 18h
# Volume
apiVersion: v1
kind: PersistentVolume
metadata:
name: centos7-volume
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: centos7-storage
hostPath:
path: /ホスト側フルパス
---
# Volume Caims
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: centos7-volume-claims
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: centos7-storage
---
# deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: mycentos7
labels:
app: mycentos7
spec:
replicas: 1
selector:
matchLabels:
app: mycentos7
template:
metadata:
labels:
app: mycentos7
spec:
containers:
- name: mycentos7
image: localhost:5000/web/mycentos7:3
ports:
- containerPort: 80
volumeMounts:
- mountPath: /var/www/app
name: docroot
volumes:
- name: docroot
persistentVolumeClaim:
claimName: centos7-volume-claims
---
# Service
apiVersion: v1
kind: Service
metadata:
name: mycentos7
labels:
app: mycentos7
spec:
ports:
- port: 80
nodePort: 31000
selector:
app: mycentos7
type: NodePort
# Secret
apiVersion: v1
kind: Secret
metadata:
name: mysql-pass
type: Opaque
data:
password: XXXXX # echo -n "pass" | base64 # base64した値を設定
---
# Volume
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-volume
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mysql-storage
hostPath:
path: /ホスト側のフルパス
---
# Volume Claims
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-volume-claims
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: mysql-storage
---
# Deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-server
labels:
app: mysql-server
spec:
selector:
matchLabels:
app: mysql-server
template:
metadata:
labels:
app: mysql-server
spec:
containers:
- name: mysql-server
image: mysql:5.6
ports:
- containerPort: 3306
volumeMounts:
- mountPath: /var/lib/mysql
name: mysql-storage
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-volume-claims
---
# Service 外部用
apiVersion: v1
kind: Service
metadata:
name: mysql-server-open
labels:
app: mysql-server
spec:
ports:
- port: 3306
nodePort: 31001
selector:
app: mysql-server
type: NodePort
---
#Service 内部用
apiVersion: v1
kind: Service
metadata:
name: mysql-server
labels:
app: mysql-server
spec:
ports:
- port: 3306
selector:
app: mysql-server
clusterIP: None
SYSTEM_KD です。
前回のプラグインを公開してから、かなり時間がたってしまいましたが、
久々の 新作プラグイン 「条件でつくれるカテゴリ」 プラグインをリリースしました。
今回のプラグインは、どんなプラグインかと言いますと、プラグイン名の通り
条件を利用してカテゴリをつくるれプラグインとなります。
具体的にどういうことかというと、カテゴリに対して カテゴリ内に表示する商品を取得するための条件を設定して、その条件にもとづいて自動でカテゴリへ商品を振り分けることができるプラグインとなっています。
通常であれば、カテゴリに属する商品は手動にて選択を行うため、新たに商品が追加された場合・属するカテゴリを変更したい場合などにおいて、都度設定を行う手間が発生します。
また、商品の在庫状態に応じたカテゴリなど、動的に変化するものによるカテゴリを作成することは難しい状態となります。
ですが、このプラグインを利用すれば、条件にマッチさせることにより、自動で振り分けを行う動的なカテゴリを用意することができます。
カテゴリを作成するために様々な条件を利用することができます。
条件は組み合わせて利用することができるので、色々なパターンでカテゴリを用意することができます。
「商品ID (From)」「商品ID (To)」
商品IDの範囲で指定
Fromのみ、Toのみの指定も可能です。
「商品名」
商品名の前方・部分・後方一致で指定
商品名を利用してグループ化したカテゴリを用意したい場合に利用できます。
「商品コード」
商品コードの前方・部分・後方一致で指定
ルールに基づいて商品コードを付与している場合など、商品コードを利用して商品の種類ごとにグループ化したカテゴリを用意した場合に利用できます。
「商品種別」
商品種別で指定
商品種別を OR 条件にて指定することができます。
「販売価格 (From)」「販売価格 (To)」
販売価格の範囲で指定
Fromのみ、Toのみの指定も可能です。
販売価格を利用して、◯円以上・✕円以下・◯円 ~ ✕円 といった、販売価格をもとにしたカテゴリを用意したい場合にご利用できます。
「通常価格 (From)」「通常価格 (To)」
通常価格の範囲で指定
Fromのみ、Toのみの指定も可能です。
販売価格ではなく、通常価格をもとにしたカテゴリを用意したい場合にご利用できます。
「在庫 (無制限)」「在庫 (From)」「在庫 (To)」
在庫の状態で指定
在庫無制限のもの・在庫Fromのみ、Toのみ、範囲で指定可能です。
在庫が少なくなってきたものをまとめ、「残りわずか」「ラスト1点」といった内容が動的に変化するカテゴリを簡単に用意できます。
「タグ」
タグで指定
タグを OR 条件にて指定することができます。
新商品のタグが付いた商品を集めたカテゴリを用意することができます。
「販売制限数 (From)」「販売制限数 (To)」
販売制限数で指定
Fromのみ、Toのみの指定も可能です。
一度に購入できる条件である、販売数を利用したカテゴリを用意することができます。
「お届け可能日」
お届け可能日で指定
お届け日単位でまとめたカテゴリを用意することができます。
条件を利用したカテゴリは、条件通しの組み合わせだけではなく カテゴリ階層 にて組み合わせることが可能です。
条件を利用したカテゴリは、親カテゴリからの条件を引き継ぐようになっているため、下の階層に進むごとに条件によって絞り込みを行っていくことができます。
条件付きカテゴリの親カテゴリが通常のカテゴリ(商品とカテゴリを手動にて結びつける状態)の場合でも同様に親カテゴリの条件(選択した商品)を引き継ぎます。
このため、全ての商品から条件で絞り込むだけでなく、手動で選択した商品からさらに条件にて絞り込むといったことができます。
また、これとは逆に、あるカテゴリの下に条件を付けたカテゴリを配置し、その親カテゴリで抽出される商品は、紐づくカテゴリにて抽出されたものを表示したいという場合があるかと思います。
こういった場合は、親カテゴリを 条件カテゴリ に設定しておき、何も条件を指定しないことにより実現することができるようになっています。
なお、この様に条件を利用したカテゴリは親の条件を引き継ぐ仕組み上、条件の下に紐づくカテゴリは、条件カテゴリでないといけない縛りとなっております。
(自動で条件カテゴリを選択した状態となるので、利用する上で意識することは特にないかと思います)
メインの機能としては、上記となるのですが、サブ機能としてカテゴリを登録する際に、親カテゴリを選択できる機能があります。
通常、カテゴリを作成した後でのカテゴリの階層変更は容易ではありません。
(一度削除して登録し直す、CSVで再登録、データベースを直接変更などが必要)
せっかく条件を指定したカテゴリを用意しても、階層を間違えてしまいやり直しというのは、面白くありません。
このため、当プラグインには、カテゴリの登録(更新)の際に、親カテゴリを選択できるようになっているため、後からカテゴリの階層を変更することができます。
条件を利用したカテゴリについて、主にフロント側についての機能を説明しましたが、管理画面側についても同様に条件を利用したカテゴリでの検索を行うことができます。
また、検索結果のCSV出力についても、同様に条件を利用したカテゴリを反映した結果の出力が行えるようになっております。
(ただし、CSVダウンロード機能は拡張しにくいため、カテゴリ条件版というのを別途用意しております)
ということで、久々の新作プラグイン 条件でつくれる プラグインをリリースしましたので、魅力ある商品を、もっと有効的にカテゴライズしてお客様にみせたいといった方は、是非利用してみてください。
以上、プラグインのご紹介でした。
SYSTEM_KDです。
タイトルままですが、株式会社ロックオンさんが発行しているEC-CUBEの公式メールマガジンにて、私が作成したプラグインを紹介頂きましたー!!
おーーーー!!ありがとうございます!!
2016年08月09日に発行されました、「EC-CUBE 3.0注目プラグインをご紹介!【管理機能編】」という公式メールマガジンにて、「管理サポートプラグイン【詳しい商品一覧】」、「会員データ移行プラグイン for EC-CUBE3」と「メンテンナスプラグイン」の計3プラグインが紹介されました。
そのうち、「管理サポートプラグイン【詳しい商品一覧】」と「メンテナンスプラグイン」は私が作成したプラグインになります。
(紹介3個中2個が私のプラグインとは!本当にありがとうございます。m(_ _)m )
なお、「会員データ移行プラグイン」は、のぶろぐさんが作成されている2系の会員データを3系に移すことが出来るプラグインになります。
(2系から3系にリプレースする場合は、データの移行は必須だと思いますので、重宝しそうですね)
以上、公式メルマガで取り上げて頂いた喜びの内容でした。
SYSTEM_KDです。
EC-CUBE3の次期アップデートバージョン、EC-CUBE3.1 の評価版である、3.1a が公開されました。
https://www.ec-cube.net/press/detail.php?press_id=227
EC-CUBE3は、現在3.0.x としてバグフィックス等のマイナーバージョンアップが進んでおり、現在バージョン「3.0.13」が最新となっておりますが、3.1a は今後予定されている大型バージョンアップの評価版(第一弾)となっているようです。
主な変更点としましては、以下が行われるようです。
(GitHub の EC-CUBE3.1.0 リリース計画より抜粋)
コアの機構見直し
・機能カスタマイズ性の向上に向けた機構改善
・フロントのデザインテンプレートでのフォームヘルパーの利用の見直し・分解
・Eccube-Upgrade-Fixerの開発
・プラグインの依存関係を解決する機構を実装
・EC-CUBEスタイルガイドラインの作成
・データベースのデータ型とカラム名の変更(for 3.1)
機能改善
・受注・配送データの改善
・デバイス毎にデザインテンプレートやレイアウトを設定する機能
その他
・初期インストール時のデータ投入をCSVファイルに変更
いやーガッツリと変わりますね。
(今、公開済みのプラグインを対応させるのに結構かかりそうだな・・)
ということで、ソースコードも合わせて確認してみましたが、たしかに色々と変わってますねー
まぁ、利用するフレームワークのバージョン自体が上がってますし、コアの機構に見直しが入ってこともありで、そりゃそうですが ^^;
まだ、3.1a なので作り込みとしては、これからだと思いますが、カスタマイズ性向上部分についても、こんな感じになるというイメージを確認することができますので、ソースを落としてきて見てみるのも良いかと思います。
(って、どの対象向けの発言なんだこれw)
なお、デザイン部分の改善については、今回の3.1a には含まれていないので、今後公開されていくようです。
(そっちはそっちでどの位変更が入るのか気になるところです)
ちなみに、今後のマイルストーンとしては、EC-CUBE 3.1.0a2 が2017年5月公開となっているようです。
その中に「機能カスタマイズ性の向上に関する機構改善のフィードバック反映」が含まれているのですが、そのフィードバックできる会が、下記で開催されるようです。
2017年3月15日(水) 株式会社ロックオン本社
2017年3月16日(木) 株式会社ロックオン東京支社
ちょっと気になるし、行ってみようかなー。
以上、EC-CUBE3.1a が公開されました でした。
SYSTEM_KDです。
久々の新作プラグインとなります、EC-CUBE3向けのプラグイン「タイムセールpro」をリリースしました。
どんなプラグインかと言いますと、EC-CUBE3へタイムセール機能を追加するプラグインとなります。
(はい。そのままです。)
タイムセールプラグインですので、指定した「期間」に本来とは別の価格を設定することが可能となります。
セールを行いたい商品へタイムセール開始日と終了日、その間の価格を設定すれば、自動的に指定期間内だけ、特別価格で販売を行うといったことができます。
また、期間の指定は、日付だけでなく時間単位で細かく設定することができます。
このため、90分限定セールといったことも簡単に行うことができます。
さらに、指定した期間中、常にセールを行うだけではなく、「時間」「曜日」を絞ったセールを行うことができます。
このため、来月は1ヶ月間「土日限定」のセールを行いたいといった場合や、「火曜日の17時から30分間だけ」セールを行いたいといったことも、実現することができます。
上記の設定は、商品ごとに行えるのですが、同様の設定を複数の商品に行う場合は、設定時間が手間となっていまします。
ですが、当プラグインでは、これを回避しスムーズにタイムセールの設定を行えるようにするため、「共通設定」を作成できるようになっています。
共通設定でも、タイムセールの開始・終了の期間(日時)、時間・曜日の設定は変わることなく行え、価格についても、割引率を設定することが可能となっています。
共通設定設定の反映は、商品ごとでの選択・一覧からの一括設定にて行うことができ、複数の商品へも簡単に反映できるようになっています。
また、価格について割引率を設定できるようになっていると書きましたが、一部の商品は指定の割引率を利用せず、別の価格を設定したいという場合もあるかと思います。
そんな時のため、商品ごとのタイムセール設定にて「割引率」を利用せず「任意の価格」を利用するといった設定が行えるようになっております。
タイムセールを実施する際に、利用できるものを色々と実装してみましたので、プラグインの名称を「タイムセールpro」と名付けてみました。
これから、年末年始に向けてECサイト(EC-CUBE3の)にて、タイムセールの実施をお考えでしたら、いかがでしょうか?
また、「あータイムセールプラグインにこの機能が付いていたら導入したんだけど」といった意見がございましたら、お気軽に申し付け下さい(笑)。もしかしたら、実装するかもです。
以上、EC-CUBE3向けプラグイン「タイムセールpro」のご紹介でした。
SYSTEM_KDです。
久々に、AzureのAppServiceで作ったEC-CUBE3環境(非公開)のコンソールを開いてたら、「MySQL In App (プレビュー)」なるものを発見したので、EC-CUBE3の環境を構築してみようと思います。
(試して書く方式ではなく、今試しながら作っていくのでゴールできるか分かりません!)
では早速。
「+新規」から、「すべて表示」を選択。
表示されたら、「Web + モバイル」を選択。
フィルターへ「mysql」とかを入力して、「Web App + MySQL」を探す。
「作成」を押して、必要情報を入力。
その際、「データベース プロバイダー」は、「MySQL In App (プレビュー)」を選択します。
※ちなみにプランは、無料プランです
入力できたら、作成。
環境が作成できたので、メニューの中の「MySQL In App (プレビュー)」を選択してみます。
上部にある「管理」ボタンを押すと、PHPMyAdmin へアクセスできました。
おぉー
・・・
・・・
IDとパスワード何ですか??
・・・
ググってみた結果、DB名は「azuredb」だということが判明しましたが、肝心のIDとパスワードが何なのかよくわからんです。
(デプロイ用の情報とかを入れてみたけどダメでした)
・・・・
・・・・
あ、よくみたら、先程の MySQL In App (プレビュー) ページに、接続文字列の環境変数というものがありました。
ここへ入ってるかもしれないので、確認してみます。
(って、どうやって見るんだこれ)
ググってみたら、それっぽいページを見つけたので、参考にしてみます。
接続情報を取り出している部分だけ、お借りして。
以下のように、xxx.php 処理を作成。
<?php
$connectstr_dbhost = '';
$connectstr_dbname = '';
$connectstr_dbusername = '';
$connectstr_dbpassword = '';
foreach ($_SERVER as $key => $value) {
if (strpos($key, "MYSQLCONNSTR_localdb") !== 0) {
continue;
}
$connectstr_dbhost = preg_replace("/^.*Data Source=(.+?);.*$/", "\\1", $value);
$connectstr_dbname = preg_replace("/^.*Database=(.+?);.*$/", "\\1", $value);
$connectstr_dbusername = preg_replace("/^.*User Id=(.+?);.*$/", "\\1", $value);
$connectstr_dbpassword = preg_replace("/^.*Password=(.+?)$/", "\\1", $value);
}
print_r("connectstr_dbhost = " . $connectstr_dbhost . "<br>");
print_r("connectstr_dbname = " . $connectstr_dbname . "<br>");
print_r("connectstr_dbusername = " . $connectstr_dbusername . "<br>");
print_r("connectstr_dbpassword = " . $connectstr_dbpassword . "<br>");
FTPでアップして、上記のページアクセス!
とれたー!!
って、
にのってるIDとパスワードじゃないか・・・。
ということで、このIDとパスワードを利用して、phpMyAdmin へアクセスできました。
MySQLへの接続情報をゲットできましたので、EC-CUBE3をインストールしてみます。
まずは、ソースを配置します。
AzureへEC-CUBE3を設置する際、展開したファイルをアップする方法を行っていたのですが、「vendor」のファイル数が多いのもありうちの貧弱ネット環境だと、結構時間がかかるし、かといって圧縮した状態でアップ後に展開してもタイムアウトして上手く展開できなかったりするので、バシッと行くのがないんですよね。。
ということで、今回はローカルGitからアップします。
(それなりに、時間はかかりますが、他の方法より早いし、後々の管理も楽です)
まぁ、好きな方法でファイルをアップします。
ちなみに、今回インストールする、EC-CUBEのバージョンは 3.0.10 です。
ファイルがアップできたので、インストールしていきます。
次へ進む。
おっと、権限チェックにひっかかりました。
Azure は自動でディレクトリ作れない仕様だったはずですので、手動で指定されたディレクトリを作成します。
ディレクトリを作成すれば、次へ進めるようになるので、次は「サイトの設定」を入力します。
(まぁ説明不要ですね)
次はいよいよ、データベースの設定です。
取得したMySQLの接続情報を設定します。
(ポート番号含め、全部設定)
おぉ!!あっさり接続できました!!
あとは、テーブルの作成が上手くいくか・・・。
(ClearDBの無料枠は、同時接続数に阻まれて簡単には作成させてもらえないんですよね。。)
・・・・
完了!!!!
Azureの無料枠というか無料に踊らされて、何回かEC-CUBE3をインストールしましたが、今回はかなりさくっとインストールできました。
しかも、(PHP7にしている恩恵もあるかもしれませんが)無料枠でもそれなりのレスポンスで動作してくれる気がします。
私の感覚としては、SQLiteで動作させたときよりもレスポンスよさ気です。
ということで、ちょっと整えたらプラグインのデモ環境用に公開したいと思います!!
以上、AzureのApp Service で MySQL In App (プレビュー)なるものを見つけたので、EC-CUBE3を構築してみた でした。