ブログ内検索

プログラミング教材開発
大阪府高槻市原地区で肥料教室を開いています
検索キーワード:「読み込み」
 

SOY CMSとSOY ShopでHTMLモジュールの見直しを行いました

/** Geminiが自動生成した概要 **/
SOY CMSとSOY ShopでHTMLモジュールの仕様を見直し、PHPファイルでHTMLモジュールを呼び出し可能に。HTMLモジュールの出し分けや複数出力、処理後のHTML出力などが可能になり、柔軟性が向上。詳細は公式サイト(saitodev.co/soycms/)で確認ください。

 

SOY CMSで静的テンプレートプラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY CMSの静的テンプレートプラグインは、HTMLファイルから直接テンプレートを読み込むことで、同じデザインの複数ページ管理を簡素化します。従来、URL構造の違い(例:/soycms/soycms/tutorial/1 と /soycms/soyshop/tutorial/1)により、同じデザインでも別ページとして管理が必要でした。このプラグインは静的テンプレートを利用することでこの問題を解決し、管理の手間を削減します。SOY Shopでは標準機能ですが、SOY CMSではプラグインとして提供されます。ダウンロードはsaitodev.co/soycms/ から可能です。

 

SOY CMSで多言語ラベルプラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY CMSで英語サイトを同じURLで運営したい方向けに、多言語ラベルプラグインを作成しました。 このプラグインにより、ラベルごとに日本語と英語の両方の表記を管理できます。 ただし、同一URLでの多言語サイト運営には、PHPモジュールや画像パス変換プラグインなど、追加の対応が必要です。 これらの対応が必要な方は、フォーラムからお問い合わせください。 プラグインを含むパッケージは、サイトからダウンロードできます。

 

【SEO対策】Bootstrapを利用しつつ、Core Web Vitalsのスコアを改善する

/** Geminiが自動生成した概要 **/
この記事は、Bootstrapを用いてWebサイトのCore Web Vitalsスコアを向上させる方法を解説しています。具体的には、BootstrapのボタンコンポーネントのCSSのみを抽出し、ページHTMLにインライン挿入する方法を紹介しています。 手順としては、Bootstrapのソースファイルから必要なSCSSファイルをサイトディレクトリに配置し、SOY CMS側でSCSSコンパイルの設定を行います。これにより、ボタン用のCSSがページに直接記述され、外部ファイルの読み込みが不要になります。 さらに、生成されたCSSを圧縮してインライン化することで、ページ表示速度の向上を目指します。ただし、毎回SCSSをコンパイルするのは非効率なので、CSSやページ全体のキャッシュ化が推奨されています。

 

SOY CMSでSCSSコンパイラを実装しました

/** Geminiが自動生成した概要 **/
SOY CMSにSCSSコンパイラを実装する方法を解説した記事です。scssphpを用い、ページ出力時にSCSSファイルをコンパイルして表示するモジュールを作成します。具体的な手順としては、scssファイルを配置し、モジュールにコンパイル処理を記述します。記事ではサンプルコードも紹介されており、ダウンロード可能なパッケージも提供されています。@importの記述に誤りがなくstyle.cssが空の場合、pscssに実行権限を与える必要がある場合があります。

 

