WordCamp Kansai 2025 LT スライド
by
あかし
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
LT:WordPressテーマ のテスト可能設計 — 発表者 明石荘作 ITエンジニア/行政書士
Slide 2
Slide 2 text
自己紹介 明石荘作 x:cheekydigit ITエンジニアしつつ行政書士やっています ● Vue,React などのモダンフロントエンド ● Laravel,Node.jsなどのバックエンド ● その他Webシステム開発 ● 業務システム開発 ● 技術的観点からの法務支援 ○ スコレーデジタル行政書士事務所
Slide 3
Slide 3 text
自動テストとは ?超簡単に ● あらかじめ定められた手順によってコンピュータが自動に関数などの動きを確かめて くれる ->「データA を渡せば必ずBが帰ってくる」ことを確かめるテスト ● つまり、同じデータAを渡した時に、DBや設定によってBだったり、B’が帰ってくるよう な項目はそのままでは自動テストできない。 (例) 現在日付を取得する関数、「ニュース」に含まれる記事を取得するなど つまり、function.phpに書くような関数はそのままでは、ほぼ自動テスト不可能
Slide 4
Slide 4 text
なぜテスト可能設計か? 1. コード変更して、予期せぬところに影響があっても、テストがすぐ異常を教えてくれる ので、安心して直せる。(実は副次効果) 2. テストをするために役割を分けて設計することで、コードがシンプルになり、理解する のが速くなる。(入力と出力が明確化し、プレーンなPHPに主なコードを集約できる) 3. 同じコードをブロック・テンプレ・ショートコードなど複数のWordPress機能で再利用が 可能(例:クラシックテンプレ->ブロックへの段階的な移行ができる、今後の新フォー マットにも対応できる)
Slide 5
Slide 5 text
今回のターゲット こんな感じのニュース一覧を何件かカード形式で表示するテンプレートパーツを考えます
Slide 6
Slide 6 text
どう「分ける」か? WordPress固有の機能に依存しないように、プレーン PHPを作り、そこに値を渡す設計にするのが基本 戦略。 ニュース一覧テンプレート ファイル ニュースカード (1件データ取得-整形) ニュースカード (表示のみ) 表示一覧データ 取得 一覧表示 データ1件取得、 データ整形 表示(HTML整形) 何もしない WP機能の壁 WPデータの壁 プレーンPHP
Slide 7
Slide 7 text
ディレクトリ構成 your-theme/ ├─ inc/ │ ├─ news_presenters.php #ピュアPHPでHTMLに整形する(テスト対象) │ └─ news-card.php # HTMLデータを注入する(データ取得関数WP依存) ├─ template-parts/ │ └─ news-list.php # WPのテンプレートそのもの └─ tests/ └─ NewsPresentersTest.php
Slide 8
Slide 8 text
表示に関する処理をプレーン PHPに切り出す news_presenters.php 入力:表示するための値を配列にする (全て文字列の配列) 出力:記事カード1枚分のHTML文字列を返す /** ニュースカード1枚分のHTML生成(プレーンPHP) */ function build_news_card(array $data): string { $title = h($data['title'] ?? ''); // 略 return <<
{$title}
//略 HTML; }
Slide 9
Slide 9 text
news_presenters.php(プレーンPHP)のテストコード '','permalink'=>'https://ex.com/p','date_iso'=>'2025-09-12', // 省略 ]); // データの有無で表示項目が変わるかのテストなど $this->assertStringContainsString('news-card', $html); $this->assertStringContainsString('
Slide 10
Slide 10 text
入力:記事id 処理: 記事IDを元にデータを取得して、表示の PHPに渡す news-list.php WordPressから集めた値をまとめてプレーン PHPに渡す処理 get_the_title($post_id), 'date_iso' => get_the_date('Y-m-d', $post_id), // 省略 ]); echo wp_kses_post($html); // 出力直前だけエスケープ }
Slide 11
Slide 11 text
処理: 対象のカードを出力する カードを一覧表示するテンプレート 'news', (中略) ]); if ($q->have_posts()): echo '
'; while ($q->have_posts()): $q->the_post(); NewsTags\news_card(); // 値を集めて渡すだけ endwhile; echo '
'; wp_reset_postdata(); else: echo '
ニュースはありません。
'; endif;
Slide 12
Slide 12 text
テスト可能設計 (関心の分離 )の使い所 1. クラシックテーマからブロックテーマへの移行を安全に行いたい 時 a. 後方互換性も確保できそう 2. WordPressのバージョンアップ対応 3. ロケールで表示形式が違う。それぞれで確認したい時 など プロンプトに「関心の分離」「単体テスト」と入れれ ば、LLMがいろいろ提案してくれます !
Slide 13
Slide 13 text
ありがとうございました!