ブログ内検索

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

Raspberry PiにMCPI++を入れてみた

/** Geminiが自動生成した概要 **/
この記事は、Raspberry PiにMinecraft: Pi Edition: Reborn (マイクラリボーン) の拡張版をインストールする方法と、その拡張機能について解説しています。拡張版では、ブロックやアーマーの種類が増えるなどのアップデートがあります。インストールは、スクリプトを実行するだけで完了します。拡張版はマイクラリボーンの新バージョンに合わせて更新されるようです。

 

SOY ShopのGoogle Sign-In for WebsitesプラグインをSign In With Googleに変更しました

/** Geminiが自動生成した概要 **/
SOY ShopのGoogleログインプラグインが、Google Sign-In for WebsitesからSign In With Googleにアップデートされました。変更に伴い、HTMLタグやスクリプトを修正する必要があります。 以前は`googleUser.getBasicProfile()`でユーザー情報が取得できていましたが、現在はJWTが返却されるため、Base64デコードが必要です。`parseJwt`関数でJWTをデコードし、`json.email`でメールアドレスを取得します。 詳細はプラグイン詳細画面とサイト(saitodev.co/soycms/soyshop/)を参照してください。

 

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

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

 

【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が大幅に改善され、ユーザーエクスペリエンスの向上が期待できます。

 

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

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

 

SOY InquiryでGoogleのreCAPTCHA v3に対応しました

/** Geminiが自動生成した概要 **/
SOY InquiryがGoogle reCAPTCHA v3に対応しました。reCAPTCHA v3は、ユーザーの行動を分析してボットを判別する仕組みで、従来の文字入力やチェックボックス操作は不要です。SOY CMSのプラグインとして提供され、有効化するとサイト右下にreCAPTCHAロゴが表示されます。v3は学習ベースで精度が向上するため、初期は精度が低い可能性があります. 現時点ではJavaScript無効環境への対策は未対応です。最新版は公式サイトからダウンロード可能です。関連記事では、同一IPからの連続問い合わせをブロックする方法を紹介しています。

 

さくらのVPSで追加ストレージ(NFS)を利用してみた

/** Geminiが自動生成した概要 **/
画像データが容量の大部分を占めるサイト運営において、さくらのVPS 1Gプランのストレージ容量が逼迫し、バックアップ時の負荷でサイト表示に不調が生じていたため、追加ストレージ(NFS)の導入手順を解説。 まず、VPSコントロールパネルでスイッチを作成し、アプリケーションサーバとNFSのネットワークインターフェースに紐づける。次に、追加ストレージ(NFS)を契約し、IPアドレスとネットマスクを設定、同じくスイッチを紐づける。 その後、SSHでアプリケーションサーバに接続し、マウントポイントを作成、ネットワークインターフェースを設定、NFSをマウントするコマンドを実行。最終的に、再起動後も自動マウントされるようcrontabを設定する。 記事ではUbuntu 18.04.2での手順を記述。また、SOY CMSでNFSを利用するためのプラグイン開発中であり、問い合わせフォームへのリンクを掲載している。

 

自作アプリを介してのGoogle検索でService Unavailableになった

/** Geminiが自動生成した概要 **/
自作PHPアプリでGoogle検索結果を集計する際、cURLで検索を実行したところ「503 Service Unavailable」エラーが発生した。Googleはスクリプトからの自動検索を制限しており、エラーメッセージは異常トラフィックの検出を示していた。解決策として、`curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);`をcURLに追加し、ブラウザのユーザーエージェントを送信するように変更した。これによりエラーが解消し、検索結果の集計が可能になった。単に適当なユーザーエージェントを設定するだけでは解決せず、実際に使用しているブラウザの情報を送ることが重要だった。

 

複合機とGoogleドライブを連携して、出先でFAXの内容を確認する

/** Geminiが自動生成した概要 **/
複合機のFAX受信をGoogleドライブと連携し、ChatWorkで通知する仕組みを紹介。複合機がFAXをPDFでGoogleドライブに共有する機能を活用し、Google Apps ScriptでPDFを特定フォルダに移動、ファイル名と共にChatWorkへ通知する。これにより、外出先でもFAX内容を即時確認でき、紙の無駄や転送の手間を省ける。5分間隔でスクリプトを実行することで、ほぼリアルタイムな通知を実現。設定には、複合機側のGoogleドライブ連携と、スクリプト内のChatWork API設定が必要。

 