SOY CMSでユーザー補助プラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY CMS用のユーザー補助プラグインが開発されました。このプラグインは、画像のalt属性が空の場合に自動でファイル名を挿入することで、WebアクセシビリティとSEOを向上させます。PageSpeed Insightsで新たに導入されたユーザー補助項目に対応し、既存記事の修正や新規記事作成時の負担を軽減します。プラグインはサイト管理者の負担を軽減し、ウェブサイトのアクセシビリティ向上に貢献します。ダウンロードは[https://saitodev.co/soycms/](https://saitodev.co/soycms/)から可能です。

 

SOY CMSでプラグインの状態チェックを最適化して表示速度を改善

/** Geminiが自動生成した概要 **/
SOY CMSの表示速度改善についての記事です。 今回はプラグインの有効・無効の判定処理を最適化しました。従来は全プラグインの状態を都度ファイルシステムから読み込んでいましたが、キャッシュ化して参照するように変更。これにより、ファイルシステムへのアクセス回数を減らし、不要なプラグインのクラスファイル読み込みを削減することで表示速度を向上させています。 同様の速度改善は、設定情報のデータベース参照回数を減らしたSOY Shopでも行われています。

 

SOY CMSのカスタムフィールドアドバンスドの見直しで表示速度の改善

/** Geminiが自動生成した概要 **/
SOY CMSのカスタムフィールドアドバンスドとサムネイルプラグインの表示速度改善に関する記事の要約です。 記事では、多数の記事を表示する際に発生する表示速度の低下について、その原因と解決策が解説されています。 主な原因は、記事ごとにカスタムフィールドの値を取得する際に、データベースへのアクセスが繰り返されるためでした。 解決策として、記事に紐づくカスタムフィールドの値を全記事分一度に取得し、必要な値のみに絞り込むことで、データベースアクセスを削減しました。 この改善により、特に記事数が50件や100件といった大量に表示する場合に、表示速度の向上が期待できます。

 

改めてSPIについてを知る3

/** Geminiが自動生成した概要 **/
SPI通信について、マスタースレーブ構成、データ送受信の流れ、シフトレジスタによるデータの受け渡しなど、具体的な例を挙げながら解説しています。\ 特に、8ビットデータ転送を図解で示し、LSB、MSB、MOSI、MISOといった用語を用いながら、マスターとスレーブ間におけるデータの移動を詳細に説明しています。\ 最後に、Raspberry PiとAD変換器を用いたSPI通信のコード例を紹介し、次回の記事ではシフトレジスタの仕組みやSSの役割について解説することを予告しています。

 

BBC Micro:bitでpHメーターから得られるアナログ値を読み込んでみた

/** Geminiが自動生成した概要 **/
このブログ記事は、BBC Micro:bitの内蔵AD変換機能を用いてpHメーターのアナログ値を読み取る実験について解説しています。筆者は、専用のAD変換器が届く前に、Micro:bitのP0/P1ピンがアナログ値の読み込みに対応することを発見し、これを活用。pHメーターをMicro:bitに接続し、MakeCodeでアナログ値をディスプレイに表示するプログラムを作成しました。 実験では、水道水で748、重曹水で916のアナログ値を取得。重曹水がアルカリ性であることから、測定値の傾向が妥当であることを確認し、アナログ値の読み取りに成功しました。今後はpHメーター出力値とMicro:bitのAD変換の詳細調査が課題としつつも、pH値に応じた自動制御(例:サーボモータでの溶液調整)への応用可能性に大きな期待を寄せています。

 

SOY CMS / SOY ShopでライブラリをCDN経由にする設定を追加しました

/** Geminiが自動生成した概要 **/
SOY CMS/Shopの管理画面で利用するjQueryやBootstrapをCDN経由で読み込む設定が追加されました。これにより、管理画面で読み込むファイル数を減らし、サーバー負荷を軽減します。設定方法は、`/CMSインストールディレクトリ/common/config/user.config.php`を作成し、`define("SOYCMS_READ_LIBRARY_VIA_CDN", true);`を有効にするだけです。リンク色の変更など、一部表示に影響が出る可能性がありますが、順次修正予定です。最新のパッケージはサイト(saitodev.co/soycms/)からダウンロードできます。

 

SOY CMSのサイトマッププラグインでカノニカルURL挿入プラグインの設定を加味するようにしてみた

/** Geminiが自動生成した概要 **/
SOY CMSのサイトマップがSearch Consoleで重複URLとして除外される問題が発生。原因は、Googleがクロール時にカノニカルURL挿入プラグイン適用後のURLを正規URLとして認識していたため。サイトマップはプラグイン適用前のURLを出力していたため、両者に差異が生じ、重複と判断された。 この問題を解決するため、サイトマッププラグインがカノニカルURL挿入プラグインの設定を反映するように改修。修正版はサイトオーナー向けパッケージ(https://saitodev.co/soycms/)で提供。SOY Shopにも同様の対応済み。

 

php-webdriverでcontent-visibility:auto;を利用しているページのリンクをクリックする

/** Geminiが自動生成した概要 **/
php-webdriverで`content-visibility:auto;`を使用したサイトのリンクをクリックする際、遅延読み込みにより要素が見つからない問題が発生する。`getLocationOnScreenOnceScrolledIntoView()`だけでは不十分で、一度スクロール後にページトップに戻り、再度徐々にスクロールすることで要素を確実に表示させクリックを成功させる方法を紹介。これはページ表示速度の高速化と遅延読み込みによる影響への対策。また、SeleniumによるアクセスをGoogle Analyticsから除外する方法についても言及し、誤った計測を防ぐための設定についても触れている。さらに、関連するelement click interceptedエラーへの対処法の記事へのリンクも提供。

 

SOY CMSで外部CSSファイルを自動でインライン化する

/** Geminiが自動生成した概要 **/
SOY CMSでWebサイトの高速化のため、外部CSSを自動インライン化・圧縮する方法を解説。`cms:module`でのCSS直接記述による修正の課題を解決すべく、`link`タグを介し、PHPモジュールが外部CSSを読み込み・圧縮した上で`<style>`タグとしてインライン出力する手法を提案しています。 これによりSOY CMS経由では圧縮・インライン化されたCSSが出力され、ブラウザとサーバー間の転送量削減とSEO(Core Web Vitals)に貢献。外部ファイルでの管理によりCSS修正が容易になり、ページごとのCSS制御も可能となる点が大きなメリットです。

 

【SEO対策】Google Analyticsのスクリプトをページ読み込み直後にする

/** Geminiが自動生成した概要 **/
HTMLScriptElement は `<script>` タグを制御するインターフェース。`src` 属性で外部スクリプトを読み込み、`async` 属性を設定すると解析を妨げずに非同期でスクリプトを実行、`defer` 属性はHTML解析完了後に実行、`type` 属性でスクリプト言語を指定。`text` 属性に直接コードを記述も可能。`onload` イベントで読み込み完了を検知、`onerror` でエラー処理。`crossorigin` 属性はCORSリクエストを制御。`integrity` 属性はSubresource Integrity を使用し、読み込んだスクリプトの整合性を検証。`referrerpolicy` はリファラーヘッダーを制御。`nomodule` はES Modulesをサポートしないブラウザでスクリプトを実行。

 

SOY CMSのCumulative Layout Shiftプラグインにpicture要素設定を追加しました

/** Geminiが自動生成した概要 **/
SOY CMSのCore Web Vitals改善用プラグイン「Cumulative Layout Shift」にpicture要素設定が追加されました。 picture要素はレスポンシブ画像を実現するHTMLタグで、画面幅に応じて最適な画像を出力します。プラグインでは、imgタグにsize属性を自動挿入するか、pictureタグで囲うかを選択できます。ただし、既にHTMLテンプレートでpictureタグを使用している場合は正常に動作しないため注意が必要です。この機能はsaitodev.co/soycms/で提供されるパッケージに含まれています。画像のwidthが小さい場合はsize属性が自動挿入されます。

 

PHPの関数の登録

/** Geminiが自動生成した概要 **/
PHPの関数登録について`get_defined_functions`関数を用いて調査。ユーザー定義関数は'user'配列に、ビルトイン関数は'internal'配列に格納される。関数の定義箇所に関わらず、実行前に`get_defined_functions`を実行すると、定義済みの全関数が取得できる。これはPHPがマルチパス方式を採用し、実行前にファイル全体を読み込んで関数登録を完了させているためと考えられる。

 

【SEO対策】Core Web Vitals

/** Geminiが自動生成した概要 **/
Google Analyticsのスクリプトをページ読み込み直後に移動することで、Core Web Vitals、特にFID(First Input Delay)を改善する方法を解説しています。通常、Google Analyticsのスクリプトは</body>直前に配置されますが、これだとスクリプトのダウンロードと実行が完了するまでブラウザが他の操作を受け付けず、FIDが悪化します。記事では、async属性を追加し<head>内に移動することで、スクリプトを非同期で読み込み、ブラウザのレンダリングを妨げないようにする方法を紹介。async属性はIEでは機能しないため、IE用に条件分岐で対応する必要性も説明しています。さらに、Google Tag Managerを使用している場合は、設定変更だけで対応可能であることも解説しています。これらの修正により、FIDが大幅に改善され、ユーザーエクスペリエンスの向上が期待できます。

 

SOY CMS / Shopで別サイトのモジュールを読み込む

/** Geminiが自動生成した概要 **/
SOY CMS/Shopで、別サイトのHTMLモジュールを読み込む新機能が追加されました。サイトIDをプレフィックスとして`{siteId}.moduleName`のように指定することで、HTMLのみで構成されたモジュールを別サイトから呼び出せます。例えば、`{otherSite}.html.sample`と記述すれば、siteIdが"otherSite"のサイトにある"html.sample"モジュールが表示されます。ただし、SOY CMSとSOY Shop間でのモジュールの相互利用は不可で、データベースを参照するモジュールも使用できません。この機能は、最新版のSOY CMS/Shopパッケージで利用可能です。

 

【SEO対策】PHPのOPCacheの更新チェックの頻度を下げる

/** Geminiが自動生成した概要 **/
PHPのOPCacheは、バイトコードをキャッシュしてパフォーマンスを向上させる機能。設定項目`opcache.revalidate_freq`はスクリプトの更新チェック頻度を制御する。デフォルトは2秒だが、CMSサイト等でPHPスクリプトの更新が少ない場合は、この値を大きくすることで更新チェックのオーバーヘッドを減らせる。設定変更は`php.ini`で`opcache.validate_timestamps`を有効化し、`opcache.revalidate_freq`を例えば86400(1日)に変更、サーバー再起動で行う。今回の検証ではパフォーマンスの顕著な差は見られなかった。

 

【SEO対策】content-visibility:auto;でコンテンツの遅延読み込み

/** Geminiが自動生成した概要 **/
Chrome 85からCSSの`content-visibility: auto;`が導入され、画面外コンテンツの遅延読み込みが可能に。表示速度向上とSEO対策が目的です。筆者は自身のサイトで、`.content-lazy-always`で常時遅延、`.content-lazy`でPCとスマホで表示/遅延を切り替える形で実装。記事一覧の下部や詳細ページのフッターなどに適用しました。しかし、元々読み込みが速かったため、具体的な速度改善効果は確認できなかったとのことです。

 

WSL2でSOY CMSの開発環境を作ってみた

/** Geminiが自動生成した概要 **/
さくらのVPSにUbuntu 18.04を導入し、SOY CMSを稼働させる手順を解説した記事の要約です。まず、OSインストール後、Apache、PHP、必要なPHP拡張機能、MySQLをインストールします。次に、MySQLにSOY CMS用のデータベースとユーザーを作成し、ファイアウォールでHTTPとHTTPSを許可します。SOY CMSのzipファイルをダウンロードし、ドキュメントルートに展開後、ブラウザからインストールを実行します。SQLite版ではなくMySQL版を利用するため、データベースの設定が必要です。最後に、サイトURLと管理者情報を入力してインストールを完了します。記事ではコマンド操作の詳細やトラブルシューティングも紹介されています。

 

SOY Shop 2.0.0

/** Geminiが自動生成した概要 **/
非公式にメンテナンスされているSOY Shop 2.0.0βが公開されました。データベース構造は1系とほぼ変わらず、通常のバージョンアップ手順で適用可能です。主な変更点は、Bootstrapを使ったレスポンシブ対応の管理画面UIと、公開側ページの読み込み速度最適化です。後者は必要なクラスファイルのみを読み込むことでメモリ消費量を削減し、表示速度向上と同時アクセス耐性向上を実現しています。 HTMLキャッシュプラグインも同梱され、キャッシュ機能で更なるメモリ消費削減が可能です。ダウンロードはsaitodev.co/soycms/soyshop/ から。一部プラグインのUIはまだ2系に対応していませんが、順次修正予定です。

 

SOY Shop版HTMLキャッシュプラグインを追加しました

/** Geminiが自動生成した概要 **/
SOY Shop 2にHTMLキャッシュプラグインが追加され、高速化が可能になった。カートウィジェットの問題は非同期通信で解決し、カート内商品数と合計金額をJSONで取得できる。ヤマトリップショップではこの機能とLazyLoadプラグイン、jpegoptimにより、ページ表示速度が3.3秒から1秒以下になり、PageSpeed InsightsのスコアもPCで90を超えた。スマホは90に届かなかったが、Gueztliによる画像最適化で改善が見込まれる。SOY Shop 2正式版は近日公開予定。

 

SOY CMSを介さずにSOY2Mailでメールを送信してみる

/** Geminiが自動生成した概要 **/
SOY CMSを使わずにSOY2Mailでメールを送信する方法を紹介しています。PHPのmail関数より手軽にメール送信できるSOY2Mailを使うため、SOY CMSのsoy2_build.phpを流用し、sendmailを利用する設定でSOY2Mailを初期化します。宛先、送信元、件名、本文を設定後、sendメソッドで送信します。ヘッダーやエンコードの設定は自動で行われます。この記事は、SOY2HTMLやSOY2DAOをSOY CMS外で使う方法を紹介した記事と関連しています。

 

SOY CMSでLazyLoadプラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY CMSのLazy Loadプラグインは、記事中の画像3枚目以降に`loading="lazy"`属性を付与し、遅延読み込みを実現することでSEO対策とPageSpeed Insightsスコア向上に貢献します。リソース消費を軽減するため、HTMLキャッシュプラグインとの併用が推奨されます。 関連するHTML圧縮の記事では、HTML、CSS、JavaScriptの圧縮によりファイルサイズを削減し、ページの読み込み速度向上によるSEO対策、ユーザーエクスペリエンス向上、サーバー負荷軽減などのメリットが得られると説明されています。gzip圧縮、minifyツール、SOY CMSのHTML圧縮プラグインの利用方法などが紹介されています。

 

【SEO対策】Lazy Load

/** Geminiが自動生成した概要 **/
SEO対策として、画像の遅延読み込み(Lazy Load)はページ表示速度の改善に有効です。ファーストビュー以外の画像は、ページ全体が表示されてから読み込まれます。重い画像や動画を遅延させることで、表示速度が向上します。 実装は、imgタグに`loading="lazy"`属性を追加するだけです。Chrome 75以降で対応しており、他ブラウザではjQueryプラグインが必要ですが、当サイトではjQueryによる速度低下を避けて使用していません。 PC表示では効果が見られませんでしたが、スマホ表示ではファーストビュー外に画像が配置されるため、Lazy Loadの効果が大きいです。 関連記事として、SOY CMSとSOY Shop向けにLazy Loadプラグインが紹介されています。

 

SOY ShopのオーダーカスタムフィールドでjQueryのDatepickerを使ってみる

/** Geminiが自動生成した概要 **/
SOY Shopで配送と店舗受け取りを同時選択できるよう、オーダーカスタムフィールドで対応する方法を紹介。標準機能にはないカレンダーを、jQuery Datepickerを用いて実装する手順を解説。オーダーカスタムフィールドを作成後、カートページテンプレートにjQueryを読み込み、Datepickerを適用するコードを追加。オプション設定で日付範囲も指定可能。複数フィールドへの適用方法や、直接入力を防ぐreadonly属性の追加についても触れている。

 

SOY CMSの静的化プラグインで高速化

/** Geminiが自動生成した概要 **/
SOY CMSの静的化プラグインが改良され、ページ単位での静的化設定、全プラグイン実行後の静的化処理、ページ更新時の静的ファイル一括削除、サイトキャッシュ削除時の静的ファイル削除が可能になった。従来の静的化はフロントコントローラやRewriteモジュールの処理を回避することで高速化を実現していたが、今回の改良でさらに柔軟性と効率性が高まった。HTMLキャッシュプラグインと併用することで、標準ページは静的化、ブログページはHTMLキャッシュと使い分け、サーバー負荷軽減に効果的。改良版はsaitodev.coからダウンロード可能。高速化に加え、SEO対策にも有効。

 

【SEO対策】SNS系のボタンを自作する

/** Geminiが自動生成した概要 **/
PageSpeed Insightsのスコア向上のため、公式SNSボタンを自作のものに置き換えた。公式ボタンはJavaScriptを使用し、ページ速度に悪影響を与えていた。記事詳細ページのTwitterボタンを例に、自作方法を紹介。HTMLでは`<a>`タグでツイートリンクを作成し、記事タイトルとURLを動的に設定。CSSでボタンのスタイルを定義。SOY CMSでは`cms:id="title_plain"`と`cms:id="entry_url"`を用いて記事タイトルとURLを取得し、JavaScriptを使わずにツイートボタンを実装。これにより、ページ読み込み速度が向上し、PageSpeed Insightsのスコアも改善された。

 

【SEO対策】CSSの読み込み方の変更で高速化

/** Geminiが自動生成した概要 **/
CSSの読み込み方を変えることでSEO対策とページ表示速度の高速化を実現する方法を紹介。従来headタグ内に記述していた外部CSSをbody閉じタグ後へ移動することでレンダリングブロックを回避し、表示速度を向上させる。さらに、HTTP/2環境下ではファイル数削減が有効となるため、CSSをHTML内に直接記述する方法も提示。ただし、保守性向上のためにCMSのモジュール機能を活用し、HTML末尾にCSSを挿入する手法を推奨。この際、モジュールファイルの読み込みによる速度低下を防ぐため、最終HTMLのキャッシュ機構を併用することが重要となる。

 

【SEO対策】最終産物のHTMLのキャッシュで高速化

/** Geminiが自動生成した概要 **/
SQLiteを採用するSOY CMSでサイト表示を高速化するため、最終生成HTMLのキャッシュ化機能を導入した。データベースやファイル読み込みを省略することでPageSpeed Insightsのスコアが大幅に向上。この機能はHTMLキャッシュプラグインをインストール後、index.php内のexecute_site()をexecute_site_static_cache()に変更することで有効になる。ただし、カート内容の表示など動的なコンテンツはキャッシュ化できないため、リッチなサイト構成との両立は難しい。高速化とSEO対策には見栄えよりも内容重視の割り切りが必要となる。SOY Shopでも同様のキャッシュプラグインが開発されている。

 

SOY Shopで商品毎パーツモジュール選択読み込みプラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY Shopの商品詳細ページで商品ごとに異なる定型文を表示するプラグインが開発されました。 通常、プラグインで定型文を設定するところを、このプラグインはパーツモジュール内で他のパーツモジュールを呼び出すことで実現しています。商品情報に設定したモジュールIDに対応するパーツモジュールを`shop:module="common.fixed_form_module"`で呼び出すと、商品に応じた定型文が表示されます。HTMLだけでなくPHPのモジュールも使用可能なので、動的な表示にも対応できます。このプラグインを含むパッケージはsaitodev.co/soycms/soyshop/からダウンロード可能です。

 

SOY CMSとSOY ShopでPHP7.4系に対応してみました

/** Geminiが自動生成した概要 **/
SOY CMSとSOY ShopがPHP7.4に対応しました。PHP7.4は7.3より高速ですが、マジックメソッド__callの振る舞いの変更が影響し、SOY CMSのsoy:id記法の一部でエラーが発生していました。具体的には、addForm()等のメソッドが__callで抽象化されていたため、PHP7.4ではHTTP 503エラーが発生していました。この問題を解消するため、addForm()等を直接呼び出せるよう修正し、抽象的なコードを減らすことで高速化にも貢献しました。PHP7.4対応版はサイトからダウンロード可能です。今回の修正はPHP5系でも動作します。プラグインの動作確認はまだ完了していないため、エラーが発生した場合は問い合わせフォームから報告をお願いします。

 

Ubuntu19.10でSelenium + php-webdriverが動作しなかった時の対処

/** Geminiが自動生成した概要 **/
Ubuntu 19.10でSelenium + php-webdriverを用いたUIテスト自動化環境構築中に、「拡張機能の読み込みエラー」と「Chrome failed to start: exited abnormally」が発生。chromedriverのパスが意図せず`/usr/local/bin`に存在していたのが原因。`/usr/bin`に移動後、テストは正常に開始された。

 

Ubuntu19.10でGoogle Photoでデジカメの画像のアップロードがエラーになる時の対応

/** Geminiが自動生成した概要 **/
Ubuntu 19.10でGoogleフォトにUSB接続のデジカメ画像をアップロードしようとしたら、「Permission denied」エラーが発生。原因はChromiumブラウザの設定でリムーバブルメディアへのアクセスが許可されていなかったため。UbuntuソフトウェアからChromiumの詳細設定を開き、「リムーバブルストレージデバイスのファイルの読み取り/書き込み」を有効化することで解決。

 

Jenkins + ヘッドレスChromeでテスト自動化の省力化

/** Geminiが自動生成した概要 **/
JenkinsによるSOY CMS/Shopのテスト自動化で、ビルド時間が5時間超となり、Chromeのクラッシュが発生していた。メモリ使用量削減のため、ヘッドレスChromeを導入。php-webdriverのコードにChromeOptionsを追加することで、ヘッドレスChromeでのテスト実行が可能になった。仮想デスクトップ(Xvfb)も不要となり、メモリ使用量が削減され、格安VPSでの高負荷テスト継続に期待が持てる。

 

SOY CMS / Shopのバージョンアップ時にキャッシュの自動削除機能を追加しました

/** Geminiが自動生成した概要 **/
SOY CMS/Shopのバージョンアップ後、キャッシュ削除忘れによる不具合報告が相次いだため、自動削除機能が追加されました。バージョンアップで外部ファイルの読み込み箇所などが変更されると、古いキャッシュが残っているとJavaScriptが実行されないなどの問題が発生します。新機能では、管理画面を開いた際に古いキャッシュを自動で削除します。この機能を含む最新パッケージはsaitodev.co/soycms/からダウンロードできます。

 

SOY Shopで商品毎でJANコードを登録しバーコードを作成してみる

/** Geminiが自動生成した概要 **/
SOY Shopで商品ごとにJANコードを登録・バーコード表示するプラグインが開発されました。管理画面の商品詳細画面にJANコード入力欄が追加され、入力するとバーコード画像が生成されます。生成されたバーコードは市販のバーコードリーダーで読み取り可能であることが確認されています。プラグインはsaitodev.coからダウンロードできます。バーコード生成にはPHP Barcode Generatorが使用されています。現状、SOY Shop標準機能でのこのプラグインの用途は未定ですが、活用アイデアは問い合わせフォームから募集中です。

 

Go言語でGoogle Analyticsのデータをチャットワークに送ってみる

/** Geminiが自動生成した概要 **/
Go言語でGoogle AnalyticsのページビューをChatworkに送信するコードを紹介しています。 Google Analytics APIを用いて前日のページビューと日付を取得し、Chatwork APIで指定のルームに投稿します。 コードでは、認証情報、GAのプロファイルID、ChatworkのルームIDとAPIトークンが必要です。 `Data.Ga.Get`メソッドで前日のページビューを取得し、`Dimensions("ga:date")`で日付も取得します。 取得したデータはChatwork APIのPOSTリクエストで送信されます。 実行にはGoogle API Consoleで取得した認証情報が必要です。 具体的な手順やコードの全体はGitHubリポジトリを参照ください。

 

Go言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる3

/** Geminiが自動生成した概要 **/
Go言語でkintoneとチャットワークを連携し、タスク自動登録アプリを作成する過程の3回目。今回はkintoneから取得したデータをチャットワークにタスク登録する処理を実装。kintoneアプリのラベルフィールド値をタスク名として登録するため、`RegisterTaskOnChatWork`関数を追加。この関数でチャットワークAPIを呼び出し、指定のルームにタスクを登録する。コード実行前にkintoneアプリにテストデータを追加し、実行後チャットワークでタスクが登録されていることを確認。データの絞り込みについては省略。

 

Go言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる2

/** Geminiが自動生成した概要 **/
kintoneアプリで設定した日付にチャットワークへタスクを自動登録するアプリ開発の続き。今回はGo言語でkintone REST APIから取得したJSONデータを扱うための構造体を設計し、マッピングを行った。取得データは「レコード番号」「月」「ラベル」「日」等を含み、これをGoの構造体へ変換することでデータ操作を可能にした。具体的には`Field`構造体でフィールドの型と値を、`Record`構造体でレコード群を表現し、`json.NewDecoder`を用いてJSONをデコードした。これにより、ラベル名等の値をプログラムから参照できるようになった。次回は取得値を用いてチャットワークへのタスク登録を行う。

 

SOY CMSを介さずにSOY2HTMLを使ってみる

/** Geminiが自動生成した概要 **/
SOY CMSを使わずにそのテンプレートエンジンであるSOY2HTMLのみを利用する方法を解説。ルートディレクトリにindex.php、webappディレクトリ下に必要なファイルを設置する構成で、index.phpでSOY2ライブラリを読み込み、SOY2HTMLの設定を行う。HTMLファイル(TopPage.html)と対応するPHPファイル(TopPage.class.php)を作成し、soy:idを使った表示内容の変更例を示している。PHPファイルではWebPageクラスを継承し、コンストラクタでHTMLファイルを読み込み、addLabelでsoy:idに対応する値を設定することで、HTMLのsoy:id部分がPHPで指定した値に置き換わって表示される。

 

kintoneで指定の個所だけ印刷範囲にしてみる

/** Geminiが自動生成した概要 **/
kintoneでカレンダーアプリを印刷する際、標準機能ではカレンダー部分のみを選択できない問題を、jQueryプラグイン「printElement」を用いて解決する方法を紹介。kintoneアプリにカレンダー形式の一覧ページを作成し、printElementとjQueryを読み込むよう設定。カスタマイズ用JavaScriptで印刷ボタンを配置し、クリックイベントにprintElementでカレンダー部分(id="view-list-data-gaia")を指定。これにより、ヘッダー/フッターを除くカレンダー部分のみが印刷範囲となる。kintoneのカスタマイズ性の高さとjQueryプラグインの活用例を示している。

 

Go言語でファイルの読み込み

/** Geminiが自動生成した概要 **/
Go言語で`template/header.txt`ファイルを読み込む方法を説明しています。`os.Open`関数でファイルを開き、エラー処理も実装しています。`defer file.Close()`で確実にファイルを閉じます。`ioutil.ReadAll`関数でファイルの内容をバイトスライス`content`に読み込み、`string(content)`で文字列`html`に変換します。最後に`fmt.Println(html)`でファイルの内容を表示します。 添付画像は`header.txt`の内容("string1")が表示された実行結果を示しています。

 

Go言語でhtmlからの文字の部分的取得

/** Geminiが自動生成した概要 **/
Go言語でWebページから本文を抽出するプログラムの説明です。`https://saitodev.co/article/%E3%83%A4%E3%83%96%E3%82%AC%E3%83%A9%E3%82%B7%E3%81%AE%E5%9F%B7%E5%BF%B5` から、`<div class="post-content">` と `<!-- .post-content -->` で囲まれた本文を抽出します。 `bufio.NewReader` でHTMLを一行ずつ読み込み、`strings.Index` で "post-content" を検索。開始タグを見つけたら `readMode` フラグをtrueにして本文を `content` 変数に蓄積、終了タグを見つけたらループを抜けます。抽出した本文は `test.html` ファイルに保存されます。

 

SOY2HTMLでセキュアなフォームを設置する - HTMLForm編

/** Geminiが自動生成した概要 **/
HTMLFormクラスは、HTMLのフォーム要素を生成するためのコンポーネントです。formタグを生成し、メソッド(デフォルトはPOST)やアクション、ターゲットなどの属性を設定できます。POSTメソッドの場合、CSRF対策としてsoy2_tokenという隠しフィールドを自動的に追加します。アクションが指定されていない場合は、現在のリクエストURIがアクションとして設定されます。また、JavaScriptのonSubmitイベントを設定することも可能です。disabled属性の設定も可能です。

 

SOY2HTMLで処理とデザインを切り分ける

/** Geminiが自動生成した概要 **/
SOY CMS/Shopのモジュール内でSQLを実行するには、SOY2DAOを利用します。データベースへの接続情報はSOYShop_DataSetsクラスで管理されており、`getDataSourceName()`でデータソース名、`getDatabaseUserName()`でユーザー名、`getDatabasePassword()`でパスワードを取得できます。データベースに接続するには、`SOY2DAOFactory::create("データソース名")`を使用します。createメソッドの引数は省略可能で、省略した場合はshopデータベースに接続します。SQLを実行するには、`query()`、`executeQuery()`、`execute()`メソッドを使用します。これらのメソッドは、`SOY2DAO`クラスのインスタンスメソッドとして呼び出します。

 

SOY CMSの開発秘話後編

/** Geminiが自動生成した概要 **/
SOY CMSはデザイナとプログラマの完全分業を目指し、機能はHTMLコメントタグの`<!-- cms:id="..." -->`に集約。これによりCMSを介さずともデザインが崩れず、改修コストを大幅削減。デザイナはPHP/SQLを触れずに済む一方、PHP記述許可モードで複雑な表示も可能に。不要な複雑さを排除し、クリエイティブな活動に注力させる開発理念が込められている。

 

Google Apps ScriptのHTML Serviceで自作した関数の結果を出力してみる

/** Geminiが自動生成した概要 **/
社会人・学生向けプログラミング教室で、Googleスプレッドシートの拡張機能開発をテーマにした勉強会が開催されました。内容はスプレッドシート操作の自動化をGASを用いて行うもので、参加者は「Google Apps Script完全入門」を教材に学習しました。勉強会では、GASの基本的な使い方、HTML Serviceを用いたWebアプリ作成、スプレッドシート操作、API連携、トリガー設定などを実践的に学びました。参加者からはGASの利便性や可能性を実感する声が上がり、業務効率化やデータ分析への応用について関心を示していました。

 

Google Apps ScriptのHTML Serviceを試してみた

/** Geminiが自動生成した概要 **/
Google Apps Script (GAS) のHTML Serviceを利用して、HTMLファイルとGASのコードを連携させる方法を紹介しています。 具体的な手順として、Googleドライブ上にGASプロジェクトを作成し、index.htmlファイルに"Hello, World!"と記述、コード.gsファイルにはdoGet関数でHTMLファイルを読み込むコードを記述します。 その後、ウェブアプリケーションとして公開することで、ブラウザでHTMLの内容が表示されることを確認しています。 さらに、GASを学ぶ上でJavaScriptの知識が重要であることを補足し、関連技術としてNode.js、NW.js、GoogleドキュメントのOCR機能についても言及しています。

 

Node.js、Socket.IOとLet's Encryptでチャットアプリの常時SSL化

/** Geminiが自動生成した概要 **/
記事では、インターネット上のパケットを傍受して中身を確認する方法を解説しています。使用ツールはWiresharkで、無線LANに接続するPCと、傍受対象のスマホを同じネットワークに接続します。スマホと通信するパケットはPCも受信するため、Wiresharkでフィルタリングしてスマホの通信のみを抽出します。HTTP通信の場合は、パスワードなどの重要な情報が平文で送信されていることが確認できます。HTTPS通信の場合は暗号化されているため、傍受しても内容は解読できません。この実験を通して、HTTP通信の危険性とHTTPS通信の重要性を示しています。

 

SOY CMS3.0.1とSOY Shop1.18.1の差分をマージしました

/** Geminiが自動生成した概要 **/
Web開発者がSOY CMS 3.0.1とSOY Shop 1.18.1を自身のリポジトリにマージしたことを報告。今回のアップデートではUIやポイント支払いが改善され機能強化された一方、課題も指摘されています。 筆者は、jQuery仕様変更による既存プラグインの修正や、ネットショップでの消費税計算誤りが公式パッケージで未修正であることに不満を表明。さらに、SOY Mailなど主要SOY AppがPHP7に未対応のため、SOY Shopでの販促に大きな制限があり、現状のパッケージで成果を出すのは困難だと懸念しています。最新版は公式サイトからダウンロード可能です。

 

SOY CMS3.0.0とSOY Shop1.18.0の差分をマージしました

/** Geminiが自動生成した概要 **/
SOY CMS 3.0.0とSOY Shop 1.18.0が公開され、筆者がコードを検証しました。SOY ShopがPHP7に対応し、データベースに変更がない点は評価されるものの、懸念点が複数指摘されています。フォーラムで要望の多かったブログ記事の自動保存や総当たり攻撃対策、標準プラグインの機能追加(検索フォームなど)、SOY Shopの外税計算修正は未実装です。さらに、jQuery読み込み最適化により、既存のjQuery利用プラグインの大半が動作不能になっているため、バージョンアップの際は特にjQuery関連の動作確認を十分に行うよう強く推奨されています。

 

SOY CMS3.0.0βの差分をマージしました

/** Geminiが自動生成した概要 **/
開発元退職後も私がSOY CMS開発を続ける理由は、情熱と責任感にあります。SOY CMSは私の人生の一部であり、ユーザーにとって無くてはならない存在だと認識しています。退職によって開発が滞り、ユーザーに迷惑をかけることは避けたい。オープンソース化という選択肢もありましたが、継続的な開発とサポートを提供するため、個人で開発を引き継ぎました。収益化は二の次で、ユーザーのニーズに応え、SOY CMSを成長させることが最優先です。この決断は私にとって大きな挑戦ですが、SOY CMSとユーザーへの愛着が原動力となっています。

 

PHPでPythonの機械学習のライブラリを利用してみる

/** Geminiが自動生成した概要 **/
PHPでPythonの機械学習ライブラリを利用する方法を検証。サンプルデータを使用してk近傍法によるアイリスの品種判定を実施。Pythonスクリプトで学習と判定を行い、PHPスクリプトでデータを送受信することで、PHPでPythonの機械学習機能を活用できることを確認した。

 

PHPExcelを使ってみた2 ファイルアップロード編

/** Geminiが自動生成した概要 **/
PHPExcelライブラリを用いたExcelファイル読み込み処理にファイルアップロード機能を追加。$_FILESを利用し、アップロードされたExcelファイル(xls/xlsx)を動的に読み込むよう改修。 フォーム経由でファイルを選択・アップロードすると、セル内の値が表示される。主な変更点は、ファイルアップロードをトリガーとする条件分岐の追加、ファイルパスと拡張子の取得方法の変更、HTMLフォームの追加。これにより、任意のExcelファイルの内容を表示できるようになった。

 

PHPExcelを使ってみた

/** Geminiが自動生成した概要 **/
PHPExcelライブラリを使ってExcelファイルからデータ抽出する方法を紹介。Ubuntu 17.04、PHP 7.1.5環境で、php7.1-xml、php7.1-gd、php7.1-zipをインストール後、PHPExcelをダウンロード。サンプルxlsファイルからデータを読み込むPHPコードを掲載し、セル番号と値を出力する例を示している。コードは拡張子による読み込み方法の切り替え、複数シートへの対応、行とセルのイテレータによる値の取得を実装。出力結果の画像も掲載。

 

SOY Shopの商品情報の出力時にカテゴリのリンクを追加しました

/** Geminiが自動生成した概要 **/
SOY Shopの商品情報出力にカテゴリリンクを追加しました。商品一覧と商品詳細ブロック内でカテゴリへのリンクを出力するタグが利用可能になります。商品グループの場合は、親商品名、詳細ページリンク、カテゴリ名とリンクも出力可能です。 また、商品一覧と検索結果ページのデータベース読み込み回数を最適化し、表示速度を向上させました。特に商品数が多いサイトで効果的です。更新版パッケージはsaitodev.co/soycms/soyshop/からダウンロード可能です。追加タグの詳細は同サイトのブロックタグページに記載されています。

 

物理障害のディスクのデータの復旧に挑戦

/** Geminiが自動生成した概要 **/
デジカメの写真を誤って消去した場合の復旧ツールとして、PhotoRecが紹介されている。PhotoRecは、ファイルシステムを無視してデータ自体をスキャンするため、フォーマット後やファイルシステムが破損している場合でも復旧が可能。使い方は、PhotoRecをダウンロードし、対象のドライブを選択、保存先を指定するだけ。ファイルの種類を絞り込むこともでき、復旧率向上に繋がる。JPEGだけでなく、様々なファイル形式に対応しているため、デジカメ以外の機器でも活用できる。操作はコマンドラインベースだが、GUI版のQPhotoRecも用意されている。誤削除に気づいたらすぐに使用することで、上書きされる可能性を減らし、復旧率を高めることができる。

 

ハードディスクが壊れる日は突然やってくる

/** Geminiが自動生成した概要 **/
外付けHDDの読み込み速度低下をきっかけに、ハードディスクの物理障害について調べた体験談。HDDケースに収納した古い1TB HDDの動作が不安定になり、業者に調べてもらった結果、物理障害と判明。論理障害と異なり物理障害はデータ復旧が困難なため、HDDの構造を理解する重要性を説く。記事ではHDDの磁気ディスクと磁気ヘッダの役割、そして物理障害の原因として磁気ヘッダの破損と磁気ディスクの劣化を挙げる。今回のケースは後者の可能性が高く、実際に取り出した画像データが破損していた。この経験から、複数のHDDを用いたバックアップの重要性を改めて強調している。

 

SOY CMS/Shopを利用する際、どのデータベースを利用すれば良いか?

/** Geminiが自動生成した概要 **/
SOY CMS/Shop開発者が最も感銘を受けたネットショップは、1日に約3万件もの注文を処理しながら、サクサクとした動作を維持しているサイトです。この驚異的なパフォーマンスは、MySQLデータベースの綿密なチューニングと、徹底的なキャッシュ戦略によって実現されています。数百台ものサーバーが複雑なシステムを支え、注文処理から配送までがシームレスに連携。サイト運営者の技術力と、顧客満足度を最優先に考えた設計思想に開発者は深く感銘を受け、自らの開発にも活かそうと刺激を受けています。膨大なアクセスと注文を処理しながらも快適なユーザー体験を提供するこのサイトは、ネットショップ開発の理想形として、開発者の心に深く刻まれています。

 

SOY Shopの商品詳細ページで登録されている商品をランダムで表示する

/** Geminiが自動生成した概要 **/
SOY Shopの商品詳細ページで登録商品をランダム表示するPHPモジュールを作成する方法です。まず、管理画面でモジュールID「item.random」のPHPモジュールを作成し、指定のコードを記述します。このコードはSOY2DAOを使い、全商品、または指定カテゴリの商品をランダムに取得し、表示件数を制限するSQLを実行します。商品詳細ページテンプレートに`<!-- shop:module="item.random" -->`と`<!-- block:id="random_item_list" -->`を記述することで、ランダムに選ばれた商品が表示されます。カテゴリを指定するには、`$categoryId`変数にカテゴリIDを代入します。

 

Pythonの内包表記

/** Geminiが自動生成した概要 **/
生物学出身の筆者は数学を学び直す中で、行列プログラマーの練習問題1.4.10に挑戦した。画像は多重リストとして読み込まれ、各要素は色のタプルを持つ。課題は内包表記を用いて、明度120以下のピクセルを複素数に変換し、ガウス平面にプロットすることだった。 初期の試行ではy軸が反転したため、画像の高さを利用してy座標を調整することで解決した。最終的な内包表記は`pts = {(x+(189 - y)*1j) for (y, d) in enumerate(data) for (x, v) in enumerate(d) if v[0] < 121}`となり、正しく画像をガウス平面にプロットできた。

 

DNAの切り貼り

/** Geminiが自動生成した概要 **/
細菌は特定の酵素を用いてDNAを切断・連結し、遺伝子断片を導入してプラスミドを改変できる。有用なプラスミドは細菌間で共有される。DNAはA,T,C,Gの4種の塩基配列で遺伝情報をコードし、特定の配列(コドン)がアミノ酸を指定し、タンパク質合成の設計図となる。塩基配列の読み込み方向は決まっており、DNAの一部のみがタンパク質合成に関与するため、一部の切断は致命的ではない。

 

SOY Shopのマイページでログインの有無でテンプレートを分ける機能を追加しました

/** Geminiが自動生成した概要 **/
SOY Shopのマイページで、ログイン有無によるテンプレート切り替え機能が追加されました。従来はログイン前後で同じテンプレートを使用していましたが、ログイン前は1カラム、ログイン後は2カラムといったレイアウト変更の要望に応えるため、ログイン時に別のテンプレートを読み込む仕組みが実装されました。 具体的には、`mypage.html` というテンプレートを使用している場合、ログイン時は `mypage_no_login.html` と `mypage_no_login.ini` があればそちらが優先的に使用されます。これらのファイルは管理画面からは生成できず、手動でサーバーにアップロードする必要があります。機能の詳細はSOY CMSフォーラムとGitHubリポジトリで公開されています。

 

SOY CMSに総当り攻撃を仕掛けてみる。その4

/** Geminiが自動生成した概要 **/
Go言語で書かれたSOY CMSへの総当り攻撃スクリプトを改良し、CSVファイルからIDとパスワードを読み込むように変更した。これにより、コードの可読性が向上し、辞書を使い回せるようになった。 実行結果から、指定のIDとパスワードでログイン成功を確認。今後の課題として、メモリ効率の改善、対象サイトURLの指定、ログイン成功時の判定処理などが挙げられている。

 

EC CUBEからSOY Shopにデータベースを引っ越す

/** Geminiが自動生成した概要 **/
EC-CUBEの動作遅延に悩むユーザーが増加し、高速なSOY Shopへの移行ニーズが高まっている。そこでEC-CUBEからSOY Shopへのデータ移行プラグインが開発された。このプラグインはEC-CUBEのデータベースから直接データを読み込み、SOY Shop用に変換・挿入する。パスワードはセキュリティ上、ランダムに設定され、ユーザーには再設定を促すメルマガ送信が推奨される。EC-CUBE2系と3系のデータ移行実績があり、フォーラムで配布されている。

 

SOY Shopでログインしているお客様へポイントの使用期限を表示する

/** Geminiが自動生成した概要 **/
SOY Shopでログイン中のお客様にポイント残高と使用期限を表示するモジュール作成方法を紹介。モジュールID「parts.point_limit」を作成し、提供されたPHPコードを記述することで実現。コードは、ログイン状態、ポイントプラグインの有効性を確認後、ユーザー情報を取得し、ポイント残高と使用期限を表示。期限切れや無期限の場合の表示も追加可能。コードにはコメントが添えられており、カスタマイズのヒントも提供。ポイントはログインユーザーのみに表示され、未ログイン時は何も表示されない。より詳細なカスタマイズや機能要望は問い合わせフォームから。

 

GoでGETを使ってHTMLを文字列で取得してみる

/** Geminiが自動生成した概要 **/
Goの`http.Get`関数を用いてHTMLを文字列として取得する方法を解説。ライブラリに頼らず、ピュアな方法で実現。`http.Get`でURLを指定しレスポンスを受け取り、`res.Body`からHTML部分を読み込む。`ioutil.ReadAll`で読み込んだbody(byte型)を文字列に変換するために、`bytes.NewBuffer`でバッファに格納後、`buf.String()`で文字列型に変換する。`defer res.Body.Close()`で処理終了後にレスポンスをクローズ。最後に`fmt.Println`でHTML文字列を出力し、動作を確認。

おすすめの検索キーワード
おすすめの記事

Powered by SOY CMS   ↑トップへ