「EC-CUBE Advent Calendar 2021」21日目の投稿です。

 

 Windows上でEC-CUBEを動かして開発するのは中々難しい。

 技術的難易度というより「そもそも本番はLinux(Unix)」だったり「思ったよりパフォーマンスが出ない」ので開発中やリリース時に色々と問題が発生する。

 

 知識がある方は仮想化した環境やリモート環境を使用すればよいのだが、開発者じゃなくて店舗運用する人が触ったりするのがEC-CUBEだ。

 だからこそ、Windowsで「最低限触れる」の敷居は低い方が良いだろう。

 ということでWindows環境で最新のEC-CUBE4.1をXAMPPできるだけ快適に動かしてみる。

 

 XAMPP自体が久しぶりなので、XAMPP含め間違いありましたら指摘お願いします。

 

インストールが遅い

 

 データベースにデータをINSERTする際にタイムアウトするケース。

 店舗運用者の方がここで躓くケースは多い。

 とはいえ、1回限りなので、PHPのタイムアウトを伸ばすことでデータベース生成を乗り切って欲しい。

(php.iniのmax_execution_timeを延ばすなどで対応できますので、詳しくは検索してみてください。)

 

 XAMPPならコントロールパネルのApacheの行のConfigからphp.iniをサクッと起動できます。

 

 もしくはPCの性能を上げる(結構、古いノートPCとかのケースがあるんですよね)。

 

Microsoft Defenderのチェックから除外

 

 Windows標準のウィルス対策ソフトウェア。

 細かいファイルを生成するcacheなども頑張ってチェックしてくれる。ありがたいことだが、PCのスペックによってはこれが地味に痛いことがある。

 ウィルス対策ソフトをオフにするのは乱暴なのでEC-CUBEをインストールしたフォルダーを開発中はチェックから除外するというのでどうでしょう?(自己責任でお願いします)

 Windowsの設定画面の「更新とセキュリティ」から、

 「ウィルスと驚異の防止」

 

 「設定の管理」から

 「除外の追加」で特定のフォルダー以下を除外することができます。

 何度も言いますがセキュリティのリスクがあるので自己責任&開発中のみでお願いします。

 

 

 

 

 

TwigキャッシュOFF(イマ一つ)

 

 EC-CUBE4(というかベースのsymfony )がWindowsで遅いのはキャッシュ周りが遅いということで、キャッシュ周りも確認してみた。

 2回目のアクセスが逆に遅くなることが推測されるのと、あんまり早くなった気がしないが、環境次第ということもあるので一応残しておく。

 

 Twigのキャッシュはprod設定ならvar\cache\prod\twigに生成される。

 これをオフにするにはconfig\eccube\packages\prod以下にtwig.yamlを配置してあげればOK。

 

twig:
    cache: false

 

 cacheファイルを削除して再度ページをリロードするとtwigフォルダーが生成されていないことがわかるだろう。

 

最後に

 

 EC-CUBEの開発環境にという場合は、やはりDockerなどの使用をおすすめします。

 触ってみたいだけなら、レンタルサーバーのいくつかにある簡単インストール機能でインストールして触るという手段もあります。


 書いている今、イベントは現在進行中ですが、鉄は熱いうちに・・・ということで感想を書き連ねていこう。

 EC-CUBE DAYはEC-CUBEの大型イベントだが、新機能や新製品の発表というより、EC-CUBEを主導する株式会社EC-CUBEが目指す方向性や、顧客と開発者の声が聞ける大きなイベントというニュアンスで捉えている。

 スニークピーク的に今後の開発予定や実装予定の機能をチラ見せしてくれることはあるが、どちらかというと現在のEC-CUBEにフォーカスした情報が多かった。

 

 私の印象に残った話題は以下。

 

DX

 

 DXと書くと、今話題のキラキラワードに聞こえるかもしれないが、EC-CUBEは自由なカスタマイズが可能というのが大きな武器であり、DX的なテーマはずっと語られてきたし、顧客・開発者ともに意識してきたと思う。

 よりDXに重きを置けるようにEC-CUBEは環境を整えていきますという形で開発者のDXと店舗運用者・利用者のDX、2つのDXで2DXという言い方をされていました。

 気になる方はYouTubeで視聴可能になった金さんの基調講演を見るとよりわかりやすいと思います。

 先にも書いたが、EC-CUBEはカスタマイズしてなんぼ、顧客と開発者の関係が大事。だがそれが難しい「顧客は販売に詳しいがシステムには詳しくなく、開発はシステムに詳しいが販売については詳しくない」という関係性をどうやって繋ぎ合わせるかの繋ぎ目でトラブルが発生することが多い。

 

 イベントで主眼にしていたのは、以下に早く価値を届けることができるかという部分だと思うが、それ以外にも色々と難しい。

 

 システム開発に強みがある会社、デザインやSEOに優れた会社、企画・マーケティングが得意な会社、セキュリティ面で万全な会社・・・全てを備えたデベロッパーに依頼できれば最高だけど、そんな会社はなかなか無い・・・という部分のハブとしてコミュニティの強化を目指しているのかな。

 