Apache上で利用しているLet's Encryptの失効

/** Geminiが自動生成した概要 **/
旧サーバーでLet's Encrypt証明書の失効、新サーバーで新規発行の手順を解説。 旧サーバーでは、`certbot`を使わず、`/opt/letsencrypt/letsencrypt-auto revoke`コマンドで証明書を失効、`delete`コマンドで関連ファイルを削除。ドメイン名(saitodev.co)を指定して実行。 新サーバーでの証明書発行手順は別記事を参照。

 

チャットワークとGoogle Apps Scriptで音声入力で投稿してみる

/** Geminiが自動生成した概要 **/
Googleドキュメントの音声入力とGoogle Apps Scriptを連携させ、チャットワークへの投稿を音声で行う方法を紹介。 「チャットワーク(投稿内容)終了」と話しかけると、内容がチャットワークに送信されるスクリプトを作成。1分毎にスクリプトが実行され、ドキュメントの内容をチェック、投稿後ドキュメントはクリアされる。APIトークン、ルームIDの設定が必要。音声入力はドキュメントのツールから利用可能。Androidスマホでは音声入力の設定を事前に確認する必要がある。この方法で、両手が塞がっている状況でもチャットワークに投稿可能。実用時はタスク登録ルールやToの指定が推奨される。

 

Google Apps Scriptからチャットワークに投稿してみる

/** Geminiが自動生成した概要 **/
Google Apps Script (GAS)を使ってChatWorkに投稿する方法を紹介。ChatWorkClient for Google Apps Scriptライブラリを利用し、APIトークンとルームIDを指定することで簡単にメッセージを送信できる。GASのトリガー機能と組み合わせれば、Gmail受信やGoogleカレンダーの予定に基づいて自動投稿するなど、業務効率化に役立つアプリを簡単に作成可能。ChatWorkとG Suiteの連携で業務改善を実現できる。

 

PHPでチャットワークAPIを介してメッセージを投稿してみる

/** Geminiが自動生成した概要 **/
ChatWork APIを使用してPHPからマイチャットに投稿するスクリプトを作成。投稿は成功し、マイチャットに「PHPからテスト投稿」のメッセージが送信された。 また、ChatWorkでは電話代行サービスを開始しており、電話対応を減らす取り組みが進んでいる。仕事における電話が嫌煙される傾向が高まっている。

 

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

/** Geminiが自動生成した概要 **/
妻にGo言語を教えることにした。プログラミングを教えることで、教える側も理解を深め、学習効率が上がるためだ。Go言語を選んだ理由は、初心者にも扱いやすい点が多いからである。go runでLL言語のように手軽に実行でき、go buildでコンパイルもできる。システムプログラミングにも触れられるため、コンピュータの仕組み理解に役立つ。go fmtやgo importによる自動整形・補完でコードの書き方に迷うことも少ない。また、オブジェクト指向がないため学習コストが低い。冗長になりやすい、他言語学習時に混乱する可能性があるという欠点はあるものの、プログラミング入門には最適だと考える。妻の変化が楽しみだ。

 

WindowsでGo言語

/** Geminiが自動生成した概要 **/
Windows 10でGo言語開発環境を構築する手順をまとめた記事です。Git、Go、Atomエディタをインストールし、日本語化やGo開発に必要なパッケージを追加します。AtomでGoファイルを作成し、"hello world"を出力するサンプルコードの実行までを解説しています。Go言語のバージョンは1.9.4、Windowsは64bit版を使用しています。最後に、アンチウイルスソフトの設定が必要になる場合があることに触れています。

 

COMODO Internet Securityを利用しながらGoで書かれたプログラムを実行する

