ブログ内検索

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

【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で管理画面のIPアドレス制限を追加しました

/** Geminiが自動生成した概要 **/
SOY CMSの管理画面に、IPアドレス制限機能が追加されました。 従来の.htaccessによる制限だと、出張先などIPアドレスが異なる場所からアクセスする際に、都度設定変更が必要でした。 新機能では、管理画面から一時的に制限を解除する「アンロック」が可能になり、利便性が向上しました。 解除方法は、セキュリティに配慮し、URLを手動で作成する方式を採用しています。 今回のアップデートにより、柔軟かつ安全な管理画面へのアクセス制限が可能になりました。ダウンロードは公式サイトからどうぞ。

 

SOY CMSの各プラグインのアイコンの変更方法について

/** Geminiが自動生成した概要 **/
2007年リリースのSOY CMSには、あまり知られていない機能が存在します。それは、プラグイン管理画面に表示される各プラグインのアイコンをカスタマイズできる機能です。 初期状態ではすべてのプラグインのアイコンが豆蔵アイコンになっていますが、128x128ピクセルのGIF画像を「icon.gif」というファイル名でプラグインディレクトリに配置することで、任意のアイコンに変更できます。 これはリリース当初から存在する機能でしたが、当時のプラグイン数は少なく、あまり活用されませんでした。しかし、10年以上経過しプラグイン数が増加した現在、この機能を活用することで、目的のプラグインを見つけやすくなる可能性があります。

 

Raspberry PiでScratch3.0の開発環境を構築する

/** Geminiが自動生成した概要 **/
Raspberry PiにScratch3.0の開発環境を構築する方法を解説しています。 Node.jsのバージョンはScratch3.0との互換性のため14.20.1を使用し、パッケージ管理にはYarnを採用しています。 まずNode.jsとnpmをインストール後、nを使ってNode.jsのバージョンを管理します。次に、scratch-vmとscratch-guiのリポジトリをクローンし、yarn linkとyarn installコマンドで依存関係を解決します。 最後にyarn startコマンドでVMを起動し、ブラウザからhttp://localhost:8601/ にアクセスするとScratch3.0の画面が表示されます。 記事ではyarn installに時間がかかること、エラーが発生しても問題ない場合があることなど、注意点も解説されています。

 

Minecraft: Pi Edition: RebornのSDKを使ってゴールデンシャベルを追加してみた

/** Geminiが自動生成した概要 **/
この記事は、Minecraft: Pi Edition: Reborn (MCPI++) のSDKを使って、ゲームに「ゴールデンシャベル」を追加する方法を解説しています。 まず、MCreatorを使って16x16ピクセルのゴールデンシャベルのアイコン画像を作成し、既存のitems.pngに挿入します。次に、C++で書かれたgoldenshovel.cppを作成し、アイテムの追加、アイコンの設定、ゲーム内での表示名などを定義します。最後に、CMakeを使ってコードをコンパイルし、生成されたライブラリファイルをmodsディレクトリに配置することで、ゴールデンシャベルがゲームに追加されます。 記事では、コードの各部分がどのような役割を持っているか、また画像ファイルやCMakeLists.txtの設定方法などが詳しく解説されています。

 

Minecraft: Pi Edition: RebornのSDKを使ってみる

/** Geminiが自動生成した概要 **/
Minecraft: Pi Edition: Reborn (MCPI) の拡張SDKを使い、ターミナルに"Helloworld"を出力する手順を紹介しています。 まずMCPI++ 2.4.3-3をインストールし、C++コンパイラなどの開発環境を整えます。 次に、"Helloworld"を出力するコードを記述した"hello.cpp"を作成し、共有ライブラリとしてコンパイル、MCPIのmodsディレクトリに配置します。 MCPIを実行すると、起動時に"Helloworld"が出力されます。これは、共有ライブラリ内の特定の関数がエントリポイントとして機能するためです。 記事では最後に、ゲーム画面に影響を与えるコードの作成に意欲を示しています。

 

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

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

 

SOY CMSで一つ深い階層にサイトを作成する

/** Geminiが自動生成した概要 **/
SOY CMSで、サイトを一つ深い階層に作成する方法を解説します。 まず、サイトIDを「hoge」として、/var/www/html/hogeにサイトを作成します。次に、/var/www/html/hoge/huga のように、hugaディレクトリを作成し、必要なファイルを配置します。 データベースのSiteテーブルを開き、サイトIDが「hoge」のレコードのurlとpathを、それぞれ `http://example.com/hoge/huga/` と `/var/www/html/hoge/huga/` に変更します。 最後に、/var/www/html/hoge/huga/.htaccess の RewriteBase を `/hoge/huga` に変更します。 稼働中のサイトのURLを変更する場合は、上記の手順に加えて、SOY CMS管理画面でサイトURLを変更する必要があります。

 

Ubuntu + LXDEでデスクトップにFirefoxアイコンを設置する

/** Geminiが自動生成した概要 **/
この記事は、Ubuntu 22.04 LXDE環境でデスクトップにFirefoxのアイコンを設置できない問題を解決する方法を解説しています。 問題はsnap版Firefoxをインストールした場合に発生し、デスクトップエントリを作成することで解決できます。 手順としては、 1. `/usr/share/applications/firefox.desktop` ファイルを作成し、必要な情報を記述します。 2. メニューからFirefoxを見つけて右クリックし、「デスクトップに追加」を選択します。 これにより、デスクトップにFirefoxのアイコンが設置されます。記事ではデスクトップエントリの詳細についても触れています。

 

ChromebookでOpenVPN Connect経由でVPNに接続

/** Geminiが自動生成した概要 **/
ChromebookでOpenVPN Connectを使ってVPN接続する手順のメモ。必要な証明書ファイル等をPlayファイル内のAndroidディレクトリに作成したフォルダに配置し、OpenVPN ConnectアプリでOVPNファイルを読み込むことで接続できた。Playファイルはアプリから参照できるディレクトリがダウンロードのみのため、誤操作防止のためAndroidディレクトリ内にフォルダを作成して証明書を配置した。

 

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のMIMEタイプの制限設定でページ毎の設定を追加しました

/** Geminiが自動生成した概要 **/
SOY CMSのファイルアップロード制限をページごとに設定できるようになりました。記事投稿画面とファイルマネージャで許可するMIMEタイプを分けたいという要望に応え、設定ファイルにELFINDER_MODEという定数を追加。これにより、例えば記事投稿画面では画像ファイルのみ、ファイルマネージャではCSSやJSファイルのみ許可するといった設定が可能になりました。設定は /CMSインストールディレクトリ/common/config/upload.config.php 内でELFINDER_MODEの条件分岐を用いて$mimetypes配列を定義することで行います。最新のパッケージは公式サイトからダウンロードできます。

 

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のモジュールで公開期限付きのcms:ignoreのようなものを作成してみる

/** Geminiが自動生成した概要 **/
SOY CMSで公開期限付きcms:ignoreを実現するモジュールの作成方法を解説。指定期間内のみコンテンツを表示する機能で、`/ドキュメントルート/サイトID/.module/parts/ignore.php`にPHPコードを記述する。コードでは`mktime`と`time`関数で期間を指定し、`addModel`で表示条件を設定。テンプレートには`<!-- cms:module="parts.ignore" -->`等を記述して使用する。SOY Shopでは`soycms_ignore`を`soyshop_ignore`に、`cms:module`を`shop:module`に変更すれば利用可能。

 

SOY CMS / SOY ShopでファイルのアップロードをMIMEタイプで制限できる設定を追加しました

