ポートフォリオに戻る

某衆議院議員の公式サイト構築・保守

WordPress HTML CSS JavaScript

概要

知人からの紹介にて案件受託。日本維新の会所属の衆議院議員の公式サイトを作成、運用させていただいております。(2014年12月より。受託当初は大阪府議会議員)

項目内容
種別政治家公式サイト(衆議院議員)
技術スタックWordPress + PHP / カスタムテーマ(ビルドツールなし)
デザインレスポンシブ対応(3ブレークポイント)・日本語タイポグラフィ最適化
WordPress開発カスタムテンプレート・ショートコード・URLリライト・WP_Query多段構成
セキュリティ.htaccess による多層防御(SQLi・パストラバーサル・Bot対策等)
開発環境Docker Compose(WordPress + MariaDB)
フロントエンドjQuery アニメーション・スムーススクロール・動的サブメニュー

先方&紹介者の意向もあり、極力トップページだけでコンテンツを全て網羅する方向で制作したため、LPのような非常に縦長のサイトとなっている。

制作イメージ

*一部抜粋&加工の上掲載(クリックで拡大)

デザイン面

カラーリングとビジュアルアイデンティティ

日本維新の会のブランドイメージと整合性を持たせながら、政治家サイトに求められる「信頼性」と「親しみやすさ」を両立させたカラーパレットを設計。

  • アクセントグリーン #8fc427:セクション見出し・主要CTAに使用。市民活動・環境を連想させる色として採用
  • メインブルー #015f99:リンク・サイドバー見出し。誠実さ・権威を表現
  • ボディ背景 #fbfaf5(オフホワイト):長文記事の視認性に配慮し、純白より読み疲れしにくい色調を選択
  • 本文テキスト #0d0015:完全な黒より柔らかく、コントラスト比を確保

政治家サイトとして「硬すぎず・軟すぎない」絶妙なバランスを意識し、有権者への訴求力を高めるトーンを構築した。

タイポグラフィ

  • 使用フォント “ヒラギノ角ゴ Pro W3″、”メイリオ”など、日本語サイトに最適化したフォントスタックを採用。
  • 文字間隔 letter-spacing: 1px:日本語の可読性向上のため明示的に指定
  • 行間 line-height: 1.5:24px ベースラインに基づく垂直リズムを維持
  • 見出し設計:デフォルトのブラウザスタイルをリセットし、グリーン背景に白テキストで統一感のあるセクション区切りを実現

レスポンシブレイアウト

3段階のブレークポイント設計により、PC・タブレット・スマートフォン全対応を実現。

デバイスレイアウト
PC(1024px+)960px 固定2カラム(本文64.6% + サイドバー31.25%)
タブレット(768px〜)768px 固定同比率でスケール
スマートフォン(〜768px)95vw 流動1カラム、サイドバーを下部に移動

モバイル向けの工夫

  • ナビゲーションフォントに 4.062vw(ビューポート幅相対)を採用し、機種を問わず最適なサイズを実現
  • PCヘッダー画像(header-pc.png)とスマートフォン用ロゴ(header-logo.png)を .visible-phone / .hidden-phone クラスで出し分け
  • 画像に max-width: 100% を設定し、コンテンツ幅超過を防止

UIコンポーネント

ナビゲーション

  • 背景 #333 のダークバーに白テキスト
  • ホバー時に #666 へ変化するフィードバック
  • サブメニューはクリックで slideDown('slow') 展開(jQueryアニメーション)
  • 外側クリックで自動収納(UX配慮)