/** Geminiが自動生成した概要 **/
COMODO Internet SecurityがGoプログラムの実行をブロックする問題への対処法。COMODOの「アプリケーションのブロック解除」画面で、ブロックされたGoプログラムにチェックを入れ、「すべてのセキュリティコンポーネントのブロックを解除する」を選択する。これでAtomからの実行は可能になる。ただし、go buildで作成したバイナリは実行毎にブロックされるため、Goバイナリを無条件で実行する方法については未解決。

 

Google Apps ScriptのHTML Serviceでファイルアップロードを行う

/** Geminiが自動生成した概要 **/
Google Apps Script (GAS)のHTML Serviceでファイルアップロード機能を実装する方法を紹介。サンプルコードでは、HTMLフォームでファイルを選択・送信し、GAS側でGoogleドライブに保存、生成されたURLをHTMLに返す非同期処理を行っている。`google.script.run.withSuccessHandler()`でGAS側の関数を実行し、成功時の処理をHTML側で記述。フォーム送信イベント`onsubmit`でこの処理を呼び出し、アップロード後のURL表示を実現。この仕組みにOCR処理を組み合わせることで、画像アップロードと文字列抽出を同一画面で行うWebアプリ開発が可能になる。

 

Google Apps ScriptでJPEGの画像からOCRで画像内の文字列を取得してみた

/** Geminiが自動生成した概要 **/
Google Apps ScriptでJPEG画像からOCRで文字列を取得する方法を検証。GoogleドキュメントでのOCRをGASで自動化する方法を紹介している。 Drive APIを有効化し、画像URLを指定して`Drive.Files.insert`メソッドでGoogleドライブに挿入、`ocr:true`オプションでOCRを実行。 生成されたGoogleドキュメントには画像とOCR結果のテキストが含まれる。日付や画像中の文字認識は難しいが、本文は高精度で取得できた。以前試したGoogleドキュメント直接OCRより精度は高い。

 

Google Apps ScriptのHTML ServiceでGoogle Calendarの予定を取得してみる

/** Geminiが自動生成した概要 **/
社会人・学生向けプログラミング教室で、Googleスプレッドシートの拡張機能開発に関する勉強会が開催されました。参加者はGoogle Apps Scriptを用いて、スプレッドシートの操作やWeb API連携を学ぶことで、業務効率化やデータ分析に役立つ実践的なスキルを習得しました。具体的には、HTML ServiceとSpreadsheet Serviceを活用し、スプレッドシートデータの取得・表示、カスタムメニューの追加、外部サービスとの連携などを実践。参加者からは、日々の業務に活かせる具体的な知識を得られたと好評を得ました。さらに、Google Apps Scriptの基礎から応用までを体系的に学べるため、プログラミング初心者でも安心して参加できたという声も寄せられました。

 

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機能についても言及しています。

 

php-webdriverでセレクトボックスの値を選択する

/** Geminiが自動生成した概要 **/
php-webdriverでセレクトボックスの値を選択するには、要素を指定してクリックし、キーボード操作で値を入力する。値はoptionタグ内のテキストで指定する。ただし、この方法では動作が不安定な場合があるため、要素を`$element`変数に格納し、クリック→入力→クリックの順で操作することで安定性を向上させる。この方法により、選択直後の画面遷移にも対応できる。

 

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

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

 

さくらVPS上でSeleniumとphp-webdriverを利用する

/** Geminiが自動生成した概要 **/
さくらVPS(Ubuntu 16.04)にSeleniumとphp-webdriverによるUIテスト環境を構築する方法。Selenium実行には仮想デスクトップ(Xvfb)とChromiumが必要で、手順はApache/PHP設定、Java8、Selenium、Xvfb、Chromium、ChromeDriverインストール、そしてSelenium起動スクリプト(load.sh)作成。load.shはXvfbとSeleniumを同時に起動し、ブラウザは仮想デスクトップ上で動作する。動作確認は http://(VPSのIPアドレス):4444 で行う。Jenkinsの設定とload.shの自動起動設定は今後の課題。

 

Dropboxで同期しないフォルダを設定する