/** Geminiが自動生成した概要 **/
SOY CMS/SOY Shopで、ファイルアップロード時のMIMEタイプ制限設定が追加されました。ユーザー要望に応え、記事作成、テンプレート、elFinderからのアップロード時に、JavaScriptファイルの許可やPDFの禁止等が可能になります。従来のバージョンアップでカスタマイズが消える問題も解消。設定は、`/CMSインストールディレクトリ/common/config/upload.config.php.sample`を`upload.config.php`にリネームし、許可するMIMEタイプを`$mimetypes`配列に追加するだけです。最新パッケージはサイト(https://saitodev.co/soycms/)からダウンロード可能です。

 

ARM版ChromebookにDropboxをインストールする

/** Geminiが自動生成した概要 **/
ARM版ChromebookでLinuxアプリのDropboxを使うには、.debパッケージが使えないためDbxfsを利用する。pip3でDbxfsをインストール後、Dropboxフォルダを作成し、dbxfsコマンドを実行。表示されるURLにアクセスし、Dropboxにログインして認証コードを取得、端末に入力する。パスフレーズを設定すれば、Linuxファイル配下でDropboxのファイルが操作可能になる。Android版DropboxはChromebookのFilesのLinux共有に対応していないため、この方法が必要。

 

SOY ShopのB2CSVプラグインの送り状種類の項目で送料で分ける方法

/** Geminiが自動生成した概要 **/
SOY ShopのB2CSVプラグインで、送料ごとに送り状種類を自動で変更する隠し機能が追加されました。送料800円なら発払い(0)、200円ならネコポス(7)のように設定可能です。`/soyshop/webapp/src/module/plugins/b2_order_csv/form/B2ExportFormPage.html`を`_B2ExportFormPage.html`にリネームし、`<input type="hidden" name="Pattern[金額]" value="送り状種類">`をHTMLに追加することでカスタマイズできます。金額と送り状種類の対応を複数指定可能です。最新版のSOY Shopへのアップデート推奨。

 

SOY CMS / SOY ShopのクッキーやセッションでSameSiteの設定を行う

/** Geminiが自動生成した概要 **/
SOY CMS/SOY ShopでクッキーとセッションのSameSite属性を変更する方法について解説されています。標準ではLaxに設定されていますが、Strictに変更したり、SameSite=None; Secure=true;にすることができます。設定は /CMSインストールディレクトリ/common/config/session.config.php 内の $sessCnf["samesite"] の値を編集することで行います。例えば、Strictに変更する場合は "Strict" を設定します。この変更はSOY CMSとSOY Shop全体に反映されます。変更後のパッケージはsaitodev.co/soycms/からダウンロード可能です。

 

OpenStreetMap + Leafletでカスタムアイコンを使ってみる

/** Geminiが自動生成した概要 **/
OpenStreetMapとLeafletを使って地図上にカスタムアイコンを表示する方法を紹介しています。 シンプルなマーカー設置では、L.icon()でアイコンオブジェクトを作成し、L.marker()のオプションで指定します。 L.geoJSONを使う場合は、GeoJSONデータのpropertiesにiconオブジェクトを追加し、pointToLayerオプションで条件分岐することで、特定のマーカーのみカスタムアイコンに変更できます。 記事では、摂津峡のマーカーにnature.pngというカスタムアイコンを設定する例を示しています。

 

WordPressのデータベースのスキーマを調べる

/** Geminiが自動生成した概要 **/
WordPressからのデータ抽出のため、データベーススキーマのバージョン調査を行った。テーブル名は`wp-includes/wp-db.php`に定義されており、バージョン2.5.0から変更がない。テーブルスキーマは`wp-admin/includes/schema.php`にSQLで定義され、バージョン3.3.0から変更がないことがわかった。よって、データ抽出ツールはWordPress 3.3.0以降に対応させ、それ以前のバージョンはアップグレードしてから利用するよう条件付けすれば良い。

 

SOY Shopで管理画面でSOY Shopらしさをなくす

/** Geminiが自動生成した概要 **/
SOY Shopでショップサイト以外を作成するケースが増加し、管理画面から「ショップ」の文字を削除したいというニーズに対応するため、管理画面のURLの「soyshop」部分を変更できる機能が追加されました。 設定方法は、`/CMSインストールディレクトリ/common/config/admin.uri.config.php.sample` を `.php` にリネームし、`define("SOYSHOP_ADMIN_URI", "soyshop");` の `soyshop` を任意の文字列に変更します。その後、ファイル内の指示に従って必要なディレクトリとファイルを作成し、キャッシュを削除すれば設定完了です。 この機能は最新のSOY CMSとSOY Shopのパッケージに含まれています。現状ではSOY Shopのみに対応しており、SOY CMS側は未対応です。

 

SOY CMSの管理画面のHTMLファイルの探し方

/** Geminiが自動生成した概要 **/
SOY CMSの管理画面UIをカスタマイズするには、該当HTMLファイルを見つける必要があります。例としてページテンプレート編集画面(URL例: `http://example.com/cms/soycms/index.php/Page/Detail/3`)を挙げます。 HTMLファイルは`cms/soycms/webapp/pages`ディレクトリ以下に配置されています。URLの`Page/Detail`部分がディレクトリとファイル名に対応します。まず`pages`ディレクトリ内の`Page`ディレクトリを探します。次に`Detail`ディレクトリを探しますが、存在しない場合は`DetailPage.html`が目的のファイルです。通常、`DetailPage.class.php`というPHPファイルも対で存在します。これらはSOY2HTMLの仕組みを利用しており、より深く理解するには関連の記事を参照ください。

 

SOY CMSでスマホでブログ投稿プラグインを作成しました

/** Geminiが自動生成した概要 **/
Core Web Vitalsは、ユーザーエクスペリエンスを測定する重要なSEO指標です。特にLargest Contentful Paint(LCP)はページの読み込み速度を、First Input Delay(FID)はインタラクティブ性、Cumulative Layout Shift(CLS)は視覚的な安定性を評価します。これらを改善することで、ユーザーの離脱率を減らし、SEOランキング向上に繋がります。画像最適化はCore Web Vitals改善の有効な手段で、Guetzliは高品質を維持しながらファイルサイズを大幅に削減できるツールです。Guetzliを用いることで、LCPの改善に大きく貢献し、結果としてWebサイトのパフォーマンス向上とSEO対策に繋がります。

 

データ構造のキューとリングバッファを見る

/** Geminiが自動生成した概要 **/
Go言語のテスト方法に関する記事の要約です。Goでは`*_test.go`ファイルにテスト関数を記述します。テスト関数は`TestXxx`という命名規則に従い、`*testing.T`を引数に取ります。`t.Error`や`t.Errorf`でテスト失敗を報告し、`t.Log`でログを出力します。`go test`コマンドでテストを実行でき、`-v`オプションで詳細表示、`-cover`でカバレッジ計測が可能です。記事では具体的なテスト例として、文字列の等価性チェックやエラーハンドリングのテストが紹介されています。また、外部パッケージのテストやテストデータの扱いについても触れられています。

 

字句解析器を作る為にデータ構造のスタックを見る

/** Geminiが自動生成した概要 **/
Go言語のテスト方法を解説した記事の要約です。Goでは`*_test.go`ファイルにテスト関数を記述します。テスト関数は`Test*`という名前で、`*testing.T`を引数に取ります。`t.Error`や`t.Errorf`でテスト失敗を報告、`t.Log`でログ出力、`t.Run`でサブテストを実行できます。`go test`コマンドでテストを実行し、カバレッジは`go test -cover`で確認できます。記事では具体的な例として、加算関数`Add`のテストコードを`add_test.go`に記述し、正常系と異常系のテストケースを実行する方法を紹介しています。また、テーブル駆動テストを用いて複数のテストケースを簡潔に記述する方法も説明しています。

 

Dropbox-Uploaderでサーバの負担を軽減する

/** Geminiが自動生成した概要 **/
サーバのDropbox容量圧迫問題をDropbox-Uploaderで解決する手順。 1. Dropbox-Uploaderをダウンロード&セットアップ(アクセストークン取得含む)。 2. 送信したいファイルをサーバに配置。 3. rootのcrontabで、`dropbox_uploader.sh upload`コマンドを使い、指定時間にDropboxへアップロードするよう設定。 4. 常駐Dropboxを停止(`dropbox stop`)し、`top`コマンドで停止確認。 これにより、常駐Dropboxが不要になり、サーバ負荷を軽減できる。

 

PHPのOPCacheで生成されるキャッシュを見る

/** Geminiが自動生成した概要 **/
PHPのオペコードを確認するにはVLD拡張モジュールを使用します。VLDはPHPスクリプトをコンパイルし、生成されたオペコードを人間が読める形式で出力します。出力には、各オペコードの行番号、オペコードの種類、オペランド、結果などが含まれます。これにより、PHPスクリプトの実行方法を詳細に理解し、パフォーマンスのボトルネックを特定するのに役立ちます。VLDのインストールはPECLを利用し、php.iniで`vld.active=1`などを設定することで有効化できます。関数`vld_dump()`で特定の関数のオペコードを出力することも可能です。

 

WSL2でSOY CMSの開発環境を作ってみた(virtualhost編)

/** Geminiが自動生成した概要 **/
WSL2上のUbuntuにApache2とPHPで構築したSOY CMS環境に、VirtualHostを追加する方法を解説しています。`/etc/apache2/sites-available/`にある`000-default.conf`を`demo.conf`にコピーし、ポートを8080、DocumentRootを`/home/ryoko/workspace/demo`に変更、アクセス許可の設定を追加します。`a2ensite`コマンドで有効化し、Apache2を再起動後、`localhost:8080`でSOY CMSの管理画面が表示されれば成功です。

 

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 CMSを介さずにSOY2Mailでメールを送信してみる

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

 

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>タグが利用可能になる。 ただし、この方法は本体への直接編集となるため、バージョンアップの度に修正が必要となる。

 

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

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

 

fatal: write error: No space left on deviceの対処

/** Geminiが自動生成した概要 **/
ArchWikiのLogrotateの記事は、ログファイルの自動ローテーション、圧縮、削除を行うためのツール、logrotateの使い方を解説しています。設定ファイル(/etc/logrotate.conf, /etc/logrotate.d/)でローテーション間隔、保持期間、圧縮有無などを指定し、通常はcronで毎日実行されます。設定ファイルの各ディレクティブは、ローテーション頻度(daily, weeklyなど)、保持数(rotate)、圧縮(compress)、ローテーション後のファイル名(olddir, ifempty)、実行権限(create)、所有者(user, group)、実行スクリプト(prerotate, postrotate)などを制御します。 トラブルシューティングとして、デバッグオプション(-d)で動作確認、ログ(/var/lib/logrotate/status)のチェックが有効です。

 

SOY CMSのHTMLキャッシュプラグインで高速化

/** Geminiが自動生成した概要 **/
SOY CMSのHTMLキャッシュプラグインは、サイト高速化を実現する強力なツールです。従来の静的化プラグインの欠点を克服し、標準ページを含む全ページをキャッシュ対象としつつ、ページごとにキャッシュの有効/無効を設定できる柔軟性を備えています。これにより、SOY Shop連携など動的なコンテンツを含むページでも最適なパフォーマンスを実現できます。HTMLキャッシュは、PageSpeed Insightsのスコア向上に貢献するだけでなく、メディア露出時の急激なアクセス増加にも対応できる安定性を提供します。内部SEO対策としても有効で、情熱大陸放送後のアクセス集中を乗り切った事例からもその効果が実証されています。パッケージはsaitodev.coからダウンロード可能です。SEO対策に関する詳細はsaitodev.co/category/SEOをご覧ください。

 

SOY InquiryでParsley.jsを利用する

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

 

SOY CMSでDropboxバックアッププラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY CMS向けDropboxバックアッププラグイン(β版)を開発しました。CLI版不要で、Dropbox APIを利用しサーバからDropboxへ直接バックアップファイルを転送します。PHPのZipArchive、またはコマンドラインzip、サイトディレクトリへの圧縮権限、サーバの空き容量が必要です。詳細はサイト(saitodev.co/soycms/)で確認し、手動バックアップの上、利用ください。

 

PHPのexec関数でセッションの値の引き継ぎに苦戦した時のメモ

/** Geminiが自動生成した概要 **/
Amazon Linux 2のLAMP環境で、PHPの`exec`関数を使ってGoogle Analytics APIにアクセスする際にセッションの引き継ぎに失敗した。`exec`で実行した`cmd.php`内で`session_start()`してもセッション情報が取得できなかった。調査の結果、`cmd.php`内では`session_save_path()`の戻り値が空文字列になっていた。`session_save_path("/var/lib/php/session");`を`session_start()`前に追加することでセッション情報が取得できるようになり、APIアクセスも成功した。`php.ini`の`session.save_path`の設定が原因と考えられるが、未検証。

 

SOY CMSでMySQL8系に接続できない時の対処

/** Geminiが自動生成した概要 **/
MySQL8系にアップグレード後、SOY CMSが「データベースの接続に失敗しました」エラーで起動しない場合の対処法。原因はMySQL8.0の認証方式変更にPHPのPDOが対応していないため。Ubuntu環境で、MySQLの設定ファイル(/etc/mysql/mysql.conf.d/mysqld.cnf)の[mysqld]セクションに`default_authentication_plugin=mysql_native_password`を追加し、MySQLを再起動することで解決する。これはPDOの対応までの応急処置。

 

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

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

 

さくらの追加ストレージ(NFS)内のファイルをDropboxで同期したい

/** Geminiが自動生成した概要 **/
さくらインターネットのVPSに追加ストレージ(NFS)を導入し、サイトのバックアップファイルを格納。Dropboxと同期するために、NFS上のバックアップファイル(/var/www/html/site/storage/backup/site.zip)へのシンボリックリンクをDropboxディレクトリ(/home/*****/Dropbox/backup/)に作成した。 DropboxのWebサイトで確認したところ、シンボリックリンク経由でファイルが同期されていた。ただし、リンク先のファイル更新をDropboxに認識させるには、シンボリックリンクのタイムスタンプを`touch -h /home/*****/Dropbox/backup/site.zip`で更新する必要がある。 ※ この方法はDropbox側で廃止されたため、現在はDropbox-Uploaderを利用して直接ファイル転送を行う方式に変更されている。

 

SOY Inquiryの自動送信メールの多言語化

/** Geminiが自動生成した概要 **/
SOY Inquiryで多言語サイトを構築する際、問い合わせ番号や日時が日本語で送信される問題を解決する方法です。mail.user.phpをカスタマイズし、メール本文中の「問い合わせ番号」「問い合わせ日時」を各言語に置換します。コード例では、explodeで本文を分割し、strposで該当箇所を特定、str_replaceで置換後、implodeで再構築しています。この方法で各言語用のフォームを用意すれば、多言語対応の問い合わせメールを実現できます。

 

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

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

 

Windows10 Apache2.4でlocalhostの接続拒否の解決方法

/** Geminiが自動生成した概要 **/
Windows10のアップデート後、Apache2.4のlocalhostが接続拒否となった。httpd.confのInclude行のコメントアウトを外す際に、VirtualHost行のコメントも外してしまったことが原因でsyntaxエラーが発生していた。さらに、httpd-vhosts.confのVirtualHost設定で指定されたDocumentRootのsoycmsディレクトリが欠落していたため、Apache再起動時にエラーが発生。管理者権限でコマンドプロンプトを実行し、Apacheを再起動することでlocalhostへの接続が復旧した。httpd.confのDocumentRoot設定は修正不要であったが、httpd-vhosts.confで指定したDocumentRootディレクトリは必須であることが判明した。

 

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

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

 

SOY Inqiuryでお問い合わせ内容をコンパクトにする

/** Geminiが自動生成した概要 **/
SOY Inquiryで長い項目名によってメール表示が崩れる問題を解決する方法です。フォームテンプレートディレクトリ(例:default)にmail.admin.phpを作成し、PHPでメール内容を整形します。 提供されたコードは、メール本文の各行を処理し、コロン以降の空白文字を削除して出力します。これにより、項目名と入力値の間のスペースが詰まり、コンパクトな表示になります。管理者宛メールのみ変更され、公開側の表示は変わりません。

 

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`等にアクセスし、意図したファイルが表示されれば設定完了。

 

Go言語でSearch Consoleの値を取得してみる

/** Geminiが自動生成した概要 **/
Go言語でGoogle Search Console APIから検索クエリデータを取得する方法を解説しています。必要な手順として、Google Cloud ConsoleでSearch Console APIを有効化し、認証情報を作成、Search Console側でユーザー権限を設定します。Goのコードでは、`golang.org/x/oauth2`、`google.golang.org/api/webmasters/v3`ライブラリを使用し、認証情報`secret.json`を用いてSearch Console APIにクエリを送信、過去7日間の検索クエリデータを取得・表示します。

 

Go言語の構造体2

/** Geminiが自動生成した概要 **/
Go言語の構造体について解説しています。大文字で始まるフィールドは外部パッケージからアクセスできますが、小文字で始まるフィールドはアクセスできません。小文字フィールドへのアクセスは、パッケージ内に`Set~`や`Get~`のようなメソッドを定義することで実現します。具体例として、`Person`構造体の`name`フィールド(小文字)へのアクセス方法を説明しています。`pac`パッケージ内で`SetName`メソッドを定義し、`main`パッケージから`person.SetName("ryoko")`のように呼び出すことで、`name`フィールドに値を設定できます。

 

Go言語のパッケージの関数とメソッドについて

/** Geminiが自動生成した概要 **/
Go言語のパッケージ内の関数と、構造体に紐づくメソッドの使い分けについて解説。`pac`パッケージ内の`Person`構造体を例に、`pac.GetName()`はパッケージ関数として`usako`を返し、`person.GetName()`は`Person`構造体のメソッドとして、`person`の`name`フィールド値を返す。パッケージ関数は構造体とは無関係だが、メソッドは構造体のフィールドにアクセスできる。`person := pac.NewPerson()`で構造体インスタンスを取得し、`person.SetName()`でフィールド値を設定する例も示している。

 

Go言語でQtを扱ってみる on Windows

/** Geminiが自動生成した概要 **/
Windows10でGo言語とQtの開発環境を構築する方法を解説。MSYS2とQtをインストールし、Go言語のパッケージを取得・設定後、サンプルコードを実行する手順を説明。環境変数の設定やQtインストール時のコマンド、Goのパッケージ設定コマンド、サンプルコード実行コマンド、発生したエラーと解決策(libicudt61.dll不足)について記述。

 

Go言語でQtを扱ってみる on Ubuntu

/** Geminiが自動生成した概要 **/
Ubuntu 18.04にGo言語とQtをインストールし、GoでQtアプリケーションを開発する手順を記録した記事です。Go 1.11、Qt 5.11.1をインストールし、QtのサンプルWebブラウザの実行を確認後、GoのQtバインディングパッケージ`github.com/therecipe/qt`をインストールしました。`qtsetup`コマンドでパッケージの準備中に問題が発生しましたが、`generate`終了時点で中断し、サンプルプログラムを実行したところ、正常に動作することを確認しました。

 

Go言語のSQLiteドライバでデータを挿入してみる

/** Geminiが自動生成した概要 **/
Go言語でSQLiteを操作し、データを挿入する手順を説明しています。まず、MSYS2を用いてSQLiteドライバをインストールします。次に、`sql.Open`でデータベースを開き、`db.Exec`でSQL文を実行します。テーブル作成の例では、`CREATE TABLE`文を変数`s`に格納し、`db.Exec(s)`で実行します。データ挿入の例では、`INSERT INTO`文を変数`t`に格納し、`db.Exec(t)`で実行します。`_ "github.com/mattn/go-sqlite3"`は必須で、手動で追記する必要があります。

 

Go MobileでAndroidアプリの実行までを見てみる

/** Geminiが自動生成した概要 **/
Go Mobileは、GoでAndroidおよびiOSのネイティブアプリを構築するためのツールとライブラリを提供します。クロスコンパイルにより、Goのコードをモバイルプラットフォームのネイティブライブラリに変換し、既存のモバイルアプリに統合することも、スタンドアロンアプリとして構築することも可能です。 OpenGL ES 2や、タッチ、センサーイベントへのアクセスなど、モバイルプラットフォームの機能を活用するためのAPIを提供しています。ただし、Go Mobileはまだ実験的な段階にあり、完全な機能提供には至っていません。詳細な情報や最新の状況は、公式Wikiを参照ください。

 

Go言語のGo MobileでAndroidアプリを開発してみる

/** Geminiが自動生成した概要 **/
Ubuntu 18.04 でGo言語を用いてAndroidアプリ開発を行う手順を解説。Go Mobileを利用し、サンプルコードをAndroid端末で実行するまでを扱う。 開発環境としてJava8、Android NDK r16b、Go 1.10.3を導入。 zshを使用しているため、`.zshrc` にパスを設定。 Go Mobileのインストールと初期化後、サンプルコード`golang.org/x/mobile/example/basic`を取得し、`go run`で動作確認。 `gomobile build`コマンドでapkファイルを生成し、Dropbox経由でAndroid端末に転送、インストール、実行。 端末の設定で「提供元不明のアプリ」を許可する必要がある。

 

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

/** Geminiが自動生成した概要 **/
SOY CMSを使わずにSOY2DAOでSQLを実行し、オブジェクトで結果を取得する方法を解説しています。 独自SQLの実行には`executeQuery()`ではなく`executeObjectQuery()`を使用します。`executeObjectQuery()`の第一引数にSQL文、第二引数にDAOクラス名を指定します。戻り値は指定したクラスのオブジェクト、もしくはオブジェクトの配列となります。記事では、`SOY2Sample`クラスと対応するテーブル`soy2_sample`を例に、`id`と`text`を取得するSQLを実行し、結果を`SOY2Sample`オブジェクトの配列として受け取る方法をコード付きで示しています。これにより、データベースから取得したデータをオブジェクトとして扱いやすくなります。

 

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

/** Geminiが自動生成した概要 **/
SOY CMSを使わずにSOY2DAOを単体で利用する方法を紹介。SQLiteのインメモリデータベースを例に、テーブル作成、データ挿入、検索のコードを記述。WEBAPP_DIRの定義、SOY2のinclude、RootDir設定、SOY2DAOConfigによるDSN設定を行い、SOY2DAOでSQLを実行。結果として、挿入したデータが期待通りに取得できることを確認。次回はDAO本来の機能を探る。

 

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で指定した値に置き換わって表示される。

 

Go言語でサーバを立ち上げる

/** Geminiが自動生成した概要 **/
Go言語でlocalhost:8889で動作するシンプルなWebサーバを作成する手順と動作確認方法の説明です。 `server.go` はルートパスへのアクセスに対し、リクエスト内容をコンソールに出力し、"hello world"を含むHTMLをレスポンスとして返します。`httputil.DumpRequest`でリクエスト内容をダンプし、`fmt.Println`でコンソールに表示、`io.WriteString`でレスポンスを書き込みます。`http.ListenAndServe`でサーバを起動し、ブラウザでアクセスすると"hello world"が表示されます。同時にコンソールにはリクエストヘッダ情報(例:GETメソッド、Host、User-Agentなど)が出力されます。

 

Go言語で内部コマンドを作成する③

/** Geminiが自動生成した概要 **/
Go言語でコマンドライン引数を扱うflagパッケージの使い方を説明しています。`flag.Int`と`flag.String`でそれぞれ整数型と文字列型のオプションを定義し、デフォルト値と説明文を設定します。`flag.Parse()`でコマンドライン引数を解析し、定義したオプションに値をセットします。 実行例として、`main.exe`をビルドし、オプションなしで実行するとデフォルト値の1111と"default"が出力されます。`--help`オプションでヘルプメッセージが表示されます。`-i 5 -s "おはよう"`のようにオプションを指定して実行すると、指定した値が出力されます。つまり、コマンドライン引数からプログラムに値を渡す方法を解説しています。

 

Go言語で内部コマンドを作成する②

/** Geminiが自動生成した概要 **/
Go言語のos.Argsはコマンドライン引数を扱う。`os.Args`はスライスで、最初の要素`os.Args[0]`は実行ファイルのパス。`./main.exe test`と実行すると、`os.Args[1]`は"test"となる。同様に`./main.exe test 5`と実行すれば、`os.Args[1]`は"test"、`os.Args[2]`は"5"となる。つまり、`os.Args`を用いることで、コマンドライン引数にアクセスし、プログラムの動作を制御できる。

 

Go言語で内部コマンドを作成する①

/** Geminiが自動生成した概要 **/
Go言語でコマンドを作成する方法を解説。 `~/workspace/go/cmd`ディレクトリに`main.go`を作成し、`fmt.Println("usako")`を出力するコードを記述。MINGW64を用いて`go build main.go`でコンパイルし、`./main.exe`で実行すると、コマンドラインに"usako"と表示される。 `go build`コマンドはGoのソースコードをコンパイルして実行ファイルを作成する。Windowsでは実行ファイルに`.exe`拡張子が付く。

 

SOY Inquiryでお問い合わせがあった場合にチャットワークに通知したい

/** Geminiが自動生成した概要 **/
SOY Inquiryでお問い合わせがあった際にChatworkに通知する方法を紹介します。まず、フォーム設置ディレクトリ(例:default)にmail.admin.phpを作成します。このファイルに、Chatwork APIトークン、ルームID、お問い合わせ内容をPOSTするcURLコードを記述します。 APIトークンとルームIDは別途取得が必要です。コード内の`$mailBody[0]`にはお問い合わせ本文が入っています。 設置完了後、テスト送信すると、指定のChatworkルームに「【saitodev.co】お問合わせがありました。」に続いてお問い合わせ内容が通知されます。

 

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

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

 

Go言語でファイル作成

/** Geminiが自動生成した概要 **/
Go言語でファイルを作成する方法を解説しています。まず、`os.Stat`でファイルの存在確認を行い、存在しなければ`os.Create`で作成、存在すれば`os.Open`で開きます。`defer file.Close()`で確実にファイルを閉じ、`[]byte`に変換した文字列を`file.Write`で書き込みます。 次に、`os.Stat`でディレクトリの存在確認を行い、なければ`os.Mkdir`で作成します。`filepath.Abs(".")`で現在のディレクトリを取得し、`os.Chdir`で作成したディレクトリに移動してから、上記と同様にファイルを作成・書き込みます。結果として、指定したディレクトリにファイルが作成されます。

 

Go言語で構造体

/** Geminiが自動生成した概要 **/
Go言語では、`type`キーワードで構造体(`struct`)を定義できる。構造体は複数の型の値をまとめたもので、例えば`Person`構造体に`id`、`name`、`reading`フィールドを持つ。`main`関数で`Person`型の変数`ryoko`を宣言し、値を代入して出力できる。構造体のフィールドへは`.`でアクセスする。また、構造体はパッケージに含めることができ、`sample`パッケージに`Person`構造体を定義し、`main`関数で`import`して`sample.Person`として利用できる。パッケージ内の構造体を利用する場合、フィールド名の最初の文字は大文字にする必要がある。

 

Go言語でHello World

/** Geminiが自動生成した概要 **/
Go言語で"Hello World"を表示する方法を解説。Go環境設定後、workspace内のgoディレクトリにmain.goファイルを作成する。`package main`と`func main(){}`は必須。`print("Hello World")`を{}内に記述し、Ctrl+Shift+Bで実行すると"Hello World"が表示される。Atomの設定でBを押すと実行されるよう設定されている。 別の方法として、MINGW64などのコマンドラインから`go run main.go`を実行しても"Hello World"が表示される。

 

プラグイン毎に詳細画面を持たせる拡張ポイントsoyshop.config.php

/** Geminiが自動生成した概要 **/
SOY Shopプラグインの拡張ポイントsoyshop.config.phpは、プラグイン毎に詳細設定画面を作成するための機能です。プラグインディレクトリにsoyshop.config.phpを設置し、インターフェース`SOYShopConfigPageBase`を実装することで、`http://ドメイン/CMSインストールディレクトリ/soyshop/index.php/Config/Detail?plugin=プラグインID` でアクセス可能な設定ページが生成されます。 主要なメソッドは`getConfigPage()`(設定画面のHTMLを出力)、`getConfigPageTitle()`(設定画面のタイトル)、`redirect()`(リダイレクト)です。`getConfigPage()`では、SOY2HTMLを用いてHTMLを生成するのが一般的です。PAY.JPクレジットカード支払いモジュールでは、`PayJpConfigPage`クラスとテンプレートファイルを使用して設定画面を構築しています。`redirect()`メソッドは、設定更新後などにURLパラメータを追加してリダイレクトする際に使用します。

 

サイトの表示が遅くなってきたのでSQLiteのVACUUMを試す

/** Geminiが自動生成した概要 **/
さくらインターネットの最安値VPS上でSQLite版SOY CMSを運用するブログ運営者が、サイト表示速度の低下に対処するためSQLiteのVACUUMを試した。データベースファイルが肥大化し表示が遅くなったため、サーバ移行も検討していたが、SQLiteのVACUUMコマンドで一時データの削除を試みた。実行手順を掲載し、ファイルサイズが約0.3MB減少した結果を報告。速度改善効果への期待を示し、今後はauto_vacuum機能の利用も検討しているが、データベース作成時に設定が必要なため、現状では利用できないという結論に至った。

 

プラグイン毎の詳細画面へのリンクの拡張ポイントsoyshop.info.php

/** Geminiが自動生成した概要 **/
soyshop.admin.top.php拡張ポイントは、SOY Shop管理画面の新着情報欄にカスタム項目を追加できます。`getLink()`メソッドでリンクURL、`getTitle()`でタイトル、`getContent()`で本文、`getIcon()`でアイコンURLを返却することで項目が生成されます。`getLink()`では`SOY2PageController::createLink()`を使うことで環境に依存しないURLを作成可能です。例えば、特定の注文一覧ページへのリンクを追加する場合、`getLink()`で`SOY2PageController::createLink("Order.List?search[order_status]=5")`のように指定することで、注文ステータスが「発送済み」の注文一覧ページへのリンクを生成できます。

 

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

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

 

SOY Shopプラグインの拡張ポイントについて

/** Geminiが自動生成した概要 **/
SOY Shopプラグインの解説として、銀行振込モジュールを例に拡張ポイントが説明されている。プラグインはfeaturesディレクトリにmodule.iniで情報を定義し、pluginsディレクトリに機能を実装する。soyshop.config.php(設定画面)、soyshop.info.php(詳細ページへのリンク追加)、soyshop.order.mail.php(メールへの文章挿入)、soyshop.payment.php(支払い機能)といった拡張ポイントがあり、これらは/soyshop/webapp/src/logic/plugin/extensions/以下にインターフェース定義がある。

 

SOY CMSでサイト用ディレクトリのディレクトリ名を変更したい場合

/** Geminiが自動生成した概要 **/
SOY CMSでサイトディレクトリ(例:site)の名前を変更(例:hoge)するには、まずディレクトリ名を変更後、データベースのSiteテーブルを編集します。site_id、url、pathを新しいディレクトリ名に合わせて変更します。MySQL版ではdata_source_nameは変更不要ですが、SQLite版ではpathと同様にdata_source_nameも変更が必要です。これにより、システムが新しいディレクトリ位置を認識し、サイトが表示されます。記載内容は未検証のため、ご注意ください。

 

SOY Shopの配送モジュールのカスタマイズ例

/** Geminiが自動生成した概要 **/
SOY Shopの拡張ポイント`soyshop.payment.php`は、支払方法のカスタマイズを可能にします。このファイルで定義されたクラスは、`getPaymentModules()`で利用可能な支払いモジュールを返し、`getMethodName()`でモジュール名を表示します。`check()`メソッドで入力値の検証、`execute()`で決済処理、`onPageCheckout()`でチェックアウトページへの表示要素を追加、`onError()`でエラー処理を行います。標準モジュールを複製し、これらのメソッドをオーバーライドすることで、独自の決済方法を実装したり、既存のモジュールの動作を変更できます。例えば、決済手数料の追加や、特定の商品での支払い方法の制限などが可能です。

 

Jenkinsの動作が遅くなった時の対処

/** Geminiが自動生成した概要 **/
Jenkinsの動作が遅くなり、ビルドの失敗が増えたため調査したところ、ビルドログの蓄積が原因と判明。ログディレクトリ(/var/lib/jenkins/jobs/プロジェクト名/builds/)内の古いログを削除することでJenkinsの動作は改善された。 ログ問題の恒久的な解決策として、Discard Old Build pluginをインストール。プロジェクト設定のビルド後の処理で、ビルドログの保存数を10個に制限する設定を追加し、様子を見ることにした。

 

Ubuntuでタッチパッドでアイコンの上を軽く触れるだけでドラックしてしまう問題について

/** Geminiが自動生成した概要 **/
Ubuntu 17.10にアップグレード後、ASUS U37VCのタッチパッドで、軽く触れるだけでアイコンがドラッグされる問題が発生。Synapticsタッチパッドの設定ファイル(/etc/X11/xorg.conf.d/70-synaptics.conf)の"FingerHigh"オプションの下に、"MaxTapTime" "50"を追加し、再起動することで解決。このパラメータはタップ認識の強さを設定するもので、値を小さくすると誤認識を減らせる。設定反映には再起動が必要。

 

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

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

 

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

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

 

php-webdriverで指定のフォームに値を入力してみる

/** Geminiが自動生成した概要 **/
Seleniumとphp-webdriverを使い、SOY CMSのログイン画面を自動操作するテストコードを実行した。ChromeドライバでChromiumを起動し、ログイン画面を表示後、ログインIDフォームに「soycms」と入力するコードを追加。実行結果、コンソールに「soycms」と表示され、Chromium上でもログインIDフォームに「soycms」が入力されていることを確認。基本的な動作確認が完了し、本格的なテストコード作成に移行する。

 

Seleniumとphp-webdriverでUIテストの自動化

/** Geminiが自動生成した概要 **/
Ubuntu 19.10のSnap版Chromiumでは、Seleniumのテスト自動化が実行できない場合があります。これは、Snapのセキュリティ制限により、SeleniumがChromiumを直接操作できないことが原因です。解決策は、ChromiumをSnap版ではなく、aptでインストールしたバージョンを使用することです。まず、`snap remove chromium`でSnap版を削除し、`sudo apt install chromium-browser`でapt版をインストールします。さらに、ChromeドライバーのバージョンとChromiumのバージョンが互換性があることを確認してください。これらの手順により、SeleniumはChromiumを正常に操作できるようになり、テスト自動化が実行可能になります。

 

UbuntuサーバでNode.jsのアプリの再起動に苦戦した時のメモ

/** Geminiが自動生成した概要 **/
UbuntuサーバーでNode.jsアプリを再起動する際、cronで@reboot時に実行するとデータベースファイルのパスがずれる問題が発生した。相対パス指定では実行ディレクトリが変わるため、`./_module/db.js` や `./db/sqlite.db` のような記述は`index.js`からの相対パスではなく、実行時のカレントディレクトリからの相対パスとして解釈されていた。これを解決するために、`__dirname` を使用して `index.js` のあるディレクトリを確実に取得し、`__dirname + '/_module/db.js'`、`__dirname + '/db/sqlite.db'` のように絶対パスを指定することで、どのディレクトリから実行してもデータベースに接続できるように修正した。

 

社会人・学生向けプログラミング教室でGASで業務改善の勉強会を行いました

/** Geminiが自動生成した概要 **/
Tera schoolで開催している社会人・学生向けプログラミング勉強会で、業務改善を目的としたGAS(Google Apps Script)入門講座を実施しました。今回はGoogle Driveの共有フォルダのアクセス権限者一覧をスプレッドシートに自動出力するスクリプトを作成。JavaScriptの知識を活かし、数行のコードで名簿作成を自動化し、大幅な生産性向上を体感しました。次回は、作成した名簿を活用し、スプレッドシートとGmailを連携させた定期通知メール送信機能の実装を予定しています。

 

Node.jsとSocket.IOでリアルタイムのチャットアプリを作ってみる

/** Geminiが自動生成した概要 **/
Node.jsとSocket.IOを用いたチャットアプリ構築後、Let's Encryptで常時SSL化する方法を解説。自己署名証明書ではブラウザ警告が出るため、無料のLet's Encryptを利用。Certbotによる証明書取得手順、Nginxの設定変更(SSL設定追加、httpトラフィックのhttpsリダイレクト)を説明。 Socket.IOのサーバー側コード修正では、httpsオプションを追加し、取得した証明書と秘密鍵を指定。これにより、チャットアプリがセキュアなhttps接続で利用可能になる。

 

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

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

 

FFmpegとAudacityで動画の音声の調整に挑戦!

/** Geminiが自動生成した概要 **/
動画編集ソフトFFmpegとAudacityを使って、動画の音声調整に挑戦した記録。元の動画の音量が小さく、ノイズが多かったため、Audacityで音量増幅とノイズ除去を実施。FFmpegで動画と音声の結合を行い、改善された動画を作成した。具体的には、Audacityで波形を見ながら音量を30dB増幅し、ノイズプロファイルを採取してノイズ除去を2回行った。結果、「サー」というノイズが消え、以前より聞き取りやすい音声になった。

 

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コードを掲載し、セル番号と値を出力する例を示している。コードは拡張子による読み込み方法の切り替え、複数シートへの対応、行とセルのイテレータによる値の取得を実装。出力結果の画像も掲載。

 

Ubuntu版BracketsのBeautifyの設定

/** Geminiが自動生成した概要 **/
BracketsエディタのプラグインBeautifyでPHPファイル保存時の自動改行を停止しようと試みたが、設定変更は断念。PHPの終了タグ`?>`の後の改行が不要だったのが理由。しかし、最近のPHPコード規約では、PHPのみのファイルでは終了タグ自体が不要と知り、全ファイルから`?>`を削除することに。結果として、Bracketsの自動改行挿入設定は変更せずそのままとした。

 

SOY Shopで一つのページで同じshop:moduleを二回使用したい

/** Geminiが自動生成した概要 **/
SOY Shopで同じshop:module(例:パンくずナビゲーション)を一つのページで二回使用する方法。 1. `/soyshop/webapp/src/module/site/common/breadcrumb_navigation.php` をショップIDディレクトリ内の `.module/common/` にコピーする。 2. コピーしたファイルを複製し、`breadcrumb_navigation2.php` 等にリネームする。 3. `breadcrumb_navigation2.php` 内の関数名を `soyshop_breadcrumb_navigation2` に変更し、`soyshop_breadcrumb_navigation` 関数が存在しない場合に元の `breadcrumb_navigation.php` をインクルードして実行するように修正する。 これにより、`shop:module="common.breadcrumb_navigation"` と `shop:module="common.breadcrumb_navigation2"` の二つのモジュールタグで同じ機能を別々に表示できるようになる。

 

PHP製のパッケージをサーバにアップロードする時の注意点

/** Geminiが自動生成した概要 **/
PHPパッケージをサーバーアップロード後、画面が真っ白または403 Forbiddenエラーになる場合の対処法。真っ白画面はZIP解凍エラーが原因で、古い解凍ソフトは一部ファイルを空で復元する可能性があるため、7-Zip等の最新版を使う。403 ForbiddenはFTPアップロードエラーで、ファイル数が多いと一部ファイルが欠ける場合がある。安定したFileZilla等のFTPクライアントを使用し、/インストールディレクトリ/admin/webapp/ 以下にindex.phpやinit.phpが存在するか確認する。

 

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

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

 

サブドメインに独自ドメインを当てた際の商品画像のパスについて

/** Geminiが自動生成した概要 **/
SOY Shopパッケージは、サブドメイン利用時の商品画像パスずれ問題を解決します。通常、商品画像は`/ショップID/files/商品コード/ファイル名`のパスで保存されますが、サブドメインではショップIDディレクトリが存在しないため画像が表示されません。このパッケージは、サブドメイン環境下でパスを自動的に修正し、正しい画像パス`/files/商品コード/ファイル名`を出力することで、問題を解消します。これにより、複数の独自ドメインをサブドメインで運用する場合でも、商品画像が正しく表示されるようになります。

 

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

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

 

NW.jsを試す

/** Geminiが自動生成した概要 **/
中学生向けプログラミング教室で、JavaScriptでアプリ制作をする生徒が出てきたため、デスクトップアプリ作成の選択肢としてNW.jsをUbuntuで試した。npmでnw.jsをインストール後、index.htmlとpackage.jsonを作成し、`npm start`で実行した結果、"Hello World!"とNode.jsのバージョンが表示された。ランチャーに登録したNW.jsアイコンからも同じ画面が起動できた。しかし、端末操作が必要なため、中学生には敷居が高いと判断し、他の方法を検討することにした。

 

Ubuntuサーバのメモリ開放

/** Geminiが自動生成した概要 **/
SOY CMSサイトのバックアップをDropboxで自動化する方法を紹介しています。記事では、Dropbox Uploaderを利用したバックアップ方法を解説し、cronで定期実行を設定することで手間を省いています。具体的な手順として、Dropbox Uploaderのインストール、トークンの取得、アップロードコマンドの作成、cronへの登録方法を詳しく説明。さらに、バックアップ後のメモリ解放コマンドも追記し、サーバー負荷軽減にも配慮しています。この方法により、安全かつ効率的なバックアップ体制を構築できるでしょう。

 

SOY CMSでwwwありとなしのどちらでもアクセスできるサイトでの管理画面の対応

/** Geminiが自動生成した概要 **/
SOY CMSのconfig.ext.phpは、管理画面のカスタマイズを可能にする強力なツールです。管理画面のURLの変更、ログイン画面へのリダイレクト設定、.htaccessを利用したアクセス制限、管理画面のデザイン変更、独自機能の追加などが実現できます。データベースへのアクセスやSmartyテンプレートの利用も可能です。ただし、PHPの知識が必要で、不適切な記述はシステムエラーに繋がるため注意が必要です。このファイルはバージョンアップの影響を受けず、安全にカスタマイズを維持できます。

 

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

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

 

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

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

 

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

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

 

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 Shopで顧客毎にファイルを保存できる様にしました

/** Geminiが自動生成した概要 **/
SOY Shop用のストレージプラグインにより、顧客ごとにPDFやZIPなどのファイルを保存・管理できるようになりました。顧客専用ページでファイルのアップロードが可能で、ダウンロードURLの発行にも対応。管理画面からはelFinderを用いてファイルマネージャ形式でアクセスできます。ファイル保存パスは`/サイトID/files/user/顧客ID`です。アップロード可能なファイル形式の仕様は未確定ですが、プラグインは利用可能です。パッケージはGitHub(https://github.com/inunosinsi/soycms/tree/master/package)で公開されています。

 

SOY CMSのブログでプレビュー用のページを作成してみる

/** Geminiが自動生成した概要 **/
SOY CMSのブログにはプレビュー機能がないが、記事を任意の場所に貼り付けられる機能を利用してプレビューページを作成できる。まず、プレビュー用のページ(例:/preview)を作成し、「プレビュー」ラベルを設定、Basic認証で保護する。記事投稿時に「プレビュー」ラベルのみを選択すれば、プレビューページにのみ記事が表示される。確認後、「ブログ」ラベルを追加すれば本番公開となる。実際には、ダイナミック編集で非公開記事も確認できるため、プレビュー機能の代替として活用可能。

 

GitHub Pagesでページを作成してみた

/** Geminiが自動生成した概要 **/
GitHub PagesでWebページを公開する方法を解説した記事です。まず、GitHubでリポジトリを作成し、ローカルでindex.htmlを作成、プッシュします。次に、GitHub上でブランチをgh-pagesに切り替えることでページが公開されます。記事では画像付きで手順を説明し、最終的にhttps://{username}.github.io/{repository}でアクセスできることを示しています。

 

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

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

 

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日の寿命を設定し、ファイルの更新日時をチェックすることで自動的に古いキャッシュを削除するように改良。これにより、初回表示後はキャッシュが使用され、高速な表示が可能になった。

 

SOY2DAOでデータベースから値を取り出す

/** Geminiが自動生成した概要 **/
SOY2DAOを用いたデータベースからの値の取得方法を解説。プリペアードステートメントに続き、今回はDAOの機能を活用した取得方法を紹介。SOY Shopの顧客情報を例に、`SOY2DAOFactory::create("user.SOYShop_UserDAO")` でDAOオブジェクトを生成し、`$userDao->get()` でデータを取得する様子をコードで示す。取得したデータはSOYShop_Userオブジェクトの配列となり、`$user->getName()` のようにゲッターメソッドで簡単に値にアクセスできる。SQL直接実行の場合と比べ、オブジェクト指向の恩恵で可読性・安全性が向上する点を強調。最後に、SQL実行結果もオブジェクトで扱いたいケースへの言及で締めくくっている。

 

SOY ShopのURLの設定方法

/** Geminiが自動生成した概要 **/
SOY ShopのサイトURLは、`/CMSインストールディレクトリ/soyshop/webapp/conf/shop/`にある`サイトID.conf.php`(例:soy.conf.php)内の`soy_SOYSHOP_SITE_URL`で定義されています。 例えば`http://localhost/soy/`を`http://example.com/`に変更すれば、公開側のURLが変わります。サイトディレクトリは`soy_SOYSHOP_SITE_DIRECTORY`で変更可能です。ただし、ルート直下以外の運用は動作保証外のため、変更時はconf.phpのバックアップ必須です。

 

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

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

 

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 CMSの画像のリサイズでJPEGのロスレス圧縮を追加した

/** Geminiが自動生成した概要 **/
SOY CMSでサーバサイド画像リサイズを実装後、PageSpeed Insightsで「ロスレス圧縮で容量削減可能」と指摘されたため、jpegoptimを導入した。Ubuntuに`sudo apt-get install jpegoptim`でインストール後、`/CMSインストールディレクトリ/common/im.inc.php`の`imagejpeg`実行後に`jpegoptim $savepath`を実行するよう改修。これにより、ロスレス圧縮の指摘が解消され、PageSpeed Insightsのモバイルスコアが93から96に向上した。変更コードはフォーラムで配布されている。

 

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

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

 

ブラウザのキャッシュの設定

/** Geminiが自動生成した概要 **/
SOY CMSのキャッシュモードを利用することで表示速度を大幅に向上させることができます。キャッシュモードには、「出力キャッシュ」「ブロックキャッシュ」「データキャッシュ」の3種類があります。出力キャッシュはページ全体をキャッシュし、ブロックキャッシュはページの一部のブロックをキャッシュ、データキャッシュはデータベースへのアクセス結果をキャッシュします。それぞれのキャッシュモードは管理画面から簡単に設定でき、サイトのアクセス状況や更新頻度に合わせて最適な設定を選択することで、サーバー負荷を軽減し、表示速度を向上させることができます。特に、頻繁に更新されない静的なページやアクセス数の多いページでは、出力キャッシュが効果的です。キャッシュのクリアも管理画面から簡単に行えます。

 

インストーラーで再インストール後にサイトを復元

/** Geminiが自動生成した概要 **/
SOY CMSのインストーラによる再インストール後、サイトを復元する方法です。 まず、再インストール前にサイトのソースコードからサイトID(例: /site/files/ の"site"部分)を確認しておきます。 次に、インストーラで再インストールする際、インストール先ディレクトリを既存のものと異なる名前に変更します。インストール完了後、初期管理者を作成し、「サイトの復元」ではなく「サイトの作成」を選択します。 ここで、事前に確認しておいたサイトIDを入力してサイトを作成します。サイトIDが正しければ、既存のファイル群が使用され、サイトが復元されます。 最後に、元の管理画面URL(例: /cms/admin)で再インストールを行い、以前のデータベースに接続できないようにすることでセキュリティ対策を行います。データベース接続設定ファイル(例: mysql.db)を復旧すれば、元のアカウントも復元可能です。

 

SOY CMSでインストーラを削除せずにいたらどうなるか?

/** Geminiが自動生成した概要 **/
SOY CMSのインストーラを削除しないと、再インストールが可能になり、サイトデータが消去される危険性がある。攻撃者は用意したデータベース情報で再インストールし、初期管理者権限を奪取できる。管理画面URLが判明していれば、インストーラ経由でサイトを初期化・乗っ取りが可能。他CMSでもインストーラが残っていれば同様の危険があるため、インストール後は必ず削除する必要がある。

 

SOY CMS/ShopでPHPモジュールに使用の制限を設けました

/** Geminiが自動生成した概要 **/
SOY CMS/Shopのセキュリティ強化のため、テンプレートエディタとPHPモジュールでのPHP実行に制限が加わりました。PHPの使用は、`user.config.php`で`SOYCMS_ALLOW_PHP_SCRIPT`を`true`にすることで許可されます。 PHPモジュールはさらに`SOYCMS_ALLOW_PHP_MODULE`を`true`にすることで利用可能になります。これらの設定により、テンプレートやモジュールでPHPコードの実行を制御し、セキュリティリスクを軽減します。アップデートはGitHubから入手可能です。

 

ブログで絵文字の機能は使わない方が良いかもしれない

/** Geminiが自動生成した概要 **/
SOY CMSで絵文字を使うと、画像パスにCMSのインストールディレクトリが含まれるため、管理画面のURLが推測されやすく、総当り攻撃の標的になる危険性がある。記事に絵文字を使いたい場合は、画像パスを外部の無関係な場所に配置し、管理画面URLを特定できないようにする必要がある。そうでない場合は、侵入検知機能の導入が必須となる。 記事では絵文字の危険性を指摘し、対策として画像パスの変更と侵入検知システムの導入を推奨している。

 

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

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

 

Go言語で認証鍵を使ってSSHの接続を行う

/** Geminiが自動生成した概要 **/
Go言語でSSHの秘密鍵認証によるリモートサーバ接続を実装する方法が紹介されています。 `ioutil.ReadFile` で秘密鍵ファイル(id_rsa.pem)を読み込み、`ssh.ParsePrivateKey` でパース、`ssh.PublicKeys` で公開鍵を設定することでパスワード認証から秘密鍵認証に変更できます。`id_rsa.pem` ファイルは `openssl` コマンドで `id_rsa` から変換する必要があります。 サンプルコードでは、接続後、リモートサーバに空ファイルを作成する処理を実行しています。

 

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`でコピーしている。

 

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

/** Geminiが自動生成した概要 **/
Go言語でファイルサーバのバックアップを作成する過程の記録。今回は同一PC内でのディレクトリとファイルコピーを実装。`filepath.Walk`でディレクトリ構造を走査し、`os.Stat`でバックアップ先にディレクトリが存在しなければ`os.Mkdir`で作成。ファイルは`os.Open`、`os.Create`、`io.Copy`でコピー。`tree`コマンドでコピー結果を確認し、ディレクトリ構造とファイル内容が正しくコピーされたことを確認。ただし、ファイル更新日時を考慮したコピー処理は未実装。

 

tmuxでマウススクロールをした時、履歴ではなくスクロールしてほしい

/** Geminiが自動生成した概要 **/
tmuxでマウススクロールをすると、履歴が表示されてしまい、画面がスクロールしない問題に遭遇した。MySQLの実行結果など、画面に収まらない内容を確認する際に不便だったため、マウススクロールで画面をスクロールできるように設定を変更した。`.tmux_conf`ファイルに`set -g mouse on`と`set -g terminal-overrides 'xterm*:smcup@:rmcup@'`を記述し、tmuxを再起動することで、マウススクロールで画面がスクロールするようになった。

 

zshの起動と同時にtmuxも起動してほしい

/** Geminiが自動生成した概要 **/
zsh起動時にtmuxも自動起動させる方法について解説。zshの設定ファイル`.zshrc`に`[[ -z "$TMUX" && ! -z "$PS1" ]] && tmux`を追記することで実現。この設定により、端末起動時にtmuxが既に起動しているかどうかを`$TMUX`で確認し、起動していない場合は`tmux`コマンドを実行する。結果、端末起動と同時にtmuxも起動し、ステータスバーが表示されるようになる。

 

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

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

 

Goで運営しているサイトでLet's Encryptを利用してみた

/** Geminiが自動生成した概要 **/
Go製WebアプリをHTTP/2で運用するために、Let's EncryptでSSL証明書を取得した。取得手順は、letsencryptコマンドで証明書を作成し、Goのコードに証明書のパスを指定するだけ。`http.ListenAndServe`を`http.ListenAndServeTLS`に変更し、fullchain.pemとprivkey.pemのパスを設定することでHTTPS化。証明書取得後、サイトはHTTP/2で動作するようになった。

 

デジカメ内の写真を間違えて消してしまった時はPhotoRec!

/** Geminiが自動生成した概要 **/
デジカメのSDカードから外付けHDDへ写真移動中、エラーでデータが消失。SDカード側も削除済みで焦ったが、PhotoRecというオープンソースの復元アプリを発見。Ubuntuにインストール(sudo apt-get install testdisk)後、sudo photorecを実行。SDカードを選択し、ホームディレクトリに復元先を設定。あっという間にデータが復元され、事なきを得た。

 

さくらのVPSにGoの環境を構築してみた

/** Geminiが自動生成した概要 **/
さくらのVPSにGo環境を構築し、アプリケーションサーバを起動した際のメモ。UbuntuにGit, Go, MySQLをインストールし、アプリをビルド、実行した。ポート80での起動はroot権限が必要だったため、`sudo ./app -addr=:80`で実行。バックグラウンド実行は`&`を追加し、停止は`kill -KILL プロセスID`を使用。セキュリティ設定は別途必要。

 

使わなくなったパソコンにSambaを入れて、ファイル共有用のサーバを構築してみた

/** Geminiが自動生成した概要 **/
使わなくなったWindows7マシンにUbuntuをインストールし、Sambaでファイル共有サーバーを構築する方法。 手順は、Ubuntuインストール後、端末でSambaをインストールし、共有フォルダ`/home/share`を作成、パーミッションを設定。`/etc/samba/smb.conf`を編集し、ゲストアクセスを許可する設定を追加。Sambaを再起動し、ファイアウォールで必要なポートを開放。自動起動設定も実施。 Windowsからは、ネットワークドライブの割り当て機能を使い、`\\SambaサーバーのIPアドレス\Share`でアクセス可能。`Share`部分はsmb.confで設定した共有名。

 

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で公開されている。

 

Dockerで作ったMySQLのコンテナにホストからアクセスしてみる

/** Geminiが自動生成した概要 **/
DockerでMySQLのコンテナを作成し、ホストからアクセスする手順を解説しています。まず、文字コード設定済みのDockerfileとcharset.cnfを用意し、`docker build`でイメージを作成。`docker run`でコンテナを起動し、`-p 12345:3306`でポートフォワーディングを設定。ホストからは`mysql -u root -p -h 127.0.0.1 -P 12345`でコンテナ内のMySQLに接続できました。

 

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

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

 

DockerでPHP7の環境を構築してみる2

/** Geminiが自動生成した概要 **/
DockerでPHP7環境を構築し、ホスト側のディレクトリをコンテナにマウントしてファイル操作を容易にした。`-v`オプションで`/home/saito/workspace/docker/php7`をコンテナの`/var/www/html`にマウントし、ホスト側に配置した`hoge.php`をブラウザで実行できた。しかし、SOY CMSを導入したところ、`mb_language()`関数が未定義というエラーが発生。コンテナ内に`php.ini`が見つからず、設定が必要になったため、今後の課題とした。

 

DockerでPHP7の環境を構築してみる

/** Geminiが自動生成した概要 **/
Dockerを使ってPHP7環境を構築する方法を紹介しています。UbuntuへのDockerインストール手順、Dockerfileの作成、コンテナイメージのビルド、コンテナの起動、PHPバージョン確認、ブラウザでのphpinfo表示確認までを解説。Dockerを使うことで、簡単にPHP7環境を構築し、動作確認できることを示しています。ルートディレクトリ操作の課題は残っていますが、Apache設定などを省略できる手軽さがメリットです。

 

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

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

 

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

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

 

golangでテストを書いてみたのでメモ

/** Geminiが自動生成した概要 **/
Go言語のテスト方法についての記事です。`sample.go`に`MakeRandomString`(ランダム文字列生成)と`Convert`(MD5ハッシュ化)関数を定義し、`sample_test.go`にテストコードを書きます。`Test`+関数名でテスト関数を定義し、`t *testing.T`を引数に取ります。`Convert`関数のテストでは、空文字やハッシュ化前文字列と等しい場合に`t.Error("failed")`でエラーとします。`go test`コマンドでテストを実行し、`PASS`なら成功、`FAIL`なら失敗となります。`MakeRandomString`関数のテストでは、2回生成した文字列が同じであればエラーとしています。

 

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で構築されたサイトを特定する方法を紹介。HTML出力のためソースコードからは判別不可。特有のNot Foundページ(/jfoewajfoiwaejflaleiofjwaefwaeのような無意味な文字列へのアクセス)の存在が手がかりとなる。また、ブログ記事URL(/article/記事タイトル)、月別(/month/YYYY/MM)、カテゴリ(/category/カテゴリ名)ページのURL構造も参考になる。その他、問い合わせフォームページのソースに"SOY_Inquiry"や"soy2_token"の文字列があれば、SOY CMSの可能性が高まる。

 

検索フォームと検索結果ページを作ってみた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件の場合には「該当する記事は見つかりませんでした」と表示する処理も追加します。 これらの処理により、ユーザーが入力したキーワードに合致する記事一覧が検索結果ページに表示されるようになります。

 

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

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

 

GnuCashの文字化け対策

/** Geminiが自動生成した概要 **/
GnuCashで文字化けが起こった場合、pango.aliasesファイルを作成し、フォントをメイリオに設定することで解決できます。さらに、スタイルシートで数値セルをメイリオに設定すると、貸借対照表で数字が表示されます。この手順に従うことで、GnuCashの文字化けを解消し、複式簿記を始められます。

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

Powered by SOY CMS   ↑トップへ