カテゴリー
DIY

【DIY】お洒落な置き配ボックス

[temp id=3]

2020年世界はコロナの渦に飲み込まれた、、、

そして宅配の生活様式に変化が起き、
対面配達から→置いていく配達「置き配」へと変わりつつあるのだ٩(•౪•٩)三

宅配ボックスをカスタマイズしていきます。

私が選んだ宅配ボックス

選別理由
  1. デザイン
  2. コスパ
  3. 素材

https://amzn.to/3exwNZ8

組み立て攻略

説明書見て「あっ!簡単そう」って思って作ってみたが、組み換えました、、、

南京錠を付ける箇所を確認して組みましょう!

私は周りを固定した後に気付き組み立て直しました、、、

宅配ボックスポイント

まず底板は周りの支えで成り立ちます。

二人で支え合い(高さや仮止めなど)組み立てると楽です。

一人でもテープなどで仮止めしながらやれば組み立てやすいです。

属性付与

水耐性を付与していきます。

結構いろいろ調べて、こちらのアイテムにたどり着きました٩(•౪•٩)三

水耐性付与テープ

https://amzn.to/32mQAFU

さっそく加工しました!!

結果は、水耐性を得た代わりにお洒落度が少し下がりました◟꒰◍´Д‵◍꒱◞

まぁ機能重視でしょ٩(•౪•٩)三

カテゴリー
EC-CUBE

【EC-CUBE4】エンティティ:Entity

Entityについて説明していきます。

Entityの定義

Entityとは、データを扱うクラスです。

本体Entity:ドキュメントルート/src/Eccube/Entity

基本的には、データベースの各テーブルを定義し使用していきます。

関連するテーブルの情報を定義し「スキーマ更新コマンド」でDBへ更新も可能です。

Bash
bin/console doctrine:schema:update --dump-sql --force

商品クラスで解説

テーブル定義

PHP
    /**
     * Product
     * ↓ これがないとクラス名でテーブルが作成される
     * @ORM\Table(name="dtb_product")
     * ↓ クラス階層ごとに1つのテーブルを作成します
     * @ORM\InheritanceType("SINGLE_TABLE")
     * ↓ テーブルの識別用カラム
     * @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
     * ↓ サービスの依存関係がないならコールバックの設定をした方が良いとのこと
     * @ORM\HasLifecycleCallbacks()
     * ↓ Repositoryの読込み設定
     * @ORM\Entity(repositoryClass="Eccube\Repository\ProductRepository")
     */
    class Product extends \Eccube\Entity\AbstractEntity

カラム定義

PHP
         * @ORM\Column(name="id", type="integer", options={"unsigned":true})
         * @ORM\Column(name="name", type="string", length=255)
         * @ORM\Column(name="create_date", type="datetimetz")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         * @ORM\OneToMany(targetEntity="Eccube\Entity\ProductImage", mappedBy="Product", cascade={"remove"})
         * @ORM\ManyToOne(targetEntity="Eccube\Entity\Member")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="creator_id", referencedColumnName="id")
         * })

定数やメソッドも追加可能

PHP
// 編集不可ステータス
const UNEDITABLE_STATUS = [
    self::PENDING,
    self::PROCESSING,
    self::CREDIT_SLIP,
];

/**
 * 銀行支払いかチェック
 * @return bool
 */
 public function isBankPayment() {
  return $this->getId() == Payment::BANK_PAYMENT ? true:false;
}

データ登録の流れ

  1. 登録対象Entityの取得 $Product = new Product
  2. $Product->setName = ‘テスト商品’
  3. 永続化登録設定 $this->entityManager->persist($Product)
  4. 登録処理 $this->entityManager->flush($Product)

実際のDBへ登録されるタイミングは、エラーがなく正常終了してテンプレートにいくタイミング。

Entityをカスタマイズしたい場合

src配下のEntity本体ソースは、アプデで影響が出る可能性があるので、

カラムやメソッドを追加したい場合

CustomizeでTraitを使用し拡張する

この場合は、スキーマ更新コマンドでdtb_categoryへslugカラムが追加される。

更新手順↓

proxy更新→キャッシュクリア→スキーマ更新コマンド

PHP
<?php

namespace Customize\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;

/**
 * @EntityExtension("Eccube\Entity\Category")
 */
