ブログ内検索

プログラミング教室
最近興味があることや肥料教室についてのメルマガを配信しています

カテゴリー : コンピュータ/page-2

SOY CMSマニュアルページ作成中

SOY CMSの開発秘話を投稿しました。→SOY CMSの開発秘話
 

PHPのオブジェクトの継承の負荷を見る

/** Geminiが自動生成した概要 **/
PHPでクラス継承時のメモリ使用量を検証した。継承の有無にかかわらず、インスタンス作成によるメモリ増加量は同じだった。VLDを用いて継承時のメソッドを確認すると、子クラスは親クラスのメソッドを保持し、オーバーライドも可能であることが分かった。つまり、インスタンス生成時はオブジェクトとプロパティ値のみを保持し、メソッドはクラス定義に基づいて解決される。継承はメソッドの探索順序に影響するが、インスタンスのメモリ使用量には直接影響しない。

 

PHPで関数内の変数のメモリ領域はいつ解放されるか?

/** Geminiが自動生成した概要 **/
PHPの関数内変数のメモリ解放タイミングを検証。`xdebug_debug_zval()`を使い、関数にオブジェクトを渡すと、関数内変数の参照カウントが2になることを確認。関数を抜けると参照カウントが1に戻り、関数終了時に変数が解放されることが判明。つまり、PHPは関数内の変数を自動解放するため、小さな関数であればメモリ管理を過度に意識する必要はない。

 

PHPのガベージコレクションを見る

/** Geminiが自動生成した概要 **/
PHPのガベージコレクション(GC)は参照カウント法を用いて不要なメモリ領域を解放する。`xdebug_debug_zval()`関数で確認できる`refcount`が参照数を示し、0になるとGC対象となる。オブジェクト型では、変数への代入で`refcount`が増減し、`unset`で`refcount`が減る。`refcount`が0になるとメモリが解放される。整数型などzvalに直接値を持つ型は`refcount`が0でも当てはまらない。`unset`は不要になったオブジェクトを明示的に解放し、メモリ効率を向上させるため有効。

 

PHPのzvalと変数の作成を見る

/** Geminiが自動生成した概要 **/
PHPの変数はzval構造体とzend_value共用体で表現される。zvalは型情報を持ち、zend_valueは実際の値を保持する。整数、文字列、配列など、型の違いはzend_valueの異なるメンバを使用することで実現される。変数名とzvalの関連付けはシンボルテーブルを介して行われる。`$a = 1`のような代入では、zvalが初期化され、zend_valueの`lval`に1がセットされ、シンボルテーブルに"a"というキーでzvalへのポインタが登録される。これにより、変数名から対応する値にアクセスできるようになる。

 

PHPのガベージコレクションを学ぶにXdebugを入れる

