ブログ内検索

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

SOY CMSで記事の文字列一括置換プラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY CMSで記事の文字列を一括置換できるプラグインが開発されました。 大量の記事の中から特定の誤字などを修正する際に、一記事ずつ修正するのは大変な作業です。このプラグインは、指定した文字列を別の文字列に一括で置換することができます。 例えば、「即効性」という誤字を「速効性」に一括で修正する場合などに役立ちます。 プラグインには、置換前に誤字を含む箇所を確認する機能も備わっています。 このプラグインは、開発元のサイトからダウンロードできます。

 

SOY CMSとSOY ShopでPHP8.2系に対応しています

/** Geminiが自動生成した概要 **/
SOY CMSとSOY Shopは近日リリース予定のPHP8.2に対応します。主な修正点は、文字列中の変数展開における `${var}` の非推奨化と、未定義プロパティへの動的アクセスに関するものです。前者は `"sample_".$hoge` のように文字列を分割、後者はプロパティを事前に定義することで対応できます。これらの修正はPHP7系でも有効です。PHP8.2対応版は公式サイトからダウンロード可能です。PHP7系をご利用の方は、そのままでも動作に問題ありません。

 

SOY Inquiry2.3以降のバージョンにバージョンアップする際の注意点

/** Geminiが自動生成した概要 **/
SOY Inquiry 2.3以降にバージョンアップする際、カスタマイズしたフォームテンプレート(`form.php`と`confirm.php`)の修正が必要です。 具体的には、両ファイルの先頭に`$dummyFormObj = new SOYInquiry_Form();`を追加し、`$column->getColumn();`を`$column->getColumn($dummyFormObj);`に置換します。 これはPHPの厳格化に対応するための変更です。

 

AppImage形式のMinecraft: Pi Edition: Rebornでスキンを変更してみた

/** Geminiが自動生成した概要 **/
この記事は、AppImage形式になったMinecraft: Pi Edition: Rebornでスキンを変更する方法を解説しています。 まず、AppImageファイルを実行する準備として、`chmod`コマンドで実行権限を与え、`fuse`パッケージをインストールします。 スキンの変更は、`~/.minecraft-pi/overrides/images/mob/`ディレクトリに`char.png`という名前でスキンファイルを配置します。 ただし、このままだとスキンが崩れてしまうため、`minecraft_skin_fixer.py`というスクリプトを使って修正します。 最後に、AppImageファイルを`/usr/local/bin`に移動して`mcpi`というコマンド名で実行できるように設定しています。

 

Minecraft: Pi Edition: Rebornでスキンを変更してみた

/** Geminiが自動生成した概要 **/
この記事は、Minecraft: Pi Edition: Rebornでスキンを変更する方法を解説しています。 まず、好みのスキンをダウンロードします。次に、標準のスキンのPNGファイル(char.png)をバックアップし、ダウンロードしたスキンで置き換えます。この際、ファイルパスに注意が必要です。 スキンを変更後、デザイン崩れが発生する場合は、Pythonスクリプト(minecraft_skin_fixer.py)を使用して修正します。スクリプト内のファイルパスを自身の環境に合わせて変更する必要があります。 修正後、Minecraft: Pi Edition: Rebornを再起動すると、スキンが変更されているはずです。

 

SOY CMSとSOY ShopでPHP8.1系に対応しています

/** Geminiが自動生成した概要 **/
SOY CMSとSOY ShopがPHP8.1に対応しました。PHP8.1ではstrlen関数にnullを渡すとエラーになるなど、型の扱いが厳格化されました。そこでSOY CMSも内部のデータ型チェックを強化し対応しました。PHP7系でも動作しますが、不安な方はPHPのバージョンを据え置いてください。今回の修正によりPHP7系でも動作は高速化する可能性があります。 さらに高速化を狙う場合は、OPCacheの更新チェックの頻度を下げる設定が有効です。PHPファイルの更新頻度に合わせて、opcache.revalidate_freqの値を調整することで、無駄なチェックを減らしパフォーマンスを向上できます。

 

Rapberry PiとBBC Micro:bitでUSB経由のシリアル通信を試す

/** Geminiが自動生成した概要 **/
この記事では、Raspberry PiとBBC Micro:bit間でUSB経由のシリアル通信を行う方法を解説しています。 従来のUART通信と異なり、USB接続ではRaspberry Pi側のシリアルポート設定が不要です。Micro:bit側で温度データを送信するコードを作成し、Raspberry Pi側では"/dev/ttyACM0"をデバイス、"115200"をボーレートとしてシリアル通信を設定します。 これにより、Raspberry Pi側でMicro:bitから送信された温度データを受信し、コンソールに表示することができます。USB接続は、GPIOの使用状況に影響されず、より簡便な方法と言えます。

 

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/)からダウンロードできます。

 

兵庫の某進学校に通う高校生に肥料の話をした時のこと

/** Geminiが自動生成した概要 **/
兵庫の進学校の高校生が肥料の質問のため著者に会いに来た。高校生は高校で高度な生物の授業を受けており、大学レベルの内容も学習済みだった。彼らは慣行農法で使われる反応性の高い塩(えん)を、化学知識の乏しい農家が経験と勘で施肥している現状に驚き、問題視していた。水溶性塩(えん)の過剰使用は土壌への悪影響や野菜の栄養価低下を招き、医療費高騰にも繋がると指摘。さらに、近年問題となっている生産法人の大規模化は、肥料の知識不足による土壌劣化の危険性を孕んでいる。規模拡大に伴い軌道修正が困難になり、経営破綻だけでなく広大な土地が不毛化するリスクもあると警鐘を鳴らしている。記事は肥料の化学的理解の重要性を強調し、持続可能な農業への警鐘を鳴らす内容となっている。

 

SOY CMSのブログとOpenStreetMapで地図アプリを作ろう

/** Geminiが自動生成した概要 **/
SOY CMSのブログとOpenStreetMapで地図アプリを作る手順は以下の通り。カスタムサーチフィールドで緯度(lat)・経度(lng)フィールドを作成し、地図ラベルを設定。地図出力ページを作成し、OpenStreetMap + LeafletのHTMLを貼り付ける。JavaScript内のマーカー情報をSOY CMSのタグに置き換え、記事タイトル、URL、緯度経度を動的に表示。標準ページに地図ラベルの記事一覧を表示する設定を行い、緯度経度情報付きの記事を投稿すれば、記事の位置にマーカーが設置された地図が自動的に生成される。

 

ブナ科の系統を見る再び

/** Geminiが自動生成した概要 **/
ブナ科の系統分類について、新刊のどんぐり図鑑と既存の研究を参考に考察。コナラ属はコナラ亜属とケリス亜属に分けられ、落葉性のコナラはコナラ亜属、常緑性のシラカシはケリス亜属に属する。興味深いのは、落葉性のクヌギとアベマキもケリス亜属に分類される点。クヌギ等はカシとは異なるケリス節に属するが、同じ亜属に常緑樹と落葉樹が含まれることは進化の謎を解く鍵となる可能性を秘めている。

 

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

/** Geminiが自動生成した概要 **/
この記事では、SOY CMSで外部CSSを自動的にインライン化し、ページ表示速度を向上させる方法を紹介しています。通常、外部CSSファイルは別途リクエストが必要ですが、これをHTML内に直接埋め込むことでHTTPリクエスト数を減らし、レンダリング速度を改善します。 具体的には、cms:moduleタグとPHPを組み合わせた手法を用います。通常表示時は<link>タグで外部CSSを読み込みますが、SOY CMS経由での出力時は、PHPでCSSファイルの内容を読み込み、圧縮・整形した上で<style>タグ内に埋め込みます。これにより、SOY CMSを通さない場合は外部ファイル、SOY CMSを通す場合はインラインCSSと表示方法を自動で切り替えます。 この方法の利点は、CSSの管理を外部ファイルで行いつつ、出力時にはインライン化のメリットを享受できる点です。さらに、PHPでCSSの内容を操作できるため、ページごとに必要なCSSのみを出力するなど、転送量を最適化することも可能です。結果としてCore Web Vitalsの改善にも繋がります。

 

【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とSOY ShopでPHP8.0系に対応しています

/** Geminiが自動生成した概要 **/
PHP 8.0への対応でSOY CMSとSOY Shopが高速化しました。主因はJITコンパイラですが、ビルドイン関数date、strlenの挙動変化に伴うコード修正も寄与しています。HTMLListのダミーオブジェクト処理で発生していたdate関数のエラーを修正。PHP7系でも動作します。プラグインの動作確認は順次実施予定。PHPのOPCache設定変更で更なる高速化も期待できます。OPcache.validate_timestampsを0にすると、PHPファイルのタイムスタンプ確認を無効化し、パフォーマンスが向上しますが、ファイル更新が反映されなくなるため、開発中は1、運用時は0にするのが推奨されます。opcache.revalidate_freqで更新頻度を設定できます。

 

【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 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正式版は近日公開予定。

 

php-webdriverでelement click interceptedのエラーに対して

/** Geminiが自動生成した概要 **/
SeleniumとJenkins、php-webdriver、ヘッドレスChromiumでテスト自動化中に、メモウィジェットが原因でelement click interceptedエラーが発生。ヘッドレスモードで画面サイズが不足し、対象ボタンが隠れていたのが原因。ウィンドウサイズを`1024x2048`に設定することで一時的に解決したが、ページサイズに依存するこの方法は最適ではない。スクロールによる解決策も検討されたが、最終的にはCSSを修正し、メモウィジェットが他のボタンと重ならないように調整することで根本解決した。

 

SOY CMS内のTinyMCEでstyleタグを使用する

/** Geminiが自動生成した概要 **/
SOY CMSのTinyMCEエディタで<style>タグを使用するには、設定ファイル(/CMSインストールディレクトリ/soycms/js/editor/RichTextEditor.js)を編集する必要がある。`urlconverter_callback : common_convert_urls,`の後に`extended_valid_elements : "style",`と`valid_children : "+body[style]"`を追加することで、<style>タグが利用可能になる。 ただし、この方法は本体への直接編集となるため、バージョンアップの度に修正が必要となる。

 

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

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

 