trait CategoryTrait
{
    /**
     * @var string
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $slug;

    /**
     * @return string|null
     */
    public function getSlug(): ?string
    {
        return $this->slug;
    }

    /**
     * @param string|null $slug
     * @return $this
     */
    public function setSlug(?string $slug): self
    {
        $this->slug = $slug;

        return $this;
    }
}

定数を使用したい場合

元のEntityを継承して使用する

PHP
<?php

namespace Customize\Entity\Master;

use Eccube\Entity\Master\OrderStatus as BaseEntity;

if (!class_exists('Customize\Entity\Master\OrderStatus')) {

    /** 親クラスの定数宣言を拡張する目的に作成しています */
    class OrderStatus extends BaseEntity {

        /** 入金待ち */
        const PAY_WAIT = 2;

        // 編集不可ステータス
        const UNEDITABLE_STATUS = [
            self::PENDING,
            self::PROCESSING,
            self::CREDIT_SLIP,
        ];
    
    }
}

使用したいファイルで、useして使用する

use Customize\Entity\Master\OrderStatus;

既存の他のTrait読み込み

下記プログラムでgetFullName()が使用可能となる

PHP
<?php

namespace Customize\Entity;

use Eccube\Annotation\EntityExtension;
use Eccube\Entity\NameTrait;

/**
  * @EntityExtension("Eccube\Entity\Customer")
 */
trait CustomerTrait
{
    use NameTrait;
}

src/Eccube/Entity/NameTrait.php

PHP
<?php

namespace Eccube\Entity;

trait NameTrait
{
    public function getFullName()
    {
        return (string) $this->name01.' '.$this->name02;
    }

    public function getFullNameKana()
    {
        return (string) $this->kana01.' '.$this->kana02;
    }
}

以前ハマった対応があったので紹介します。

初期表示データ取得できない

カスタマイズ中に発生した問題です。

EC-CUBE4は基本的にDoctrineを使用しています。

データベースをオブジェクト化した物で、都度データベースにアクセスしないでデータの取得や加工が行えます。

なぜこの状態になったか?

取得できなかったデータ
※わかりやすくEC-CUBEデフォルトのテーブルで説明します。

要件:カートの情報をデータ登録直後に一覧ページに表示したい。

関連するテーブルは、dtb_cartとdtb_cart_itemの2種類です。

パターン1

  1. dtb_cartへEntityで登録+永続化+フラッシュ
  2. dtb_cart_itemへEntityで登録+永続化+フラッシュ
  3. findByでリスト取得して、テンプレートへ

パターン2

  1. dtb_cartへEntityで登録+永続化+フラッシュ
  2. dtb_cart_itemへEntityで登録+永続化+フラッシュ
  3. テンプレートでfindByしてリスト取得

上記でうまくいかなかったです。

結局なんだったかと言うと、

リレーションが貼ってあるので、cart→cart_itemの順で登録

cartは最新の登録データは持っているが、紐づくcart_itemは後から登録されるので

cartのEntityに、cart_itemの最新情報が紐づいていない状態

cartのEntityを更新する

PHP
$this->entityManager->refresh(XXX);
XXXは、更新するEntityオブジェクト 

$this->entityManager->refresh($cart);

これで解決!

カテゴリー
DIY

【DIY】お洒落にガーデニング ウッドデッキ

[temp id=3]

低価格で購入したウッドデッキをカスタマイズしていきます。

コスパ最強のウッドデッキ

タンスのドン!

タンスのゲンさんです!!

21,800円で購入したウッドデッキをカスタマイズ↓

https://amzn.to/2TdvyEL

土台 + ステップ + 柵 3点セットです。

コスパ最強٩(๑’ꇴ’๑)۶

装備品

属性付与塗料:1,936円 2.5L

https://amzn.to/3obFPzD

付与スキル:耐防虫+防腐+多少の撥水

防御力強化ニス:1,487円 300ml 1個

https://amzn.to/2G1hpHM

防御力強化ニス:2,372円 700ml 1個

https://amzn.to/2G82rQ7

カスタム開始

塗料

塗装時間

表裏:12分 表横:7分 裏:5分

パーツ:未計測

塗装回数

表:3度塗り

裏:4度塗り

パーツ:3度塗り

カテゴリー
住宅

【内装】お洒落なカーテン

[temp id=3]

初めてカーテン購入しました٩(๑’ꇴ’๑)۶