/** Geminiが自動生成した概要 **/
XdebugはPHPのデバッグとプロファイリングツールです。`xdebug_debug_zval()`関数は、変数の内部表現であるzvalの情報を表示します。出力には、参照カウント(refcount)、参照かどうか(is_ref)、そして変数の型と値が含まれます。zvalの情報は、PHPのガベージコレクションの仕組みや変数の挙動を理解する上で重要です。Xdebugのドキュメントでは、`xdebug_debug_zval()`以外にも様々なデバッグ関数が紹介されています。これらを利用することで、PHPコードの実行状況を詳細に把握し、問題の特定やパフォーマンスの改善に役立てることができます。

 

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()`で特定の関数のオペコードを出力することも可能です。

 

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

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

 

PHPでforeach文の抜け方を見る

/** Geminiが自動生成した概要 **/
PHPのforeach文でループ中にreturnで抜ける場合、メモリリークの懸念がある。VLDでforeachのオペコードを見ると、ループ終了時にFE_FREEで変数を解放している。しかし、ループ中のreturnでもFE_FREEが実行されるか検証した結果、return前にFE_FREEが挿入されていた。つまり、foreach中にreturnしてもメモリリークは発生せず、PHPが適切にメモリ管理を行っていることが確認できた。

 

PHPで変数に割り当てた無名関数を解除できるか?

/** Geminiが自動生成した概要 **/
PHPで変数に割り当てた無名関数は、unset()関数で解除できる。unset()は変数の割当を解除し、メモリを解放する。記事では、文字列を格納した変数と、無名関数を格納した変数でunset()の効果を検証している。どちらもunset()後にはメモリの使用量が減少し、変数自体のメモリ使用分(約32バイト)のみが残った。つまり、無名関数も他の変数と同様にunset()で解除でき、メモリ解放の対象となる。

 

PHPのVLDで無名関数を見る

/** Geminiが自動生成した概要 **/
PHPのVLDを使って無名関数のオペコードを確認した。無名関数は変数`$isEven`に格納され、if文で実行される。VLD出力では、通常の関数と異なり、function nameが`{closure}`と表示された。これはクロージャを示す。無名関数は関数自体を変数に格納し、後で実行できる。

 

PHPのVLDで関数を見る

/** Geminiが自動生成した概要 **/
PHP関数`isEven`のVLDによるオペコード解析結果を検証。`isEven(2)`呼び出しを含むコードでは、メイン部分と`isEven`関数のオペコードが別々に生成され、関数の定義位置に関わらず、実行時のオペコードでは呼び出し部分が先に現れる。定義位置による実行速度への影響は検証予定だが、計測方法未定のため保留。

 

PHPのVLDでforとforeachを比較する

/** Geminiが自動生成した概要 **/
OPcacheは、PHPスクリプトをコンパイルしたオペコードを共有メモリにキャッシュすることで、PHPのパフォーマンスを向上させる強力なツールです。スクリプトがリクエストされるたびにコンパイルする必要がなくなり、ファイルシステムへのアクセスが削減されます。OPcacheは、PHP 5.5.0以降でデフォルトで有効になっています。 `opcache.enable`ディレクティブで有効化し、`opcache.revalidate_freq` でキャッシュの有効期限を設定します。`opcache_reset()`関数でキャッシュを手動でクリアすることも可能です。OPcacheは、Webサーバーのパフォーマンスを大幅に向上させるため、PHPアプリケーションには必須のツールです。

 

PHPのVLDでfor文を見る2

/** Geminiが自動生成した概要 **/
PHPのfor文で、条件式に`count($arr)`を直接記述するパフォーマンスへの影響を検証。VLDでオペコードを確認すると、ループごとに`count`が実行されていることが判明。しかし、`$cnt = count($arr)`として変数に代入してからループ条件に用いるコードと実行時間を比較した結果、有意な差は見られなかった。ループごとに`count`が実行されるのは非効率と考えられるが、`count`関数自体の実行コストは低い、またはPHPの最適化によって`count`の実行回数が減っている可能性がある。

 

PHPのVLDでfor文を見る

/** Geminiが自動生成した概要 **/
PHPの`for`ループでインクリメント演算子`$i++`と`++$i`の速度差を検証。`++$i`の方が高速で、1億回のループで処理時間が約3/5に短縮された。VLDでオペコードを比較すると、`$i++`では`POST_INC`と`FREE`の2つのオペコードが使われるのに対し、`++$i`では`PRE_INC`のみ。`$i++`は値を一時的に保存するためメモリ確保と解放が必要になり、`++$i`は直接インクリメントするためオーバーヘッドが少ない。結果として`++$i`の方が高速になる。`for`ループでは`++$i`の使用が推奨される。

 

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と管理者情報を入力してインストールを完了します。記事ではコマンド操作の詳細やトラブルシューティングも紹介されています。

 

郵便番号を入力したら半径3km内のすべての町名を取得する

/** Geminiが自動生成した概要 **/
Google Geocoding APIを用いて、指定住所(安岡寺)から半径3km以内の町名を取得する方法を検証した。APIで中心座標を取得後、緯度経度を0.01(約1km)ずつずらした地点の逆ジオコーディングを繰り返し、町名を収集した。しかし、1kmグリッドでは範囲内の全町名を網羅できず、グリッドを細かくするとAPI使用回数が増加する問題点が残った。より効率的な方法の検討が必要。

 

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

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

 

さくらのメールボックスからのメールをGmailで受信した際の?のアイコンを回避

/** Geminiが自動生成した概要 **/
さくらのメールボックスからGmailへメール送信時、送信元認証がされていないため「?」アイコンが表示される問題を解決する方法。お名前.comで取得したドメインのDNS設定で、さくらのメールボックスのホスト名を用いてSPFレコード `v=spf1 a:ホスト名 mx ~all` をTXTレコードとして追加する。設定後、mxtoolbox.comでSPFレコードを確認し、Gmailで受信したメールのアイコンが「?」から人物アイコンに変われば成功。

 

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

 

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)のチェックが有効です。

 

SheetJSを試してみた

/** Geminiが自動生成した概要 **/
SheetJSは、ブラウザ上でHTMLテーブルから簡単にExcelファイルを生成できるJavaScriptライブラリです。デモを改修し、テーブル要素を指定して`XLSX.utils.table_to_book`でブックオブジェクトを生成、`XLSX.writeFile`でExcelファイル(xlsx)として出力する簡単なコードで実装できます。 表示されたHTMLテーブルのダウンロードボタンをクリックするだけで、テーブル構造を保持したExcelファイルがダウンロードされます。著者は従来PHPのPhpSpreadSheetを使用していましたが、SheetJSも選択肢に加えるとのことです。

 

gRPC for PHPのインストール

/** Geminiが自動生成した概要 **/
この記事はUbuntu 19.10環境でGoogle Ads APIを使用するためのgRPC for PHPのインストール手順を解説しています。PEAR/PECL、Composerをインストール後、`pecl install grpc`、`pecl install protobuf`コマンドでgRPCとprotobufをインストールします。その後、`/etc/php/7.4/cli/php.ini`と`/etc/php/7.4/fpm/php.ini`両方に`extension=grpc.so`と`extension=protobuf.so`を追加し、`phpinfo()`や`php -m`でインストールを確認します。記事ではComposerのインストール手順も解説していますが、gRPCのインストール自体はComposerを使わずPECL経由で行っています。

 

【SEO対策】他のCMS向けの総当り攻撃を避ける

/** Geminiが自動生成した概要 **/
サイバー攻撃の増加は深刻な問題であり、特にCMSを狙った攻撃は増加傾向にある。記事ではSOY CMSへの攻撃事例を通して、その脅威を具体的に示している。攻撃者は管理画面へのログインを試みたり、脆弱性を突いて不正アクセスを試みる。対策としては、管理画面のURLを変更したり、.htaccessでアクセス制限をかけることが有効である。また、WAFの導入やセキュリティプラグインの活用も推奨されている。常に最新の情報に注意し、適切なセキュリティ対策を実施することで、被害を最小限に抑えることが重要である。

 

【SEO対策】IPv6

/** Geminiが自動生成した概要 **/
IPv6はSEO対策に有効な通信速度改善策。IPv4アドレス枯渇問題を解決する後発の規格で、理論上アドレス割り当ては無限大。16ビット単位の16進数表記で、IPv4より最適化されている。saitodev.coのようなWebサイトアクセスでは、DNSサーバでドメイン名からIPv4/IPv6アドレスを取得し、サイトサーバへアクセスする。IPv6設定はサーバ会社ごとに異なるが、DNS設定ではIPv4をAレコード、IPv6をAAAAレコードに登録する。設定確認は`ping -4/-6 ドメイン名`コマンドで可能。

 

【SEO対策】データベースチューニング

/** Geminiが自動生成した概要 **/
SOY Shopのデータベースパフォーマンス改善にはインデックスの見直しが効果的です。 商品点数やアクセス数の増加に伴い、データベースへの負荷が増大し表示速度が低下することがあります。 特に商品検索や絞り込み機能は複雑なクエリを実行するため、適切なインデックスが設定されていないとパフォーマンスに大きな影響を与えます。インデックスはデータベース内の特定の列に付与されることで、データ検索の高速化を実現します。 SOY Shopでは、商品コードや商品名、公開状態など、頻繁に検索される項目にインデックスを設定することが推奨されています。 しかし、不要なインデックスは更新処理のオーバーヘッドとなるため、適切なインデックスを選択することが重要です。記事では、phpMyAdminを用いたインデックスの確認方法、SOY Shop管理画面からのインデックス設定方法、そしてインデックス設定の注意点が解説されています。 インデックスを適切に設定することで、データベースの負荷を軽減し、表示速度の向上、ひいてはユーザーエクスペリエンスの向上に繋がるとしています。

 

【SEO対策】実行環境のバージョンを上げて高速化

/** Geminiが自動生成した概要 **/
PageSpeed Insightsでスコア100を目指すため、サーバー側の処理速度向上に取り組んだ。SEO対策として、PHP製CMSを使う場合、PHPバージョンを最新に保つことが重要。PHP7系はOPCacheにより高速化されており、バージョンアップだけでスコア向上も期待できる。VPSサーバでのバージョンアップ方法は過去記事を参照。PHP8ではJitコンパイラ導入で更なる高速化が見込まれる。かつてGo言語への移植も検討したが、PHPでスコア100達成できたため中止した。

 

【SEO対策】キャッシュの利用でデータ転送量を削減

/** Geminiが自動生成した概要 **/
SEO対策として、データ転送量削減のためブラウザキャッシュを活用する方法を解説。HTML以外のファイルは一度取得すれば再取得不要なため、ApacheのExpiresモジュールでブラウザにキャッシュさせる。Ubuntu環境でApache2.4を前提に、a2enmod expiresコマンドでモジュールを有効化し、.htaccessにファイルタイプごとにキャッシュ期間を設定する記述を追加すれば完了。HTMLは即時、CSS/JavaScriptは10日間、画像は15日間キャッシュされるようになる。

 

【SEO対策】Gueztliで画像のファイルサイズの削減

/** Geminiが自動生成した概要 **/
この記事では、ウェブサイトのSEO対策として画像ファイルサイズの削減に焦点を当てています。GoogleのJPEGエンコーダGuetzliを導入することで、画像品質を維持しながらファイルサイズを大幅に削減できることを実例で示しています。具体的には、115.8kbの画像がGuetzliによって9.4kbまで圧縮され、80%以上の削減に成功しています。また、PageSpeed InsightsによるWebP等の次世代フォーマットの推奨についても触れつつ、Safari非対応やPageSpeed Module導入によるパフォーマンス低下を理由に現状では採用を見送っていることを説明しています。

 

【SEO対策】HTTP/2

/** Geminiが自動生成した概要 **/
HTTP/2は、HTTP/1.1以前のバージョンに比べて、複数のファイルを並列でダウンロードできるため、ウェブサイトの表示速度を大幅に向上させます。これにより、リクエスト回数とインターネット全体の回線使用量が削減されます。しかし、一度に送受信されるデータ量が増えるため、画像サイズの最適化が重要になります。ApacheサーバーでHTTP/2を有効にする方法は、別記事で紹介されています。より詳細な情報は、オライリーの"Real World HTTP"で学ぶことができます。現在、LiteSpeedのようなサーバーでは、さらに高速なHTTP/3(QUIC)が利用可能ですが、当サイトはApacheのHTTP/3対応を待っています。

 

【SEO対策】データの転送量の削減の為の圧縮

/** Geminiが自動生成した概要 **/
個人事業主がSEO対策として行ったデータ転送量削減策を紹介。コンテンツの充実を最優先としつつ、今回はデータ圧縮に着目。GoogleのPageSpeed Insightsを参考に、Brotliアルゴリズムを用いてデータ転送量の削減を試みた。Brotliは対応サーバーが限られるため、Deflateやgzipも選択肢として提示。HTMLや画像のデータ量削減は今後の課題とし、データ転送に関する更なる改善策を予告している。

 

SOY CMSでドメインが異なる複数のサイトを運営する

/** Geminiが自動生成した概要 **/
SOY CMSで異なるドメインの複数サイト(example.kyoto, other.example.kyoto)をさくらVPS上の単一サーバーで運用する手順を記述。Let's Encryptでワイルドカード証明書(*.example.kyoto)を取得し、既存証明書を削除後、お名前.comのDNS設定でTXTレコードを追加。SOY CMSでサイト毎にURLを設定し、Apacheのドキュメントルートにindex.phpと.htaccessを設置、ドメインに応じてサイトを切り替えるよう設定。ワイルドカード証明書の更新は、お名前.comでは自動化できないため手動、またはさくらのクラウドDNSへの移管が必要。

 

SOY Shopで販売管理アプリの構築に挑戦

/** Geminiが自動生成した概要 **/
SOY Shopで販売管理アプリ構築に挑戦中。仕入・入出金管理に注力し、既存の販売管理アプリの課題である価格バリエーションの不足に対応するため、SOY Shopのプラグインを活用し無制限登録を実現。商品規格を応用し、仕入値の異なる同一商品を管理。管理画面からの注文登録時に仕入値パターンを表示する機能も追加。ネットショップにおける仕入の概念の重要性も認識。販売管理機能強化により、ネットショップ機能全体の向上を目指す。

 

Ubuntu19.10でSnapのBracketsのライブプレビューが動作しなかった時の対処

/** Geminiが自動生成した概要 **/
Ubuntu 19.10でSnap版Bracketsのライブプレビューが「ファイルへのアクセスが拒否されました」エラーで動作しない問題の対処法。Brackets 1.14 (snap経由)、Chromium 79.0.3945.79 (snap)環境で、GitHubのIssueを参考に解決。解決策は、Bracketsのメニュー「File」→「Enable Experimental Live Preview」を有効にすること。これにより、設定済みのブラウザ(ChromiumやFirefox)でライブプレビューが正常に動作するようになった。

 

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

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

 

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`の設定が原因と考えられるが、未検証。

 

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を再起動したところ、送信が数秒で完了するようになった。

 