セキュリティ

 

 セキュリティについての対策強化は近年見られるEC-CUBEの大きな注力ポイント。

 「広く使われる=狙われる」ということで、普及してきたEC-CUBEが話題になることもチョイチョイありましたが、素早いパッチ対応やチェックツールなど対策強化でEC-CUBEはより堅牢なフレームワークになりつつあります。

 セキュリティの問題は日進月歩、セキュリティホールが0という平和な世界は無いのですが、EC-CUBEは十分なリソースをかけて、素早い対応ができていると感じました。まぁ、色々ありましたしね。

 

 とはいえ、EC-CUBE側が素早いパッチ提供を行っても、自身のサイトに適用しなければ意味がないので、自由なカスタマイズ性と自由に対する責任は運用する側が意識しなければならないポイントですね。

 なかなか難しい面があるのは承知のうえで、セキュリティパッチの適用はEC-CUBEの管理ページ上からボタン1つで出来たら良いなぁ。

 

コミュニティ+開かれた窓口

 

 日本語で質問できる活発なコミュニティは昔から強みの1つでしたが、今回のイベントでは盛んに本体への参画をはじめ、セキュリティ認定などのアクションを求める声がありました。

 意欲さえあれば、コアな部分に参加できるというのは、非常にチャンスだと思う。

 

 この辺は、窓口がどことかちゃんと聞いていなかったので、後から情報が出ると信じて、出たらまとめます。

 

4系と2系

 

 2系どうなるの? という問題に関しても、co.jpなどでも積極的にサポートしてくれるようなのでうまく選び分けできそう。

 個人的な感想ですが、システム的なハードルが低く軽量な2系は大規模改修や継続的な機能追加には向かないがシステムに詳しくない方でも利用でき、4系はWebフレームワークを骨子とし、CD/CIなど最新の開発フローに適したシステムに強い開発者向けのフレームワークだと思っています。

 どちらにも魅力があったので、今回のco.jpの2系も4系もサポートという部分などは嬉しい情報。

 

co.jp

 

 クラウド版EC-CUBEなco.jp。

 

 これから発展予定という感じで、エンジニア視点で見ると、一番わくわくしました。

 裏返せば、発展=現状足りない部分もあるということなんですが、力の入れようは伝わってきました。

 

 co.jpは公開当初に申し込んで申し込み過多で使用できず、そのまま触らずに来たので、そろそろちゃんと理解しておかないとなぁ。

 

信頼関係

 

 今回、EC-CUBEで作られたサイトを運用するオーナーさんと開発パートナーによるセッションが複数ありました。

 どれも色々な形で信頼関係を築いていることが感じられるセッションでした。

 信頼関係って難しいですよね。

 同じ会話でも信頼関係の有無で影響が異なることも多く、その辺も視聴する方のためになるセッションだったのかなぁと思います。

 

 こういう事例系は実際の実際に役立つテクニックなどが散りばめられており、ECサイト構築ツールであるEC-CUBEならではの面白いプログラムでした。

 

お昼休みのセッション!!

 

 お昼休みということで、座談会的なテーマが多かったようですが、これが聞きたかったw でもお昼を食べずに聞くほど食の欲求に強い人間ではなく、ちょっとだけしか聞けませんでした。

 非常に面白かったので、お昼休み後に軽くやってほしかった。

 

 追伸:参加者はあとからアーカイブを見ることができるらしい。やったね。

 

エヴァンジェリスト?

 

 はい、今年ほとんど活動できていません・・・ごめんなさい。

 EC-CUBE系YouTuber(正確にはUdemyですが)なんて計画も立てていたのですが、動画作るの本当に大変&収益化困難で「どうしたもんかなぁ」と手が止まっていました。

 

 とりあえず、EC-CUBEの今を伝えるぐらいの軽い気持ちで、止まっていたブログ再開も含めてツラツラ活動しよう。

 

 


 タイトルの通りですが「Visual Studio:GitとGitHubでコードを管理する」コースを公開しました。

 Visual Studioから使用できるGitについては、Gitを知っていれば使えるようで、分かりづらいメニューがあったりします。

 

 Visual Studioのインストール時にGit for Windowsがオプションでインストールできるのですが、Git for Windows無しでもVisual StudioからはGitが利用できてしまいます。

 不思議???

 

 まぁVisual Studioのインストール場所に専用のGitがインストールされているというのがタネなのですが、分かりづらい。

 

 そんな感じで、色々学習ポイントがあるVisual StudioからGitを使用する方法をLinkedInラーニングでぜひ学習してみてください!!


 今年もMicrosoft MVPアワードをいただきました。

 カテゴリーは引き続きDeveloper Technologiesです。

 

 MVPアワード受賞は自分にとっては1つの昨年を振り返る機会なのですが、だいぶアウトプットの形が変わってきました。

 一番大きな違いは文章から動画への転換です。

 

 計画では教室などで行う対面での講師スキルアップを行う予定でしたが、ビデオチャット越しにやり取りする形式が主になりました。

 

 SchooやLinkedInで動画を公開できたことも良い経験になりました。

 結果論ですが、このご時世に対応するためのスキルが養えたと思います。

 

 これから先、どうなっていくか不透明な世の中ですが、変化を恐れない1年を過ごしていこうと思います。

 


