【連載第7回】HTML/CSSで掲示板の「見た目」を作る!スマホ対応デザインの極意

LAMP講座

【連載第7回】脱・黒い画面!ユーザーが使う「表側の画面」を作り込む

未経験からWebアプリ開発を目指す「AlmaLinux 9とLAMP環境で作る!Webアプリ開発完全ロードマップ(全12回)」の第7回です。

これまでの6回の連載で、私たちは地道な「インフラ構築」を行ってきました。
サーバーを契約し、OSをアップデートし、Apacheの設定を変え、データベースを作り、権限と戦い、PHPで接続テストを行い…。
正直、「地味で辛い作業」だったと思います。

しかし、今日からは違います!

今回からは、いよいよユーザーの目に触れる「Webアプリケーション本体」の開発に入ります。
真っ白だった画面に、タイトルロゴ、投稿フォーム、色鮮やかなボタン、そして写真が並ぶタイムラインを作り上げていきます。

今回のゴールは、機能(PHP)を埋め込む前の「最強のハリボテ(見た目)」を完成させること。
HTML5とCSS3を駆使して、スマホでもPCでも美しく見える「レスポンシブデザイン」の掲示板を作りましょう。

コウ君

待ってました!やっと「アプリ作り」って感じですね!
でも先生、僕デザインセンスとか全くないんですけど…大丈夫でしょうか?
なんかダサいサイトしか作れる気がしません。

リナックス先生

安心して。Webデザインは「センス(才能)」ではなく「ロジック(論理)」よ。
余白の取り方、色の数、配置のルールさえ守れば、誰でもプロっぽい画面は作れるの。
今回は、最近の流行りである「シンプルで見やすいカード型デザイン」のコードを全部用意したから、それを書き写しながら構造を理解していきましょう。

本講座のカリキュラム(全12回)

現在地は第7回です。ここから「アプリ開発編」のスタートです!

  1. サーバー準備編:なぜVPSが必要?AlmaLinux 9の初期設定とSSH接続
  2. Webサーバー編:Apache(httpd)のインストールとファイアウォール設定
  3. データベース編:MariaDB(MySQL)のインストールとセキュリティ設定
  4. プログラミング言語編:PHP 8.xの導入と設定ファイルのチューニング
  5. 権限・パーミッション編:LinuxでWebサイトを公開するための「所有者」の概念
  6. 接続テスト編:PHPからデータベース(DB)に接続してみよう
  7. 【今回】アプリ開発①:HTML/CSSで掲示板の「見た目」を作る
  8. アプリ開発②:投稿機能(Create)の実装とデータの保存
  9. アプリ開発③:一覧表示機能(Read)と画像表示の仕組み
  10. アプリ開発④:編集・削除機能(Update/Delete)の実装
  11. セキュリティ編:XSSやSQLインジェクション対策の基礎
  12. 公開編:独自ドメイン設定と無料SSL(Let’s Encrypt)でHTTPS化

Webデザインの基礎知識:HTMLとCSSの役割分担

コードを書く前に、これから扱う2つの言語の役割を明確にしておきましょう。

HTML(HyperText Markup Language)

これはWebページの「骨格」を作る言語です。
「ここにタイトルを置く」「ここに入力欄を作る」「ここに画像を置く」といった、ページの構造を定義します。
HTMLがないと、ブラウザは何を表示していいか分かりません。

CSS(Cascading Style Sheets)

これはWebページの「化粧(装飾)」を担当する言語です。
「タイトルの文字を赤くする」「ボタンを丸くする」「画像を横並びにする」「スマホの時は文字を大きくする」といった見た目の指定を行います。
CSSがないと、Webページはただの文字の羅列になってしまいます。

今回は、この2つのファイルを組み合わせて、ひとつのWebページを作り上げます。

手順1:プロジェクト用ディレクトリの作成

まずは、今回作る掲示板アプリ専用のフォルダ(ディレクトリ)を作成しましょう。
/var/www/html/ の直下にファイルを散らかすのは、管理上あまり良くありません。

SSHでサーバーに接続し、以下のコマンドを実行してください。