Ubuntuのサーバで特定のユーザのみSSHでパスワード認証を禁止したい

/** Geminiが自動生成した概要 **/
Ubuntuサーバーで特定ユーザ(例:hoge)のみSSHのパスワード認証を禁止し、公開鍵認証のみに制限する方法。`/etc/ssh/sshd_config`を編集し、`PasswordAuthentication yes` (全体としてはパスワード認証有効)と`Match User hoge` `PasswordAuthentication no` (ユーザhogeはパスワード認証無効)を設定。`sudo sshd -t`と`sudo service ssh restart`で設定を反映。hogeユーザは公開鍵認証でのみログイン可能となる。

 

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の対応までの応急処置。

 

PHPで形態素解析エンジンのMaCabを使用する為の手順のメモ

/** Geminiが自動生成した概要 **/
Ubuntu 19.10環境でPHPからMeCab形態素解析エンジンを使用する手順をまとめたメモです。MeCab、辞書(mecab-ipadic-utf8, mecab-ipadic-neologd)、php-mecabをインストールし、PHPからMeCabを呼び出すテストコードを実行しています。 php-mecabインストールでは、phpize、configure、make、installを行い、mecab.iniを作成、ApacheとCLIで有効化しました。テストコードは"今日は晴天なり"を解析し、結果を配列で出力しています。ブラウザと端末の両方から実行し、期待通りの解析結果が得られました。

 

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

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

 