SOY2HTMLで軽微なカスタマイズを加える為の機能を追加しました

/** Geminiが自動生成した概要 **/
SOY CMS/ShopのSOY2HTMLに、軽微なカスタマイズを容易にする隠し機能が追加されました。クラスファイルと同名のHTMLファイル名の頭にアンダースコア「_」を付けると、そのHTMLファイルが優先的に読み込まれます。これにより、プラグインのバージョンアップ時の上書きを回避できます。例えば、配送モジュールの文言変更など、PHP知識を必要とせず容易にカスタマイズできます。標準配送モジュールなら `delivery_normal/cart/_DeliveryNormalCartPage.html` を配置し、元のHTMLの内容をコピー・編集することで実現できます。SOY Shop 2系以降で利用可能、1系は `soy2_build.php` の修正が必要です。新パッケージはsaitodev.coからダウンロードできます。

 

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

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

 

SOY InquiryでParsley.jsを利用する

/** Geminiが自動生成した概要 **/
SOY InquiryにParsley.jsを組み込むと、見栄えの良い入力内容チェックが利用できます。フォームテンプレートにParsley.jsのスクリプトを挿入し、SOY Inquiryのフォーム設定画面で各項目にdata-parsely-triggerとrequired属性を設定します。さらに、data-parsely-required-message属性を追加すると、エラーメッセージをカスタマイズできます。これにより、各項目に合わせたエラーメッセージが表示され、ユーザーフレンドリーなフォームが作成できます。

 

SOY Inquiryで長いカラム名がある場合は詳細で整形をする

/** Geminiが自動生成した概要 **/
SOY Inquiryの管理画面で、長いカラム名を持つお問い合わせフォームの表示崩れを解消するアップデートが行われました。従来、最も長いカラム名に合わせて全項目の表示幅が拡張され、無駄なスペースが生じていましたが、今回の修正で改善。最長カラム名の値は改行表示となり、その他の項目は2番目に長いカラム名に合わせた幅で表示されるようになりました。これにより、長いカラム名を含むフォームでも見やすく整形された詳細情報を確認できます。アップデート版はsaitodev.co/soycms/soyinquiry/からダウンロード可能です。

 

pickadate.jsでHTML5のrequired属性を使いたい

/** Geminiが自動生成した概要 **/
pickadate.jsでHTML5のrequired属性を使うには、`editable: true`オプションを設定する必要がある。ただし、これによりページ読み込み時にrequiredチェックが実行され、未入力エラーが表示される問題が発生する。これを回避するには、フォームにIDを付与し、クリックイベントでpickadateを初期化するよう変更する。さらに、カレンダー表示のために`pickr.pickadate('open')`も追加する必要がある。これにより、フォームクリック時に初めて初期化とバリデーションが行われるようになり、初期エラー表示の問題が解決する。

 

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系でも動作します。プラグインの動作確認はまだ完了していないため、エラーが発生した場合は問い合わせフォームから報告をお願いします。

 

SOY Shopをリリースして10年が経ちました

/** Geminiが自動生成した概要 **/
SOY Shopは2009年12月18日にベータ版公開、CSS Nite忘年会でお披露目された。開発当初はプログラミング未経験だったが、マニュアル作成やバグ報告、軽微な修正を担当。後に支払いモジュール開発でスキルアップし、構築サイトが情熱大陸で紹介されるなど貴重な経験を得た。中でも、多様な業種のネットショップ構築を通して商売事情を学べたことが、現在の商売の基礎となっている。開発元を去った後も、オープンソースとして非公式にメンテナンスを継続していく。

 

Ubuntuにインストールしたsendmailの起動と送信が遅くて困った

/** Geminiが自動生成した概要 **/
Ubuntu 19.10上のsendmailの起動とメール送信が非常に遅く、1分以上かかっていた。テスト送信時に「Domain of sender address does not exist」エラーが発生し、送信元メールアドレスが見つからないことが原因と判明。/etc/hostsに`127.0.1.1 ex1-234-56789.vs.sakura.ne.jp ex1-234-56789` (ex1-234-56789はサーバ名)を追加し、sendmailを再起動したところ、送信が数秒で完了するようになった。

 

ご利用中の共有サーバのPHPのバージョンアップにご注意下さい

/** Geminiが自動生成した概要 **/
共有サーバーのPHPバージョンアップに伴い、サイトに予期せぬエラーが表示されるケースが増加しています。PHPのバージョンアップにより古いコードが非推奨となるため、例えばSOY Shopのサイトマッププラグインでエラーが発生するといった事態が起こりえます。 記事では、PHP 5.6 から 7.3 への変更による影響と、バージョンアップによるエラー発生の可能性について解説しています。例として挙げられたサイトマッププラグインのエラーは既に修正済みで、最新版のパッケージで対応可能です。 PHPのバージョンアップは今後も続くため、同様のエラー発生が予測されます。SOY CMSとSOY ShopもPHPのバージョンアップに対応したアップデートを提供しているので、最新版への更新を推奨しています。

 

SOY ShopのGoogle Sign-In for Websitesプラグインでボタンの拡張設定を追加しました

/** Geminiが自動生成した概要 **/
SOY ShopのGoogle Sign-In for Websitesプラグインにボタン拡張設定が追加されました。従来のシンプルなログインボタンに加え、JavaScriptでカスタマイズ可能なボタンを実装できます。管理画面のサンプルコードを元に、大きさやデザインを自由に調整可能です。この拡張により、カートページ等のデザインとの調和が容易になり、より柔軟なサイト構築が可能になります。更新版プラグインはsaitodev.co/soycms/soyshop/からダウンロードできます。

 

SOY Inquiryで連番カラムを追加しました

/** Geminiが自動生成した概要 **/
SOY Inquiryにフォーム毎の通し番号を自動生成する機能が追加されました。この機能は、送信完了画面、自動返信メール、管理画面の受信一覧に表示可能です。通し番号は連番カラムで管理され、非表示設定も可能です。管理画面で連番カラムをフォームの最初に配置すれば、受信一覧での表示も実現できます。「次回お問い合わせ時に生成する番号」を設定することで、番号を飛ばすことも可能です。機能追加版はサイトからダウンロードできます。ただし、自作デザインのフォームを使用する場合は、PHPファイルの修正が必要です。修正方法の解説ページも用意されていますが、難しい場合はサイトから問い合わせも可能です。

 

SOY CMSで管理画面のログイン時のパスワードを忘れた場合の再設定

/** Geminiが自動生成した概要 **/
SOY CMSの管理画面パスワードを忘れた場合、パスワードリマインダが有効でなければ使えません。有効化は必須です。パッケージを最新版に更新すると手順が簡略化されます。 パスワード無しでログインするには、AdministratorLogic.class.phpのlogin関数とcheckUserIdAndPassword関数に"return true;"を追加します。管理画面へのアクセス制限としてBasic認証を設定しておくのが安全です。 ログイン後、管理者情報ページを開くにはDetailPage.class.phpに初期管理者ID取得のコードを追加します。パスワード変更時はChangePasswordAction.class.phpでエラーチェックとパスワードチェックを無効化し、管理者IDを強制的に初期管理者に設定します。変更後はファイルを元に戻し、ログイン確認後、パスワードリマインダを有効化してください。

 

さくらのVPSにUbuntu18.04を入れてSOY CMSを動かした時のメモ

/** Geminiが自動生成した概要 **/
SOY CMSでMySQL 8系に接続できない場合、認証方式の違いが原因です。MySQL 8系は`caching_sha2_password`がデフォルトですが、SOY CMSは`mysql_native_password`で接続します。解決策は、MySQLの設定ファイル`mysqld.cnf`の`[mysqld]`セクションに`default_authentication_plugin=mysql_native_password`を追加し、MySQLを再起動します。新規インストール時はインストール時に`mysql_native_password`を指定できます。既存ユーザの場合は、MySQLにログインし`ALTER USER 'ユーザ名'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード';`を実行し、`FLUSH PRIVILEGES;`で変更を適用します。

 

Windows10のApache2.4でVirtual Hostを設ける

/** Geminiが自動生成した概要 **/
Windows10のApache2.4でバーチャルホストを設定する方法。httpd.confの`#Include conf/extra/httpd-vhosts.conf`の#を外し、httpd-vhosts.confを編集する。既存の`<VirtualHost *:80>`の設定に加え、新たな`<VirtualHost *:81>`ブロックを追加し、DocumentRootに任意のディレクトリを指定、アクセス許可を設定する。追加のバーチャルホストは、Listenポートと`<VirtualHost>`ブロックを追加することで設定可能。コマンドプロンプトで`httpd -k restart`を実行しApacheを再起動後、ブラウザで`localhost:81`等にアクセスし、意図したファイルが表示されれば設定完了。

 

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

/** Geminiが自動生成した概要 **/
PHP 7.3がリリースされ、SOY CMS/Shopも対応しました。7.3は7.2より高速ですが、switch文内のcontinue使用禁止によるエラーが発生しました。for文とswitch文の組み合わせでcontinueを使っていた箇所を修正し、PHP5系でも動作するよう対応済みです。ダウンロードはsaitodev.co/soycms/から。全プラグインの動作確認は未完了のため、PHP7.3でエラー発生時は/soycms/inquiryへの問い合わせをお願いします。

 

妻がプログラミングをはじめてGo言語とQtでアプリを公開するまで

/** Geminiが自動生成した概要 **/
妻にプログラミングを教えた動機は、事務職希望の女性こそプログラミングスキルを身につけるべきだという考えに基づいている。事務作業はルーティン化しやすい反面、変化への対応が求められる。プログラミングは論理的思考力や問題解決能力を養い、変化への対応力を高める。これらは事務職で役立つだけでなく、キャリアの幅を広げる可能性も秘めている。妻は最初の実験台であり、私自身にとっても新たな言語を教える貴重な経験となった。将来的には、プログラミング教育の普及を通じて、女性がより活躍できる社会を目指したいと考えている。

 

ナメコの粘液

