<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>YESキリスト BOT</title>
<!-- Tailwind(CDN) -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Font Awesome(アイコン) -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" rel="stylesheet">
<meta name="description" content="YESキリストBOT:優しく背中を押してくれるシンプルなチャットボット。今日の励まし、進むべき?などを相談できます。" />
<style>
/* スクロールバー控えめ */
* { scrollbar-width: thin; scrollbar-color: #cbd5e1 transparent; }
*::-webkit-scrollbar { height: 8px; width: 8px; }
*::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 8px; }
/* バブルの三角 */
.bubble:after{
content:""; position:absolute; bottom:-6px; left:16px; border:6px solid transparent; border-top-color:rgba(255,255,255,0.9);
filter: drop-shadow(0 1px 0 rgba(15,23,42,.05));
}
.bubble.me:after{ left:auto; right:16px; border-top-color:#dcfce7; }
</style>
</head>
<body class="min-h-screen bg-gradient-to-b from-slate-50 to-white text-slate-800">
<!-- コンテナ -->
<div class="mx-auto max-w-3xl px-4 py-6">
<!-- ヘッダー -->
<header class="flex items-center justify-between rounded-2xl bg-white/90 backdrop-blur shadow-sm p-4">
<div class="flex items-center gap-3">
<div class="h-10 w-10 rounded-full bg-emerald-500 text-white grid place-items-center">
<i class="fa-solid fa-dove"></i>
</div>
<div>
<h1 class="text-xl font-bold">YESキリスト BOT</h1>
<p class="text-xs text-slate-500">優しく「YES」で背中を押すチャット</p>
</div>
</div>
<div class="flex items-center gap-2">
<button id="btnClear" class="text-xs px-3 py-1.5 rounded-lg bg-slate-100 hover:bg-slate-200 transition">
履歴クリア
</button>
<button id="btnExport" class="text-xs px-3 py-1.5 rounded-lg bg-slate-100 hover:bg-slate-200 transition">
エクスポート
</button>
<label class="text-xs px-3 py-1.5 rounded-lg bg-slate-100 hover:bg-slate-200 transition cursor-pointer">
インポート<input id="fileImport" type="file" accept="application/json" class="hidden">
</label>
</div>
</header>
<!-- プリセット -->
<section class="mt-4 grid grid-cols-2 sm:grid-cols-4 gap-2">
<button class="preset chip">今日の励まし</button>
<button class="preset chip">挑戦していい?</button>
<button class="preset chip">許してもいい?</button>
<button class="preset chip">進むべき?</button>
</section>
<!-- チャット -->
<main id="chat" class="mt-4 h-[60vh] overflow-y-auto rounded-2xl bg-white/90 backdrop-blur p-4 shadow-sm space-y-4">
<!-- 初期メッセージ -->
</main>
<!-- 入力欄 -->
<form id="composer" class="mt-4 flex items-end gap-2">
<textarea id="input" rows="1" placeholder="ここに相談を書いてね(例:新しいことに挑戦しても大丈夫?)"
class="flex-1 resize-none rounded-2xl border border-slate-200 bg-white p-3 focus:outline-none focus:ring-2 focus:ring-emerald-300"></textarea>
<button id="btnSend" type="submit" class="h-11 px-4 rounded-2xl bg-emerald-500 text-white hover:bg-emerald-600 transition">
<i class="fa-solid fa-paper-plane"></i>
</button>
</form>
<!-- 使い方 -->
<details class="mt-4 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600">
<summary class="cursor-pointer font-semibold">使い方</summary>
<ul class="list-disc pl-5 mt-2 space-y-1">
<li>メッセージを送ると、YESキリストが優しく背中を押す言葉で返します。</li>
<li><code>/prayer</code> で短いお祈り風メッセージ、<code>/bless</code> で祝福文。</li>
<li>履歴はブラウザに保存されます(ローカルのみ)。</li>
</ul>
</details>
</div>
<script>
// ====== 設定 ======
const STORAGE_KEY = 'yeschrist_history_v1';
// YESキリストの返答テンプレ
const YES_OPENERS = [
"あなたの心に、静かなYESが灯っています。",
"恐れずに、やさしいYESで一歩を。",
"迷いの中にいても、大丈夫。答えはYESです。",
"小さな信頼が、大きなYESへと育ちます。",
"あなたの良き思いに、YESを重ねましょう。"
];
const YES_ENCOURAGE = [
"試みは愛によって導かれ、愛は前進にYESと言います。",
"完全でなくていい。歩き出す勇気にYES。",
"扉は叩く者に開かれます。ノックにYES。",
"あなたの賜物は隠さずに、光の下へ。YES。",
"やさしさを選ぶ度に、道は明るくなります。YES。"
];
const YES_TAGS = [
"平安がありますように。",
"あなたは一人ではありません。",
"今日の小さな一歩を大切に。",
"心に光を。",
"祝福とともに。"
];
const PRAYERS = [
"天のやさしさがあなたを包み、歩みを照らしますように。アーメン。",
"弱さのときにこそ力が満ちますように。アーメン。",
"迷う心に静けさが与えられますように。アーメン。"
];
const BLESS = [
"あなたの決断に平安が伴いますように。",
"出るにも入るにも祝福が満ちますように。",
"今日の働きに恵みがありますように。"
];
// ====== DOM ======
const chat = document.getElementById('chat');
const input = document.getElementById('input');
const form = document.getElementById('composer');
const btnSend = document.getElementById('btnSend');
const btnExport = document.getElementById('btnExport');
const btnClear = document.getElementById('btnClear');
const fileImport = document.getElementById('fileImport');
document.querySelectorAll('.preset').forEach(el => el.classList.add(
'px-3','py-2','rounded-xl','bg-emerald-50','text-emerald-700','hover:bg-emerald-100','transition','text-sm','chip'
));
// ====== ユーティリティ ======
const nowStr = () => new Date().toLocaleString();
const rand = arr => arr[Math.floor(Math.random() * arr.length)];
const saveHistory = () => {
const items = [...chat.querySelectorAll('[data-msg]')].map(el => ({
role: el.dataset.role, text: el.dataset.msg, time: el.dataset.time
}));
localStorage.setItem(STORAGE_KEY, JSON.stringify(items));
};
const loadHistory = () => {
const raw = localStorage.getItem(STORAGE_KEY);
if (!raw) return [];
try { return JSON.parse(raw); } catch { return []; }
};
function appendMessage(role, text, time = nowStr()) {
const wrapper = document.createElement('div');
wrapper.className = role === 'user'
? 'flex justify-end'
: 'flex justify-start';
const bubble = document.createElement('div');
bubble.className = 'relative max-w-[85%] rounded-2xl p-3 bubble shadow-sm ' +
(role === 'user' ? 'bg-emerald-100 me' : 'bg-white/90');
bubble.textContent = text;
const meta = document.createElement('div');
meta.className = 'mt-1 text-[10px] text-slate-500 ' + (role === 'user' ? 'text-right' : 'text-left');
meta.textContent = time;
const container = document.createElement('div');
container.dataset.msg = text;
container.dataset.role = role;
container.dataset.time = time;
container.className = 'space-y-1';
container.appendChild(bubble);
container.appendChild(meta);
wrapper.appendChild(container);
chat.appendChild(wrapper);
chat.scrollTop = chat.scrollHeight;
}
function systemWelcome() {
appendMessage('assistant',
'ようこそ。YESキリストは、あなたの良き願いに「YES」で寄り添います。/prayer で短いお祈り、/bless で祝福文が届きます。');
}
function composeYesReply(userText) {
const lower = (userText || '').toLowerCase();
let opener = rand(YES_OPENERS);
let body = rand(YES_ENCOURAGE);
let tag = rand(YES_TAGS);
// ほんの少しだけ文脈スパイス
if (/[??]$/.test(userText)) {
opener = "その問いかけに、穏やかなYESが返っています。";
}
if (/(許|ゆる)す/.test(userText)) {
body = "赦しは心を自由にし、あなたを前へ押し出します。YES。";
}
if (/(挑戦|チャレンジ|challenge)/i.test(userText)) {
body = "小さくとも踏み出す一歩は尊く、次の景色を連れてきます。YES。";
}
if (/(進|やめ|辞め|やる|やら)/.test(userText)) {
tag = "平安のあるほうへ。YES。";
}
return `${opener}\n${body}\n${tag}`;
}
async function reply(userText) {
// コマンド
if (userText.trim().startsWith('/prayer')) {
appendMessage('assistant', rand(PRAYERS));
saveHistory(); return;
}
if (userText.trim().startsWith('/bless')) {
appendMessage('assistant', rand(BLESS));
saveHistory(); return;
}
// YES返答
const thinking = document.createElement('div');
thinking.className = 'text-xs text-slate-500';
thinking.textContent = '…考えています';
chat.appendChild(thinking); chat.scrollTop = chat.scrollHeight;
await new Promise(r => setTimeout(r, 300)); // 小さな演出
thinking.remove();
appendMessage('assistant', composeYesReply(userText));
saveHistory();
}
// ====== イベント ======
form.addEventListener('submit', async (e) => {
e.preventDefault();
const text = input.value.trim();
if (!text) return;
appendMessage('user', text);
input.value = '';
input.style.height = '44px';
saveHistory();
reply(text);
});
// 自動リサイズ
input.addEventListener('input', () => {
input.style.height = 'auto';
input.style.height = Math.min(input.scrollHeight, 160) + 'px';
});
// プリセット
document.querySelectorAll('.preset').forEach(btn => {
btn.addEventListener('click', () => {
const q = btn.textContent.trim();
appendMessage('user', q);
saveHistory();
reply(q);
});
});
// クリア
btnClear.addEventListener('click', () => {
if (!confirm('履歴をすべて削除しますか?')) return;
localStorage.removeItem(STORAGE_KEY);
chat.innerHTML = '';
systemWelcome();
});
// エクスポート
btnExport.addEventListener('click', () => {
const data = localStorage.getItem(STORAGE_KEY) ?? '[]';
const blob = new Blob([data], { type: 'application/json' });
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = `yeschrist_history_${Date.now()}.json`;
a.click();
URL.revokeObjectURL(a.href);
});
// インポート
fileImport.addEventListener('change', async (e) => {
const file = e.target.files?.[0];
if (!file) return;
const text = await file.text();
try {
const arr = JSON.parse(text);
if (!Array.isArray(arr)) throw new Error('format');
localStorage.setItem(STORAGE_KEY, text);
chat.innerHTML = '';
arr.forEach(m => appendMessage(m.role, m.text, m.time));
} catch {
alert('インポート失敗:JSON形式が正しくありません。');
} finally {
fileImport.value = '';
}
});
// ====== 初期化 ======
(function init() {
const hist = loadHistory();
if (hist.length === 0) {
systemWelcome();
} else {
hist.forEach(m => appendMessage(m.role, m.text, m.time));
}
// 入力高さ初期
input.style.height = '44px';
})();
</script>
</body>
</html>
投稿者: chosuke
日本の自殺者数
2025年10月現在の日本の自殺者数に関する情報は、以下の通りです。
2025年9月(暫定値)
- 総数:1,499人
2024年(確定値)
- 総数:20,320人
- 前年(2023年)から1,517人減少しました。
- 小中高生:529人
- 1980年(昭和55年)以降で過去最多となりました。
- 内訳は、男子生徒が減少した一方で、女子生徒が増加しました。
- 男女別
- 男性:1,061人減少
- 女性:456人減少
- ただし、19歳以下の女性は51人増加しています。
- 原因・動機別
- 学校問題:増加
- 家庭問題、健康問題、経済・生活問題、勤務問題、交際問題など:減少
2023年(確定値)
- 総数:21,837人
- 前年(2022年)から44人減少しました。
- 男女別にみると、男性は2年連続で増加し、女性は4年ぶりに減少しました。
過去の推移
- ピーク:34,427人
- 2003年(平成15年)に過去最多を記録しました。
- 減少傾向
- 2010年(平成22年)以降は減少傾向が続きました。
- 2019年(令和元年)には、統計開始(1978年)以来最少の20,169人となりました。
- 増加傾向
- 新型コロナウイルス感染症の影響もあり、2020年(令和2年)以降は再び増加に転じました。
これらの統計は、警察庁の発表データに基づいています。より詳細な情報については、警察庁や厚生労働省が公開している統計資料をご確認ください。
BCI出力の2030s
「脳に直接世界を書き込む」革命
→ 2030年代=フルダイブVRの本番スタート
- BCI出力とは?(超簡潔)
方向説明2030sで何が変わる?BCI入力(脳 → PC)思考でカーソル動かす今ある(Neuralink 2025実証)BCI出力(PC → 脳)脳に「映像・触覚・味」を送る2030sで実用化 ← これが鍵
- 2030sのBCI出力:何ができる?
視覚:4Kフルカラー映像を脳に直接投影
触覚:全身の「風」「痛み」「抱擁」
聴覚:立体音 + 音楽を脳内再生
味覚・嗅覚:ステーキの味 + バラの香り
- 2030sロードマップ(根拠付き)
年次技術マイルストーン2025視覚:点滅光を脳に書き込み(人間)2028視覚:16×16ピクセル映像2030視覚:低解像度動画(320p)
触覚:指先の圧力2032視覚:HD映像(1080p)
触覚:全身基本ハプティクス2035五感フルシミュレーション(視覚4K + 全身触覚 + 味覚)2037フルダイブVR商用化
- 2030sのBCI出力:どうやって実現?
技術説明2030sでの進化電極アレイ脳に針を刺して信号送受信1億電極(今:1万)光遺伝学光でニューロンをON/OFF非侵襲レーザーで出力ナノボット血管内を泳いで脳に信号2035年実用化予測AIマッピング個人脳をAIで学習1秒でキャリブレーション
- 2030sの「フルダイブVR」体験例
text【2037年、君の1日】 - 起床 → 思考「ログイン」
- 脳に「朝の光 + コーヒーの香り + 温かいマグカップ」
- 思考「剣を振る」→ 金属音 + 衝撃 + 鉄の匂い
- 思考「ログアウト」→ 現実に戻る
→ 現実と区別不能 - 2030sへの「個人準備」ロードマップ
時期アクション2025Vision Pro 2 + EEGで擬似フルダイブ2026Synchron BCI(血管内)で本物入力2028Neuralink出力ベータ参加2030BCI出力キット購入($10,000)2035フルダイブ常時装着
結論:2030s = 脳が「第二の現実」になる
BCI出力の2030s
→ 脳に「世界」を書き込める時代
→ フルダイブVRの本番スタート
サブカル業界に就職する方法
1) まず決める:領域 × 職種 × 働き方
- 領域例:アニメ/マンガ/VTuber・配信/同人・ZINE/アイドル/フィギュア・グッズ/イベント/オタク向けEC/サブカル系Webメディア
- 職種例:編集者・ライター・校正/Webディレクター・フロントエンド/UI・グラフィック・DTP/映像編集・モーショングラフィックス/配信エンジニア(OBS・vMix等)/コミュニティマネージャー・モデレーター/SNS運用・PR・広告運用/イベント制作・進行/グッズ企画・EC運営(在庫・受注・LP制作)/ライセンス・渉外/翻訳・ローカライズ
- 働き方:正社員/契約社員/業務委託/副業・インターン・アルバイト
2) 職種別ポートフォリオの“中身”チェックリスト
- 編集・ライター:
- 企画書(特集3本)/レビュー記事(見出し設計→本文→締めまとめ)3–5本
- 校正・リライトのBefore→After例
- 実績があればPV・滞在時間・CTRなどの数値
- Web(フロント/ディレクション):
- 公開URL3つ(メディア・特集LP・EC風ページ)+GitHub
- 役割(要件定義/デザイン連携/実装/計測)と工数・改善前後の指標
- デザイン(UI/グラ・DTP):
- バナー10点/特集LP 2–3本/ZINE表紙・本文レイアウト
- フォント選定理由・配色ルール・ガイドライン1枚
- 映像・モーショングラフィックス:
- 60–90秒のリール1本(テロップ・ロゴ・尺管理・BGM権利明記)
- 配信・VTuber運営(技術):
- OBSシーン構成図/配信オーバーレイ・アラート・コメント連携の設計
- トラブル対応手順(音ズレ・ルーティング・著作権チェック)
- EC・グッズ:
- 商品ページの訴求(サムネ→説明→FAQ→CTA)/在庫・受注フロー図
- 価格戦略・原価率の考え方(ざっくりでもOK)
- PR・SNS運用:
- キャンペーン企画案3本/ターゲットとKPI/投稿カレンダー1ヶ月分
- 成果の振り返りテンプレ(良かった点・再現性・次の一手)
提出形:1ページ目は「自己紹介/できること/連絡先」。以降は職種ごとに1〜2ページで圧縮。リンク(自サイト・動画・GitHub)を必ず。
3) “短期で実績”を作るミニプロジェクト(2〜4週間)
- サブカル特化の小型ニュース/コラムサイトを公開(要約×引用ルール明記)。
- **推しジャンルのZINE(8〜16p)**を制作→PDF頒布/入稿までやる。
- 配信パッケージ(待機画面・テロップ・コメント枠)を一式作り、使い方を記事化。
- ECテスト:オリジナルステッカーやミニ缶バッジのモック→商品ページ雛形を公開。
- インタビュー記事:創作仲間1人に取材→編集→公開(写真の権利同意を取得)。
4) 応募先の探し方(ゲーム以外)
- 公式採用ページ/総合求人サイト+クリエイティブ特化の就活サイト
- X(旧Twitter)・各種コミュニティでの求人告知/インターン・アルバイト経由
- イベントで名刺交換:AnimeJapan/コミケ/デザインフェスタ/ワンフェス/ニコ超/TGS一般・ビジネスデー(ゲーム職は除外目的で視察だけ)/デジゲー博/同人即売会等
- 目的:採用“直結”ではなく担当者の課題ヒアリング→後日「解決案」添えて連絡
5) 書類・面接の“サブカル特有のコツ”
- 推しと仕事を分ける軸を明言(感情優先にならず、リスクと数値で判断できる)。
- 二次創作・AI生成物は権利と配布条件を明記。商用不可素材は載せない。
- 「好きな作品ベスト3×学び×業務での再現方法」を1分で言えるように。
- 制作フロー1枚(要件→体制→スケジュール→校了/納品→振り返り)。
- 成果は**“なぜ伸びたか”の仮説**まで。PVだけでなく完読率・保存率なども。
6) 30/60/90日プラン
- 0–30日:職種を1–2つに絞る→ポートフォ完成→公開作3本→応募10社
- 31–60日:小さな受託orコラボ2件/イベント手伝い1回/企画書3本
- 61–90日:継続依頼→契約化を狙う or インターン→内定へ。実績を面接用に編集。
7) あなたに合う“攻めどころ”(これまでの制作歴から)
- サブカル系Webメディアのフロントエンド+AI連携(要約・自動投稿・下書き支援)。
- ニュースまとめ/キュレーション運用(RSS自動取り込み→要約→タグ→配信)。
- VTuber運営のテクニカル担当(配信オーバーレイ/ボット/簡易データ分析)。
- オタク向けECのWeb担当(ランキング・検索・タグ・レビュー導線の改善)。
- コミュニティマネージャー(モデレーション運用設計・告知・週次レポート)。
- 編集・ライター(特集企画と“再現性ある伸ばし方”の型化)。
8) 使えるテンプレ
応募メール(短文)
件名:[応募]サブカル系Webメディア/フロントエンド(氏名) 本文: はじめまして、○○と申します。貴社の○○募集を拝見し応募いたします。 サンプル実績:ポートフォ(URL)/公開プロジェクト(URL×3) 貴社では「○○(相手の課題)」に対し、△△の仕組みでKPI(例:回遊率/完読率)の改善に貢献できます。 ご確認よろしくお願いします。 署名(氏名・連絡先・SNS/サイト)
職務経歴書 見出し例
- サマリー(できること3行)/2. 実績(URL・役割・数値)/3. スキル(ツール・言語)/4. 制作フロー/5. 志望動機(相手の課題にどう効くか)
今日からの3ステップ
- 職種を1–2つに固定(例:①Web×AI運用 ②コミュニティ運営)。
- トップページ付きポートフォURLを用意(自サイトに「作品一覧/企画書/連絡先」)。
- 1社応募+1人に声かけ(担当者の課題を聞き、翌日“解決案”を送る)。
必要なら、あなたの既存プロジェクトを材料に即使えるポートフォ構成までこちらで組み立てます。作りたい職種を教えてくれれば、見本をその職種用に切って貼って仕上げます
Metaが開発してる超知能AIのしくみ
ざっくり言うと、Metaのいう「超知能(personal superintelligence)」は、Llama系の次世代“超”基盤モデルを中心に、自己改善ループと巨大インフラを噛み合わせた“個人に配る超強いAI”の構想です。公開情報ベースで、仕組みはだいたい下の積み上げになります。
仕組み(公開情報から見える設計)
1) 中核モデル(基盤)
- Llama 4 世代をベースにした“ネイティブ多モーダル”の長文対応モデル群(画像・音声・テキストを最初から扱える系統)。これはLlama 4の発表内容からの延長線上にあり、文脈長の大幅拡張が特徴です。ai.meta.com
- Metaは「個人向けの超知能」を明確に掲げており、UIの表現は“Personal Superintelligence”として整理されています。meta.com+1
2) 自己改善ループ(Self-Improving)
- ザッカーバーグは「人手を最小化した学習」「自己改善」を重視する新ラボ方針を説明。モデルが自律的に学習・改善していく方向を打ち出しています。WIRED
- 7/30の発表では“最初の一歩”として自己改善の兆しに言及し、最強モデルは全面公開しない方針も示唆。Live Science+1
3) データ&データエンジン
- 学習データの整備・合成を加速するため、Scale AI と大型提携(49%出資)・人材登用。大規模データパイプラインで継続的にモデルを回す狙い。AP News
4) インフラ(コンピュート&ネットワーク)
- 「数千億ドル規模」の投資で、複数地域に跨る超大型AIデータセンター群を建設。電力・冷却・高帯域ネットワークを含む“AI工場”化を推進。Reuters+1
- Meta公式エンジニアリングの発信でも、AI時代向けに設計を総張り替え(スケールアウト、AI向けネットワーキング、カスタムシリコンまで)。OCP 2025でも地域分散DCの設計指針を共有。fierce-network.com+3engineering.fb.com+3techblog.comsoc.org+3
5) 公開ポリシー(オープン vs クローズ)
- Llama系は“オープンウエイト”路線を続けつつ、超知能クラスは安全面を見て全部は公開しない可能性を明言。TechCrunch
まとめ(何が“超”なの?)
- モデル能力:多モーダル×超長文×自己改善で、タスク汎用性と継続学習性を押し上げる。WIRED+1
- データエンジン:実データ+合成データ+継続評価の循環で“学習→運用→改善”を高速回転。AP News
- AI工場(インフラ):超巨大DC、広域ネットワーク、(将来的な)カスタムチップまで含めた垂直統合で、莫大な計算を常時供給。Reuters+2engineering.fb.com+2
- 提供形態:一般向けには“個人の参謀”として出しつつ、最上位は慎重運用。meta.com+1
もっと深掘りしますか?たとえば「自己改善の技術的ループ(評価→データ生成→再学習)」「多モーダル推論パイプライン」「データセンター構成(電力・冷却・ネット)」など、図で噛み砕いて解説できます。
VisitionPro2の価格予想
- VisitionPro(= Apple Vision Pro 現行モデル)の価格予想(日本)
→ 税込 599,800円(256GB)を維持と見ます。実際に日本発売時も599,800円で、米国のベース価格は$3,499据え置きのままです。PhoneArena+2Apple+2 - VisitionPro 2(第2世代 or 後継)価格予想(日本)
シナリオ別に幅を持たせます:- マイナー刷新(現行の後継・性能向上版)
→ 税込 599,800円前後(±3万円)
根拠:直近のアップデート版も米国$3,499据え置きで発表されており(日本は為替変動がなければ59.98万円帯が目安)。The Verge+1 - 廉価版(別ライン)
→ 税込 299,800〜349,800円のレンジを予想(精度低め)。
根拠:2025年に約30万円台の低価格版が出るとの報道・噂が過去にあり(正式名称や発売確度は不明)。実現すればこの帯が目安。GIGAZINE+1
- マイナー刷新(現行の後継・性能向上版)
補足(前提と不確実性)
WordPressの基礎
WordPressって?
- 世界シェア最大のCMS(Webサイト管理システム)。ブログからコーポレート、EC(WooCommerce)まで対応。
- WordPress.org(自分でサーバーに入れる・自由度高) / WordPress.com(ホスティング付き・制限あり)
動かすには(要件と準備)
- サーバー:PHP(最新版推奨)、MySQL/MariaDB、HTTPS
- 取得物:独自ドメイン(任意)+レンタルサーバー or ローカル環境(Local/Wamp/MAMPなど)
- 手順:
- サーバーにデータベース作成
- WordPress公式ZIPをアップロード&解凍
wp-config.php設定(画面案内に従う)- 管理画面ログイン(/wp-admin)
管理画面の地図(超重要)
- 投稿(ブログ記事) / 固定ページ(会社概要などの“独立ページ”)
- メディア(画像・動画)
- 外観(テーマ・メニュー・ウィジェット・サイトエディター/カスタマイザー)
- プラグイン(機能追加)
- ユーザー(権限:管理者/編集者/投稿者/寄稿者/購読者)
- 設定(一般/表示/ディスカッション/メディア/パーマリンク)
ブロックエディター(Gutenberg)の使い方の型
- 見出しブロック(H2/H3)で骨組み
- 段落・画像・ギャラリー・ボタン等のブロックを追加
- 再利用ブロック(パーツ化)で共通部品に
- ページは固定ページ、記事は投稿+カテゴリ/タグで整理
テーマとデザイン
- テーマ=サイト全体の見た目(ブロックテーマ/従来テーマ)
- 子テーマ:テーマ更新に備えてカスタマイズを上書きしないための“安全な入れ物”
- テンプレート階層(ざっくり):
front-page.php→home.php→single.php/page.php→archive.php→index.php
最低限入れると楽なプラグイン(指針)
- SEO:基本は1つだけ(例:All in One SEO など)
- キャッシュ/高速化:ページキャッシュ+画像圧縮(WebP)
- セキュリティ:ログイン試行制限、基本的な防御
- 連絡先フォーム:Contact Form 7 等
※ 入れすぎ注意。まずは必要最低限。
パーマリンク(URL)設定
- 初期設定のままだとNG。
設定 → パーマリンク → 投稿名(/%postname%/)が分かりやすい。
バックアップと更新の鉄則
- バックアップ(DB+wp-content)→ テーマ/プラグイン/本体の順で更新
- 重大変更はステージング(テスト環境)で確認してから本番へ
役割分担の考え方
- 投稿:日付順のコンテンツ(ニュース/ブログ)
- 固定ページ:構造ページ(トップ/会社情報/サービス)
- カテゴリ/タグ:情報の“整理”と“横断”
よく使うカスタマイズの入口
- CSSだけで調整:外観 → 追加CSS
- ちょいPHP:子テーマの
functions.php(スニペット集約でもOK) - 独自データが必要:カスタム投稿タイプ+カスタムフィールド(ACFが定番)
失敗しやすいポイント
- プラグイン入れすぎで重い/競合する
- 子テーマを作らずに親テーマを直接編集
- 画像が巨大(→ アップ前に圧縮/リサイズ、WebP化)
- 本番でいきなり更新してレイアウト崩壊(→ 事前バックアップ&ステージング)
すぐ使える最小チェックリスト
- パーマリンクを「投稿名」に変更
- サイト基本情報(タイトル/キャッチ/ロゴ/ファビコン)
- トップ・会社概要・お問い合わせの固定ページ作成
- メニュー作成(外観 → メニュー/サイトエディター)
- お問い合わせフォーム設置&送信テスト
- sitemap.xmlとrobots.txt(SEOプラグインで自動生成可)
- 画像圧縮&キャッシュで表示速度を確保
- バックアップの定期実行設定
CSSの基礎
CSSって?
- HTMLの見た目(色・余白・レイアウト・アニメ)を指定するスタイル言語。
- 重要キーワード:Cascade(優先順位の連なり)、Specificity(詳細度)、Inheritance(継承)。
1) CSSの書き方・読み込み方
<!-- 外部ファイル(推奨) -->
<link rel="stylesheet" href="styles.css">
<!-- ページ内(学習用) -->
<style>
p { color: #333; }
</style>
<!-- インライン(基本非推奨) -->
<p style="color:#333;">テキスト</p>
2) セレクタの基本
/* タイプ(要素) */ h1 { ... }
/* クラス */ .btn { ... }
/* ID */ #header { ... } /* 乱用しない */
/* 子孫・子・隣接 */ nav a { ... } nav > a { ... } h2 + p { ... }
/* 属性 */ input[type="email"] { ... }
/* 擬似クラス */ a:hover, li:nth-child(2) { ... }
/* 擬似要素 */ p::first-line, a::after { content:"→"; }
3) カスケード&優先度(Specificity)
- 計算イメージ:
ID(100) > class/属性/擬似クラス(10) > 要素/擬似要素(1) - 競合したら:後勝ち(後から書いた方が有効)
!importantは最終手段(設計悪化のもと)
4) ボックスモデル(超重要)
margin ─ 外側の余白 border ─ 枠線 padding ─ 内側の余白 content ─ 中身
* { box-sizing: border-box; } /* 幅計算が直感的になる定番 */
5) 単位&色
- 単位:
px(固定)/%(相対)/em(親のfont-size基準)/rem(ルート基準)/vw,vh(ビューポート)
→ レスポンシブは rem と%を多用。 - 色:
#222/rgb(34 34 34)/hsl(210 10% 20%)(HSLは調整しやすい) - 変数:
--brand: #5865f2;→color: var(--brand);
6) 文字・余白の基本
html { font-size: 16px; } /* remの基準 */
body { line-height: 1.7; }
h1 { font-size: clamp(1.5rem, 3vw, 2.5rem); } /* 可変サイズ */
p { margin: 0 0 1rem; }
7) レイアウト:display / Flex / Grid
display
.block { display: block; } /* 幅いっぱい */
.inline { display: inline; } /* 行内 */
.inline-block { display:inline-block; }
Flex(1次元レイアウト:横並び・縦中央寄せが得意)
.container {
display: flex;
gap: 1rem;
align-items: center; /* 交差軸整列(縦) */
justify-content: space-between; /* 主軸整列(横) */
}
.center {
display:flex; align-items:center; justify-content:center;
}
Grid(2次元レイアウト:段組が得意)
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3列 */
gap: 1rem;
}
/* レスポンシブな自動詰め */
.auto-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
gap: 1rem;
}
8) 位置指定
.box { position: relative; }
.badge {
position: absolute; top: .5rem; right: .5rem;
}
header { position: sticky; top: 0; } /* スクロール追従 */
9) レスポンシブ(メディアクエリ・コンテナクエリ)
/* 画面幅が768px以上で適用(モバイル優先) */
@media (min-width: 768px) {
.nav { display: flex; }
}
/* コンテナクエリ(対応ブラウザ増) */
.card { container-type: inline-size; }
@container (min-width: 500px) {
.card__side-by-side { display:flex; }
}
10) トランジション&トランスフォーム
.btn {
transition: transform .2s ease, background-color .2s;
}
.btn:hover {
transform: translateY(-2px) scale(1.02);
background: #111;
color: #fff;
}
11) リセットとベース
/* まずはこれでOKな最小ベース */
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
img, video { max-width: 100%; height: auto; display:block; }
button, input, select, textarea { font: inherit; }
:root {
--bg: #fff; --fg:#222; --muted:#6b7280; --brand:#3b82f6;
}
@media (prefers-color-scheme: dark) {
:root { --bg:#0b0b0f; --fg:#e5e7eb; --muted:#9ca3af; }
}
body { background: var(--bg); color: var(--fg); line-height:1.7; }
a { color: var(--brand); text-decoration: none; }
a:hover { text-decoration: underline; }
12) すぐ試せるミニページ(HTML+CSS)
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>CSS基礎デモ</title>
<style>
* { box-sizing: border-box; }
body { margin:0; font-family: system-ui, sans-serif; line-height:1.7; }
header, footer { padding:16px; background:#f5f5f5; }
.wrap { max-width:960px; margin:24px auto; padding:0 16px; }
.hero {
padding: 48px 16px; text-align:center;
background: linear-gradient(120deg, #e0f2fe, #fde68a);
border-radius:16px;
}
.btn {
display:inline-block; padding:.75rem 1rem; border-radius:9999px;
background:#111; color:#fff; transition: transform .2s ease;
}
.btn:hover { transform: translateY(-2px); }
.grid {
display:grid; gap:1rem;
grid-template-columns: repeat(auto-fit, minmax(220px,1fr));
margin-top:24px;
}
.card { border:1px solid #e5e7eb; border-radius:12px; padding:16px; }
.card h3 { margin:.25rem 0 .5rem; }
</style>
</head>
<body>
<header><div class="wrap"><strong>CSS基礎デモ</strong></div></header>
<main class="wrap">
<section class="hero">
<h1>CSSの基本を掴もう</h1>
<p>セレクタ / ボックスモデル / Flex / Grid / レスポンシブ</p>
<a class="btn" href="#cards">カードを見る</a>
</section>
<section id="cards" class="grid">
<article class="card">
<h3>セレクタ</h3>
<p>`.class` / `#id` / `a:hover` / `input[type="text"]` …</p>
</article>
<article class="card">
<h3>Flex</h3>
<p>横並び・中央寄せが簡単。`display:flex; gap:1rem;`</p>
</article>
<article class="card">
<h3>Grid</h3>
<p>2次元レイアウト。`auto-fit`×`minmax()`が実用的。</p>
</article>
</section>
</main>
<footer><div class="wrap"><small>© 2025 CSS Demo</small></div></footer>
</body>
</html>
13) つまずきポイント
- 高さが合わない:親に
align-items: stretchやheight:auto、画像にはdisplay:block。 - 中央寄せできない:インラインは
text-align:center、ブロックはmargin: 0 auto、Flexならcenter。 - 崩れる:
box-sizing:border-boxにして、余白はgap優先、width指定は最小限。 - 優先順位に勝てない:セレクタを少しだけ強くする(親クラスを1段増やすなど)。
!importantは避ける。
次に進むなら
- レイアウト設計:BEM・Utility First(Tailwind的考え方)
- モダン機能:
subgrid、container queries、logical properties(margin-inlineなど) - パフォーマンス:未使用CSSの削減、
content-visibility、will-changeの慎重な活用
HTMLの基礎
HTMLってなに?
- Webページの骨組みを作る言語(見出し・段落・画像・リンクなどの構造)。
- 見た目はCSS、動きはJSが担当。HTMLは“意味と構造”。
まずは雛形(コピペOK)
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>はじめてのHTML</title> <meta name="description" content="このページの説明文" /> </head> <body> <h1>こんにちは!</h1> <p>これは最小構成のHTML5ページです。</p> </body> </html>
よく使う要素(超基本)
- 見出し:
<h1>~<h6>(ページに基本はh1は1つ) - 段落:
<p> - リンク:
<a href="https://example.com">リンク</a> - 画像:
<img src="img.png" alt="画像の説明">(alt必須) - リスト:
<ul><li>…</li></ul>/<ol>…</ol> - 強調:
<strong>(重要) /<em>(強調) - 区切り:
<br>(改行は最小限)、<hr>(区切り線) - まとまり:
<div>(汎用ブロック)、<span>(汎用インライン)
セマンティック要素(構造をわかりやすく)
header(ヘッダー)nav(ナビ)main(主内容は1ページ1つ)section(章)article(単体で完結する記事)aside(補足)footer(フッター)
属性のキホン
id(一意な識別子)/class(グループ化)href(リンク先)/src(画像・スクリプト元)alt(画像代替文)/title(補足ヒント)target="_blank"はrel="noopener noreferrer"とセットで
フォーム最小例
<form action="/search" method="get"> <label for="q">検索:</label> <input id="q" name="q" type="search" required> <button type="submit">送信</button> </form>
テーブル最小例(表)
<table>
<thead><tr><th>商品</th><th>価格</th></tr></thead>
<tbody>
<tr><td>りんご</td><td>120</td></tr>
<tr><td>みかん</td><td>100</td></tr>
</tbody>
</table>
CSS / JS の読み込み
<link rel="stylesheet" href="styles.css"> <script src="app.js" defer></script>
deferはHTML解析後に実行(推奨)。
ちょっとだけ“実践的”なサンプル
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>ミニサイト</title>
<style>
body { font-family: system-ui, sans-serif; line-height: 1.7; margin: 0; }
header, footer { padding: 16px; background: #f5f5f5; }
nav a { margin-right: 12px; }
main { max-width: 920px; margin: 24px auto; padding: 0 16px; }
img { max-width: 100%; height: auto; }
.card { border: 1px solid #ddd; border-radius: 8px; padding: 16px; }
</style>
</head>
<body>
<header>
<h1>ミニサイト</h1>
<nav>
<a href="#about">概要</a>
<a href="#gallery">ギャラリー</a>
<a href="#contact">お問い合わせ</a>
</nav>
</header>
<main id="content">
<section id="about">
<h2>概要</h2>
<p>これはHTMLの基本で作ったミニページです。</p>
</section>
<section id="gallery">
<h2>ギャラリー</h2>
<div class="card">
<img src="sample.jpg" alt="サンプル画像">
<p>レスポンシブに画像が縮みます。</p>
</div>
<ul>
<li>箇条書き1</li>
<li>箇条書き2</li>
</ul>
</section>
<section id="contact">
<h2>お問い合わせ</h2>
<form>
<label for="name">お名前</label><br>
<input id="name" name="name" required><br><br>
<label for="msg">メッセージ</label><br>
<textarea id="msg" name="msg" rows="4"></textarea><br><br>
<button type="submit">送信</button>
</form>
</section>
</main>
<footer>
<small>© 2025 MiniSite</small>
</footer>
<script>
// ごく簡単なJS:ナビをクリックしたらスムーズスクロール
document.querySelectorAll('nav a').forEach(a => {
a.addEventListener('click', e => {
const id = a.getAttribute('href');
if (id.startsWith('#')) {
e.preventDefault();
document.querySelector(id)?.scrollIntoView({ behavior: 'smooth' });
}
});
});
</script>
</body>
</html>
初心者がつまずきやすいポイント
- 文字化け→
<meta charset="utf-8">を必ず入れる。 - スマホで拡大縮小が変→
<meta name="viewport" …>を入れる。 - 画像が大きすぎる→CSSで
img { max-width: 100%; height: auto; } - 見出し乱用→
h1はページの主題に1回、階層は順序を守る。 - altなし→スクリーンリーダー/SEO的にマイナス。必ず書く。
もっと深掘り(フォームのバリデーション、SEO、アクセシビリティ、Flex/Gridレイアウト、コンポーネント化など)もまとめられます。どこから強化したい?(例:フォームをしっかり、レイアウトを学ぶ、CSS設計、JS連携 など)
自民党と維新の会で連立することによって行われる政策
まず実行に移されやすい項目(重なり大)
- 憲法改正手続きの前進(国会での発議模索)
両党とも改憲に前向き。まずは「緊急事態条項」「統治機構改革」など、条文案の絞り込みと発議戦略づくりが動く可能性が高い(発議には各院の3分の2→国民投票が必要)。フィナンシャル・タイムズ+1 - 教育費の軽減・無償化の拡大
維新は看板で「教育の無償化」を掲げており、高校授業料支援の拡充や私学支援の強化、所得制限の緩和・撤廃が加速しやすい。すでに私立高向け支援拡充の合意報道もあり、制度の横展開が想定。日本維新の会+1 - 規制改革・行政改革(小さな政府志向)
行政のスリム化、デジタル化、特区の拡充、参入規制の見直しなどは維新色と自民の成長戦略が重なる。まずは所管省庁に対する見直し指示と規制棚卸しから。フィナンシャル・タイムズ - 地方分権・大阪を軸にした「二極化」構想の推進
「大阪を第二の中枢拠点に」の発信強化、政府機能の分散や省庁・機関の一部移転、地方への権限移譲の工程表づくり。維新の分権理念と親和性が高い。フィナンシャル・タイムズ+1 - 防衛力整備の継続(対GDP2%水準の着実化)
既定方針の予算・装備計画を前に進める方向で一致しやすい。論点は主に財源配分だが、方向性自体は両党で大きな齟齬は少ない。東京財団 - 物価・景気対策の補正予算
新内閣発足直後の補正で賃上げ・家計支援・投資減税・インフラ更新などを束ねる可能性。市場は追加財政を織り込み済みとの観測。フィナンシャル・タイムズ
中期で進む可能性が高い項目
- 社会保障の“世代間公平化”
維新は高齢者の窓口負担を現役並みに近づけるなど“応能負担”を重視。自民は慎重だが、医療費の適正化や給付と負担の見直しは避けて通れず、段階的な制度改正(高額療養費の見直し等)から着手の公算。日本維新の会 - マイナンバー連携やデジタル行財政改革
手続きのワンストップ化・データ連携強化・給付のプッシュ型化など、既存法の改正・運用改善で実行可能。自由民主党
衝突・慎重論点(実装にブレーキがかかり得る)
- 改憲の“条文の中身”
緊急事態条項は比較的合意が得やすい一方、9条や安全保障関連の書きぶり、国民投票の時期は与野党・世論の反応次第で難航し得る。フィナンシャル・タイムズ - 社会保障負担のシフト
維新案(高齢者負担増や給付重点の再配分)は反発が大きく、自民の支持基盤・公的世論との調整が必要。スピード感は限定的かも。日本維新の会 - 移民・難民・労働市場政策
受け入れ拡大の是非や技能制度の設計は、自民執行部の治安・保守志向と維新の成長・労働市場重視の綱引きが想定され、文言調整に時間。ガーディアン