CTAボタン(.link-button

background-color: #015f99;
border-radius: 10px;
box-shadow: 2px 2px 5px rgba(0,0,0,0.9);

ホバー時 #028ddd に変化し、クリッカブルな印象を強調。

セクション構造

  • h3 タグにグリーン背景(#8fc427
  • 直下の .main-block に同色ボーダー(border: 1px solid #8fc427
  • 視覚的なグルーピングで情報の階層を明示

フローティングTOPボタン

  • スクロール量に応じて fadeIn / fadeOut
  • PC幅では right: calc((100% - 1050px) / 2) により、コンテンツ領域の右端に固定

YouTubeレスポンシブ埋め込み

  • padding-top: 56.25% によるアスペクト比16:9の維持
  • 内部要素を position: absolute で全域展開

コーディング面

WordPress テンプレート階層の活用

特定ページに対してスラッグベースのカスタムテンプレートを作成し、柔軟なレイアウト切り替えを実現。

テンプレートファイル役割
index.phpトップページ(複数 WP_Query による動的コンテンツ構築)
single.php投稿詳細 + 同カテゴリ関連記事表示
page-backnumber.phpバックナンバーアーカイブ(年別整理)
page-national-assembly-report.php国会報告(サイドバーなし全幅レイアウト)
page-renritsu.php連立合意書(専用レイアウト)

カスタム関数(functions.php)

1. ウィジェットエリア登録

サイドバーとフッターの2カ所にウィジェットエリアを定義。カスタムHTMLラッパーを指定してデザインと統合。

register_sidebar(array(
    'name'          => 'サイドバーウィジット-1',
    'id'            => 'sidebar-1',
    'before_widget' => '<div class="menu-block" id="%1$s">',
    'after_widget'  => '</div>',
    'before_title'  => '<h3>',
    'after_title'   => '</h3>',
));

2. URLリライト(.html拡張子対応)

renritsu.html というURLをWordPressのクエリへマッピング。日本の行政・政治サイトで慣例的な .html 拡張子に対応。

// URL パターンを index.php?pagename=renritsu にルーティング
add_rewrite_rule('^renritsu\.html$', 'index.php?pagename=renritsu', 'top');

// page_link フィルターで生成URLを .html 形式に書き換え
add_filter('page_link', function($permalink, $post) {
    if ($post-&gt;post_type === 'page' &amp;&amp; $post-&gt;post_name === 'renritsu') {
        return home_url('/' . $post-&gt;post_name . '.html');
    }
    return $permalink;
}, 10, 2);

'top' 優先度で登録し、WordPress デフォルトルールより先に評価させる設計。

3. Contact Form 7 メールアドレス確認バリデーション

フックの優先度を 11(デフォルト 10 より後)に設定し、デフォルト検証後に追加チェックを実行。グローバル変数で1つ目のメール値を保持し、2つ目フィールドと照合。

add_filter('wpcf7_validate_email*', 'wpcf7_text_validation_filter_extend', 11, 2);

function wpcf7_text_validation_filter_extend($result, $tag) {
    global $my_email_confirm;
    $tag   = new WPCF7_Shortcode($tag);
    $name  = $tag-&gt;name;
    $value = isset($_POST[$name])
        ? trim(wp_unslash(strtr((string) $_POST[$name], "\n", " ")))
        : '';

    if ($name === 'your-email') {
        $my_email_confirm = $value;
    }
    if ($name === 'your-email_confirm' &amp;&amp; $my_email_confirm !== $value) {
        $result-&gt;invalidate($tag, '確認用のメールアドレスが一致していません');
    }
    return $result;
}

wp_unslash() によるPOSTデータのサニタイズを適切に実施。

4. キャプションショートコードのカスタマイズ

WordPress デフォルトの を上書きし、画像インライン埋め込みキャプションを独自実装。正規表現でコンテンツを解析し、キャプションテキストを抽出。esc_attr() によるXSS対策を実施した上でHTML生成。

トップページのコンテンツ構成(WP_Query 多段活用)

index.php において、12以上の WP_Query / get_posts() を使い分けて多様なコンテンツセクションを動的構築。

// 例:期間指定付きクエリ(直近1年以内の投稿のみ表示)
$args = array(
    'posts_per_page'  =&gt; -1,
    'category_name'   =&gt; 'extra',
    'category__not_in'=&gt; array(15),
    'date_query'      =&gt; array(array(
        'after' =&gt; array(
            'year'  =&gt; $year - 1,
            'month' =&gt; '1',
            'day'   =&gt; '1',
        ),
    )),
);

カスタムメタフィールド(page_category)で「トップ固定」「本文エリア」「バックナンバー」を切り分け、管理画面から柔軟なコンテンツ管理を実現。

セキュリティ対策(.htaccess)

WordPress 向けセキュリティプラグイン「All In One WP Security」の設定と組み合わせ、包括的なサーバーサイドセキュリティを実装。

対策手段
HTTP → HTTPS 強制リダイレクトRewriteCond %{HTTPS} off による301転送
SQLインジェクション対策drop / insert / union / declare 等のクエリ文字列をブロック
パストラバーサル対策../ ..\ パターンを拒否
TRACE/TRACK メソッド拒否RewriteRule による406返却
プロキシ経由コメントスパム防止HTTP:VIA / HTTP:FORWARDED ヘッダー検出
ディレクトリリスティング無効化Options -Indexes
センシティブファイルへのアクセス遮断wp-config.php / debug.log / readme.html を403
画像ホットリンク防止Referer ベースの制限(自ドメインのみ許可)
悪意あるBotブロックUser-Agent フィルタリング(40種以上)

Docker を使ったローカル開発環境

本番環境(共有サーバー)との差異を最小化しつつ、テーマファイルのライブ編集が可能なDocker環境を構築。主に、Wordpress本体やPHPなどのコア部分のバージョンアップが必要な際に事前の検証に活用している。

services:
  wordpress:
    build: ./docker/wordpress
    ports: ["8083:80"]
    volumes:
      - ./wp-content/themes/theme_name:/var/www/html/wp-content/themes/theme_name
      - ./media:/var/www/html/wp-content/uploads
    environment:
      WORDPRESS_DEBUG: "1"
  db:
    image: mariadb
    ports: ["3309:3306"]
  • テーマディレクトリをボリュームマウントし、再起動なしでの即時反映を実現
  • ポート番号を本番と分離(8083 / 3309)しローカル競合を防止
  • WORDPRESS_DEBUG: "1" でデバッグモードを有効化

JavaScript インタラクション

jQuery を使用し、3種のUI動作を実装。

// サブメニュー開閉(外クリック自動収納付き)
$('#have-submenu1').click(function(event) {
    $('#submenu1').is(':visible')
        ? $('#submenu1').slideUp('slow')
        : $('#submenu1').slideDown('slow');
    event.stopPropagation();
});
$(document).click(function() { $('#submenu1').slideUp('slow'); });

// スクロール連動フローティングボタン
$(window).scroll(function() {
    $(window).scrollTop() &gt; headerBottom
        ? $('#go_top').fadeIn('slow')
        : $('#go_top').fadeOut('slow');
});

// スムーススクロール(アンカーリンク全対応)
$('a[href^="#"]').click(function() {
    var target = $($(this).attr('href'));
    $('html, body').animate({ scrollTop: target.offset().top }, 500, 'swing');
    return false;
});

まとめ

項目内容
種別政治家公式サイト(衆議院議員)
技術スタックWordPress + PHP / カスタムテーマ(ビルドツールなし)
デザインレスポンシブ対応(3ブレークポイント)・日本語タイポグラフィ最適化
WordPress開発カスタムテンプレート・ショートコード・URLリライト・WP_Query多段構成
セキュリティ.htaccess による多層防御(SQLi・パストラバーサル・Bot対策等)
開発環境Docker Compose(WordPress + MariaDB)
フロントエンドjQuery アニメーション・スムーススクロール・動的サブメニュー