/** Geminiが自動生成した概要 **/
ナメコのヌルヌル成分はムチンと呼ばれる糖タンパク質の混合物で、幼菌時に分泌され、成長と共に消失する。ムチンは細胞保護や潤滑物質として働き、高い保湿性で幼菌の水分蒸発を防ぐ役割を持つ。ムチンは人体にも重要だが、この記事では詳細は割愛。補足として、ムチンは粘性のある糖タンパク質の慣用的な総称だが、化学物質としては多様であり、粘性のない糖タンパク質も存在するため、化学物質名としては使用が減少傾向にある。

 

JavaScriptのAnalyzerNodeで音に反応して動きを変えてみる

/** Geminiが自動生成した概要 **/
Web Audio APIのAnalyzerNodeを用いて、音声でアニメーションを制御する方法を紹介しています。 円が画面端で跳ね返る単純なアニメーションに、音声の周波数データ解析を組み込みました。 周波数データが一定閾値を超えると、円の進行方向がランダムに変化します。 音が途切れてもデータが残るため、setTimeoutを用いて一定時間反応しないように制御しています。 具体的には、`analyser.getByteFrequencyData(data)`で周波数データを取得し、`data[20]`の値が閾値を超えた場合に円の移動方向を反転させています。

 

会議用の資料の作成時間を短縮したい

/** Geminiが自動生成した概要 **/
SOY CMS/Shop開発元出身の筆者は、非IT系企業における会議資料作成の手間と時間の長さに衝撃を受けた。販売管理ソフトから出力されたデータはそのままでは会議で使えず、手作業での修正に半日かかることも。一方、筆者の前職では必要なデータはプログラミングで出力し、再利用可能なため資料作成は効率的だった。 最近、弥生販売ユーザー向けにExcelデータ整形用のWebアプリを作成したところ、月1回半日~1日かかっていた作業が20分に短縮されたという報告を受けた。事務員の負担軽減だけでなく、会議開催の柔軟性向上にも繋がり、事業主にとって大きな価値となる。 アメリカ企業ではプログラミング可能な人材を社内に置くことが多い一方、日本では外注依存が多く、これが日本企業の閉塞感に繋がっているのではないかと筆者は指摘する。会議資料作成に多大な時間をかける現状は、その象徴的な例と言える。

 

jQuery.uploadプラグインをjQuery3系でも動作するように修正してみた

/** Geminiが自動生成した概要 **/
jQuery.uploadプラグイン (v1.0.9) をjQuery 3.3.1で使用した際、「a.indexOf is not a function」エラーが発生。原因は`iframe.load()`の廃止。jQuery3以降では`.load()`メソッドがオブジェクトに対して使用できなくなっていた。解決策として、`iframe.on('load', function(){})`と書き換え、`load`イベントを`on`メソッドで登録することで動作するようになった。この修正は後にプルリクエストとして採用され、本家コードに反映済み。

 

妻にプログラミングを教えることにした-続き

/** Geminiが自動生成した概要 **/
プログラマは、システム不具合の多くが「想定外の使い方」に起因するため、電話での口頭説明ではなく詳細な情報提供を求める。これは、プログラミングが物理法則に縛られず、思考がそのまま反映されるため、想定外の動作が顕著な不具合となる特性による。効率的な情報伝達と問題解決のため、プログラマはコーディング規約、高機能エディタ、テスト自動化、タスク管理ツール、オープンソースといった手段を活用し、思考すべき点とそうでない点を明確化し、再発防止と情報共有を促進する。妻にプログラミングを教えるのは、これらの思考プロセスと情報伝達の重要性を体験させ、世界中の資産を活用する術を学ばせるためである。

 

続・Ideapad 720SにUbuntuを入れてWi-Fiを使用する

/** Geminiが自動生成した概要 **/
modprobeコマンドはLinuxカーネルモジュールを管理する。カーネルモジュールは、デバイスドライバやファイルシステムなど、カーネルの機能を拡張するコンポーネント。modprobeを用いて、これらのモジュールを動的にロードまたはアンロードできる。これは、システムリソースを効率的に使用し、必要に応じて機能を追加/削除する柔軟性を提供する。 ArchWikiのカーネルモジュールページでは、モジュールの種類、ロード方法、設定ファイル、トラブルシューティングなど、詳細な情報が提供されている。

 

SOY2HTMLでラジオボタンやチェックボックスを設置する - HTMLCheckBox編

/** Geminiが自動生成した概要 **/
SOY2HTMLでラジオボタンとチェックボックスを設置する方法を解説。HTMLCheckBoxクラスを用い、PHP側で`addCheckBox`メソッドを使い、HTML側で`<input type="(radio|checkbox)" soy:id="id名">`を記述する。`addCheckBox`の第二引数配列には、name, value, selected(チェック状態), label(ラベルテキスト)を指定する。ラジオボタンはnameを共通にすることでグループ化される。チェックボックスは単独で動作する。HTMLCheckBoxクラスはHTMLInputを継承し、labelタグを自動生成する機能を持つ。`isBoolean`をtrueに設定すると、値が未送信の場合に備えてhiddenで値0を送信する。

 

SOY Shopの注文状態と支払状況でフラグを追加できる拡張ポイントを設けました

/** Geminiが自動生成した概要 **/
SOY Shopの注文状態・支払状況の拡張ポイントが追加されました。従来の注文状態変更項目の柔軟性不足を解消するため、プラグインで項目を追加できるようになりました。例えば、レンタル業務用の返送伝票番号記録プラグインでは、注文状態に「返却済み」フラグを追加できます。追加方法は、在庫確認中状態追加プラグイン(add_status_check_stock_in)を複製し、soyshop.order.status.php内のstatusItem()またはpaymentStatusItem()関数を編集します。配列で任意の数字とフラグ名を指定することで、注文状態と支払状況に項目を追加できます。拡張ポイントに関する詳細は別記事を参照ください。最新版はサイトからダウンロード可能です。

 

SOY CMSの開発秘話後編

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

 

SOY CMSの開発秘話前編

/** Geminiが自動生成した概要 **/
SOY CMSは、WordPressなどと機能比較されがちですが、その真価は開発背景にあります。京都大学での業務アプリ開発で度重なる仕様変更によるプロジェクト炎上を経験したことがきっかけで、デザイナーとプログラマーの作業分離を目指しました。 SOY2フレームワークを基盤とし、プログラマーが機能をHTMLタグ(`cms:id`など)として提供し、デザイナーはそれを自身のデザインに組み込む形式を採用。これにより、デザイナーはプログラム知識なしにサイトの構築や変更を容易に行え、プログラマーも独立して修正できる。SOY CMSは、開発時や運営後のWebデザイナーの負担を最小限に抑えることを最大の目標としています。

 

SOY Shopの管理画面の注文一覧ページで表示速度周りを改修しています

/** Geminiが自動生成した概要 **/
SOY Shopの管理画面、特に注文一覧ページの表示速度改善に取り組んでいます。月商数千万円規模のショップで顕著になる速度低下の原因となっていた、顧客名表示等の処理をDAO経由からSQL直書きに変更。顧客情報全体を取得する代わりに必要な名前だけをデータベースから取得することで、処理を効率化しました。他にも例外処理の見直しやテストコードによるエラー修正を行い、体感できる速度改善を実現。今後も処理速度の改善を継続し、最新版はサイトからダウンロード可能です。

 

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

/** Geminiが自動生成した概要 **/
PHP7.2のリリースに伴い、SOY CMS/Shopがcreate_functionとget_class関数の仕様変更によりエラー停止する問題が発生した。これを解消するため、create_functionを無名関数に置き換え、get_classの引数にnullが入らないようチェック処理を追加した。これらの変更はPHP5.3以降で動作するため、現行の推奨バージョン全てに対応。PHP7.2対応版はサイトからダウンロード可能。SOY Inquiry、SOY Mailも同様の修正を実施。また、ファイルマネージャのelFinderもcreate_function関連の修正のためバージョンアップされた。 完全な動作確認はまだだが、エラー発生時は問い合わせフォームから連絡してほしい。

 

さくらVPSにJenkinsを入れて、Selenium + php-webdriverを動かせるようにする

/** Geminiが自動生成した概要 **/
さくらVPS(Ubuntu 16.04)にJenkinsを導入し、Seleniumとphp-webdriverでUIテストを自動化する方法を紹介。Jenkinsインストール後、初期設定、ジョブ作成、Git連携、ビルドトリガー設定、シェルスクリプト実行設定、メール通知設定を行い、Apacheの設定を調整してテスト実行環境を構築。15分毎にGitリポジトリをポーリングし、変更があれば自動的にテストを実行、結果をメールで通知。これにより、月700円のVPS費用で継続的なUIテストを実現。

 

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

/** Geminiが自動生成した概要 **/
開発元退職後もSOY CMS開発を続ける理由は、情熱、責任感、コミュニティへの貢献にあります。SOY CMSのシンプルさと柔軟性は魅力であり、ユーザーにとって使いやすいCMSであり続けることを目指しています。退職によって開発が停滞する不安を解消し、継続的な改善とサポートを提供することで、ユーザーの信頼に応えたいと考えています。また、オープンソースの精神に基づき、コミュニティと協力しながらSOY CMSを発展させ、貢献していくことが重要です。個人的な思い入れだけでなく、ユーザーとコミュニティのための開発を続けることが、私のモチベーションとなっています。

 

SOY Inquiryで複数のアップロードフォームを設置した時、確認メールで複数分の画像を確認したい

/** Geminiが自動生成した概要 **/
SOY Inquiryで複数のアップロードフォームの画像を確認メールに表示するには、管理者向けメール拡張PHPを修正する。画像パスを格納する変数を配列`$pathes`に変更し、ループ処理で各画像パスを`$pathes`に追加。確認メール出力部分もループ処理に変更し、`$pathes`内の各パスをSOYCMSのURLと結合して表示する。これにより、複数のアップロード画像の確認用リンクがメールに記載されるようになる。

 

SOY Shopで都道府県の標準値設定を追加しました