mkdir /var/www/html/bbs
chown apache:apache /var/www/html/bbs
chmod 755 /var/www/html/bbs

これで、http://[IPアドレス]/bbs/ というURLでアクセスできる専用の場所ができました。

手順2:HTMLで骨組みを作る(index.php)

それでは、メインファイルを作成します。
拡張子は .html ではなく、将来的にPHPプログラムを埋め込むために最初から .php にしておきます。

vi /var/www/html/bbs/index.php

以下のコードをコピー&ペーストしてください。
(※まだPHPのロジックは入っていません。純粋なHTMLだけの状態です)

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ひとこと掲示板</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <header>
        <h1>ひとこと掲示板</h1>
    </header>

    <main>
        <!-- 投稿フォームエリア -->
        <div class="form-container">
            <form action="index.php" method="post" enctype="multipart/form-data">
                <div class="input-group">
                    <label>ニックネーム</label>
                    <input type="text" name="name" required placeholder="例:名無しさん">
                </div>
                <div class="input-group">
                    <label>コメント</label>
                    <textarea name="comment" required placeholder="今の気持ちをつぶやこう"></textarea>
                </div>
                <div class="input-group">
                    <label>画像(任意)</label>
                    <input type="file" name="image" accept="image/*">
                </div>
                <button type="submit" name="submit" class="submit-btn">投稿する</button>
            </form>
        </div>

        <hr>

        <!-- 投稿一覧エリア(今はダミーデータ) -->
        <div class="timeline">
            <!-- 記事1 -->
            <article class="post">
                <div class="post-header">
                    <span class="post-name">リナックス先生</span>
                    <span class="post-date">2026/01/05 12:00</span>
                </div>
                <div class="post-content">
                    <p>これはHTMLとCSSで作ったテスト投稿です。まだデータベースとは繋がっていません。</p>
                    <img src="https://placehold.jp/300x200.png" alt="ダミー画像" class="post-image">
                </div>
            </article>

            <!-- 記事2 -->
            <article class="post">
                <div class="post-header">
                    <span class="post-name">コウ君</span>
                    <span class="post-date">2026/01/05 12:05</span>
                </div>
                <div class="post-content">
                    <p>早くPHPを書いて動くようにしたいです!</p>
                </div>
            </article>
        </div>
    </main>

    <footer>
        <p>&copy; 2026 Linux Koubou BBS Project</p>
    </footer>
</body>
</html>

HTMLコードの重要ポイント解説

  • <meta name=”viewport” …>
    これが「スマホ対応(レスポンシブ)」にするための魔法の呪文です。これがないと、スマホで見た時にPCサイトがギュッと縮小されて表示され、文字が豆粒のようになってしまいます。
  • enctype=”multipart/form-data”
    <form> タグにあるこの属性は、「ファイルをアップロードする時」に絶対に必要な設定です。これを書き忘れると、テキストは送れても画像データだけがサーバーに届かないという現象が起きます。
  • accept=”image/*”
    ファイル選択画面を開いた時に、自動的に「画像ファイルだけ」を表示するようにする親切設計です。

手順3:CSSでデザインを整える(style.css)

今のままブラウザで見ると、ただの文字と入力欄が縦に並んでいるだけの、非常に質素な画面です。
ここにCSSを適用して、モダンなアプリ風に変身させましょう。

vi /var/www/html/bbs/style.css
/* 全体のリセットと基本設定 */
* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

body {
    font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", sans-serif;
    background-color: #f0f2f5; /* 背景は薄いグレーで見やすく */
    color: #333;
    line-height: 1.6;
}

