WordCamp Kansai 2025 LT スライド
by
あかし
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
ありがとうございました!