// if文による条件分岐 比較演算子
using System;
public class Program{
public static void Main(){
var time = 12;
if(time < 12){
Console.WriteLine("午前中"); // 条件式が成立したときの処理
} else if (time == 12){
Console.WriteLine("正午");
} else if (time > 12){
Console.WriteLine("午後");
}
}
}
タグ: programming
ライブストリーミングサイト
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>疑似配信サイト - PC画面&システム音声</title>
<style>
/* ベースリセット */
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: sans-serif;
background: #f5f5f5;
color: #333;
}
header, footer {
background: #333;
color: #fff;
padding: 15px;
text-align: center;
}
header h1 {
margin: 0;
font-size: 1.5rem;
letter-spacing: 0.05em;
}
footer p {
margin: 0;
font-size: 0.9rem;
}
main {
max-width: 1200px;
margin: 20px auto;
padding: 20px;
background: #fff;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.page-title {
text-align: center;
margin-bottom: 20px;
font-size: 1.4rem;
}
/* 2カラムレイアウト */
.container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.video-section {
flex: 1 1 600px;
min-width: 300px;
}
.aside-section {
flex: 1 1 350px;
min-width: 300px;
background: #fafafa;
border-left: 1px solid #ccc;
padding: 10px;
}
/* 動画表示領域 */
.video-wrapper {
background: #000;
overflow: hidden;
}
.video-wrapper video {
display: block;
width: 100%;
height: auto;
background: #000;
}
.video-title {
margin: 10px 0;
font-weight: bold;
}
.video-controls {
text-align: center;
margin-top: 10px;
}
.video-controls button {
margin: 0 5px;
padding: 8px 16px;
font-size: 1rem;
cursor: pointer;
}
/* チャットUI */
.chat-section {
display: flex;
flex-direction: column;
height: 400px;
}
.chat-log {
flex: 1;
border: 1px solid #ccc;
padding: 10px;
overflow-y: auto;
margin-bottom: 10px;
background: #fff;
}
.chat-log p {
margin: 0 0 5px 0;
}
.chat-log p span.username {
font-weight: bold;
color: #3366cc;
margin-right: 5px;
}
.chat-input-area {
display: flex;
gap: 5px;
}
.chat-input-area input[type="text"] {
flex: 1;
padding: 8px;
font-size: 1rem;
}
.chat-input-area button {
padding: 8px 16px;
font-size: 1rem;
cursor: pointer;
}
/* スケジュール */
.schedule {
margin-top: 20px;
}
.schedule h2 {
font-size: 1.2rem;
margin-bottom: 10px;
}
.schedule table {
width: 100%;
border-collapse: collapse;
}
.schedule th, .schedule td {
border: 1px solid #ccc;
padding: 10px;
text-align: center;
}
.schedule th {
background: #f0f0f0;
}
.schedule tr:nth-child(even) {
background: #fafafa;
}
</style>
</head>
<body>
<!-- ヘッダー -->
<header>
<h1>My Advanced Live Streaming (Local Demo)</h1>
</header>
<!-- メインコンテンツ -->
<main>
<div class="page-title">PC画面&システム音声をローカル再生するデモ</div>
<div class="container">
<!-- ▼ 動画エリア ▼ -->
<section class="video-section">
<div class="video-title">疑似ライブ映像</div>
<div class="video-wrapper">
<video id="liveVideo" controls autoplay></video>
</div>
<!-- ボタン類 -->
<div style="text-align: center; margin-top: 10px;">
<button id="screenShareBtn">画面共有(システム音声)</button>
<button id="cameraShareBtn">カメラ&マイク</button>
<button id="stopBtn">停止</button>
</div>
<!-- 再生/一時停止/ミュート/全画面 -->
<div class="video-controls">
<button id="playBtn">再生</button>
<button id="pauseBtn">一時停止</button>
<button id="muteBtn">ミュート/解除</button>
<button id="fullscreenBtn">全画面</button>
</div>
<div class="schedule">
<h2>配信スケジュール(仮)</h2>
<table>
<thead>
<tr>
<th>日付</th>
<th>配信タイトル</th>
<th>開始時間</th>
<th>予定</th>
</tr>
</thead>
<tbody>
<tr>
<td>2/15</td>
<td>PC画面共有テスト</td>
<td>18:00</td>
<td>30分</td>
</tr>
<tr>
<td>2/18</td>
<td>音声ミキシング練習</td>
<td>20:00</td>
<td>1時間</td>
</tr>
<tr>
<td>2/20</td>
<td>週末雑談</td>
<td>21:30</td>
<td>2時間</td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- ▼ チャットエリア ▼ -->
<aside class="aside-section">
<h2>チャット</h2>
<div class="chat-section">
<!-- チャットログ -->
<div id="chatLog" class="chat-log"></div>
<!-- 入力フォーム -->
<div class="chat-input-area">
<input type="text" id="usernameInput" placeholder="ユーザー名" />
<input type="text" id="messageInput" placeholder="メッセージを入力…" />
<button id="sendBtn">送信</button>
</div>
</div>
</aside>
</div><!-- /container -->
</main>
<!-- フッター -->
<footer>
<p>© 2025 My Advanced Live Streaming (Local Demo)</p>
</footer>
<script>
/*****************************************************************
* 1. PC画面&システム音声 or カメラ&マイクを取得
*****************************************************************/
const video = document.getElementById('liveVideo');
const screenShareBtn = document.getElementById('screenShareBtn');
const cameraShareBtn = document.getElementById('cameraShareBtn');
const stopBtn = document.getElementById('stopBtn');
let localStream = null;
// 画面共有 (PC画面 + システム音声)
async function startScreenShare() {
stopMedia(); // 既存ストリームを止めてから開始
try {
// getDisplayMediaで画面を共有
// audio:true -> Chromeの場合「システム音声を共有」オプションが表示される
localStream = await navigator.mediaDevices.getDisplayMedia({
video: true,
audio: true // ただしブラウザやOSによっては無視される可能性あり
});
video.srcObject = localStream;
// システム音声をモニタリングする場合、ミュートOFFにする
video.muted = false;
console.log('画面共有開始 (システム音声含む可能性)');
} catch (err) {
alert('画面共有を開始できませんでした: ' + err.message);
}
}
// カメラ&マイク
async function startCameraShare() {
stopMedia();
try {
localStream = await navigator.mediaDevices.getUserMedia({video: true, audio: true});
video.srcObject = localStream;
// 自分のマイク音声がループしないようにしたい場合は video.muted = true;
video.muted = true;
console.log('カメラ&マイク開始');
} catch (err) {
alert('カメラ/マイクを取得できませんでした: ' + err.message);
}
}
// 停止
function stopMedia() {
if (!localStream) return;
localStream.getTracks().forEach(track => track.stop());
localStream = null;
video.srcObject = null;
console.log('メディア停止');
}
screenShareBtn.addEventListener('click', startScreenShare);
cameraShareBtn.addEventListener('click', startCameraShare);
stopBtn.addEventListener('click', stopMedia);
/*****************************************************************
* 2. 再生/一時停止/ミュート/全画面など動画コントロール
*****************************************************************/
const playBtn = document.getElementById('playBtn');
const pauseBtn = document.getElementById('pauseBtn');
const muteBtn = document.getElementById('muteBtn');
const fullscreenBtn = document.getElementById('fullscreenBtn');
playBtn.addEventListener('click', () => {
video.play();
});
pauseBtn.addEventListener('click', () => {
video.pause();
});
muteBtn.addEventListener('click', () => {
video.muted = !video.muted;
});
fullscreenBtn.addEventListener('click', () => {
if (!document.fullscreenElement) {
video.requestFullscreen().catch(err => {
console.warn('フルスクリーンモードにできません:', err);
});
} else {
document.exitFullscreen();
}
});
/*****************************************************************
* 3. 簡易チャット機能(ローカルのみ)
*****************************************************************/
const chatLog = document.getElementById('chatLog');
const usernameInput = document.getElementById('usernameInput');
const messageInput = document.getElementById('messageInput');
const sendBtn = document.getElementById('sendBtn');
let messages = [];
function renderChatLog() {
chatLog.innerHTML = '';
messages.forEach(msg => {
const p = document.createElement('p');
const userSpan = document.createElement('span');
userSpan.className = 'username';
userSpan.textContent = msg.username + ': ';
const textNode = document.createTextNode(msg.text);
p.appendChild(userSpan);
p.appendChild(textNode);
chatLog.appendChild(p);
});
chatLog.scrollTop = chatLog.scrollHeight;
}
function sendMessage() {
const username = usernameInput.value.trim();
const text = messageInput.value.trim();
if (!username || !text) return;
messages.push({ username, text });
renderChatLog();
messageInput.value = '';
}
sendBtn.addEventListener('click', sendMessage);
messageInput.addEventListener('keydown', e => {
if (e.key === 'Enter') sendMessage();
});
// デモ用メッセージ
(function initDemoChat() {
messages.push(
{ username: 'Alice', text: 'こんにちは!' },
{ username: 'Bob', text: 'システム音声聞こえる?' },
{ username: 'Carol', text: 'タブの音は共有できてます〜' }
);
renderChatLog();
})();
</script>
</body>
</html>
百科事典サイト
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Encyclopedia</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f4f4f4;
}
header {
background-color: #2c3e50;
color: white;
padding: 20px;
text-align: center;
}
nav {
display: flex;
justify-content: center;
background-color: #34495e;
padding: 10px;
}
nav a {
color: white;
text-decoration: none;
margin: 0 15px;
font-weight: bold;
}
nav a:hover {
text-decoration: underline;
}
.search-bar {
display: flex;
justify-content: center;
margin: 20px 0;
}
.search-bar input {
width: 60%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 16px;
}
.search-bar button {
padding: 10px 20px;
background-color: #2c3e50;
color: white;
border: none;
border-radius: 5px;
margin-left: 5px;
cursor: pointer;
font-size: 16px;
}
.search-bar button:hover {
background-color: #34495e;
}
.categories, .articles, .about {
margin: 20px;
padding: 20px;
background-color: white;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
.categories h2, .articles h2, .about h2 {
margin-bottom: 15px;
font-size: 24px;
}
.categories ul, .articles ul {
list-style: none;
padding: 0;
}
.categories li, .articles li {
margin-bottom: 10px;
}
.categories a, .articles a {
color: #2c3e50;
text-decoration: none;
font-size: 18px;
}
.categories a:hover, .articles a:hover {
text-decoration: underline;
}
.about p {
line-height: 1.6;
font-size: 18px;
color: #333;
}
.featured {
margin: 20px;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.featured-item {
background-color: white;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.featured-item img {
width: 100%;
height: auto;
}
.featured-item h3 {
margin: 15px;
font-size: 20px;
color: #2c3e50;
}
.featured-item p {
margin: 15px;
line-height: 1.5;
color: #666;
}
.featured-item a {
display: block;
text-align: center;
padding: 10px;
margin: 15px;
background-color: #2c3e50;
color: white;
text-decoration: none;
border-radius: 5px;
}
.featured-item a:hover {
background-color: #34495e;
}
footer {
background-color: #2c3e50;
color: white;
text-align: center;
padding: 10px 0;
margin-top: 20px;
}
</style>
</head>
<body>
<header>
<h1>Welcome to the Encyclopedia</h1>
<p>Your go-to source for comprehensive knowledge</p>
</header>
<nav>
<a href="#">Home</a>
<a href="#categories">Categories</a>
<a href="#articles">Popular Articles</a>
<a href="#about">About</a>
</nav>
<div class="search-bar">
<input type="text" placeholder="Search articles...">
<button>Search</button>
</div>
<section id="categories" class="categories">
<h2>Categories</h2>
<ul>
<li><a href="#">Science</a></li>
<li><a href="#">Technology</a></li>
<li><a href="#">History</a></li>
<li><a href="#">Geography</a></li>
<li><a href="#">Culture</a></li>
</ul>
</section>
<section id="articles" class="articles">
<h2>Featured Articles</h2>
<ul>
<li><a href="#">The Wonders of Space Exploration</a></li>
<li><a href="#">The Rise and Fall of Ancient Civilizations</a></li>
<li><a href="#">Understanding Quantum Mechanics</a></li>
<li><a href="#">The Impact of AI on Modern Society</a></li>
<li><a href="#">World's Most Breathtaking Landscapes</a></li>
</ul>
</section>
<section class="featured">
<div class="featured-item">
<img src="https://via.placeholder.com/300" alt="Space Exploration">
<h3>The Wonders of Space Exploration</h3>
<p>Discover the mysteries of the universe and the advances in space technology that bring us closer to the stars.</p>
<a href="#">Read More</a>
</div>
<div class="featured-item">
<img src="https://via.placeholder.com/300" alt="Ancient Civilizations">
<h3>The Rise and Fall of Ancient Civilizations</h3>
<p>Explore the history of ancient empires and their lasting impact on the modern world.</p>
<a href="#">Read More</a>
</div>
<div class="featured-item">
<img src="https://via.placeholder.com/300" alt="Quantum Mechanics">
<h3>Understanding Quantum Mechanics</h3>
<p>Dive into the complex and fascinating world of quantum physics and its real-world applications.</p>
<a href="#">Read More</a>
</div>
</section>
<section id="about" class="about">
<h2>About This Encyclopedia</h2>
<p>This online encyclopedia is dedicated to providing reliable and well-researched information on a wide range of topics. From science and technology to history and culture, we aim to empower curious minds with knowledge.</p>
<p>Our content is curated by experts and enthusiasts from around the world, ensuring a comprehensive and engaging learning experience for all users.</p>
</section>
<footer>
<p>© 2025 Encyclopedia. All rights reserved.</p>
</footer>
</body>
</html>
ソースから Unreal Engine をビルドする
MyCarousel
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Carousel</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<section class="carousel">
<div class="container">
<ul>
<li><img src="img/pic1.png"></li>
<li><img src="img/pic2.png"></li>
<li><img src="img/pic3.png"></li>
<li><img src="img/pic4.png"></li>
</ul>
<button id="prev">«</button>
<button id="next">»</button>
</div>
<nav>
</nav>
</section>
<script src="js/main.js"></script>
</body>
</html>
js/main.js
'use strict';
{
const next = document.getElementById('next');
const prev = document.getElementById('prev');
const ul = document.querySelector('ul');
const slides = ul.children;
const dots = [];
let currentIndex = 0;
function updateButtons() {
prev.classList.remove('hidden');
next.classList.remove('hidden');
if (currentIndex === 0) {
prev.classList.add('hidden');
}
if (currentIndex === slides.length - 1) {
next.classList.add('hidden');
}
}
function moveSlides() {
const slideWidth = slides[0].getBoundingClientRect().width;
ul.style.transform = `translateX(${-1 * slideWidth * currentIndex}px)`;
}
function setupDots() {
for (let i = 0; i < slides.length; i++) {
const button = document.createElement('button');
button.addEventListener('click', () => {
currentIndex = i;
updateDots();
updateButtons();
moveSlides();
});
dots.push(button);
document.querySelector('nav').appendChild(button);
}
dots[0].classList.add('current');
}
function updateDots() {
dots.forEach(dot => {
dot.classList.remove('current');
});
dots[currentIndex].classList.add('current');
}
updateButtons();
setupDots();
next.addEventListener('click', () => {
currentIndex++;
updateButtons();
updateDots();
moveSlides();
});
prev.addEventListener('click', () => {
currentIndex--;
updateButtons();
updateDots();
moveSlides();
});
window.addEventListener('resize', () => {
moveSlides();
});
}
css/style.css
.carousel {
width: 80%;
margin: 16px auto;
}
.container {
width: 100%;
height: 220px;
overflow: hidden;
position: relative;
}
ul {
list-style: none;
margin: 0;
padding: 0;
height: 100%;
display: flex;
transition: transform .3s;
}
li {
height: 100%;
min-width: 100%;
}
li img {
width: 100%;
height: 100%;
object-fit: cover;
}
#prev,
#next {
position: absolute;
top: 50%;
transform: translateY(-50%);
border: none;
background: rgba(0, 0, 0, .8);
color: #fff;
font-size: 24px;
padding: 0 8px 4px;
cursor: pointer;
}
#prev:hover,
#next:hover {
opacity: .8;
}
#prev {
left: 0;
}
#next {
right: 0;
}
.hidden {
display: none;
}
nav {
margin-top: 16px;
text-align: center;
}
nav button+button {
margin-left: 8px;
}
nav button {
border: none;
width: 16px;
height: 16px;
background: #ddd;
border-radius: 50%;
cursor: pointer;
}
nav .current {
background: #999;
}
アプリストア.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>アプリストア</title>
<style>
/* 全体のスタイル */
body {
font-family: 'Roboto', sans-serif;
margin: 0;
padding: 0;
box-sizing: border-box;
background-color: #f9f9f9;
color: #333;
}
a {
text-decoration: none;
color: inherit;
}
ul {
list-style: none;
padding: 0;
margin: 0;
}
/* ヘッダー */
header {
background-color: #0066cc;
color: white;
padding: 1rem 0;
position: sticky;
top: 0;
z-index: 1000;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
}
header .container {
display: flex;
justify-content: space-between;
align-items: center;
max-width: 1200px;
margin: 0 auto;
padding: 0 1rem;
}
header h1 a {
color: white;
font-size: 1.5rem;
font-weight: bold;
}
header nav ul {
display: flex;
gap: 1rem;
}
header nav a {
color: white;
font-size: 1rem;
font-weight: 500;
transition: color 0.3s;
}
header nav a:hover {
color: #ffcc00;
}
/* ヒーローセクション */
.hero {
background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('hero-image.jpg') no-repeat center center/cover;
color: white;
text-align: center;
padding: 6rem 1rem;
}
.hero h2 {
font-size: 3rem;
margin-bottom: 1rem;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
}
.hero p {
font-size: 1.5rem;
margin-bottom: 2rem;
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5);
}
.hero .btn-primary {
background-color: #ffcc00;
color: #333;
padding: 1rem 2rem;
border-radius: 5px;
font-weight: bold;
font-size: 1.25rem;
transition: background-color 0.3s, transform 0.3s;
}
.hero .btn-primary:hover {
background-color: #e6b800;
transform: scale(1.05);
}
/* カテゴリセクション */
.categories {
background-color: #f1f1f1;
padding: 3rem 1rem;
text-align: center;
}
.categories h2 {
font-size: 2.5rem;
margin-bottom: 1.5rem;
}
.categories .category-list {
display: flex;
justify-content: center;
gap: 1.5rem;
flex-wrap: wrap;
}
.categories .category-list a {
background-color: #0066cc;
color: white;
padding: 0.75rem 1.5rem;
border-radius: 5px;
font-size: 1.25rem;
font-weight: bold;
transition: background-color 0.3s, transform 0.3s;
}
.categories .category-list a:hover {
background-color: #004d99;
transform: scale(1.1);
}
/* アプリ一覧 */
.app-list {
padding: 3rem 1rem;
background-color: white;
}
.app-list h2 {
text-align: center;
font-size: 2.5rem;
margin-bottom: 2rem;
}
.apps-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
max-width: 1200px;
margin: 0 auto;
}
.app-card {
background-color: #f9f9f9;
border: 1px solid #ddd;
border-radius: 8px;
overflow: hidden;
transition: box-shadow 0.3s, transform 0.3s;
}
.app-card:hover {
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
transform: translateY(-5px);
}
.app-card img {
width: 100%;
height: 200px;
object-fit: cover;
}
.app-card h3 {
font-size: 1.5rem;
margin: 1rem;
}
.app-card p {
margin: 0 1rem 1.5rem;
font-size: 1.125rem;
}
.app-card .btn-secondary {
display: block;
text-align: center;
margin: 0 1rem 1.5rem;
padding: 0.75rem;
background-color: #0066cc;
color: white;
font-size: 1rem;
border-radius: 5px;
transition: background-color 0.3s;
}
.app-card .btn-secondary:hover {
background-color: #004d99;
}
/* フッター */
footer {
background-color: #333;
color: white;
padding: 2rem 0;
text-align: center;
font-size: 1rem;
}
footer nav a {
color: #ffcc00;
margin: 0 0.5rem;
transition: color 0.3s;
}
footer nav a:hover {
color: white;
}
</style>
</head>
<body>
<header>
<div class="container">
<h1><a href="#home">アプリストア</a></h1>
<nav>
<ul>
<li><a href="#home">ホーム</a></li>
<li><a href="#categories">カテゴリ</a></li>
<li><a href="#apps">アプリ一覧</a></li>
<li><a href="#about">このサイトについて</a></li>
<li><a href="#contact">お問い合わせ</a></li>
<li><a href="#faq">FAQ</a></li>
</ul>
</nav>
</div>
</header>
<main>
<section id="home" class="hero">
<div class="hero-content">
<h2>お気に入りのアプリを見つけましょう!</h2>
<p>最新のアプリや便利なツールがここに揃っています。</p>
<a href="#apps" class="btn-primary">アプリを探す</a>
</div>
</section>
<section id="categories" class="categories">
<h2>カテゴリ</h2>
<ul class="category-list">
<li><a href="#games">🎮 ゲーム</a></li>
<li><a href="#productivity">📊 生産性向上</a></li>
<li><a href="#education">📚 教育</a></li>
<li><a href="#entertainment">🎥 エンターテイメント</a></li>
<li><a href="#health">💪 健康・フィットネス</a></li>
<li><a href="#finance">💰 ファイナンス</a></li>
</ul>
</section>
<section id="apps" class="app-list">
<h2>おすすめアプリ</h2>
<div class="apps-grid">
<div class="app-card">
<img src="app1.jpg" alt="アプリ名1">
<h3>アプリ名1</h3>
<p>説明文がここに入ります。最新機能と素晴らしいデザインを備えています。</p>
<a href="#" class="btn-secondary">詳細を見る</a>
</div>
<div class="app-card">
<img src="app2.jpg" alt="アプリ名2">
<h3>アプリ名2</h3>
<p>説明文がここに入ります。日常生活を豊かにするツールです。</p>
<a href="#" class="btn-secondary">詳細を見る</a>
</div>
</div>
</section>
</main>
<footer>
<div class="container">
<p>© 2025 アプリストア. 全著作権所有。</p>
<nav>
<a href="#privacy">プライバシーポリシー</a> |
<a href="#terms">利用規約</a> |
<a href="#sitemap">サイトマップ</a>
</nav>
</div>
</footer>
</body>
</html>
JavaScriptモーダルウィンドウ
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Modal Window</title>
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<div id="open">
詳細を見る
</div>
<div id="mask" class="hidden"></div>
<section id="modal" class="hidden">
<p>こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。</p>
<div id="close">
閉じる
</div>
</section>
<script src="js/main.js"></script>
</body>
</html>
css/style.css
body {
font-size: 14px;
}
#open,
#close {
cursor: pointer;
width: 200px;
border: 1px solid #ccc;
border-radius: 4px;
text-align: center;
padding: 12px 0;
margin: 16px auto 0;
}
#mask {
background: rgba(0, 0, 0, 0.4);
position: fixed;
top: 0;
bottom: 0;
right: 0;
left: 0;
z-index: 1;
}
#modal {
background: #fff;
width: 300px;
padding: 20px;
border-radius: 4px;
position: absolute;
top: 40px;
left: 0;
right: 0;
margin: 0 auto;
transition: transform 0.4s;
z-index: 2;
}
#modal>p {
margin: 0 0 20px;
}
#mask.hidden {
display: none;
}
#modal.hidden {
transform: translate(0, -500px);
}
/js/main.js
'use strict';
{
const open = document.getElementById('open');
const close = document.getElementById('close');
const modal = document.getElementById('modal');
const mask = document.getElementById('mask');
open.addEventListener('click', () => {
modal.classList.remove('hidden');
mask.classList.remove('hidden');
});
close.addEventListener('click', () => {
modal.classList.add('hidden');
mask.classList.add('hidden');
});
mask.addEventListener('click', () => {
// modal.classList.add('hidden');
// mask.classList.add('hidden');
close.click();
});
}
MyTabMenu
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Tab Menu</title>
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<div class="container">
<ul class="menu">
<li><a href="#" class="active" data-id="about">サイトの概要</a></li>
<li><a href="#" data-id="service">サービス内容</a></li>
<li><a href="#" data-id="contact">お問い合わせ</a></li>
</ul>
<section class="content active" id="about">
サイトの概要。サイトの概要。サイトの概要。サイトの概要。サイトの概要。サイトの概要。サイトの概要。サイトの概要。サイトの概要。サイトの概要。サイトの概要。サイトの概要。
</section>
<section class="content" id="service">
サービス内容。サービス内容。サービス内容。サービス内容。サービス内容。サービス内容。サービス内容。サービス内容。サービス内容。サービス内容。サービス内容。サービス内容。
</section>
<section class="content" id="contact">
お問い合わせ。お問い合わせ。お問い合わせ。お問い合わせ。お問い合わせ。お問い合わせ。お問い合わせ。お問い合わせ。お問い合わせ。お問い合わせ。お問い合わせ。お問い合わせ。
</section>
</div>
<script src="js/main.js"></script>
</body>
</html>
css/styles.css
body {
font-size: 14px;
}
.container {
margin: 30px auto;
width: 500px;
}
.menu {
list-style: none;
padding: 0;
margin: 0;
display: flex;
}
.menu li a {
display: inline-block;
width: 100px;
text-align: center;
padding: 8px 0;
color: #333;
text-decoration: none;
border-radius: 4px 4px 0 0;
}
.menu li a.active {
background: #333;
color: #fff;
}
.menu li a:not(.active):hover {
opacity: 0.5;
transition: opacity 0.4s;
}
.content.active {
background: #333;
color: #fff;
min-height: 150px;
padding: 12px;
display: block;
}
.content {
display: none;
}
js/main.js
'use strict';
{
const menuItems = document.querySelectorAll('.menu li a');
const contents = document.querySelectorAll('.content');
menuItems.forEach(clickedItem => {
clickedItem.addEventListener('click', e => {
e.preventDefault();
menuItems.forEach(item => {
item.classList.remove('active');
});
clickedItem.classList.add('active');
contents.forEach(content => {
content.classList.remove('active');
});
document.getElementById(clickedItem.dataset.id).classList.add('active');
});
});
}
MyHamburgerMenu
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>FAQ</title>
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<h1>FAQ</h1>
<dl>
<div>
<dt>質問です</dt>
<dd>回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。</dd>
</div>
<div>
<dt>質問です</dt>
<dd>回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。</dd>
</div>
<div>
<dt>質問です</dt>
<dd>回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。回答です。</dd>
</div>
</dl>
<script src="js/main.js"></script>
</body>
</html>
style.css
h1 {
font-size: 18px;
border-bottom: 1px solid;
padding: 8px 16px;
margin-bottom: 16px;
}
dl {
margin: 0;
}
dl>div {
margin-bottom: 8px;
}
dt {
padding: 8px;
cursor: pointer;
user-select: none;
position: relative;
}
dt::before {
content: 'Q. ';
}
dt::after {
content: '+';
position: absolute;
top: 8px;
right: 16px;
transition: transform .3s;
}
dl>div.appear dt::after {
transform: rotate(45deg);
}
dd {
padding: 8px;
margin: 0;
display: none;
}
dd::before {
content: 'A .';
}
dl>div.appear dd {
display: block;
animation: .3s fadeIn;
}
@keyframes fadeIn {
0% {
opacity: 0;
transform: translateY(-10px);
}
100% {
opacity: 1;
transform: none;
}
}
main.js
'use strict';
{
const dts = document.querySelectorAll('dt');
dts.forEach(dt => {
dt.addEventListener('click', () => {
dt.parentNode.classList.toggle('appear');
});
});
}
ゼロから始めるC++:初心者が知っておきたい基礎と応用
C++とは?その基礎と特徴
C++の概要と歴史
C++は1983年にビャーネ・ストロヴストルップ氏によって開発された汎用プログラミング言語です。この言語は、C言語を基盤にしつつ、オブジェクト指向プログラミングやジェネリックプログラミングなどの高度な手法を導入しています。C++はその後の改良を重ね、1998年に初めて標準化(C++98)されました。その後、C++11、C++17、C++20といった形で規格が定期的に更新され、最新バージョンが登場しています。この言語は、システムレベルのプログラミングからアプリケーション開発まで幅広い分野で使用され、高い性能と柔軟性を持つ言語として知られています。
C言語との比較:どんな点が異なるのか?
C++はC言語をベースにしているものの、オブジェクト指向プログラミングや高水準の抽象化をサポートしている点が大きな違いです。具体的には、C++では「クラス」や「オブジェクト」といった構造を通じて、コードの再利用性やメンテナンス性を向上させることができます。また、C++はテンプレートや例外処理といったジェネリックプログラミングのための機能も提供しています。一方で、C言語はシンプルで低水準な操作に向いており、高度な制御が可能なため、システムプログラミングに最適化されています。このため、C++はC言語の柔軟性を引き継ぎつつ、プログラムの設計と管理を容易にするための多くの機能を追加した言語といえます。
C++の主な用途と強み
C++は、その高いパフォーマンスと柔軟性から、さまざまな分野で利用されています。具体的には、オペレーティングシステム、デバイスドライバ、ゲーム開発、グラフィックス処理、科学技術計算、金融市場向けアプリケーションなどに使用されます。C++の強みとしては、ネイティブコードでコンパイルされるためパフォーマンスが非常に高いこと、またシステムに密接に近いプログラムが可能である点が挙げられます。さらに、最新の標準規格により、より安全かつ効率的なコーディングが可能となっています。このように、C++は初心者からベテランプログラマーまで幅広く支持される言語です。
基本的なプログラム構造
C++の基本的なプログラム構造はわかりやすい設計になっています。たとえば、以下は典型的なC++プログラムの例です。
#include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; }
このコードでは、#include <iostream>で標準ライブラリをインクルードし、coutを利用して画面に文字列を出力しています。main関数がプログラムのエントリーポイントです。基本的な構造がシンプルである反面、強力なカスタマイズ機能や拡張性も備えています。
C++でよく使うツールと環境
C++開発を始めるためには、適切なツールと環境を整えることが重要です。一般的によく使用されるC++のコンパイラとしては、GCC(GNU Compiler Collection)やClang、Microsoft Visual C++、Intel C++ Compilerなどがあります。また、開発環境(IDE)としては、Visual Studio、CLion、Code::Blocks、Dev-C++などが利用されています。これらのツールは豊富なデバッグ機能や補完機能を提供し、開発の効率を向上させます。また、クロスプラットフォーム対応の性質を活かし、Windows、Linux、macOSなどのさまざまな環境でC++プログラムの開発が可能です。
C++プログラミングの基礎を学ぶ
変数と基本データ型
変数とは、データを格納するための箱のようなもので、C++ではプログラム中のデータの管理に重要な役割を果たします。変数を利用するためには型を指定する必要があり、これをデータ型と呼びます。C++にはいくつかの基本データ型があり、代表的なものとして整数型(int)、浮動小数点型(float, double)、文字型(char)、ブール型(bool)があります。
例えば、整数を格納するにはint number = 10;のように記述します。また、C++は強い静的型付けの特徴を持つため、変数を宣言する際に型を明示しなければなりません。ただし、autoというキーワードを使用することで、コンパイラに型を推測させることも可能です。
演算子と制御文の使い方
C++にはさまざまな演算子が用意されており、足し算や引き算などの基本的な算術演算子(+、-、*、/、%)に加え、比較演算子(==、!=、<、>など)や論理演算子(&&、||、!)が一般的に使用されます。これらの演算子を活用することで、より柔軟な処理を実現できます。
制御文は、プログラムの実行フローを制御するために用いられます。例えば、条件分岐に使用されるif、繰り返し処理を行うforやwhileループがあります。
以下はif文とfor文の簡単な例です:
if (x > 0) {
cout << "xは正の値です。" << endl;
}
for (int i = 0; i < 5; i++) {
cout << "現在のiの値: " << i << endl;
}
関数とスコープ
関数は特定の処理をまとめるために使用されるもので、プログラムの再利用性や可読性を高めます。C++では、関数を定義する際に戻り値の型、関数名、引数リストを指定します。例えば、以下のような簡単な関数を作成できます:
int add(int a, int b) {
return a + b;
}
関数のスコープとは、変数や関数がアクセス可能な範囲を指します。スコープには、ローカルスコープとグローバルスコープがあります。ローカルスコープは関数内で定義された変数に適用され、グローバルスコープはプログラム全体でアクセスできる変数に適用されます。
入出力操作: cinとcout
C++のプログラムにおける基本的な入出力操作には、cinとcoutが使用されます。coutを使用するとコンソール画面にデータを出力することができ、cinを使用するとユーザーからの入力を受け取ることができます。以下はその例です:
#include <iostream>
using namespace std;
int main() {
int age;
cout << "年齢を入力してください: ";
cin >> age;
cout << "あなたの年齢は " << age << " 歳です。" << endl;
return 0;
}
上記例では、cinでユーザーから入力を受け取り、それをcoutで表示しています。このようにしてデータを動的に扱うことが可能です。
メモリ管理とポインタの概念
C++の特徴の一つとして、メモリ管理をプログラマーが詳細に制御できる点が挙げられます。これにはポインタが密接に関わっています。ポインタとは、他の変数のメモリアドレスを格納する特殊な変数のことです。以下はポインタの基本的な使用例です:
int x = 10; int* ptr = &x; // xのアドレスを取得してptrに格納 cout << "xの値: " << x << endl; cout << "ptrが指す値: " << *ptr << endl; // ポインタ経由でxの値を取得
C++では、newキーワードで動的にメモリを割り当て、deleteキーワードでそのメモリを解放する必要があります。ただし、モダンC++(C++11以降)ではsmart pointersの導入により、手動でのメモリ管理の必要性が大幅に減少しています。
オブジェクト指向プログラミングとC++
クラスとオブジェクトの基本
クラスとオブジェクトは、C++のオブジェクト指向プログラミングの基盤となる重要な概念です。クラスはデータ構造や操作(メソッド)を定義する設計図のような役割を果たします。一方、オブジェクトはそのクラスをもとに生成された実際のインスタンスで、クラスで定義されたプロパティやメソッドを持っています。
例えば、「車」というクラスを作成すると、それをもとに「自動車A」や「自動車B」といった具体的なオブジェクトを生成することができます。このようなモデリングを行うことで、コードの再利用性と構造の明確化が実現できます。C++を使用すると、これらのクラスやオブジェクトを効率的に扱うことが可能です。
コンストラクタとデストラクタ
コンストラクタとデストラクタは、クラスの初期化と解放を行う特別なメソッドです。コンストラクタはオブジェクトが生成される際に自動的に呼び出され、初期化処理を行います。たとえば、クラス内のメンバ変数の設定や必要なリソースの確保などが含まれます。一方、デストラクタはオブジェクトが破棄される際に自動的に呼び出され、リソースの解放や終了処理を行います。
これにより、C++では手動でメモリ管理を行う必要がある場面でも、効率的かつ安全にリソースを管理することが可能です。特に動的メモリを扱う場合、これらの仕組みを活用することで、メモリリークを防ぐことができます。
継承と多態性(ポリモーフィズム)
継承は既存のクラスの機能を引き継ぎつつ、新しい機能を追加できる仕組みです。C++では、子クラスは親クラスからプロパティやメソッドを受け継ぐことができるため、コードの再利用性と拡張性が向上します。一例として、「動物」という親クラスを作成し、その動物クラスを継承した「犬」や「猫」という子クラスを作ることが挙げられます。
多態性(ポリモーフィズム)は、同じインターフェースを使用して、異なる動作をするメソッドを実現する仕組みです。これにより、動的バインディングを使用して、派生クラスで定義されたメソッドが実行されるようになります。C++では、仮想関数(virtual関数)を利用することでポリモーフィズムを実装できます。
テンプレートとSTL(標準テンプレートライブラリ)の活用
C++にはジェネリックプログラミングをサポートするテンプレート機能があります。テンプレートを使用すると、型に依存しない汎用的なクラスや関数を作成でき、異なるデータ型にも対応できる柔軟なプログラム開発が可能です。例えば、整数や文字列といった異なる型を扱う配列クラスをテンプレートで効率的に構築できます。
また、標準テンプレートライブラリ(STL)は、C++の強力なツールセットの1つで、効率的なデータ構造(例えば、ベクターやリスト)やアルゴリズム(ソートや検索など)が含まれています。テンプレートとSTLを活用することで、開発の効率を大幅に向上させることができます。
実践的なC++プログラミング
例外処理とエラーハンドリング
C++では、プログラムの実行中に発生するエラーを適切に処理するための仕組みとして例外処理が用意されています。try、catch、throwを使うことで、発生したエラーを捕捉し、対処を簡潔に記述できます。これにより、異常時の挙動を明確にし、プログラムが途中で異常終了することを防ぐことが可能です。
例えば、ファイルが存在しない場合や、メモリ不足が発生した場合など、意図しない状況への対応を容易にします。また、C++の標準ライブラリには多くの例外クラスが用意されており、適切なエラーハンドリングが求められる場面において活用されます。
モダンC++の新機能(C++11以降)
C++11以降、言語仕様に多くの改良が加えられ、より簡潔で効率的なプログラムが記述できるようになりました。新しい機能として、ラムダ式、スマートポインタ(std::shared_ptrやstd::unique_ptr)、constexpr、auto型推論、範囲ベースforループなどがあります。
特にスマートポインタは、プログラマが手動でメモリを管理する手間を減らし、メモリリークのリスクを軽減します。また、C++17ではstd::optionalや構造化束縛、C++20ではコルーチンやコンセプト(Concepts)などが追加され、より直感的かつ表現力豊かな記述が可能になっています。
これらのモダンC++の機能を活用することで、保守性やパフォーマンスが向上した高品質なコードを記述することができます。
デバッグと最適化の基礎
C++は高性能なプログラムを記述できる一方で、バグの発見や解消が他の言語に比べて難しい場合があります。そのため、デバッグの基本的な手法を身に着けることが重要です。主な方法として、デバッガを活用してブレークポイントを設定したり、変数の状態を監視したりすることが挙げられます。主に使用されるツールとして、GDBやVisual Studioのデバッグ機能などがあります。
デバッグだけでなく、最適化も重要なポイントです。コードの性能を向上させるためには、計算量や必要なメモリの削減を意識した設計が求められます。C++はコンパイル時の最適化が強力であり、その特性を活かして無駄のないネイティブコードを生成することが可能です。また、プロファイリングツールを使えばボトルネックの特定や性能改善のヒントを得ることができます。
プロジェクト設計とコードの再利用性
C++で大規模なプロジェクトを設計する際には、オブジェクト指向プログラミング(OOP)の概念が強力なツールとなります。クラスや継承を活用することで、機能の拡張やメンテナンスが容易になり、コードの再利用性を高めることが可能です。また、ジェネリックプログラミングを用いてテンプレートを活用することで、汎用性の高いコードを実現できます。
さらに、モジュール化を通じてコードを分割し、他のプロジェクトでも再利用できるライブラリとして活用することも可能です。例えば、C++の標準テンプレートライブラリ(STL)は再利用性の高い優れた例であり、開発者が効率よく開発を進めるための良い参考となります。
効率的なプロジェクト設計は、ソフトウェアの保守性を向上させ、複雑なシステムをシンプルに管理する鍵となります。設計段階で再利用性に配慮することで、完成後のコスト削減にも繋がります。