C#に関する10のTipsを紹介する動画です。

サクッと見れるので、ぜひ一見(一読の動画的表現?)ください。

 

https://www.linkedin.com/learning/ten-tips-for-the-c-sharp-developer-14043600


 .NETラボ 勉強会 2021年6月勉強会でマインクラフトでプログラミングを行う方法についてお話いたしました。

 半分以上マインクラフトのゲーム画面を表示していたので、自分にとっても新鮮なセッションになりました。

 

Minecraftでプログラミングを学べるって本当? from Makoto Nishimura

 3月はPower Automate Desktop単体のお話をしましたが、今回はクラウド上のPower Automateからフローを呼び出す方法についてお話させていただきました。

 

 .NETラボ5月度勉強会

 

 Power Automateから呼び出すことで、手動実行しかできなかったPower Automate Desktopのフローを定期実行または、その他トリガー(メールを受け取る、Teamsでメンションが来たなど)を引き金とした実行が可能になります。

 Power Automateのトリガーもフローで、Power Automate Desktopの方の処理もフローと呼ぶのは少し紛らわしいですよね。

 

Power Automateを使ってみた from Makoto Nishimura

 2021年3月度の.NETラボ勉強会でPower Automate Desktopについてお話しました。

 

.NETラボ 勉強会 2021年3月

 

 ちなみに.NETラボはコロナ禍の2020年初めから、いち早くオンラインでの開催を行い、ほぼ毎月開催している素晴らしい勉強会です。

 スタッフの皆様に感謝!!

 

 その時に使用したスライドが以下です。

Power Automate Desktop入門 from Makoto Nishimura
 
 時間が無くて話しきれなかった部分もありますので、主にデモ周りについてブログに補足しておきます。
 

使用したPower Automate Desktopのバージョン

 
 デモのサンプルはバージョン2.6.00158.21069で動作確認済みです。
 
 

フローはコピペできる

 
 フローの編集画面で、フローを選択してコピーすると、そのフローを文字のコードとしてコピーできます。
 そのままPower Automate Desktopのフロー編集画面に張り付けるとフローとして追加することができます。
 
 例えば「3秒待つ」というフローは以下のコードになります。
 
WAIT 3 
 
 このコードを張り付けると以下のようにフローが追加されます。
 デモ解説で掲載したコードはこのように使用してください。
 

デモ00:パワーポイントを起動してスライドを開始する

 
 デモという形ではありませんが、初めにパワポをPower Automate Desktopのフローで起動してセッションを始めました・・・始める予定でした。
 実際は、最後のF5キーの入力が上手くいかず、手動で開始することになりました。
 
 その際に作成したフローが以下。
 
 
・アプリケーションの実行
・Wait(2秒)
・キーの送信(F5)
 
 ノートPCの性能の問題でアプリケーションの起動に2秒以上かかったのが原因でF5キーの送信が早すぎたのだ予想。
 フローのコードは以下。
 
System.RunApplication ApplicationPath: $'''C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\POWERPNT.EXE''' CommandLineArguments: $'''/C \"C:\\Users\\macni\\Desktop\\202103251826_Power Automate Desktop入門.pptx\"''' WindowStyle: System.ProcessWindowStyle.Normal ProcessId=> AppProcessId
WAIT 2 
MouseAndKeyboard.SendKeys TextToSend: $'''{F5}''' DelayBetweenKeystrokes: 10 SendTextAsHardwareKeys: True
 
 1行目はパワーポイントを/Cのオプション付きで起動しています。/Cはファイルを指定してパワーポイントを起動するオプションです。
 パワーポイントのパスや、実行するパワポのファイルパスは書き換えて使用してください、
 
 3行目はF5キーを送信しています。F5キーは特殊なキーなのでフローを作成する際には「マウスとキーボード > キーの送信」の設定で「特殊キーの挿入 > ファンクションキー」から選択してください、
 