/** Geminiが自動生成した概要 **/
SOY Shopが、特定都道府県のみで商売を行うネットショップ向けに、住所登録画面の初期設定で県を選択できる機能を追加しました。 管理画面の基本設定で都道府県を指定すると、顧客が個人情報を入力する際、住所欄の県が予め選択された状態で表示されます。 これにより、地域限定のショップ運営がよりスムーズになります。 最新版のパッケージはsaitodev.co/soycms/soyshop/ からダウンロード可能です。

 

Socket.IOで個別チャットを作りたい前編

/** Geminiが自動生成した概要 **/
Socket.IOで個別チャットを作るための第一段階として、NamespacesとRoomsの概念を導入した。サーバー側(server.js)では、`io.of('/chat')`でchatというnamespaceを作成し、接続時に`socket.join("default")`で全ユーザーを"default" roomに所属させた。イベント発信時は`chatNS.to("roomName").emit()`を使用することでroom内限定の通信を実現。クライアント側(index.html)は、`io.connect("http://localhost:8080/chat")`のように接続URLにnamespaceを指定することで変更完了。これにより、複数ユーザーが同じチャットルームに参加できるようになったが、まだユーザー限定チャットにはなっていない。

 

PHPの古いバージョンでの不具合報告についての対応

/** Geminiが自動生成した概要 **/
公式パッケージ更新再開に伴い、サイトへの問い合わせが増加した一方、PHPの古いバージョン(PHP5.5系以前)での不具合報告も多い。セキュリティサポートが終了した古いPHPバージョンは重大な脆弱性を持つため、これらの環境での不具合修正は行わない。問い合わせフォームから報告する際は、PHPのバージョン明記が必須。バージョン確認方法は、SOY CMS(1系・3系)共に管理画面にログインし、「ようこそSOY CMSへ!」から「サーバー情報」→「PHP Info」タブで確認できる。

 

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

/** Geminiが自動生成した概要 **/
開発元退職後もSOY CMS開発を続ける筆者は、情熱と責任感から無償で活動を継続している。退職理由は、開発方針の違いや待遇への不満ではなく、新機能開発への強い思いとユーザーコミュニティへの貢献意欲によるもの。オープンソース化という選択もあったが、品質維持と開発継続性を重視し、現状維持を選択。個人開発の負担は大きいが、ユーザーからの感謝や機能改善要望がモチベーションとなり、SOY CMSの発展に尽力している。

 

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

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

 

SOY CMSで常時SSL化対応後の各記事内の画像のパスの対応

/** Geminiが自動生成した概要 **/
SOY CMSの常時SSL化後、記事内の画像パスがhttpのままとなり、エラーが発生する問題を解決するプラグインが作成されました。記事内の画像はhttpで始まる絶対パスで挿入されるため、手動またはデータベース操作で修正が必要ですが、このプラグインを使えば記事内の画像パスを一括でスラッシュから始まる絶対パス(例:/site/files/hoge.jpg)に変換でき、常時SSLに対応できます。プラグイン名は「画像URL変換プラグイン」で、saitodev.co/soycms/からダウンロード可能です。

 

Apacheサーバでバージョンの表示を隠す

/** Geminiが自動生成した概要 **/
Apacheサーバーのバージョン表示はセキュリティリスクとなるため、非表示設定が推奨されています。Ubuntu 16.04, Apache 2.4.27環境では、`security.conf` 内の `ServerTokens` を `OS` から `Prod` に、`ServerSignature` を `Off` から `On` に変更し、Apacheを再起動することでバージョンを非表示にできます。設定変更後、デベロッパーツールや404ページでApacheのバージョンが表示されなくなっていることを確認します。

 

SOY Shop1.17.4分の差分をマージしました

/** Geminiが自動生成した概要 **/
SOY Shop 1.17.4はPHP7非対応、常時SSL未対応、税率計算の誤りが未修正のまま公開されたため、筆者はこれらの問題を修正。公式版の差分をマージした独自パッケージ「SOY CMS 1.17.4p7.X」をsaitodev.coで配布開始しました。このバージョンではオーダーカスタムフィールドの表示不具合も修正されています。カート部分の修正が多いため、バージョンアップの際は一部プラグインが動作しなくなる可能性があり、注意が必要です。

 

SOY Shopのサイトマッププラグインでカスタムサーチフィールドのページを追加しました

/** Geminiが自動生成した概要 **/
SOY Shopのサイトマッププラグインがアップデートされ、カスタムサーチフィールドで生成された商品一覧ページのURLをサイトマップに追加できるようになりました。 対応フィールドは現在チェックボックスとセレクトボックスのみ。カスタムサーチフィールドの管理画面で「サイトマップに追加する」を選択することで、商品一覧ページがサイトマップに登録されます。多言語化プラグインとの併用は現状未対応。更新版パッケージはsaitodev.coからダウンロード可能です。この機能により、複数カテゴリのような設定や高度な検索フォームで絞り込まれた商品一覧ページへのアクセスが容易になり、SEO効果も期待できます。

 

SOY Shopでフォーマットなしの商品価格を表示する

/** Geminiが自動生成した概要 **/
SOY Shopで商品価格の数字をカンマ無しで表示したいという要望に応えるため、カンマなし商品価格表示プラグインを作成した。標準機能のcms:id出力ではPHPのnumber_format関数により価格にカンマが入ってしまうため、プラグインでnumber_format関数をかまさないcms:idを追加する。プラグイン有効化後、テンプレートを修正することでカンマなし価格が表示される。プラグイン導入により、不要なユーザーに余計な処理負荷をかけることなく要望に対応できる。対応版パッケージはsaitodev.co/soycms/soyshop/からダウンロード可能。

 

SOY Shopでカスタムサーチフィールド(子商品一覧)を追加しました