/* ヘッダー */
header {
    background-color: #4CAF50; /* テーマカラーは緑 */
    color: white;
    padding: 1rem;
    text-align: center;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

/* メインコンテンツの幅制限 */
main {
    max-width: 600px; /* スマホなら全幅、PCなら600pxまで */
    margin: 20px auto;
    padding: 0 10px;
}

/* 投稿フォームのデザイン */
.form-container {
    background: white;
    padding: 20px;
    border-radius: 8px;
    box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}

.input-group {
    margin-bottom: 15px;
}

label {
    display: block;
    margin-bottom: 5px;
    font-weight: bold;
    font-size: 0.9rem;
}

input[type="text"], textarea {
    width: 100%;
    padding: 10px;
    border: 1px solid #ccc;
    border-radius: 4px;
    font-size: 1rem;
}

textarea {
    height: 100px;
    resize: vertical;
}

.submit-btn {
    width: 100%;
    background-color: #4CAF50;
    color: white;
    border: none;
    padding: 12px;
    font-size: 1.1rem;
    font-weight: bold;
    border-radius: 4px;
    cursor: pointer;
    transition: background-color 0.3s;
}

.submit-btn:hover {
    background-color: #45a049;
}

/* 区切り線 */
hr {
    margin: 30px 0;
    border: 0;
    height: 1px;
    background: #ccc;
}

/* タイムライン(記事一覧) */
.post {
    background: white;
    padding: 15px;
    border-radius: 8px;
    box-shadow: 0 1px 2px rgba(0,0,0,0.1);
    margin-bottom: 20px;
}

.post-header {
    display: flex;
    justify-content: space-between;
    margin-bottom: 10px;
    border-bottom: 1px solid #eee;
    padding-bottom: 5px;
}

.post-name {
    font-weight: bold;
    color: #4CAF50;
}

.post-date {
    font-size: 0.8rem;
    color: #888;
}

.post-image {
    max-width: 100%;
    border-radius: 4px;
    margin-top: 10px;
    border: 1px solid #eee;
}

/* フッター */
footer {
    text-align: center;
    padding: 20px;
    color: #888;
    font-size: 0.8rem;
}

CSSデザインのこだわりポイント

  • max-width: 600px; margin: 0 auto;
    これが「スマホ対応」の肝です。PCの大画面で見た時に、横にびよーんと伸びすぎないよう幅を制限しつつ、margin: auto で常に画面の中央に配置されるようにしています。
  • box-shadow(影)とborder-radius(角丸)
    最近のアプリっぽい「カード型デザイン」にするためのテクニックです。背景を少し浮き上がらせることで、クリックできそうな質感や、情報のまとまりを表現しています。
  • input, textareaの幅100%
    スマホの狭い画面でも、PCの広い画面でも、入力欄が親要素いっぱいまで広がるようにしています。これでデバイスを問わず入力しやすくなります。

手順4:権限の最終確認

ファイルを作成した際、SSHで root として作業していると、ファイルの所有者が root になってしまっていることがあります。
このままでは、次回以降PHPでファイル操作をする時にエラーになる可能性があるため、念のため所有者をWebサーバー(apache)に統一しておきましょう。

chown -R apache:apache /var/www/html/bbs

完成画面を確認しよう!

お疲れ様でした。それではブラウザを開いて、作成したページにアクセスしてみましょう。

http://[あなたのVPSのIPアドレス]/bbs/

(※ファイル名を index.php にしたので、URLの最後にファイル名を書かなくても自動で表示されます)

コウ君

おおーっ!すごい!
なんか一気に「Webサービス」っぽくなりました!
スマホで見ても崩れてないし、入力欄も使いやすそうです!

リナックス先生

いい反応ね。
でも、今はまだ「投稿ボタン」を押しても何も起きない(ページが再読み込みされるだけ)わよね?
それは、見た目(HTML)しかなくて、中身(PHP)が入っていないからよ。

次回予告:PHPで「投稿機能」を実装する

今回で、Webアプリの「ガワ(見た目)」は完璧に仕上がりました。
次回は、いよいよこのフォームに入力されたデータをPHPで受け取り、データベースに保存する「Create(新規作成)」機能を実装します。

ここから先は、HTMLのようなマークアップではなく、本格的な「プログラミングロジック」の世界に入ります。
if文$_POST といった呪文が出てきますが、一つひとつ丁寧に解説するので安心してくださいね。

自分の手で作った画面が動く感動まで、あと一歩です!

▼まだサーバーを用意していない方はこちら

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント