icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【PHPライブラリ】osm⁄sitemap-phpを使って、ページ情報を渡しxmlサイトマップを出力する方法

更新: 2025/05/28 3174文字

今回は、以前composerで入れた段階で放置していた『osm⁄sitemap-phpライブラリを使ってxmlサイトマップを出力』というのをやってみます。サイトマップを自分でつくるのはめんどくさいので、ツールで作成するか、ページの情報を取得して生成などがラクです。さっそく内容を確認していってみましょう。

前回の記事~composerで入れたはいいが、肝心のサイトマップをまだ作っていなかった

さて、以前composerコマンドでサイトマップライブラリ入れた、みたいなことは書いたんですけど、肝心のサイトマップをまだ作っていなかったということが発覚しました(忘れていただけ)。なので、改めて今回やってみようということになったわけです。

前回記事(コマンドでインストールしただけ)と、使ってみるライブラリ『osm⁄sitemap-php』については、以下のリンクをご覧ください。

つける(のを想定している)サイトのページ・ディレクトリ構成

まずは、サイトマップにのせるページの情報を定義します。とりあえず・・・ 最近全く使っていない(笑)管理人の曲アレンジ受付サイトに、PHPで生成されるxmlサイトマップを搭載するという形を想定しています。

ローカルにコピーした、このサイトの構成。『assets(jsやcss、画像など)』や『template-parts(ヘッダー、フッター、サンプル曲配信などのパーツ)』は、特に今回はつかわないのでスルー。 今回使うファイル、フォルダは以下の通りです。特商法表記が少しわかりにくいですが『Specified Commercial Transactions』に由来しています。

ライブラリフォルダ
(前回入れたのを移植)
sitemap-php-develop
サイトマップ生成
(今回作る)
generate_sitemap.php
特商法表記 c-transactions.php
トップページ index.php
よくある質問 qanda.php
担当者紹介 staff.php

また、前回composerで入れたサイトマップでは、sitemap-php-develop/src内に、以下のようなファイルが入っていました。requireまたはautoloadで読んで、use〇〇で名前空間とかもロードして使う感じになります。

共通処理まとめ
(抽象基本クラス)
AbstractGenerator.php
サイトマップ生成 WebSitemapGenerator.php
サイトマップ項目
(URL,優先度,更新頻度,日時)
WebSitemapItem.php

このうち、AbstractGeneratorは直接ロードしたりはしませんが、WebSitemapGenerator.phpで継承されてます。このライブラリ内は直接エディットはしません。generate_sitemap.phpをメインに作っていくかたちになります。

osm⁄sitemap-phpライブラリでxmlサイトマップを出力するコード・ポイント

というわけで、上記のgenerate_sitemap.phpをエディットしました。コードは以下の通り(guthub gist)。いくつか解説もつけます。

ここら辺はセットアップみたいな感じです。require_onceでライブラリのファイルをロード、use 〇〇でライブラリ由来する名前空間をロード、ドメイン・ディレクトリ・出力されるファイル名を指定して、サイトマップ作るライブラリのインスタンスにします(new WebSitemapGenerator)。

ここら辺はphpによくある『Key-Value Array』で、表示されるときのurlとファイル名をKey-Valueのペアにしています。『配列の[0]がarray(url,file)』みたいにしてもいいんですけど、ちょっと階層が深くなりますよね。

そして、foreachでループ回して、各項目をxmlサイトマップにセットしていく部分。 最初『division-m.atelier-ss-agency.com/./index.phpのような、変なurlがサイトマップに記載された』というのがあったので、str_replaceでドメインを置き換えて相対パス渡すようにしています。

ここら辺は、サイトマップができたときのメッセージや件数など。コマンドやファイルアクセス時に表示されます。このケースではほぼ100%出力成功するので入れていませんが、状況によって生成失敗の可能性がある場合は、エラー時の表示なども入れます

プログラム実行して、xmlサイトマップを出力してみよう

それでは、さっそくこのプログラム(generate_sitemap.php)を実行してみましょう。 ローカル環境でやっていたので、まずはPHPを実行できるようにxammpを立ち上げて、Apatcheをstartします。

そのあと、コマンドプロンプトを立ち上げ、cdコマンドでgenerate_sitemap.phpに移動(実行するときパスつけてやっても良いかも)。 コマンド『php generate_sitemap.php』を叩いて、実行&サイトマップ生成

ファイル一覧を見ると、sitemap.xmlが出力されていました。

生成されたsitemap.xmlの中身はこんな感じ。『$item->setLastModified』でファイル更新時間を取ったので、これもxmlサイトマップに反映されました。

自動的にxmlサイトマップを生成・更新したい場合は?

ファイル更新したときに実行する仕掛けを作ったりするほか、管理人が考えたのは、Linuxのcronでした。

例えば、管理人が使用しているロリポップサーバースタンダードプランの場合。週に1回とか、決まった時間で実行したい場合は、これが使えます。

あとがき・まとめ

  • osm⁄sitemap-phpライブラリ使用時は、ライブラリのほかに実行・生成に使うファイルを作っておく
  • インスタンスにするとき、ドメイン・ディレクトリ・出力されるファイル名をパラメータで渡す
  • ファイル実行して生成するときは、ブラウザアクセスのほか、コマンド実行・cron実行などが使える

まとめると、こんなところでしょうか。ガンガン更新しないほぼ静的サイトとかでも、ツールとか手打ちで更新じゃなく、自動実行・コマンド実行でサイトマップ生成は、少し楽になると思います。


【カテゴリ】- PHP
【タグ】- ,

関連記事