沢山あって迷いましたが、めちゃくちゃ良いのに巡り合いました─=≡Σ((( つ•̀ω•́)つ

びっくりカーテン

めっちゃお洒落なカーテンを一目惚れで購入しました。

南国風カーテン

海物語や南国育ちをイメージする方もいるんじゃないかな!?

びっくりカーテン:モーニングビーチ

結構スケスケ感ありますが、外から見るとそうでもないです。

アクアカーテン

商品が届くまで

南国風カーテン:2020/09/25 発注 → 2020/10/06 商品到着

アクアカーテン:2020/10/03 発注 → 2020/10/10 商品到着

びっくりカーペット

この画像は、私が横を合わせるためにサッシの枠に固定して失敗したものであるΣ(゚Д゚;エーッ!

説明書には、固定金具は後ろは1cm以上開けてと書いてあったが数ミリの段差もダメでした

必ず平らな面で1cm以上開けて、設置しましょう!

無駄な穴が開きます◟꒰◍´Д‵◍꒱◞

商品が届くまで

2020/10/03 発注 → 2020/10/22 商品到着

カテゴリー
EC-CUBE

【EC-CUBE4】コントローラー:Controller

[temp id=3]

私のControllerの拡張方法を説明していきます。

ドキュメント読んで、手順通りに学んだわけではないので参考程度に見てください。

しっかり学びたい人は、Symfonyのドキュメントをお読みください。

https://symfony.com/doc/current/controller.html

簡単なControllerのカスタマイズ

ここで説明する情報は既存機能のカスタマイズです。

本体フォルダ→拡張フォルダを見に行きRouteが同一の場合上書きされる性質をもつ

新規のControllerを作成する際は、既存で使用されていないか必ず確認してください。

会員登録や商品詳細をカスタマイズしたいなどで応用できます。

Controllerのカスタマイズが必要か確認

大規模か改修の際は必要

一覧画面:テーブルに追加した項目のみの処理は不要

データ取得は、EntityTrait

表示は、twig

バリデーションは、Form

Controllerのカスタマイズ手順

今回は、会員登録「EntryController」を例に解説していきます。

重要パス
  1. 拡張フォルダ:プロジェクト名/app/Customize/Controller/
  2. 本体フォルダ:プロジェクト名/src/Eccube/Controller/
  1. EntryController.phpをコピーし拡張フォルダへ保存
  2. ファイル名変更CustomEntryController.php
  3. 拡張ファイルへ変更

3について、

  1. namespaceの変更
  2. useでAbstractControllerの読込み
 namespace Customize\Controller;

 use Eccube\Controller\AbstractController;

 class CustomEntryController extends AbstractController
 {

 }

確認方法

デバックするだけです。

    /**
     * 会員登録画面.
     *
     * @Route("/entry", name="entry")
     * @Template("Entry/index.twig")
     */
    public function index(Request $request)
    {
        dump('通過確認');
        exit;

スピード重視型

デフォルトController全てコピー

既存メソッドを改修

新規メソッド追加

追加スタマイズの可能性もあるので、この方が楽

綺麗さ重視型

不要な読込みファイルの削除

不要なメソッドの削除

カテゴリー
DIY

【DIY】お洒落にガーデニング 人工芝

[temp id=3]

今回は、お洒落なガーデニングを行っていきたいと思います。

この記事での取得スキル
  1. 防草シート配置スキル
  2. 人工芝配置スキル
  3. 費用予測スキル

私の家の庭の広さは、3.5m × 8mです。

防草シート

防草シートとは、草を防御するシートです。
雑草の発芽や成長を妨害し、庭を綺麗に保つ為に使用される。

庭をメンテナンスしないと、草刈りクエストが発生する。

草刈りクエスト:「時間・体力・腰への負担」を使用
報酬:なし

このメリットのないクエストをやるなら他の、良いクエストをやりましょう٩(๑’ꇴ’๑)۶

防草シートクエスト

庭に防草シートを敷いていくクエストになります。

今回のクエストの広さは、3.5m × 8mです。

アイテム一覧

・シート押さえ杭

・安い防草シート
 説明:織布, 耐久2〜3年

・高級防草シート
 説明:不織布, 防草能力が高い, 耐久5年〜半永久

私の使用アイテム一覧

安い防草シート:1m × 5m 300円 8個
シート押さえ杭:6個入り 100円 10個

攻略方法

・防草シート間は5cm重ねるように敷く

・軽い重りで止めていない箇所を固定する
 ※風で飛ばされて引き直ししました◟꒰◍´Д‵◍꒱◞

・杭を手で押して入らない場合は、無理に入れない
 ※スコップで掘って障害物を取り除く

・ホウキで履く事を考えて、重ね方を考慮する

・15cmでに砕石があり、刺さらない場合は手前にズラす。
 ※太くて丈夫な杭だとハンマーで刺せるらしいです。

お疲れ俺!3,000円と数時間で完成─=≡Σ((( つ•̀ω•́)つ

人工芝

人工芝は、メンテナンスコストが低いので人気です。

天然芝は、定期的にメンテナンスが必要で、日当たりにも影響してきます。

パーティメンバーに相談したところ。

人工芝の種類

特殊アビリティとして、耐火・耐水がセットされているアイテムがある

シートとジョイント式マットの2種類が存在

Ark経験者なのでイベントカラー探したらあったー─=≡Σ((( つ•̀ω•́)つ


↑ 私はこちらの商品を購入しました。
2つセットまで送料700円で済むみたいです。

2020/10/03 発注 → 2020/10/22 商品到着

https://amzn.to/3k7eaNv

https://amzn.to/3dzK0jw

ジョイントマット

大きさ:30cm × 30cm

料金:1枚辺り100円〜500円

カラー人工芝は相場が高いイメージ

カラー人工芝をワンポイントに入れる事にした。

シート

大きさ:1m × [1m 〜 30m]

攻略方法

ジョイントマット

・手袋があれば楽
 ※100均マットは硬いです。指が痛くなります。

・片手を下に入れてメスを引っ掛けるように持ち
 片手で上からオスを押す、、、
 この状態でメスを手前に引っ掛ける感じ̑̑̑̑̑̑ᵎᵎᵎ꒰ฅ ͒•ૅꇵ͒•⌯͒꒱ฅ

カテゴリー
Git

【Git】デプロイ方法

こんにちは!

現在EC-CUBE4のカスタマイズ案件やっている、@vVv_kenshi_vVvです!

GitHubからXserverへデプロイ

条件:SSHでXserverへログイン出来る事
   GitHubにソースが存在している事

SSH設定もありますので、未設定の際は確認ください↓

【XSERVER】メモ

最初にやる事

Gitはデフォルトで入っていると思う!

Gitユーザーの作成

ユーザーはないので作成しましょう。

git config --global user.name "kenshi"
git config --global user.email "kenshi+01@gmail.com"

Gitのリポジトリ初期化

プロジェクトをいれるディレクトリ作成
cdコマンドで移動

初期化コマンド

git init

デプロイする(Pull)

GitHubからPullする

git pull https://github.com/newProject.git

vender以下へライブラリのインストール

composerはデフォルトで入っている

composer install

.envがなければ、環境に合わせて設定ファイルの作成

以降のデプロイ作業

ブランチ確認

git branch

変更ファイルの確認:更新に関係ないファイルは問題なし

git log

差分取得

git fetch origin master

更新するファイルの確認

git diff --name-only コミット番号..コミット番号

プル

git pull origin master

キャッシュクリア:EC-CUBE4

php bon/console c:c --no-warmup
カテゴリー
住宅

【引越】引越し業者の選び方

こんにちは!@vVv_kenshi_vVvです!

今回2020年9月5日に引越しで、酷い目に会いました。

法的処置を取られそうになる‼(•’╻’• ۶)۶

引越業者の選び方、注意点を私の経験を元に書いていきたいと思います。

【一括見積もり】は鉄板です。

WEB上で一括見積もりは、何社か行っています。

私が利用したのは2社です。

SUUMO」「価格.com

そもそも一括見積もりとは!?

メールアドレスや電話番号など情報を、取り扱っている引越業社全てに共有するサービスです。

すぐに対応し電話かけてくる会社もいれば、数日後にメールを送る会社もいます。

会社からアプローチしてくれるので、結構楽です。
複数社に見積もり確認し、適正価格の引越業者さんを決めましょう!

デメリットとしては、8社など多くの会社から来るので対応に追われます。

価格.comの引越し見積もりサービス

2社しか使っていませんが、価格.comの方が良かったです。

自宅の荷物入力があります。

シルエットと名前で表記してあるのでわかりやすいです。

荷物がわかれば、一番費用のかかるトラックの大きさが絞れるので見積もりの精度が増します。

↓価格.comの引越見積もりサービス

https://hikkoshi.kakaku.com/hikkoshi/guide/estimate.html?cid=smt_h_g_pc_kt_jt_022&gclid=CjwKCAjwtNf6BRAwEiwAkt6UQl78I6I52wEAr9DRkDHmjku_2mOUj_2ULnCIlAGudoXqnZPyYTHgFxoCDGQQAvD_BwE

見積もり結果

税抜き価格です。

1社目2社目
3トン車75,000円2トンロング
荷役ドライバー1人15,000円作業員2人
荷役ヘルパ2人20,000円作業料金:移動30,000円
割引-54,000円引越諸経費:時間指定10,000円
特別割引-15,000円
合計41,000円合計40,000円

引越日に変更があり1社目では変更できなかった為、キャンセルして2社目に変更しました。

2社目でウォーターサーバー契約したので、5,000円の割引と1年後に10,000円のキャッシュバックもあります。

引越の注意点

・1,2万円ぐらいの出費は気にしない方
・数時間無駄な時間を過ごしても良い方
上記2つに当てはまる方は、この先は必要ない情報です。

引越しの注意点
  1. 営業マンの最安は信用しない
  2. 営業マンの上司への相談は演出
  3. ダンボール爆弾に注意
  4. 複数社見積もりで適性価格の見極め
  5. 資材ダンボールなどは、契約を決めてから頂く

キャンセル

キャンセル料金は、3日前から発生します。

と説明はされますが、、、

ダンボールなどの返送費用や使用したダンボールは買取などというケースがあります。

ちなみにダンボールは50個まで無料と言ってましたが有料に変わった瞬間でした。

ダンボール費用

3つのダンボールを使用した私

Lサイズダンボール:1つ400円
ワンセット10個:4000円

10個でワンセットなので、3つ使っても4000円です。

と言われました。

※会社により大きさは異なります。

配送費用(返送費用)

Lサイズ:ワンセット
75cm×90cm×10cm

佐川では5,000円ぐらいで済むかな!?

https://www.sagawa-exp.co.jp/send/fare/list/sagawa_faretable/faretable-4.html

最悪な引越体験

ここからは、私の体験です。
まぁ愚痴です。笑

私は最初にポスト投函のチラシから、引越見積もりと依頼をかけました。

契約までの流れ
  1. 自宅へ営業さんが見積もり
  2. 値引き交渉
  3. 目の前で会社に電話し値引き
  4. 契約
  5. 大量のダンボールや梱包材を置いて行く

ダンボール40枚と言われ流石に多いと思い断ったものの、余ったら取りに来るといって半ば強引に置いて行った。

数日後に引越日が変更する事になり、変更できるか確認したところ出来ない。

他の会社を選択する事にした。

ここから一括見積もりを利用した。

新しい会社
  1. 前の見積もりを元に確認
  2. 3tトラックで家具の量が合わない(空きすぎ)
  3. 2tロングで積載量70%

そう別の会社で、確認して真実を知らされた。

最初の会社は、家に来て見積もりをしたにも関わらず、積載量を多めに評価していた。

引越料金が5000円下がるし、前の会社の信用もなくなっていたのでキャンセルする事にした。

最悪な会社

キャンセルの電話を入れた。

相手:お客様都合なので、ダンボールの返送してください。

私:半ば強引に置いて行った大量のダンボールを!?

相手:お客様都合なので、返送するのは当たり前でしょ!

私:キャンセルは、3日前から発生するしか説明されていません。

相手:ダンボールはうちの商品なので返して下さい。

私:考えます。

相手:考えますじゃなくて、返送しろ
※キレ始める

私:説明も受けていない料金を払うのはおかしいでしょ?

相手:おかしくないだろ!

私:ここまで不快な思いをしたのは初めてだ!
※キレ始める

相手:こっちもこんなに不快で気分が悪くなるのは初めてだ!

私:客相手に態度悪すぎだろ

相手:あんたは、客じゃなくて迷惑な人

私:あなたの名前はなんですか?社長ですか?

相手:返送しろ!

私:話にならないので他の方に代わって下さい。

相手:いいから返送しろ!

私から話にならないから通話を切った。

即折り返し来たが無視

数分ご折り返し

相手:ダンボールはうちの商品なので返送しなければ、法的処置をとる
※キレながら言ってきてガチャ切り

こんな方と話ができないので消費者センターへ相談する

消費者センターへ相談

初めて消費者センターに相談する事にした。

今後どうするかを一緒に考えてくれた。

情報を整理してみた。

・ダンボール・梱包材・ガムテープの価格はどこにも書いていない
 そもそも無料と言って渡してきたしな、、、

・営業さんが後で読んでくださいと「お客様のお知らせ」を置いて行った
 これ読んでいなかったが「お買い上げか、返送(送料はお客様負担)」と書いてあった。
 しかもグループ会社の名前

営業さんが家を出た瞬間からキャンセルしたら返送料金が発生するシステム

名付けて:ダンボール爆弾

送料だけで7000円ぐらいする嫌がらせが発生 ガタꄬ(ꍘꄱꆯꄱꍘ)ꄬガタ

3個段ボールを使用していたので買取!?

消費者センターの方が、返送先と買取料金を代わりに確認してくれた。

ダンボールLサイズ:1個400円
40枚あるから、16,000円

無料ダンボールが有料になった瞬間である。

3つで1200円ならまだ、、、送料入れるとな、、、

ここから先は消費者センターを通して進めるなら、手紙を書いて引越業社と消費者センターに送って下さいと、、、

これ以上は手間がかかるので、相談はここまでにした。

数日改めて最悪な会社へ電話

キレていた本人かわからないが状況を説明

そして買取については、、、

相手:Lサイズ1個400円のダンボール
相手:10個ワンセットになるので、税込み:4,400円
相手:ガムテープは、1個税込み:220円

私:送料は私の方で払おうとは思っていましたが、価格の記載のない商品で高いです。
私:どうにかならないですか?

相手:では、ダンボール3個とガムテープ1個の1540円はどうでしょう?

私:わかりました。

その後は、相手の銀行口座に振り込み

返送手配中

最悪な会社の関連情報
  1. グループ会社
  2. 引越安心マーク未取得
  3. 家族
  4. 13

ダンボールを代理で返却してくれる引越し会社さんもあるみたいです。

カテゴリー
システム開発技術

【cron】定期実行, 自動化

編集

crontab -e

一覧

crontab -l

cronの実行結果
エラーや出力

cat /var/mail/ユーザー名
カテゴリー
EC-CUBE

【EC-CUBE4】Commandクラス

定期お知らせメールを作成した際に触れたクラスです。
cron→bach→command

コマンドクラスからSwift_Messageでメール送信する

Commandクラス作成

コマンドで作成できます。

bin/console make:command

Commandクラスでメール送信テスト

https://github.com/EC-CUBE/ec-cube/issues/2116
githubから拝借させていただきました。

<?php
/* This file is part of EC-CUBE
* Copyright(c) LOCKON CO.,LTD. All Rights Reserved.
* http://www.lockon.co.jp/
* For the full copyright and license information, please view the LICENSE file that was distributed with this source code.
*/ 
namespace Eccube\Command;
 
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
 
class MailCommand extends Command
{
    protected static $defaultName = 'eccube:mail';

    /**
     * @var SymfonyStyle 
     */
     protected $io;

    public function __construct(\Swift_Mailer $mailer) { 
        parent::__construct();
        $this->mailer = $mailer;
    }

    protected function configure() {
        $this->setDescription('メールのテスト'); 
    }

    protected function initialize(InputInterface $input, OutputInterface $output) {
        $this->io = new SymfonyStyle($input, $output); 
    }

    protected function execute(InputInterface $input, OutputInterface $output) {
        $message = (new \Swift_Message())
            ->setSubject('メール送信チェック')
            ->setFrom('test01@example.com')
            ->setTo('test02@example.com')
            ->setBcc('test03@example.com')
            ->setReplyTo('test04@example.com')
            ->setReturnPath('test05@example.com');
        $this->mailer->send($message);
        $this->io->success('メール送信テスト完了.'); 
   }
 }

コマンド名になります。

protected static $defaultName = 'eccube:mail';
bin/console eccube:mail

テスト用の叩き台です。

コマンドクラスの挙動確認後

サービスクラスを作成しそこで、メール送るリストなどで選別しメールを送り完了