/** Geminiが自動生成した概要 **/
Dropboxの有料プランで、既に280GB使用しているアカウントに、容量20GBのVPSサーバにある4GBのサイトをバックアップする必要があった。Dropboxの容量がサーバ容量を大きく超えていたため、同期でサーバ容量が逼迫する懸念があった。しかし、Dropboxの「exclude add」コマンドで同期しないフォルダを指定し、不要なフォルダを逐次除外することで、サーバ容量の問題を回避できた。最終的に、バックアップスクリプトを作成しcronに登録することで、Dropboxを使ったサイトバックアップを実現した。

 

Socket.IOのチャットアプリでXSS対策

/** Geminiが自動生成した概要 **/
Socket.IOで作成したチャットアプリでXSS脆弱性対策を実施した。HTMLタグを入力するとエスケープされずに表示されてしまうため、`xss-filters`ライブラリを導入。`npm install xss-filters`でインストール後、サーバーサイドのメッセージ送信部分で`xssFilters.inHTMLData()`を用いて送信メッセージをフィルターした。その結果、HTMLタグがエスケープされて表示されるようになり、XSS攻撃を防ぐことができた。

 

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のバージョンアップについて

/** Geminiが自動生成した概要 **/
SOY CMSを古いバージョンから最新版にバージョンアップするには、0.1ずつ段階的にバージョンアップし、公式サイトのバッチファイルを適用します。1.5系以降は一気にバージョンアップできますが、初期管理者でログインしてキャッシュをクリアしてください。1.11系以降のSOY Shopは自動バージョンアップに対応しています。

 

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

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

 

Dropboxにバックアップする時はパスワード付きzipにしておく

/** Geminiが自動生成した概要 **/
Dropboxへのバックアップ時に、個人情報を含むデータベースをzip圧縮する際のセキュリティ強化策として、パスワード付きzipファイルの作成方法を紹介している。 zipコマンドの-eオプションで暗号化が可能だが、対話式でパスワード入力を求められるため、crontabでの自動化にはexpectコマンドを使用する必要がある。サンプルスクリプトでは、expectでパスワード入力を自動化し、指定ディレクトリをパスワード付きzipファイルとしてDropboxにバックアップする方法を示している。 スクリプトの実行例として、Dropboxへのアップロードとダウンロード後の解凍時にパスワードが要求されることを確認し、セキュリティが向上したことを示している。さらに、パスワードの強度を高める方法や都度生成する仕組みの必要性にも言及している。

 

SOY CMSのサイトのバックアップをDropboxで行う

/** Geminiが自動生成した概要 **/
SOY CMSサイトのDropboxバックアップ方法を紹介。まずDropboxアカウントを作成し、サーバーに64ビット版CLI版Dropboxをインストール。サーバをDropboxアカウントにリンク後、バックアップスクリプト(dbbackup.sh)を作成し、cronで毎朝3時にサイトディレクトリをzip圧縮してDropboxへ同期させるよう設定。自動起動設定としてcrontabの@rebootを利用。debファイル経由のインストール方法も追記。再起動しない場合はdropbox start -iコマンドを試す。パスワード付きzip化などの関連記事へのリンクも掲載。

 

SOY CMSで利用しているelFinderでjsファイルのアップロードを許可する

/** Geminiが自動生成した概要 **/
SOY CMSのファイルマネージャelFinderでJSファイルのアップロードを許可する方法。`/CMSのインストールディレクトリ/soycms/js/elfinder/php/connector.php`内の`uploadAllow`配列にJSファイルのMIMEタイプ `text/javascript` を追加することで実現できる。デフォルトではセキュリティのためJSファイルのアップロードは禁止されているが、この設定変更によりアップロードと編集が可能になる。ただし、不正ログイン時に悪意あるコード実行のリスクも高まるため、注意が必要。

 

SOY2DAOでSQLを実行して、オブジェクトで返す

/** Geminiが自動生成した概要 **/
SOY2DAOで複雑なSQLを実行しつつ、結果をオブジェクトで取得する方法が紹介されています。顧客テーブルとカスタムフィールドテーブルを結合し、特定のカスタムフィールド値を持つ顧客情報を取得する例が示されています。 `SOYShop_UserDAO` の `executeQuery` でSQLを実行し、結果の配列をループ処理で `getObject` メソッドに渡すことで、各レコードが `SOYShop_User` オブジェクトに変換されます。これにより、カスタムフィールドの値で検索しながら、必要な顧客情報のみをオブジェクトとして扱いやすく取得できます。この手法は、以前紹介されたSOY CMSの検索フォーム追加の記事でも活用されています。

 

SOY Mailの送信予約を使ってみよう

/** Geminiが自動生成した概要 **/
SOY Mailの送信予約機能はcronを用いて実現する。管理画面で送信日時を設定するが、cronの設定が必須。cronは「分 時 日 月 曜日 コマンド」の形式で記述し、コマンドはSOY Mail管理画面のヘルプを参照。送信日時とcron設定を一致させるとその時刻限定の送信となるため、10分おき等にSOY Mailのコマンドを実行し、予約日時を超えた未送信メールを送信するよう設定するのが効率的。ただし、サーバによっては短時間での大量送信でエラーとなる場合があるため、SOY Mailの分割配信機能を考慮し、最低でも20分間隔での実行が推奨される。

 

WordPressのプラグインを作ってみた1

/** Geminiが自動生成した概要 **/
WordPressプラグイン作成の入門記事。REST APIサービスのWordPress対応のため、プラグイン「hoge_world」を作成する例を紹介。プラグインファイル(/wp-content/plugins/hoge_world/hoge_world.php)を作成し、コメントと`HogeWorld::call()`関数を定義。管理画面のプラグイン一覧に表示され、テーマファイル(例:sidebar.php)に`<?php HogeWorld::call(); ?>`を記述することで「hoge worldだー!」と表示されることを示している。

 

MySQLのバックアップスクリプトを作成してみた

/** Geminiが自動生成した概要 **/
CPIの仮想専用サーバで開発中に、無料の50GBバックアップサーバを利用してMySQLのデータベースをバックアップするシェルスクリプトを作成した。スクリプトは`mysqldump`で全データベースをダンプし、gzipで圧縮、`scp`と`expect`を用いてパスワード認証でバックアップサーバに転送する。`expect`はscpのパスワード入力を自動化し、cronでの実行を可能にする。古いバックアップファイルの削除処理は未実装。`chmod +x`で実行権限を与え、cronで毎日実行するように設定。最後にバックアップサーバにbackupディレクトリを作成し、動作確認を行った。

 

SOY Shopで購入回数属性自動振り分けプラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY Shopのメールマガジン機能では、購入回数による絞り込み送信ができないため、顧客属性を活用する必要がある。しかし、手動設定は顧客数が多いと手間がかかる。そこで、購入回数に応じて自動で属性を振り分けるプラグインが開発された。管理画面で回数と属性名を設定し、cronに自動更新スクリプトを登録すれば、顧客全員に自動で属性が設定される。このプラグインにより、購入回数に基づいたメール配信が可能になる。ダウンロードはSOY CMSフォーラムにて提供されている。

 

SOY Shopで非同期カートボタンプラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY Shopで非同期カートを実現するプラグインが開発されました。以前の記事で紹介された非同期カートボタンの実装方法では、特定IDの要素がない場合に動作が停止したり、カート追加時の商品個数が1に固定される問題がありました。このプラグインは、これらの問題を解決し、商品個数の指定も可能にします。インストールするだけで必要なスクリプトが自動挿入されるため、導入も簡単です。ダウンロードはsaitodev.co/soycms/soyshop/ から可能です。

 

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

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

 

Go言語でサーバのバックアップの仕組みを作ろう。ファイルの更新編

/** Geminiが自動生成した概要 **/
Go言語でサーバのバックアップスクリプトを改良し、ファイルの更新日時をチェックするようにした。前回は全ファイルをコピーしていたが、今回はバックアップ元と先のファイルの更新日時を比較し、元ファイルが新しい場合のみコピーする処理を追加。`os.FileInfo`の`ModTime()`メソッドで更新日時を取得し、Unixタイムに変換して比較することで実現した。コード例では`filepath.Walk`でファイルを走査し、更新日時が新しいファイルのみ`io.Copy`でコピーしている。

 

SOY CMSでプラグインブロックを追加してみた

/** Geminiが自動生成した概要 **/
SOY CMSのスクリプトモジュールブロックをプラグイン化し、簡単に導入できる「プラグインブロック」機能が追加されました。サイト構築時に毎回スクリプトを設定する手間を省き、記事一覧表示の効率化を実現します。プラグインをインストール後、ブロック設定でプラグインブロックを選択し、プラグインIDを指定するだけで利用可能です。プラグインIDは各プラグインの詳細説明に記載されています。この機能はsoycms_1.8.12p7.2以降で使用可能で、GitHubからパッケージをダウンロードできます。バージョンアップ時はuser.config.phpにPluginBlockComponentの追加が必要となる場合があります。

 

SOY CMSのブロックで記事のランダム表示

/** Geminiが自動生成した概要 **/
SOY CMSのブロックで記事をランダム表示するスクリプトモジュールブロックのコードが紹介されています。指定したラベルの記事をランダムに並び替え、指定件数分出力します。 `/site(サイトID)/script/soycms_random.php` にPHPコードを記述し、テンプレートで `cms:label` にラベルID、`cms:count` に取得件数を指定することで利用できます。コードはフォーラムにもアップロードされています。記事の取得件数を指定しない場合は、該当ラベルのすべての記事を取得しランダムに表示します。

 

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

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

 

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

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

 

SOY CMSで複数のブログ記事をまとめて検索できる機能を作ってみた

/** Geminiが自動生成した概要 **/
SOY CMSで複数のブログ記事をまとめて検索する機能を作成。従来のスクリプトモジュールブロックでは、記事取得後にブログ判別ができず適切なURLを出力できなかったため、cms:moduleを利用。SQLでラベルIDを指定して2つのブログから記事を取得し、取得結果からラベルIDに応じてURLを生成、出力することで複数ブログ検索を実現。モジュールではSQL実行結果を直接利用できるため、Entryオブジェクトへの変換が不要で、柔軟なURL生成が可能となった。

 

検索フォームと検索結果ページを作ってみた3

/** Geminiが自動生成した概要 **/
SOY CMSで検索機能を実装する方法を解説。`/site(サイトID)/script/soycms_search.php`に検索スクリプトを記述。SQLで記事タイトル、本文、追記フィールドを検索し、公開期間内の記事を抽出。結果はEntryオブジェクトに変換後、配列`$soycms_search_result`に格納。テンプレートには`<form method="get" action="/search">`で検索フォームを設置し、クエリパラメータ`q`で検索文字列を受け取るようにする。`$dao->getObject($row)`で検索結果をEntryオブジェクトに変換することで、テンプレートに記述した`<!-- block:id="result" -->`で表示可能になる。

 

検索フォームと検索結果ページを作ってみた2

/** Geminiが自動生成した概要 **/
記事「検索フォームと検索結果ページを作ってみた3」では、検索結果ページに記事一覧を表示する具体的な実装方法を解説しています。 前記事で準備した`entry_search`関数に検索ロジックを記述します。まず、`soycms_search.php`にデータベースへの接続設定を追加し、クエリ文字列から検索キーワードを取得します。取得したキーワードを元にデータベースを検索し、結果を配列に格納します。 記事一覧の表示には、取得した配列をループ処理で展開し、各記事のタイトルとURLを表示します。記事タイトルはリンクとして設定し、クリックすると詳細ページへ遷移するようにします。また、検索結果が0件の場合には「該当する記事は見つかりませんでした」と表示する処理も追加します。 これらの処理により、ユーザーが入力したキーワードに合致する記事一覧が検索結果ページに表示されるようになります。

 

検索フォームと検索結果ページを作ってみた1

/** Geminiが自動生成した概要 **/
スクリプトモジュールブロックを使用して記事検索機能をSOY CMSに追加する方法について説明しています。まず、user.config.phpでスクリプトモジュールを許可し、次にブロックタイプリストにScriptModuleBlockComponentを追加します。記事中の特定の文字列を検索したり、記事をグループ化したりできるようになります。このモジュールを使用することにより、ブログに検索機能を追加し、ユーザーが記事をより簡単に検索できるようにすることができます。


Powered by SOY CMS   ↑トップへ