SOY ShopのSMTPによるメール送信できない状態について

/** Geminiが自動生成した概要 **/
SOY ShopのSMTPメール送信不具合は、さくらインターネットのメールボックス側の仕様変更が原因だった。 SOY ShopはSMTP認証にDIGEST-MD5を優先利用していたが、さくら側でこれが拒否されるようになった。そのため、Thunderbirdでは送信できたが、SOY Shopからは送信できなかった。 解決策として、認証アルゴリズムをCRAM-MD5に切り替えることで送信できることを確認。修正版はsaitodev.co/soycms/soyshop/からダウンロード可能。ただし、この対応が全てのメールサーバで有効かは不明。

 

さくらの追加ストレージ(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を利用して直接ファイル転送を行う方式に変更されている。

 

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

/** Geminiが自動生成した概要 **/
さくらのVPSでSSD 30GBの容量がひっ迫し、バックアップ不調に陥った筆者が、追加ストレージ(NFS)を導入して容量不足を解消する手順を解説しています。Ubuntu 18.04.2環境を前提に、コントロールパネルでスイッチと100GBのNFSを契約し、アプリケーションサーバとNFSサーバ双方のネットワーク設定を行います。その後、SSH経由でアプリケーションサーバにNFSクライアントをインストールし、指定ディレクトリ(例: `/var/www/html/storage`)にNFSをマウント。サーバ再起動時にも自動マウントされるよう設定することで、画像データなどの大容量ファイルを外部ストレージに移行し、安定稼働を実現します。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ディレクトリは必須であることが判明した。

 

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

 

IoTによる施設栽培の自動制御の今後は?

/** Geminiが自動生成した概要 **/
ヤンマーは、ICTを活用した自動運転トラクターを発売しました。GPSと慣性航法システムにより、高精度な位置情報と姿勢制御を実現し、直進や旋回などの自動運転を可能にしています。これにより、オペレーターの負担を軽減し、作業効率の向上と燃料消費の削減に貢献します。また、タブレット端末で走行ルートの作成や作業状況の確認ができ、農作業の省力化・省人化を推進します。さらに、有人監視下での遠隔操作にも対応しており、将来的には完全無人化を目指しています。この自動運転トラクターは、スマート農業の実現に向けた重要な一歩となります。

 

UbuntuでさくらのVPS for Windows Serverを使用する

/** Geminiが自動生成した概要 **/
Ubuntu環境で、Remminaを使ってさくらのVPS for Windows Serverに接続する方法を解説。Remminaをインストール後、起動し、新規プロファイルを作成。VPSの接続情報を入力する際、色数をGFX RFX (32 bpp)に変更することが重要。標準の色数のままだと接続エラーとなる。設定保存後、接続ボタンをクリックすることで、Windows Serverのデスクトップ環境にアクセスできる。

 

Go言語でKVSのRedisを使ってみる

/** Geminiが自動生成した概要 **/
Go言語で複数サーバ間のセッション共有を実現するため、KVSのRedisを導入した。UbuntuにRedisをインストール後、Go言語でRedigoパッケージを用いてRedisに接続。`conn.Do("コマンド", "キー", "バリュー")`でRedisを操作し、SETで値を格納、GETで取得、DELで削除できることを確認した。ただし、削除済みキーを取得するとGo側ではエラーが発生する点に注意が必要。Redisを用いることで複数サーバ間のデータ共有が可能となる。


Powered by SOY CMS  ↑トップへ