DEMO : 03 変数を用意してプラグラミングっぽく扱う

 
 
 
 変数を作成して、foreachでリストを処理したり、テキストに書き込んだりします。
 
・変数の設定
・新しいリストの作成
・項目をリストに追加
・項目をリストに追加
・For each
・テキストをファイルに書き込みます
・For each(End)
 
  ファイルの書き込みがサクッとできるのは良いですね。
 
 コードは以下です。6行目のファイルの書き込み先は適宜書き換えてください。
SET StringValue TO $'''サンプル'''
Variables.CreateNewList List=> ListValue
Variables.AddItemToList Item: StringValue List: ListValue NewList=> ListValue
Variables.AddItemToList Item: $'''テスト''' List: ListValue NewList=> ListValue
LOOP FOREACH CurrentItem IN ListValue
    File.WriteText File: $'''C:\\Users\\macni\\Documents\\hoge-%CurrentItem%.txt''' TextToWrite: CurrentItem AppendNewLine: True IfFileExists: File.IfFileExists.Append Encoding: File.FileEncoding.Unicode
END
 5行目のLOOP FOREACHで取得したリストの要素を、6行目のファイル名で利用しています。

 このフローを実行するとhoge-サンプル.txtとhoge-テスト.txtというファイルがドキュメントフォルダーに作成されます。
 

DEMO04 : エラー処理

 
 開発する際にエラーの処理方法をまず把握するのが大事、ということでエラー処理について簡単なサンプルを作成しました。
 「エラーの補足」「エラー情報のファイル書き込み」「エラーをポップアップメッセージで表示」この辺の処理が試せるサンプルです。
 
 フローは以下の画像の通り。
 
 
 エラーは4行目で、1行1列から始まるExcelの存在しない0行0列に書き込みを行い、発生させています。
 
 3行目の「ブロック エラー発生時」はオプションでエラー発生時に「フロー実行を続行する」を指定しています。ブロック以降でエラー内容をファイルに書き込んだり、メッセージを表示するために処理を続行します。
 
 
 ちなみにブレークポイントを使って処理を途中で停止、変数の中身を確認することもできます。なかなか多機能。
 
 コードは以下。
 
# 操作できない行を操作してエラーを出す
Excel.Launch Visible: True LoadAddInsAndMacros: False Instance=> ExcelInstance
BLOCK sample
ON BLOCK ERROR
    NEXT ACTION
END
    Excel.WriteCell Instance: ExcelInstance Value: $'''throw error''' Column: 0 Row: 0
    ERROR => LastError
END
File.WriteText File: $'''C:\\Users\\macni\\Documents\\PowerAutomateDesktopErrorSample.txt''' TextToWrite: LastError AppendNewLine: True IfFileExists: File.IfFileExists.Append Encoding: File.FileEncoding.Unicode
Display.ShowMessage Title: $'''エラー発生''' Message: LastError Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed
 

DEMO05 : Excelを操作

 
 業務ということでExcelファイルを操作してみました。
 
 
 Excelを起動し新規ワークシートに値を書き込み、別のExcelにその値をコピーするというサンプルです。
 フローを見てもらえれば処理は理解できると思います。
 「Excelワークシートから読み取り」でデータを変数に読み取る際には開始行列、終了行列を指定する必要がありますが、書き込みは開始行列だけでOKです。
 
Excel.Launch Visible: True LoadAddInsAndMacros: False Instance=> ExcelInstance1
SET i TO 0
LOOP WHILE (i) < (6)
    Excel.WriteCell Instance: ExcelInstance1 Value: i Column: 1 Row: i + 1
    Variables.IncreaseVariable Value: i IncrementValue: 1 IncreasedValue=> i
END
SET i TO 0
Excel.Launch Visible: True LoadAddInsAndMacros: False Instance=> ExcelInstance2
Excel.ReadCells Instance: ExcelInstance1 StartColumn: 1 StartRow: 1 EndColumn: 1 EndRow: 10 ReadAsText: False FirstLineIsHeader: False RangeValue=> ExcelData
Excel.WriteCell Instance: ExcelInstance2 Value: ExcelData Column: 2 Row: 1
 
DEMO06 : サブフローの実行
 
 Power Automate Desktopではメインのフロー以外にサブフローを作成してメインフローから呼び出すことができます。
 長いフローをサブフローに分けておけば可読性が良くなります。
 
 サブフローを呼び出すコードは以下。
 
CALL Subflow_1
 

次はPower Automateと連携させたい

 
 今回はそこまで解説できなかった&Power Automateのトライアルが1か月(延長でプラス1ヵ月)しかないので、別の機会を貰って.NETラボ勉強会で「Power AutomateからPower Automate Desktopのフローを呼び出してみた」というお話をしたいと思います。