/** Geminiが自動生成した概要 **/
SOY Shop向けプラグイン「カスタムサーチフィールド」に新機能「子商品一覧」が追加されました。この機能により、子商品のみを表示する商品一覧ページと検索結果ページを作成できます。親商品名とカテゴリ名も表示可能で、深い階層の商品カタログサイト構築に役立ちます。同時に、カスタムサーチフィールドで範囲項目と商品情報項目の併用時に検索機能が動作しない不具合も修正されました。改良版プラグインはサイト(https://saitodev.co/soycms/soyshop/)からダウンロード可能です。

 

SOY CMS1.8.13分の差分をマージしました

/** Geminiが自動生成した概要 **/
筆者はSOY CMSの開発元を退職後も開発を継続している。公式版1.8.13が1年半ぶりにリリースされたものの、フォーラムで報告済みの修正やPHP7対応は反映されておらず、ファイルマネージャのエラーも残存していた。そこで、自身で開発・公開しているパッケージに1.8.13の差分をマージし、PHP7対応版「SOY CMS1.8.13p7.X」として公開するに至った。公式版の更新内容の乏しさに対し、継続的な改善とサポートを提供することで、ユーザーニーズに応え続けている。

 

カスタムサーチフィールドのチェックボックスで商品詳細ページで選択した項目を表示したい

/** Geminiが自動生成した概要 **/
SOY Shopのカスタムサーチフィールドでチェックボックスの値を商品詳細ページに表示、更にリンク化する方法。管理画面でチェックボックス型のカスタムサーチフィールド(例:フィールドID「custom_check」、ラベル「カスタムチェック」)を作成し、各項目を設定。商品詳細テンプレートに`<!-- csf:id="custom_check_番号_visible" -->`と`<!-- csf:id="custom_check_番号" -->`を記述することで、選択された項目のみ表示される。番号は設定した項目の順番(0始まり)。リンク化は`<a href="{url}=<!-- csf:id="custom_check_番号" /-->">`で囲み、{url}をサイトURLに置き換える。

 

SOY Shopの管理画面でプラグインがページを持てるようになりました

/** Geminiが自動生成した概要 **/
SOY Shopの管理画面拡張機能として、プラグインが独自のページを持てるようにアップデート。これにより、ショップ機能を制限し、プラグイン経由でアプリ風機能を呼び出す「SOY App」的な開発が可能に。プラグインはSOY Shop本体への影響 minimal。 連絡掲示板プラグインを例に、管理画面内に掲示板を追加し、投稿時に登録管理者へメール通知する機能を実装。アップデート内容はGitHubのsoyshopパッケージに反映済。

 

さくらの共有サーバで二つのショップサイトを独自ドメインで運営する方法について

/** Geminiが自動生成した概要 **/
さくら共有サーバーのスタンダードプランで、二つの独自ドメインショップサイトをSNI SSLで運営する方法。まず、mainsite.jpをルートディレクトリに設置し、SNI SSLを設定。設定ファイル内のURLを独自ドメインに変更する。次に、subsite.jpをsubディレクトリに設置し、マルチドメイン設定とSNI SSLを設定。設定ファイル内のURLも変更。最後に、subディレクトリの.htaccessに`RewriteBase /`を追加することで、subsite.jpのサブページへのアクセスエラーを解消する。

 

SOY Shopで顧客詳細にメールの送信履歴を表示するようにしました

/** Geminiが自動生成した概要 **/
SOY Shopの顧客管理画面に、メール送信履歴表示機能と仮登録ユーザーの視認性向上のための機能追加が行われました。顧客詳細ページに送信済みメールとエラーメールの履歴を表示することで、仮登録メールのURLを管理者が確認しやすくなりました。また、仮登録ユーザーの顧客詳細ページでは、仮登録状態であることを強調表示することで、管理者の識別を容易にしました。これらの変更は、顧客へのメール再送や仮登録解除の手間を軽減することを目的としています。修正はGitHub上のSOY Shopパッケージで公開されています。

 

SOY Shopで注文と商品のタブの表示の設定を追加しました

/** Geminiが自動生成した概要 **/
SOY Shop開発者は、顧客から多様なアプリ開発依頼を受けている。従来はSOY CMSのログイン機能を活用したフルスクラッチ開発で対応していたが、開発者自身へのフィードバックが少なく割高になるため、SOY Shopの機能を部分的に切り出してプラグイン化する方針に転換した。 今回、SOY Shop管理画面に注文と商品のタブ表示設定を追加。チェックを外すとタブが非表示になる。これは一見小さな変更だが、ユーザーにとって機能が多すぎると学習意欲を阻害したり、操作説明が煩雑になるため、必要な機能のみを表示させることでユーザビリティ向上に繋がる。 この修正はGitHub上のSOY Shopパッケージに反映されている。開発者は今後もSOY Shopの可能性を探るべく、管理画面の改善を進めていく。

 

SOY Shopの注文一覧で表示する項目の設定を追加しました

/** Geminiが自動生成した概要 **/
SOY Shopの管理画面の注文一覧表示項目をカスタマイズできる機能が追加されました。従来、表示項目の変更はシステム破綻のリスクを伴うため推奨されていませんでしたが、要望の多さを受けて実装されました。管理画面の設定画面から表示/非表示を切り替えられます。ただし、全ての項目を表示すると画面が見づらくなるため、運営のスリム化も合わせて検討するよう促しています。変更はGitHub上のSOY Shopパッケージに反映されています。

 

SOY Shopの管理画面の新着ページをプラグイン化しました

/** Geminiが自動生成した概要 **/
SOY Shopの管理画面の新着ページがプラグイン化されました。これにより、各項目の表示/非表示や表示順をプラグインで制御可能になります。ネットショップ以外の用途、例えば会員制ブログやカタログサイト等での利用が増えているため、受注関連情報を非表示にし、別のアプリの要素を表示するといったカスタマイズが容易になります。 この変更によりSOY Shopの多様な活用方法が期待されます。変更はGitHub上のsoyshopパッケージに反映されています。

 

SOY Shopの管理画面からの注文時に消費税が計算されない不具合を修正

/** Geminiが自動生成した概要 **/
SOY Shopの管理画面からの注文時に消費税が計算されない不具合を修正しました。これは稀に利用される管理画面からの注文機能において、消費税の計算処理が実装されていなかったことに起因するものです。修正により、管理画面からの注文でも正しく消費税が計算されるようになりました。この修正はGitHub上のsoycmsリポジトリ(https://github.com/inunosinsi/soycms/tree/master/package/soyshop)に含まれるsoyshopパッケージで反映されています。

 

SOY Shopで特別会員向けのページを作成する

/** Geminiが自動生成した概要 **/
SOY Shopで顧客属性を利用した特別会員向けページの作成方法を紹介します。顧客属性1を「会員」とした場合、カスタムスクリプトでアクセス制限を実現できます。手順は、特別会員向けページを作成後、ページ設定のカスタムスクリプトに下記コードを記述します。 ```php $mypage = MyPageLogic::getMyPage(); $user = $mypage->getUser(); if ($user->getAttribute1() !== "会員") { header("Location:/"); //リダイレクト先を適宜変更 exit; } ``` このコードは、ログインユーザーの属性1が「会員」でない場合、指定URLへリダイレクトします。「会員」やリダイレクト先は環境に合わせて変更可能です。

 

SOY CMSで記事編集中にブラウザを閉じる際にアラートを出す

/** Geminiが自動生成した概要 **/
SOY CMSの記事編集中にブラウザを閉じると、入力内容が失われるのを防ぐため、確認アラートを表示するプラグインが開発されました。フォーラムで要望があり、記事タイトル編集中に限られますが「本当に閉じますか?」とアラートを表示します。下書き自動保存と併用すると効果的です。プラグインはフォーラム、またはGitHubで配布されています。改良版はGitHubにあり、`alert.js`を修正すれば他の箇所にも対応可能。修正後はフォーラムで共有が推奨されています。

 

SOY CMSのブログで地図アプリを作ろう2

/** Geminiが自動生成した概要 **/
SOY CMSのブログ機能を利用した地図アプリ作成の第2弾では、マーカークリック時のインフォウィンドウ表示を実装しました。前回設定したカスタムフィールド(サムネイル、緯度経度)に加え、ブログ記事のタイトルとリンクをインフォウィンドウに表示するようにテンプレートを修正。具体的には、JavaScriptでインフォウィンドウの内容を生成し、マーカークリックイベントで表示する処理を追加しました。これにより、地図上のマーカーから各店舗の詳細ページへ遷移できるようになりました。将来的にはSOY Shopと連携させ、カテゴリを店舗名として地図上に店舗を表示するショップページの作成も構想されています。

 

SOY CMSのサムネイルプラグインでpng形式のファイルに対応しました

/** Geminiが自動生成した概要 **/
SOY CMSのサムネイルプラグインがアップデートされ、複数の不具合修正と機能強化が行われました。主な変更点は、サイトIDとドキュメントルート内の文字列が重複した場合のリサイズ不具合の修正、サムネイル未登録時のアップロードウィンドウ表示不具合の修正、PNG/GIF形式の画像対応、`cms:id="thumbnail_path_text"`の追加です。さらに、サーバーにjpegoptimがインストールされている場合は、トリミング時にJPEGのロスレス圧縮が適用されるようになりました。これらの更新はGitHubで公開されているパッケージに反映されています。

 

SOY Shopのプラグインやモジュールの複製方法

/** Geminiが自動生成した概要 **/
SOY Shopのプラグイン複製は、対象ディレクトリ(例:payment_furikomi)を丸ごと複製し、名前を(例:payment_furikomi2)に変更する。ファイル名、クラス名、モジュールID(payment_furikomi→payment_furikomi2、PaymentFurikomi→PaymentFurikomi2など)を全て変更する。module.iniのモジュールIDも修正。拡張ポイントファイル(soyshop.***.php)やUtilクラスなども同様に置換。HTMLファイルは修正不要。PHPの知識があれば複製後、自由に修正可能。

 

在庫数一括設定プラグインで商品カテゴリによる絞り込みが甘い不具合を修正しました

/** Geminiが自動生成した概要 **/
SOY Shopの在庫数一括設定プラグインのバグ修正について。当初、商品カテゴリ検索でカテゴリIDのLIKE検索を用いていたため、意図しないカテゴリの商品も検索結果に含まれる不具合があった。例えば、カテゴリ1(ID:1)で検索すると、カテゴリ10(ID:10)も検索対象となっていた。これはIDに"1"が含まれるため。この不具合は修正済みで、修正版はGitHubからダウンロード可能。

 

元CMSの開発として、CMSの過剰カスタマイズは止めた方が良いと伝えたい

/** Geminiが自動生成した概要 **/
CMS開発経験者として、CMSの過剰カスタマイズは避けるべきだと主張しています。標準機能で不足する場合はプラグイン活用を推奨し、どうしてもカスタマイズが必要なら汎用化し開発元に取り込んでもらうべきです。 成功するネットショップは過剰なカスタマイズを避け、標準機能のバージョンアップによる恩恵を最大限に活用しています。HTMLやPhotoshopを使いこなし、小規模な修正を繰り返すことで魅力的なLPページを作成し売上向上を実現しています。 カスタマイズ依頼の際は、標準機能への実装可能性や他サイトでの汎用性を重視し、CMSカスタマイズが難しい場合はAPI連携可能な外部サービスを検討します。この柔軟な姿勢がサイトの急成長を支えています。

 

開発元を退職した私がSOY CMSを開発し続けている訳

/** Geminiが自動生成した概要 **/
筆者はSOY CMSの開発元を退職後も、個人で開発を継続している。理由は、開発元代表の行動(SNSでの女装写真連投)と農業事業への注力により、開発が停滞し、経験豊富な開発メンバーが離脱したため。退職後、ユーザーの声を直接聞き、SOY CMSの価値を再認識し、開発継続を決意。公式フォーラムへの修正報告は反映されず、個人でパッケージを配布。開発元の事業不振を憂慮し、リポジトリの公開を提案。利用者がいれば開発を続けると宣言している。

 

SOY CMSのサムネイルプラグインでhttpからはじまる絶対パスで登録出来ない不具合を修正しました。

/** Geminiが自動生成した概要 **/
SOY CMSのサムネイルプラグインで、httpから始まる絶対パスで画像を登録できない不具合を修正。従来、httpで始まるパスを登録するとプレビューで画像が表示されない問題があったが、パスからhttp://ドメイン部分を削除することで修正。修正版はGitHubで配布中。サムネイルプラグインを使わずにサムネイル画像を生成する方法としては、表示直前で画像のリサイズを行う方法がある。

 

下に向いて伸長しているツタ

/** Geminiが自動生成した概要 **/
建物の待合室から中庭の木に絡まるツタが見えた。よく見ると、ツタは下に向かって伸びていた。隣の高い木に絡まり登ろうとしたが、途中で剪定されていたため、つかまる場所がなくなり、元の高さまで垂れ下がっていた。他の登れる枝もあったのに、剪定された枝を選んでしまったツタは、まるで目標を見失いスタート地点に戻ってしまったようで滑稽だ。一度決めた方向を修正できない習性が愛らしい。

 

Muninで監視用サーバを構築する2

/** Geminiが自動生成した概要 **/
外部サービス監視のため、対象サーバ(192.168.80.80)にmunin-nodeをインストールし、監視サーバ(192.168.100.120)のIPを許可するよう設定ファイルを編集。ファイアウォールで4949ポートを開放する。次に、監視サーバ側でmunin.confに監視対象のホスト名(hoge.com)とIPアドレスを追記。Apacheを再起動後、Munin画面に新しいリンクが表示されれば設定完了。

 

Muninで監視用サーバを構築する1

/** Geminiが自動生成した概要 **/
Webサービスの利用者増加に備え、Ubuntu 16.04サーバにMuninを導入して監視環境を構築した。Apacheのインストールと設定、muninとmunin-nodeのインストール後、アクセス制限を解除し、Basic認証を設定した。最後にファイアウォールでポート80, 443, 4949を開放し、セキュリティを強化した。今回は監視サーバ自体の設定を行い、次回は監視対象サーバの設定を行う。

 

SOY Shopのオーダーカスタムフィールドの項目でファイルを追加しました

/** Geminiが自動生成した概要 **/
SOY Shopで商品注文時にファイルアップロードできるカスタムフィールド機能が追加されました。管理画面で「ファイル」種別の項目を作成すると、カートにアップロードフォームが表示され、注文完了後、管理画面のファイルマネージャで確認できます。ファイル名は日付に変換され上書きは防止されます。ストレージプラグインと併用すればダウンロードURLも利用可能です。現在は拡張子やファイルサイズ制限機能はありませんが、アップロード許可する拡張子設定は追加されました。要望があればお問い合わせください。この機能はhttps://saitodev.co/soycms/soyshop/のパッケージで利用可能です。

 

SOY Shopの集計プラグインの商品毎集計のグルーピングで価格も考慮にいれました

/** Geminiが自動生成した概要 **/
SOY Shopの集計プラグインがアップデートされ、商品毎の売上集計において価格変動を考慮したグルーピングが可能になった。以前は価格変更があった場合でも同一商品として集計されていたが、今回の修正で商品IDに加え価格もグルーピング基準に追加。例えば、価格2000円の商品が5個売れた後、1800円に値下げされ10個売れた場合、以前は「15件 30000円」と集計されていたが、修正後は「2000円で5件 10000円」と「1800円で10件 18000円」と別々に集計されるようになった。修正版パッケージはGitHub上で公開されている。

 

SOY ShopのMySQL版のクーポン自由設定プラグインで使用ログが動作していなかった件を修正しました

/** Geminiが自動生成した概要 **/
SOY ShopのMySQL版クーポン自由設定プラグインで、クーポン使用ログが記録されない不具合を修正しました。この不具合により、クーポンの使用回数がカウントされず、使用回数制限が正常に動作しない問題が発生していました。修正版パッケージはGitHubで配布しています。直接修正する場合は`ALTER TABLE soyshop_coupon_history CHANGE private price INTEGER NOT NULL DEFAULT 0;`を実行してください。

 

SOY CMSの確認のリンクをスラッシュ終わりにしました

/** Geminiが自動生成した概要 **/
SOY CMSのページ一覧の確認リンクで、URL末尾が拡張子でない場合にスラッシュを追加する修正が行われました。これは、スラッシュの有無で相対パス指定の画像やCSSの表示に差異が生じる問題への対応です。ブログページで確認リンクをクリックした際、一覧からはスラッシュなし、詳細からはスラッシュありで表示される不整合を解消しました。修正はGitHub上のパッケージに反映されています。

 

SOY Shopで注文変更の際に代引き手数料の自動計算を追加しました

/** Geminiが自動生成した概要 **/
SOY Shopの注文変更画面で、代引き手数料を自動計算する機能が追加されました。 従来、注文内容変更時に商品個数を変更すると、代引き手数料を手動で修正する必要がありましたが、この機能により自動で再計算されます。例えば、商品価格の合計が10,000円を超えて手数料が無料になる場合など、変更後の金額に応じて手数料が自動更新されます。この機能は代引き支払いモジュールの設定で有効/無効を切り替え可能です。消費税の自動計算にも対応しており、要望があれば配送モジュールの手数料自動計算も検討されます。関連パッケージはGitHubで公開されています。

 

SOY Shopで集計プラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY Shop用の売上集計プラグインが開発されました。月次・日次・商品別・年齢別の売上データをCSV出力でき、手数料や値引きの算入設定も可能です。既存の統計プラグインとは異なり、出力CSVは他の計算にも利用できます。このプラグインはGitHub上のsoycmsパッケージに含まれています。高速化された統計プラグインに関する情報も提供されています。

 

SOY Shopでカートのエラーになった際に管理者に通知メールを送信機能を追加

/** Geminiが自動生成した概要 **/
SOY Shopでカートエラー発生時に管理者へ通知メールを送信する機能を追加する方法が解説されています。カートページのPHPファイル(/soyshop/webapp/src/cart/_common/page.php)の例外処理部分に、メール送信処理を記述することで実現します。エラー発生時に管理者のメールアドレスへ通知メールが送信されるように設定し、エラーの詳細な内容を含むことも可能です。ただし、セキュリティ上の理由から、エラーの詳細情報をメール本文に含めることは推奨されていません。修正済みパッケージはGitHubで公開されています。

 

サイトマップページの表示速度を上げてみる

/** Geminiが自動生成した概要 **/
サイトマップページの表示速度向上のため、キャッシュ機能を実装した。サイトマップは更新頻度が低いため、XMLファイルからHTMLを生成する処理をキャッシュすることで高速化を実現。_SITE_ROOT_ディレクトリ内の.cache/soy_module/にキャッシュファイルを保存することで、SOY CMSのキャッシュクリア機能にも対応。さらに、キャッシュファイルに1日の寿命を設定し、ファイルの更新日時をチェックすることで自動的に古いキャッシュを削除するように改良。これにより、初回表示後はキャッシュが使用され、高速な表示が可能になった。

 

SOY Shopで注文の変更の際の内税の計算に誤りがあったため修正しました

/** Geminiが自動生成した概要 **/
SOY Shopの注文変更時に、内税計算に誤りがあったため修正されました。具体的には、管理画面で注文変更を行う際、内税が代金合計に含まれてしまう不具合と、数量変更時に以前の内税額が代金合計に加算される不具合が修正されました。修正により、内税は代金合計に含まれず、購入金額や手数料の変更ごとに消費税が再計算されるようになりました。この修正は本体への変更を含むためプラグイン配布はされず、GitHubからダウンロードする必要があります。

 

SOY Shopの統計プラグインで注文件数が多くなったサイトでも快適に表示できるように修正しました

/** Geminiが自動生成した概要 **/
SOY Shopの統計プラグインの表示速度が改善されました。注文件数の多いサイトでは、統計計算に時間がかかっていましたが、原因は注文一覧ページの無駄な二重検索処理でした。統計処理時に、一覧用の検索結果を破棄して再度統計用の検索を行っていたため、メモリを浪費し、計算時間が増大していました。この無駄な処理を修正することで、表示速度が大幅に向上しました。修正版はフォーラムまたはGitHubのパッケージ置き場から入手できます。

 

SOY Shopで消費税の計算の際に送料と手数料を含める設定を追加しました

/** Geminiが自動生成した概要 **/
SOY Shopで消費税計算設定を拡張し、送料・手数料を含めるオプションを追加しました。従来は商品価格のみを課税対象としていましたが、売上規模によっては送料・手数料も課税対象とする必要性から、設定で切り替えられるようにしました。この変更は本体への修正を含むため、プラグインではなくパッケージからのダウンロードが必要です。また、内税計算のバグ修正も行いました。以前は単純に合計金額に税率をかけていましたが、正しくは「合計金額 - (合計金額 * 1 / (1 + 税率))」で計算するように変更しました。

 

SOY CMS/Shopでクラス名と同名のメソッドでエラーになる件を修正

/** Geminiが自動生成した概要 **/
KAGOYAのマネージド専用サーバでPHP7にアップグレードした際、SOY CMS/Shopでクラス名と同名のメソッドがコンストラクタとして使われているためエラーが発生した。PHPの次期バージョンではこの記法が非推奨となるため、`__construct()`への変更が必要だった。`WebPage`クラスなどでも同様の問題があり、修正パッチを作成しGitHubに公開した。公式サイトにも反映されることを期待している。

 

WordPressのウィジェットを作ってみた2

/** Geminiが自動生成した概要 **/
WordPressウィジェット作成の続きで、設定画面を追加する方法を解説。前回作成したウィジェットにフォームを追加し、入力値を`$instance`に格納、`update`メソッドで保存、`widget`メソッドで表示する処理を実装。フォームの追加は`form`メソッド内でHTMLを記述、`update`メソッドでは入力値のサニタイズを行い、`widget`メソッドで`$instance`から値を取得し表示。管理画面と公開側で動作確認を行い、意図通り表示されることを確認し、簡易的なウィジェット作成が完了した。

 

WordPressのウィジェットを作ってみた1

/** Geminiが自動生成した概要 **/
WordPressプラグインのPHP記述を簡略化するため、ウィジェットを作成する方法を紹介。ウィジェットとは、プラグイン的な機能をサイドバーなどに挿入できる機能。HogeWorldウィジェットを作成し、hoge_world_widget.phpにWP_Widgetクラスを継承したコードを記述。プラグインを有効化し、ウィジェットをサイドバーに挿入することで"hoge world!!"と表示されることを確認。設定画面の追加については次回へ続く。

 

SOY Shopで商品規格プラグインと入荷通知プラグインを一緒に使いたい

/** Geminiが自動生成した概要 **/
SOY Shopの商品規格プラグインと入荷通知プラグインを併用できるよう修正。入荷通知プラグインは在庫切れ商品に入荷通知登録リンクを追加し、在庫補充時に登録者にメールを送信する機能。今回の修正で、商品規格プラグイン利用時にも規格ごとの在庫管理と入荷通知が可能になった。つまり、規格ごとに在庫切れ/入荷通知リンクを表示し、特定規格の在庫補充時に該当規格の入荷通知登録者にメールを送信できる。最新パッケージはGitHubからダウンロード可能。

 

SOY CMSの画像のリサイズ時にPNGの透過を無効にする

/** Geminiが自動生成した概要 **/
SOY CMSでPNG画像をリサイズすると、透過部分が黒くなる問題が発生。これはGDライブラリの画像リサイズ処理がPNGのアルファチャンネルを正しく扱わないためでした。 `/common/im.inc.php`内のPNG処理に`imagealphablending($dstImage, false);`と`imagesavealpha($dstImage, true);`を追加することで、透過を保持したままリサイズが可能になります。この修正はGDライブラリ使用時のみ有効です。

 

SOY CMSで表示直前で画像のリサイズ表示を行う

/** Geminiが自動生成した概要 **/
SOY CMSでサイト表示を高速化するために、表示直前にサーバ側で画像リサイズを行う方法を紹介しています。Google PageSpeed Insightsで低評価を受けた画像サイズの問題を解消するため、サムネイルプラグインではなく、SOY CMSの隠し機能を活用。 具体的には、カスタムフィールドに画像パスを入力し、imgタグのsrc属性に`im.php?src=[画像パス]&width=[幅]`を指定することで、動的にリサイズされた画像を表示。従来のHTMLのwidth属性による縮小表示よりもパフォーマンスが向上し、PageSpeed Insightsのスコアも改善。 記事では、設定変更前後の具体的なコード例やスクリーンショットを交えながら解説。リサイズ処理はJPEG、PNG、GIFに対応し、作業フローを簡略化しつつサイト高速化を実現。次回、CSSや画像のキャッシュ設定について解説予定。

 

当サイトをHTTP/2対応して表示の爆速化してみた

/** Geminiが自動生成した概要 **/
Let's Encryptの証明書更新を自動化するため、CertBotを導入した。以前の方法は使えなくなったため、公式サイトの手順に従い、snapd経由でCertBotをインストール。`certbot certonly --apache`コマンドで証明書を取得し、Apacheの設定を自動更新。 cronで`certbot renew`を定期実行することで自動更新を実現。`--dry-run`オプションでテストも可能。以前の`letsencrypt-auto`コマンドは非推奨となったため、CertBotへの移行が必須。

 

SOY ShopにEC CUBE2.4系のログインチェックを導入しました

/** Geminiが自動生成した概要 **/
EC-CUBE2.4系からSOY Shopへの移行時に、顧客のパスワードをそのまま利用できるようログインチェック機能を導入。EC-CUBEとSOY Shopのパスワード暗号化方式の違いを考慮し、SOY Shop側でEC-CUBEの暗号方式を適用する処理を追加。暗号化パスワードにスラッシュの有無でEC-CUBEかSOY Shopかを判別。EC-CUBE2.4.4以前のバージョンに対応しており、顧客がパスワードを変更すればSOY Shopの方式に自動更新されるため、特別な切り替えは不要。将来的には2.11.1以降のバージョンにも対応予定。修正版はフォーラムまたはGitHubから入手可能。

 

SOY CMSのソーシャルボタン設置プラグインでPocketに対応しました

/** Geminiが自動生成した概要 **/
SOY CMSのソーシャルボタン設置プラグインがPocketに対応しました。Pocketは後で読む記事を保存するサービスです。 専用タグを挿入することでPocketボタンを設置でき、記事ページなどに表示されます。修正ファイルはSOY CMSフォーラムで配布中。

 

SOY Shopで非同期で商品をカートに入れたい2

/** Geminiが自動生成した概要 **/
SOY Shopで商品を非同期にカートに追加するJavaScriptのカスタマイズ方法。カートの表示部分にIDを付与し、JavaScriptで非同期通信(XMLHttpRequest)を使ってカート情報を更新する。非同期通信に対応していないブラウザのために同期処理へのフォールバックと、タイムアウト時の処理も追加。さらに、ボタンの連打防止策として実行中フラグを用いて多重リクエストを防いでいる。これらの機能をプラグイン化することも検討中。

 

SOY Shopで非同期で商品をカートに入れたい1

/** Geminiが自動生成した概要 **/
SOY Shopで非同期に商品をカートに入れる方法を解説。Ajaxを用いて、カートボタンクリック時にページ遷移なしでカートに追加する。まず、JavaScriptでカート操作URLへの非同期通信を行う関数を定義。次に、カートボタンのHTMLを書き換え、この関数を実行するように変更する。これによりカートへの追加自体は非同期で行われるが、画面上のカート情報は更新されない。次回、この点を改善し、カート追加をユーザーに分かりやすく表示する方法を解説予定。

 

SOY CMSの記事投稿画面で絵文字を使いたい

/** Geminiが自動生成した概要 **/
SOY CMSの記事投稿画面にYouTube動画の挿入ボタンを追加する方法を紹介します。TinyMCEのプラグインを自作することで実現できます。まず、プラグイン用のJavaScriptファイルを作成し、動画URLの入力フィールドと挿入ボタンを配置します。次に、ボタンクリック時の処理を記述し、入力されたURLから埋め込みコードを生成、エディタに挿入します。この際、正規表現を用いてURLの形式を検証し、不正なURLは受け付けないよう実装することで安全性を高めます。作成したJavaScriptファイルをTinyMCEの設定ファイルに読み込み、ツールバーに自作プラグインのボタンを追加することで、記事投稿画面から手軽にYouTube動画を埋め込めるようになります。

 

Go言語でサーバのバックアップの仕組みを作ろう。SSH編

/** Geminiが自動生成した概要 **/
Go言語でサーバのバックアップを作成するため、SSH接続を用いたファイルコピーから、Zipファイルのダウンロード方式に変更された。 `golang.org/x/crypto/ssh` パッケージを利用し、SSH接続を確立、リモートでコマンドを実行するテストコードが作成された。このコードは、指定したサーバに接続し、空のファイル`empty.txt`を作成することに成功。今後の開発は、このSSH接続とコマンド実行機能をベースに、Zipファイルのダウンロード処理を実装する方向で進められる。

 

SOY CMSのブログのページ生成設定で404になる条件がある不具合を修正しました

/** Geminiが自動生成した概要 **/
SOY CMSのブログ設定で、トップページ以外(記事、カテゴリ、月別アーカイブ)のURLを空にすると、表示はされるもののHTTPステータスが404になる不具合を修正。アクセス解析で該当ページが404エラーとして記録される問題が発生していた。修正ファイルはフォーラム(http://www.soycms.org/viewtopic.php?f=7&t=1775)に、修正版パッケージはGitHub(https://github.com/inunosinsi/soycms/tree/master/package/soycms)に公開。soycms_1.8.12p7.4以降で適用可能。

 

中学生にプログラミングを教えてみて。その3

/** Geminiが自動生成した概要 **/
中学生にプログラミングの関数を教える際、calc(calculate)やres(result)といった略語を使った説明が、生徒にとって理解の妨げになってしまった。calculationを学習していない生徒にとって、これらの語は自由に決められる名称だと認識できなかったため。改善策として、関数の名称を「tasu(足す)」のように、処理内容をローマ字表記にすることで、より直感的に理解できるように工夫した。ベストプラクティスよりも、まずはコードを書く楽しさを優先し、段階的に学習を進めることが重要。

 

SOY Inquiryでお問い合わせフォームの確認画面で指定の箇所までジャンプしたい

/** Geminiが自動生成した概要 **/
SOY Inquiryで確認画面をフォームの先頭に表示する方法です。まず、form.phpの`<form>`タグに`action="#confirm"`を追加します。次に、confirm.phpの入力内容確認箇所の直前に`<div id="confirm"></div>`を挿入します。これで、確認画面表示時にフォームの先頭にジャンプします。完了画面にも適用する場合は、complete.phpでも同様の操作を行います。ただし、この方法ではURLに#confirmが残ります。URLを綺麗にしたい場合は、PHPでaction属性を動的に指定する必要があります。

 

PHPで楽天市場の商品登録を楽しよう:GitとTortoiseGit編

/** Geminiが自動生成した概要 **/
楽天市場の商品登録をPHPで行うため、複数人での在宅作業におけるファイル管理を容易にするためGitとTortoiseGitを導入。TortoiseGitはGUIで操作できるため、Gitに不慣れなメンバーでも「プル」「プッシュ」「コミット」といった操作を右クリックメニューから容易に行える。BitBucketをリポジトリとして利用し、プルとプッシュの手順を指示することでファイルの競合を最小限に抑え、作業効率を向上させた。

 

SOY Shopの商品一覧ページでカスタムフィールドの値で商品の並び替え

/** Geminiが自動生成した概要 **/
SOY Shopのソートボタン設置プラグインでカスタムフィールドの値によるソートが可能になりました。商品カスタムフィールドの「高度な設定」で「ソートに使用する」にチェックを入れると、プラグイン管理画面にソート用タグが表示されます。このタグを商品一覧ページテンプレートに貼り付けることで、カスタムフィールド値に基づくソートボタンが設置できます。機能はsoyshop_1.17.3p7.2.zip以降のパッケージか、フォーラムの修正ファイルで利用可能です。

 

PHPで楽天市場の商品登録を楽しよう:PHPのインストール編

/** Geminiが自動生成した概要 **/
Windows7にPHP7をインストールする方法を解説。PHP7をダウンロード・展開後、C:\php7に配置。Apacheの設定ファイル(httpd.conf)を編集し、PHPモジュールを読み込む設定や、index.phpをDirectoryIndexに追加。PHPの設定ファイル(php.ini)で必要な拡張モジュールを有効化し、タイムゾーンを東京に設定。Apacheを再起動後、phpinfo()を表示するinfo.phpを作成し、ブラウザで確認することでインストール完了となる。

 

PHPで楽天市場の商品登録を楽しよう:Apacheのインストール編

/** Geminiが自動生成した概要 **/
楽天市場の商品登録作業効率化のため、PHPによるローカル検証環境構築を目指し、複数PCへのインストール手順を記録している。今回はApache2.4のインストール方法を紹介。まずPCが64ビットか確認後、Apache動作に必要なVisual C++再頒布可能パッケージをインストールする。次にApacheの64ビット最新版をダウンロード、解凍し、Apache24フォルダをCドライブ直下に配置。httpd.confのServerNameをlocalhost:80に修正する。Windows環境変数のPathにC:\Apache24\bin;を追加し、コマンドプロンプトでhttpd -k startを実行。ブラウザでhttp://localhostにアクセスし"It Works!"が表示されればApacheのインストールは完了。次回はPHPのインストールについて。

 

SSHで外部のネットワークからログインできるようにする

/** Geminiが自動生成した概要 **/
Sambaサーバに外部からSSH接続できるよう設定した手順の記録。まずSambaサーバにSSHをインストールし、プライベートIPアドレス(192.168.11.8)を設定、ルーターのIPアドレスをゲートウェイに設定した。次に外部からのSSH接続のため、rootログインを禁止し、無線LANルーターでポートフォワーディング(外部ポート71823→内部ポート22)を設定。外部IPアドレス(例:127.0.0.1)へポート71823を指定してSSH接続を確認した。パスワード認証はセキュリティ的に不安なので、次回は鍵認証を設定予定。

 

Goで立ち上げたサーバを停止した後、再度同じポートで立ち上げる

/** Geminiが自動生成した概要 **/
GoでWebアプリを開発し、Ctrl+Zで停止した後に同じポートで再起動しようとしたら`address already in use`エラーが発生した。停止ではなく、プロセスが生きていたためポートが使用中だった。`ps`コマンドでプロセスIDを確認し、`kill -KILL [PID]`でプロセスを終了させた後、再起動に成功した。ブラウザでWebアプリの画面が表示され、サーバが正常に動作していることを確認。これは土壌分析アプリsoil2の開発中に遭遇した問題で、プロセスをkillすることで解決できた。

 

Dockerの他コンテナにあるSOY CMSからMySQLのコンテナにアクセスしてみる

/** Geminiが自動生成した概要 **/
Docker Composeを用いて、PHP7/ApacheとMySQLのコンテナを連携させ、SOY CMSを動作させる方法を解説。MySQLコンテナでは`bind-address`を指定し、PHPコンテナでは`pdo_mysql`拡張をインストールする必要がある。データベース接続設定では、MySQLコンテナの内部IPアドレスとポート(3306)を指定。SOY CMSのデータベース設定ファイル(mysql.php)を適切に編集することで、コンテナ間のデータベースアクセスを実現。記事では、`docker-compose.yml`の設定例や、コンテナ内でのデータベース作成手順、SOY CMSの初期設定画面へのアクセス方法などを示している。また、PHP7環境でのSOY CMS動作に関する修正はGitHubで公開されている。

 

さくらのVPSにPHP7を入れてSOY CMSを動かしてみた

/** Geminiが自動生成した概要 **/
さくらのVPSにPHP7をインストールし、SOY CMSを動かす手順を解説した記事。共有サーバーの表示速度低下を改善するため、VPSに移行。手順は既存記事を参考に、PHPインストール部分を更新。 Apache2.4インストール後、Ondřej Surý氏のPPAを用いてPHP7.0を導入し、関連モジュールをインストール、Apache2の設定を行った。PHP7でSOY CMSを動かすにはファイル修正が必要で、修正済みパッケージはsaitodev.co/soycms/からダウンロード可能。

 

Dockerで構築したPHP7の環境でSOY CMSを動かしてみる

/** Geminiが自動生成した概要 **/
Docker上のPHP7環境でSOY CMSを動かす手順を解説。前回はmbstringが不足しエラーが発生したが、Dockerfileに`docker-php-ext-install mbstring`を追加し解決。elfinderは未対応だが、その他は動作し爆速に。Dockerfileとphp.iniの設定例、コンテナ起動コマンドも紹介。修正版SOY CMSはGitHubで公開中。

 

さくらのVPSでSOY CMSを動かした時のメモ

/** Geminiが自動生成した概要 **/
Apacheサーバのバージョン表示はセキュリティリスクとなるため、非表示にすることが推奨されています。本記事では、Apacheの設定ファイル`httpd.conf`または`apache2.conf`を編集することで、バージョン情報を隠す方法を解説しています。具体的には、`ServerTokens`ディレクティブを`Prod`に設定することで、公開されるサーバ情報を最小限に抑えられます。また、`ServerSignature`ディレクティブを`Off`にすることで、エラーページなどからサーバのバージョン情報が削除されます。これらの設定変更後、Apacheを再起動することで変更が反映されます。さらに、セキュリティ対策としてmod_securityなどのセキュリティモジュール導入も推奨しています。

 

土壌分析アプリsoil2 by Go

/** Geminiが自動生成した概要 **/
Go言語で開発された土壌分析Webアプリ「soil2」の紹介。 入力された土壌分析値をグラフ化し、将来的にはサードパーティアプリとの連携も視野に入れている。Go言語採用理由は、コンパイル言語のためサーバー環境によるコード変更の手間を省き、処理速度の向上も見込めるため。REST APIと管理者機能を実装し、グラフ表示にはChart.jsを使用。当初は身内向け公開予定だったが、最終的にはSOY Shopのマイページ機能に統合された。

 

SOY Inquiryでアップロードフォームを設置した時、確認メールで画像を確認したい

/** Geminiが自動生成した概要 **/
SOY Inquiryでアップロードフォームを複数設置した場合、確認メールで全ての画像URLを確認する方法を紹介します。標準では管理画面でしか確認できませんが、メールテンプレートをカスタマイズすることで実現可能です。 `/インストールディレクトリ/app/webapp/inquiry/src/template/default/mail.admin.php` に記述を追加します。`$comments` から各コメントのコンテンツを取得し、正規表現で `<img src="">` タグ内のURLを抽出します。抽出したURLにサイトURLを付加して、確認メールの末尾に「添付ファイル」として表示します。複数画像に対応するため、ループ処理で全てのコメントをチェックし、画像URLを追記していきます。これにより、確認メールで全てのアップロード画像を直接確認できるようになります。

 

SOY CMSの常時SSL化で対応したこと

/** Geminiが自動生成した概要 **/
さくらインターネットの共有サーバーでSOY CMSを常時SSL化するために実施した手順を紹介。画像パスの修正、SNI SSL対応、リダイレクト設定、サイトURLの変更、サイトマップ作成とSearch Console登録を行った。画像パスは絶対パスに変更し、SNI SSLのためにSOY CMS本体のコードを修正。リダイレクトはindex.phpに記述、サイトURLもhttpsに変更した。最後にサイトマップを作成しSearch Consoleへ登録。SOY Shopの場合は別途対応が必要。

 

SOY CMSであれば、管理画面のURLを特定したい

/** Geminiが自動生成した概要 **/
SOY CMSの管理画面URLは`/cms/admin/`が一般的だが、変更可能。そのため、攻撃者は`/soy/admin/`なども試す。管理画面URLを`/c!_m-s/admin/`のように複雑にするのが安全。既存サイトで`/cms/admin/`を使っている場合は、`cms`ディレクトリ名を変更し、`cms`フォルダ内、`index.php`、`shop/index.php`、`site/index.php`内のパスを修正することで変更できる。さらに、Basic認証やIP制限を追加すればより安全。

 

SOY CMSで記事の内容ごとに文末のリンクを出し分けたい

/** Geminiが自動生成した概要 **/
SOY CMSで記事の内容ごとに文末リンクを出し分ける方法を解説しています。テンプレートにPHPを記述せず、モジュール機能を利用することで実現しています。記事に設定されたラベルIDを取得し、条件分岐で表示するリンク内容を決定します。ラベルIDが9なら栽培系セミナー、5か16ならSOY CMS関連のリンクを表示します。モジュールタグをテンプレートに挿入するだけで、PHPを記述することなく、記事の内容に合わせた文末リンクの出し分けが可能です。

 

「虫が付いてる野菜は美味しい」は嘘 エンジニア思考で考える新しい農業という記事に対して

/** Geminiが自動生成した概要 **/
筆者は、日本情報化農業研究所で農業事業に従事していたが、CEO古荘氏の言動に不信感を募らせ退職した。古荘氏は、筆者らの農業調査を誇張したプレゼンを行い、西前氏が立ち上げたセレクトファームの成果を自分のもののように語り、資金調達に利用した。筆者らは畑で地道に努力していたにも関わらず、古荘氏は現場に来ず、農業を軽視する態度を取り続けた。その結果、関係者や取引先からの信頼を失墜させ、筆者も西前氏も会社を去ることになった。筆者は農業をエンジニアリングと同一視する古荘氏の考えに反論し、生き物を育てる仕事は知識を駆使したサポートだと主張する。 開発元退職後のSOY CMS開発継続理由は、オープンソース化により生まれたコミュニティへの責任感、ユーザーからの信頼、そしてSOY CMS自体への愛着による。退職後も開発を続け、改良を重ねることで、ユーザーにとってより良いCMSを提供し続けたいと考えている。

 

PHPで簡易的なクローラを作ってみた

/** Geminiが自動生成した概要 **/
PHPで簡易クローラーを作成し、`file_get_contents()`でサイトのHTMLを取得、特定文字列の有無を調べた。再帰的にページ内のリンクを辿り、同一ドメインのURLを解析するが、既に解析済みのURLはスキップする。`scrape()`関数でHTML解析を行う予定。問題点として、ページ数が多いと記録用配列が肥大化し、対象サーバーへの負荷も高くなることが判明。スラッシュ始まりのURL取得にも未対応。それでも`file_get_contents()`の便利さを実感した。

 

SOY InquiryのレスポンシブとHTML5対応

/** Geminiが自動生成した概要 **/
SOY Inquiryを使ってレスポンシブデザインのお問い合わせフォームを作成する方法を紹介しています。レスポンシブデザインとは、PCとスマートフォンでそれぞれ見やすい表示になるよう自動調整されるWebデザイン手法です。設定は、フォーム設定で「responsive」を選び、スタイルシートを読み込むをチェックするだけ。HTML5のrequired属性にも対応し、必須項目の未入力時に警告を表示できます。設定はカラム設定で「required属性を利用する」をチェックするだけ。pattern属性も利用可能で、入力パターンの指定ができます。フォームの属性にpattern="正規表現"を追加するだけで設定できます。ただし、住所検索機能とは競合するため注意が必要です。ダウンロードやフォーラムへのリンクも記載されています。以前の記事「スマホ対応のお問い合わせフォームを作ってみた」の内容を元に、更に機能が追加されています。

 

スマホ対応のお問い合わせフォームを作ってみた

/** Geminiが自動生成した概要 **/
SOY Inquiryでスマホ対応のレスポンシブなお問い合わせフォームを作成する方法を紹介。標準のフォームはスマホで表示が崩れるため、新しいテンプレートを作成し、HTMLを`<dl>`タグに変更することで解決。`/cmsインストールディレクトリ/app/webapp/inquiry/src/template/`以下にresponsiveディレクトリを作成し、サンプルファイルをコピー。form.phpのテーブル表示を`<dl>`に変更。設定画面でデザインをresponsiveに変更することで、PC・スマホ両対応のフォームが完成。確認画面(confirm.php)と完了画面(complete.php)も同様に`<dl>`タグを用いて修正することで、一貫したデザインを実現。

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

Powered by SOY CMS   ↑トップへ