2025年7月30日水曜日

Switch2を手に入れるまでの手記

 久々のでべそ更新です。以前動画でSwitch2購入した報告をしたのですが、その際に当時残していた手記があったので少し添削して残しておきます。自分はこうしてメモ帳で思った事をただツラツラ書きながら時間潰すことが多いです



2025年7月5日午前7時34分
ヨドバシカメラ新宿西口にて。
現在Switch2の列に待機中。
約2時間前から並んでいる。
本当は朝9時半から開店なのだが、
店員さんの努力でこの時間から開けていただいてる模様。
本当にありがとうございます。
ただ自分の時点で48番目。
Xを見るとそこから僅か20分後には70番目になっていたらしい。
しかも店の周りをぐるっと一周回るくらい列が出来てた。
推定でも200人以上は並んでいるのでは無いか?
店の中に入っても商品棚をあみあみに列は続く。
レジは現在3人程度で回しているらしく1人辺り数分程度で捌いているっぽい。
しかも人によってはSwitch2単体だけでは無く
コントローラやメモリカードなどアクセサリーも欲しいようなのでより時間はかかりそう。
現在商品棚3つ分の列の中にいる。
X見てたら同じく新宿西口に並ぼうとしてた人の呟きがあって、
列の中に自分も後ろ姿がガッツリ映ってました。
モノ売るってレベルじゃねーぞ。
それにしてもここまで来たらなんとしてでも手に入れたい。
本当はもう少し遅く来る予定だったのだが、
昨日、というか一昨日辺りからどうも食べ過ぎなようで
胃もたれが発生しており寝ても3時間程度で目が覚めてしまうフェーズに入っていたのだが、
結果的にこれが良い方向に転がったのかもしれない。
一時前ごろに寝て4時過ぎには目が覚めていた。
行くかどうか迷っていたが、
Xで「始発では間に合わなさそうだから歩いて行く」という
午前2時ごろの誰かの呟きが目に入って
こりょいかんと思ったのが自分を突き動かす原因になったかもしれない。
しかし外はもちろん、店内に入ってもジメジメがすごい。
このスマホを打っている画面も湿気で表面が引っかかって上手いこと打つのが難しい。
それだけ熱気が凄いのか、単に台風が迫っているからか。
そう言えば今日は地球が滅亡するかもしれないという
陰謀論の漫画が取り沙汰されてトレンドにも上がっていた。
漫画家の方がどれだけ信憑性を持って描いたのかはわからないが、
結構多くの人を巻き込んでしまった負い目が少なからずとも生まれてしまうかもしれない。
自分としては多めに見てあげてほしいところ。
実は新宿に近づいた辺りからお腹が張り気味でトイレに行こうか迷って結局行かず仕舞いだったのだが、
ヨドバシカメラにさえ入れば他のエリアのトイレに入れるだろうと鷹を括っていた。
しかし商品棚一つ目の列が終わりに差し掛かった時に初めて知ったのだが、
他のエリアの扉はガッツリ閉まっていた。
考えたらこのゲーム売り場だけ前倒しで開けているので当然と言えば当然だが、
ヨドバシの扉が閉まっているの初めて見かけたので少しお得な気分。
しかし列が進むにつれて少し暑くなってきた。
エアコンがお店入り口付近にあり、冷気が1番来にくいポイントに来てしまったのかもしれない。
しかし数分おきに確実に列は動いているのでこの苦行にも終わりが見えてきた安堵感はある。
しかも商品棚3つ全てウネウネで並んでるのかと思ったら
一つ飛ばして並んでいたので少し浮いた気分になっている。
しかも卑しいのが、並んでる商品棚にSwitch2のアクセサリーなどが陳列されているのだ。
自分の前に並んでた人も保護フィルムを手に取っていた。
現在8時を回りました。
店に入って30分程度だが、店側が捌いたのはざっと計算して15〜20名程度といった感じ。
このままでいくとあと30分ほどは時間を要するかもだが、
ワンチャン店員さんも要領を得て少しずつ早くなるかもしれない。
でもそういう時に限って面倒な注文をつけてくる客に当たるかもしれないので油断はできない。
いま並んでるところがずっとゲームを垂れ流しているテレビ画面の横なので
ずっとハード目なユーロビートが流れているのが鼓膜を支配する。
なんのゲームかと思ったらソニックのレースゲームらしい。
任天堂もすっかり他の企業と連携するようになったな、と素人ながらに思う。
ちなみに今回渡された券がマリカ同梱版限定となっていた。
元々それが欲しかったので今回は良かったが、
これが外国語版とかだったら無条件で2,3万余計な出費をする事になってたと思うとゾッとする。
8時7分。ようやく列の最後のゾーンに入った。
先ほど述べた予想が当たったか心なしか列の進み具合が少し縮まった気がする。
因みに最後の列の商品棚もまたSwitchのコントローラーのゾーンなのだが、
初代の方なので誰も見向きもしない。
ここで自分がここまでわざわざならんで初代Switchをレジに持って行ったら
どんな顔を店員がなさるのか非常に興味があるが、流石にそれを実行する勇気も気力もない。
列の残りが自分を入れて4人となった。
ここに来てようやくもう一つのエアコンの下に立ったのだが、明らかに風が弱い。
決して汗だくという訳ではないが、ジメジメのせいで肌がじっとりとしており


手記はここで終わってました。ここでレジ前について購入した模様です。こうやって文面が途中でもぶった切るのが自分です。
ヨドバシの店内に入って1時間半近くメモを打ちながら待ち続けてた記憶です。
何かこれからSwitch2を購入したい皆様への参考にしてもらえたら幸いです

2025年7月14日月曜日

【初心者向け】Windowsでプログラムを自動実行する方法|タスクスケジューラーの使い方

【初心者向け】Windowsでプログラムを自動実行する方法|タスクスケジューラーの使い方を画像付きで解説

✅この記事でわかること

  • Windowsタスクスケジューラーの使い方がわかる
  • .batファイルなどのプログラムを自動実行する設定方法
  • 実際に使える自動化の活用例
  • よくあるエラーや質問への対応方法

はじめに|「クリックしないと動かない」を自動化しよう

前回の記事で、指定フォルダ内のファイルを一括削除するバッチファイル(.bat)を紹介しました。
👉バッチファイルの作り方と使い方はこちら

ただ、実行するたびに手動でファイルをクリックするのは面倒ですよね。

✅「毎日決まった時間に自動で実行したい」
✅「PC起動時に自動でプログラムを動かしたい」

そんな悩みを解決してくれるのが、Windows標準の「タスクスケジューラー」です。
本記事では、初心者の方でも迷わず設定できるよう、画像付きでわかりやすく手順を解説します!

タスクスケジューラーとは?

▶Windowsに標準搭載された自動化ツール

タスクスケジューラー(Task Scheduler)とは、指定した時間や条件で、プログラムやスクリプトを自動で実行してくれるツールです。

たとえば…

  • 毎日朝9時にバッチファイルを実行
  • パソコン起動時にアプリを開く
  • 特定の曜日にバックアップ処理を行う

タスクスケジューラーの設定手順(画像付きで解説)

それでは早速タスクスケジューラの設定してみましょう

ステップ1:タスクスケジューラーを起動する

まずはタスクスケジューラを探してみましょう!

  1. Windowsのスタートメニューを開く
  2. 「タスクスケジューラー」と入力して検索
  3. 結果からタスクスケジューラーを起動
タスクスケジューラーを検索する

ステップ2:新しいタスクを作成する

次にタスク(自動でやってほしいこと)をつくりましょう!

  1. 「タスクの作成」をクリック
  2. タスク名を入力(例:AUTODELETE)
タスクの作成画面

名前の欄にタスク名を入れます。今回はAUTODELETEとします。

ステップ3:トリガー(実行条件)を設定する

次にいつタスクを実行するのか設定しましょう!

「毎日」「午前9時」など好きなタイミングを指定します。

まずトリガーのタブを選択します。

タスクのトリガー設定画面

次に頻度、実行時刻を入力します。入力出来たらOK押します。


ステップ4:操作(実行内容)を設定する

次にどのようなタスクを実行してもらうのか設定しましょう!

「プログラムの開始」を選択し、プログラム/SCRIPTの欄に対象の.batファイルのパスを指定します。(例:C:\script\delete.bat)。

操作としてバッチファイルを指定する画面

ステップ5:設定を確認して完了

すべての内容を確認して「完了」をクリックすれば設定は終了です。

実行時の画面

タスクスケジューラの設定が終わり、12:42になると以下の画面が出てきます

なんと自動でdelete.batが動き出し、コマンドプロンプトの画面が出てきました!

フォルダ名を確認した上でYを入れると削除されます!

実際の活用例(初心者でもできる!)

自動化内容 説明
バッチで不要ファイルを毎日削除 毎朝定時に実行してフォルダを整理
メモ帳を毎日開いて日記を書く 習慣化の第一歩に
スタートアップ音楽再生 朝の気分UPに、好きな曲を自動再生
定期的なバックアップスクリプト 週1でデータ保護も自動でOK

よくある質問(FAQ)

Q1:PCの電源がオフでも実行されますか?

A:いいえ、実行されません。スリープやシャットダウン状態ではタスクは動きません。
「ログオン時」や「起動時」をトリガーに設定しましょう。

Q2:作成したタスクを編集・削除できますか?

A:はい、できます。タスクライブラリから対象タスクを右クリックして「編集」または「削除」を選びます。

まとめ|タスクスケジューラーで日々の手間をゼロに!

Windowsタスクスケジューラーを使えば、バッチファイルやアプリの自動実行が簡単にできます。
また、自動化する事で手作業がなくなりでべそさんのように必要だったファイルを消してしまうといったことも回避できます。
初心者の方も、まずは1つ自動化にチャレンジしましょう!

2025年7月3日木曜日

【初心者向け】バッチファイルで不要なファイルを自動削除する方法

【初心者向け】バッチファイルで不要なファイルを自動削除する方法【Windows対応・安全設計】

先日でべそさんが動画編集中に誤ってピークファイルを消したようです。ある程度溜まってから手動から消していたそうで、人為的なミスだったようです。

こんな時、「不要なフォルダ内のファイルを自動で削除できたらいいな…」と思った方もいるかと思います。

そんな時、batファイルというプログラムを作ればフォルダ内のファイルを自動で削除できます。

この記事では、初心者でも簡単に自動でファイルを削除するプログラムを作る方法を教えます!

⚠️最初にお読みください|自動削除は便利ですが危険もあります

この記事で紹介する内容は、フォルダ内のファイルを自動で削除する方法です。

一度削除されたファイルは、復元が難しい可能性があります。必ず以下の点を守ってください。

  • 📦 大切なデータは削除前にバックアップを取りましょう
  • 🧪 必ずテスト用フォルダで動作確認してから本番に使いましょう
  • ❗ 誤ったフォルダを指定すると、重要なデータが消えてしまう危険があります

✅この記事でわかること

  • バッチファイル(.bat)を使って、フォルダ内の不要ファイルを自動で削除する方法
  • 特定の拡張子だけを削除する応用テクニック
  • 削除処理を誤って実行しないための安全な設計

🎒準備するもの

  • Windowsパソコン(Windows 10 または 11)
  • 不要ファイルが入っているテスト用フォルダ(例:C:\TESTT)

📝ステップ1|メモ帳でバッチファイルを作成しよう

まずは「削除プログラム」のもとになるファイルを作成します。

  1. メモ帳を開きましょう
    「スタート」→「メモ帳」と検索して開きます。
  2. 以下のコードをコピーして貼り付けてください。

✅ 基本の削除コード(サブフォルダは含みません)

@echo off
chcp 65001 >nul
setlocal

:: フォルダのパスを指定(例:C:\TESTT)
set "targetPath=C:\TESTT"

echo ============================================
echo ※以下のフォルダ内のファイルを削除します※
echo %targetPath%
echo ============================================

echo 続行しますか? (Y/N)
choice /c YN /n /m "選択してください: "
if errorlevel 2 goto :eof

echo ファイルを削除中...

:: サブフォルダを含めずに削除
forfiles /p "%targetPath%" /m *.* /c "cmd /c del /f @path"

echo ファイルの削除が完了しました。
pause

🔄 応用編|特定のファイルだけ削除したいとき

forfiles /p "%targetPath%" /m *.tmp /c "cmd /c del /f @path"

💡補足:
targetPathの値は自分の削除したいフォルダのパスに変更してください。フォルダ名にスペースが含まれていてもダブルクォーテーションで囲まれているので問題ありません。

💾ステップ2|バッチファイルとして保存する

メモ帳のメニューから「ファイル」→「名前を付けて保存」を選択します。

  • ファイル名を delete.bat にします(拡張子 .bat を忘れずに)
  • 「ファイルの種類」を「すべてのファイル」にして保存
  

🧪ステップ3|動作確認を行う

テスト用のフォルダ(例:C:\TESTT)に削除してもいいファイルをいくつか入れます。

  実行前のフォルダの様子

作成した delete.bat を右クリック →「管理者として実行」(推奨)します。

実行直後の画面

「Y」を入力すると削除が始まります。

  

実行するとフォルダの中身は全て削除されています!

  実行後のフォルダの様子

🔄 応用編|特定のファイルだけ削除したいとき

例:.tmpファイルだけ削除したい場合

forfiles /p "%targetPath%" /m *.tmp /c "cmd /c del /f @path"

他にも .log.bak など、拡張子ごとに分けて削除することができます。

💡さらに便利に|定期実行したい場合

Windowsの「タスクスケジューラ」を使えば、作成した .bat ファイルを毎週・毎日など自動で実行できます。

⚠ タスクスケジューラの設定は別記事で詳しく解説予定です。

✅まとめ|バッチファイルでPCの整理を自動化しよう

バッチファイルを使えば、クリック1つでフォルダの整理が可能です。ただし、削除系の処理には常に注意が必要です。

以下のポイントを守って、便利に・安全に使いましょう!

  • 🔄 テスト環境で必ず動作確認
  • 💾 重要ファイルはバックアップを取る
  • ✅ フォルダ指定は間違いなく慎重に

📝補足・注意

この記事の内容は自己責任で使用してください。万が一データ損失が発生しても、筆者・当サイトでは責任を負いかねます。

2025年5月3日土曜日

【無料で簡単】予約管理Webツールの作り方

【無料で簡単】Excel不要!あらゆる業種に使える「予約管理Webツール」の作り方

💭こんな悩み、ありませんか?

  • Excelでの予約管理が煩雑で、入力ミスや更新漏れが起きる
  • Googleフォームや有料予約システムは導入が難しい、または高い
  • 電話や紙での予約管理が非効率で、スタッフ間で情報が共有できない

👨‍⚕️実際の現場からー

クリニック勤務の裏方の友人は、こんな悩みを抱えていました:

  • 「先生がExcelで予約表を作っているけど、セルを探して名前を入力するのが面倒で…」
  • 「電話が鳴るたびにパソコンを開いて、間違えずに書き込むのが大変です」
  • 「Web上で簡単に予約できて、そのままExcelみたいに使えるといいんだけどなぁ…」
  • 「そもそもExcelって入れるのに1万円ぐらいかかっちゃうんだよね…」

「Excelだと不便。そもそも入れると高い。でも高機能なツールは不要」という中小規模の現場には、シンプルで無料な予約管理ツールが求められています。

✅この記事を読むとできること

  • Excel不要!Webブラウザで予約管理ができるシンプルなシステムを自作できます
  • PowerShellとHTMLだけで完結。インターネット接続も不要
  • 整骨院、美容室、学習塾、カフェ、ジムなど、業種問わず活用可能

こんな感じの予約表ができます!

🧑‍🔧ステップ1: PowerShellで予約用CSVを自動生成

以下のPowerShellスクリプトを使って、日付・時間スロット入りのCSVを作成します。


Add-Type -AssemblyName System.Windows.Forms

# フォーム作成
$form = New-Object System.Windows.Forms.Form
$form.Text = "日付選択フォーム"
$form.Width = 300
$form.Height = 220
$form.StartPosition = "CenterScreen"

# 開始日ラベル
$labelStart = New-Object System.Windows.Forms.Label
$labelStart.Text = "開始日:"
$labelStart.Top = 20
$labelStart.Left = 10
$form.Controls.Add($labelStart)

# 開始日ピッカー
$startPicker = New-Object System.Windows.Forms.DateTimePicker
$startPicker.Format = 'Short'
$startPicker.Top = 40
$startPicker.Left = 10
$form.Controls.Add($startPicker)

# 終了日ラベル
$labelEnd = New-Object System.Windows.Forms.Label
$labelEnd.Text = "終了日:"
$labelEnd.Top = 80
$labelEnd.Left = 10
$form.Controls.Add($labelEnd)

# 終了日ピッカー
$endPicker = New-Object System.Windows.Forms.DateTimePicker
$endPicker.Format = 'Short'
$endPicker.Top = 100
$endPicker.Left = 10
$form.Controls.Add($endPicker)

# OKボタン
$okButton = New-Object System.Windows.Forms.Button
$okButton.Text = "OK"
$okButton.Top = 140
$okButton.Left = 100
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)

# フォーム表示と戻り値確認
if ($form.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
    # 値の取得
    $start = $startPicker.Value.Date
    $end = $endPicker.Value.Date

    # 出力ファイルパス
    $outputPath = "C:\TEST\data.csv"

    # CSVヘッダー
    "予約日,予約時間,予約者1,予約者2,予約者3,予約者4,予約者5" | Out-File -FilePath $outputPath -Encoding UTF8

    # 日付ループ
    while ($start -le $end) {
        for ($hour = 9; $hour -le 21; $hour++) {
            foreach ($min in @(0, 30)) {
                $time = "{0}:{1:00}" -f $hour, $min
                "$($start.ToString('yyyy/M/d')),$time,,,,," | Out-File -Append -FilePath $outputPath -Encoding UTF8
            }
        }
        $start = $start.AddDays(1)
    }

    Write-Host "CSVファイルを作成しました: $outputPath"
} else {
    Write-Host "キャンセルされました。"
}

}

このPowerShellスクリプトを実行してみると、いつからいつまでの予約表を作るか聞かれます!

今回は開始日を2025/4/1、終了日を2025/4/30とします。

なお日付右側のボタンでカレンダーから日付を選ぶことができます。

プログラムを実行すると以下のように空のCSVファイルができます。

💻ステップ2:予約をブラウザ上で管理できるHTMLを作成

先ほどのCSVを読み込み、Web上で予約を閲覧・入力・削除できるページをPowerShellで自動生成します。
下記のコードを実行してください。

$folderPath = "C:\TEST" は便宜上の設定です。Webページで更新した後のファイルは download フォルダに保存されるため、そちらを指定しても構いません。

createhtml.ps1


# PowerShellスクリプト: reserve*.csvの最新ファイルからHTMLを生成
# ファイルパス
$folderPath = "C:\TEST"
$htmlPath = "C:\TEST\reservation.html"

# デバッグ: スクリプト開始
Write-Host "スクリプトを開始します..."

# reserve*.csvファイルの検索(最新ファイルを優先)
try {
    $csvFile = Get-ChildItem -Path "$folderPath\reserve*.csv" -File |
               Sort-Object -Property LastWriteTime -Descending |
               Select-Object -First 1
    if (-not $csvFile) {
        Write-Host "エラー: $folderPath に reserve*.csv が見つかりません。CSVファイルを準備してください。"
        Write-Host "サンプルCSVフォーマット:"
        Write-Host "予約日,予約時間,予約者1,予約者2,予約者3,予約者4,予約者5"
        Write-Host "4/1,9:00,山田,田中,,鈴木,,"
        exit
    }
    $csvPath = $csvFile.FullName
    Write-Host "最新CSVファイルを選択しました: $csvPath (更新日時: $($csvFile.LastWriteTime))"
} catch {
    Write-Host "エラー: reserve*.csv の検索に失敗しました。詳細: $_"
    exit
}

# CSV読み込み(UTF-8対応)
try {
    $csvContent = Import-Csv -Path $csvPath -Encoding UTF8
    Write-Host "CSVファイルを正常に読み込みました。レコード数: $($csvContent.Count)"
} catch {
    Write-Host "エラー: CSV読み込みに失敗しました。詳細: $_"
    Write-Host "確認事項:"
    Write-Host "- CSVファイルがUTF-8で保存されているか"
    Write-Host "- ヘッダーが正しいか(予約日,予約時間,予約者1,予約者2,予約者3,予約者4,予約者5)"
    exit
}

# CSVデータをJSONに変換
try {
    $jsonData = $csvContent | ConvertTo-Json -Compress
    Write-Host "CSVデータをJSONに変換しました。"
} catch {
    Write-Host "エラー: JSON変換に失敗しました。詳細: $_"
    exit
}

# HTMLテンプレート(変更時にreserve.csvをダウンロード)
$htmlTemplate = @"
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>オフライン予約表(CSV管理)</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        table { border-collapse: collapse; width: 100%; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
        button { margin: 5px; }
        .input-group { margin-bottom: 10px; }
        label { margin-right: 10px; }
        .delete-btn { font-size: 12px; padding: 2px 5px; }
        .editable { cursor: pointer; background-color: #f9f9f9; }
        .editable:hover { background-color: #e0e0e0; }
        .alert { color: #d32f2f; font-weight: bold; margin-bottom: 10px; }
    </style>
</head>
<body>
    <h1>予約表(CSV管理)</h1>
    <div class="alert">
        予約の追加、削除、入力時にreserve.csvが自動ダウンロードされます。<br>
        ダウンロード後、C:\TEST\reserve.csvに上書き保存してください。<br>
        最新データを反映するには、PowerShellで .\generate_reservation.ps1 を再実行してください。
    </div>

    <table id="reservationTable">
        <thead>
            <tr>
                <th>予約日</th>
                <th>予約時間</th>
                <th>予約者1</th>
                <th>予約者2</th>
                <th>予約者3</th>
                <th>予約者4</th>
                <th>予約者5</th>
            </tr>
        </thead>
        <tbody id="reservationBody"></tbody>
    </table>

    <script>
        // CSVデータ(PowerShellから埋め込み)
        let reservations = $jsonData;
        console.log("初期データ:", reservations);

        // ページロード時に表を描画
        document.addEventListener("DOMContentLoaded", renderTable);

        function renderTable() {
            console.log("renderTable: 表を描画します");
            const tableBody = document.getElementById("reservationBody");
            tableBody.innerHTML = "";
            reservations.forEach((res, index) => {
                const row = document.createElement("tr");
                const formattedDate = res.予約日.includes("-")
                    ? new Date(res.予約日).toLocaleDateString("ja-JP", { month: "numeric", day: "numeric" })
                    : res.予約日;
                row.innerHTML =
                    "<td>" + formattedDate + "</td>" +
                    "<td>" + res.予約時間 + "</td>" +
                    "<td>" + (res.予約者1 && res.予約者1.trim() ? res.予約者1 + ' <button class="delete-btn" onclick="deletePerson(' + index + ', \'予約者1\')">削除</button>' : '<span class="editable" onclick="editPerson(' + index + ', \'予約者1\')">[入力]</span>') + "</td>" +
                    "<td>" + (res.予約者2 && res.予約者2.trim() ? res.予約者2 + ' <button class="delete-btn" onclick="deletePerson(' + index + ', \'予約者2\')">削除</button>' : '<span class="editable" onclick="editPerson(' + index + ', \'予約者2\')">[入力]</span>') + "</td>" +
                    "<td>" + (res.予約者3 && res.予約者3.trim() ? res.予約者3 + ' <button class="delete-btn" onclick="deletePerson(' + index + ', \'予約者3\')">削除</button>' : '<span class="editable" onclick="editPerson(' + index + ', \'予約者3\')">[入力]</span>') + "</td>" +
                    "<td>" + (res.予約者4 && res.予約者4.trim() ? res.予約者4 + ' <button class="delete-btn" onclick="deletePerson(' + index + ', \'予約者4\')">削除</button>' : '<span class="editable" onclick="editPerson(' + index + ', \'予約者4\')">[入力]</span>') + "</td>" +
                    "<td>" + (res.予約者5 && res.予約者5.trim() ? res.予約者5 + ' <button class="delete-btn" onclick="deletePerson(' + index + ', \'予約者5\')">削除</button>' : '<span class="editable" onclick="editPerson(' + index + ', \'予約者5\')">[入力]</span>') + "</td>";
                tableBody.appendChild(row);
            });
        }

        function addReservation() {
            console.log("addReservation: 予約追加を開始");
            const date = document.getElementById("date").value;
            const time = document.getElementById("time").value;
            const person1 = document.getElementById("person1").value;
            const person2 = document.getElementById("person2").value;
            const person3 = document.getElementById("person3").value;
            const person4 = document.getElementById("person4").value;
            const person5 = document.getElementById("person5").value;

            if (date && time) {
                const formattedDate = new Date(date).toLocaleDateString("ja-JP", { month: "numeric", day: "numeric" });
                reservations.push({
                    予約日: formattedDate,
                    予約時間: time,
                    予約者1: person1,
                    予約者2: person2,
                    予約者3: person3,
                    予約者4: person4,
                    予約者5: person5
                });
                console.log("addReservation: 新しい予約を追加", reservations);
                renderTable();
                saveCSV();
                document.getElementById("date").value = "";
                document.getElementById("time").value = "";
                document.getElementById("person1").value = "";
                document.getElementById("person2").value = "";
                document.getElementById("person3").value = "";
                document.getElementById("person4").value = "";
                document.getElementById("person5").value = "";
            } else {
                alert("予約日と予約時間は必須です");
            }
        }

        function deletePerson(index, personKey) {
            console.log("deletePerson: 削除開始", { index, personKey });
            reservations[index][personKey] = "";
            renderTable();
            saveCSV();
        }

        function editPerson(index, personKey) {
            console.log("editPerson: 入力開始", { index, personKey });
            const name = prompt("予約者名を入力してください");
            if (name && name.trim()) {
                reservations[index][personKey] = name.trim();
                console.log("editPerson: 名前を更新", reservations);
                renderTable();
                saveCSV();
            }
        }

        function saveCSV() {
            console.log("saveCSV: CSVダウンロードを開始");
            try {
                const header = "予約日,予約時間,予約者1,予約者2,予約者3,予約者4,予約者5\n";
                const csvContent = header + reservations.map(res =>
                    res.予約日 + "," + res.予約時間 + "," +
                    (res.予約者1 || "") + "," + (res.予約者2 || "") + "," +
                    (res.予約者3 || "") + "," + (res.予約者4 || "") + "," +
                    (res.予約者5 || "")
                ).join("\n");
                const blob = new Blob([csvContent], { type: "text/csv;charset=utf-8;" });
                const link = document.createElement("a");
                const url = URL.createObjectURL(blob);
                link.setAttribute("href", url);
                link.setAttribute("download", "reserve.csv");
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
                console.log("reserve.csvをダウンロードしました。C:\\TEST\\reserve.csvに上書き保存してください。");
                console.log("saveCSV: ダウンロード完了");
            } catch (error) {
                console.error("saveCSV: エラー発生", error);
                alert("CSVダウンロードに失敗しました。コンソールを確認してください。");
            }
        }
    </script>
</body>
</html>
"@

# HTMLファイルに保存(UTF-8 BOMなし)
try {
    $htmlTemplate | Out-File -FilePath $htmlPath -Encoding UTF8
    Write-Host "HTMLファイルが正常に生成されました: $htmlPath"
    Write-Host "Microsoft Edgeで $htmlPath を開いて予約表を操作してください。"
} catch {
    Write-Host "エラー: HTMLファイルの生成に失敗しました。詳細: $_"
    exit
}

上記のコードをPowerShellで実行すると、HTMLファイルが生成されます。
ブラウザで開くと以下のような予約表が表示されます(CSVの内容を表形式で表示)。

では、予約を入れてみましょう!

  • 例: 9:00 の予約者1 に 清盛さん を登録

入力をクリックすると予約者の名前を入力するポップが出ますので皐清盛と入力します。

入力が完了すると画面上とCSVに清盛の予約が反映されます。

名前の右にある削除ボタンを押すと予約が削除され画面とCSVに反映されます。

💾ステップ3:CSVを保存・再利用して更新

予約内容を入力・削除したら、ブラウザからCSV形式で保存される仕組みになっています。保存されたCSVをPowerShellスクリプトで読み込めば、常に最新の予約表が再生成されます。

✅まとめ:Excel不要!「自分の現場向け予約管理」を自作しよう

「難しいシステムは要らないけど、紙やExcelの予約管理は限界…」

そんなあなたにぴったりなのが、PowerShellとHTMLで作るシンプルな予約管理システムです。

📌 ここまでの流れをおさらい

  • ① PowerShellでCSV予約表を自動生成
    → カレンダーで期間を選ぶだけ。30分刻みの予約枠が入ったCSVを作成。
  • ② CSVをHTMLに変換し、ブラウザで予約操作が可能に
    → 名前の入力・削除ができ、CSVとして保存されます。
  • ③ 保存したCSVで最新の予約表を再表示
    → データの再利用・更新も簡単!

システム開発の知識がなくても、導入コストゼロ・ネット不要・業種不問で使えるこの仕組み。

小さな現場にこそ、「ちょうどいい」予約管理ツールを、自分の手で作ってみませんか?

2025年4月27日日曜日

【GW2025】電車代が高くて旅行を諦めるのはもったいない!東京近郊をお得に回る2つの神チケット(都区内パス、24時間券) by裏方徹也



こんにちは、裏方徹也です。
今年のゴールデンウィーク、家族や友人とのお出かけを計画している方も多いのではないでしょうか?
でも、こんな悩みありませんか?

💸「行きたいけど交通費が高すぎる…」
・家族4人で出かけたら、電車代だけで5,000円超えた…
・スタンプラリー巡りや観光をしたいけど、途中下車が多くて出費がかさむ
・節約したいけど、安いルートを調べるのが面倒くさい
実は、交通費で損している人がめちゃくちゃ多いんです。

✅この記事を読むとどうなる?
・移動コストを1人当たり500円以上節約できる場合がある
・面倒な乗り換えや精算から解放されて、スムーズに移動できる
・浮いたお金でもう1箇所寄り道したり、美味しいものが食べられる!

今回は、東京近郊をお得に楽しめる2つの鉄板チケットをご紹介します。両方とも、GW中にも使える優秀アイテムです!

🚃【1】都区内パス(JR東日本)
 



▶どんなチケット?
東京都23区内のJR線が1日乗り降り自由になるフリーパス。

▶こんな人におすすめ!
スタンプラリーや美術館めぐりなど、複数のJR駅を使う予定の人
一日かけて都内を広く移動したい人

▶料金:大人760円
▶どれくらいお得?
例)JRで6回移動すると…
通常料金:150円 × 6回 = 900円
→ 都区内パスなら 760円 に!140円お得
さらに、途中下車しても追加料金なし。Suicaでも購入可!

▶便利な理由
・23区内なら、気にせず自由に途中下車できる
・運転見合わせ等となり、振替輸送が使用できる場合、振替輸送の対象となる

⚠注意点:JR東日本の東京23区内の駅しか使用できない。23区外もしくは他社線をまたいで乗車する場合は別途精算が必要
例)東京駅から都区内パスで入場し、横浜で降りた場合、蒲田~横浜までの区間230円を別途支払う必要があります。


🚇【2】東京メトロ24時間券
 



※値段は600円とありますが値上がり前に撮影しました。現在は700円です。
 




▶どんなチケット?
使い始めてから24時間、東京メトロ乗り放題になるチケット。但しICカード版だとその日限り。

▶こんな人におすすめ!
渋谷・表参道・上野・池袋など、都心を中心に回りたい人
翌日にまた移動予定がある人(午後スタートの旅行など)

▶料金:大人700円/IC対応は当日限り

▶お得な使い方例
4回以上乗れば元が取れる!
初乗り180円 × 4回 = 720円
→ 24時間券で700円 に!

▶便利な理由
・例えば4/28の15:00に使い始めたら、翌日4/29の15:00まで有効!
・乗車している最中に有効期限が過ぎた場合は降車した駅まで有効です!
・美術館やカフェ巡りなど、ゆったり旅にピッタリ
・運転見合わせ等となり、振替輸送が使用できる場合、振替輸送の対象となる

⚠注意点1:都営地下鉄では使えません!
⚠注意点2:東京メトロは丸ノ内線、銀座線以外は全て直通運転をしているため、他社線をまたいで利用する場合は別途精算が必要になります。
例)副都心線新宿三丁目から乗車し、東急東横線の代官山駅で降りた場合、東横線の区間渋谷~代官山まで140円別途支払う必要があります。

🤔どっちを選ぶべき?

比較項目    都区内パス    メトロ24時間券
対象エリア    JR 23区内    東京メトロ全線
利用期間    当日限り    24時間有効

迷ったら「目的地がJRでしか行けないのか、メトロでしかいけないのか」で選びましょう!


🎁まとめ:賢く使えばGWの満足度が爆上がり!
交通費は、気づかないうちに旅の満足度を下げる落とし穴。でも、この記事で紹介した2つのチケットを使えば…
出費を減らして、そのぶん観光・食事・お土産に回せる
時間のロスも減り、旅行がもっとスムーズに!
そして何より、「もう一か所行ける」気持ちの余裕が生まれる!
また、使用中に運転見合わせが発生し振り替え輸送ができる場合、この券を使うと対象になります!利用予定の路線が止まってしまった時の万が一の保険という意味でも使えます!


✈さあ、お得に東京を旅しよう!
あなたのGWが、もっと自由で楽しくなることを願って。
裏方徹也でした!



2025年4月20日日曜日

【混雑・切符・乗り換え全部解説】キュンパス&北海道&東日本パスで行く函館&東北弾丸旅行② 青森→函館編

 【混雑・切符・乗り換え全部解説】キュンパス&北海道&東日本パスで行く函館&東北弾丸旅行② 青森→函館編
こんにちは、裏方です!
前回の記事では、青春18きっぷ的な格安旅きっぷ「キュンパス」を使って青森までやって来ました。
▶まだ読んでない方は、まずはこちらから:
👉【前回記事:東京から青森までの電車旅

▶動画を見られていない方はこちらを↓


今回はその続き、青森からいよいよ北海道・函館までの道のりをご紹介します!

◆こんな悩み、ありませんか?
・お得なきっぷを使いたいけど、乗り継ぎが複雑そうで不安…
・特急や新幹線にどう乗ったらいいかわからない
・青森〜函館ってどのくらい時間がかかるの?
・北海道って遠く感じるけど、本当に1日で行けるの?

この記事ではそんな不安を、実際に旅してきた体験ベースで全て解決!
読めば、乗り継ぎ・混雑・切符の不安が消え、あなたもすぐに真似できる旅プランが手に入ります!

※2025年現在の情報です。

◆新青森駅→青森駅:混雑をどう乗り切る?
10:44、新青森駅に戻ってきました。乗ってきた秋田行きの普通電車をお見送り!ちなみに秋田到着は約3時間の14:01だそうです!
 




青森行きの特急「つがる号」を待つ人の列がすごい…1ドアあたり20人近く並んでました。
 


11:12、「つがる号」到着。電光掲示板のTSUGARUって見ると吉幾三さんの曲を連想しちゃいますね(笑)
ちなみに吉さんは青森県出身のようです。
 



 
4両編成でも座れず車内は通路も含めて立客で混雑していました。
✅どうしても座りたいなら新幹線到着後に真っ先に並ぶ
✅ スーツケースなどの大きな荷物がある人は、通路の広い普通電車の方が快適!
ちなみにこの「つがる号」、通常は特急券が必要ですが、新青森~青森の自由席に限っては乗車券だけでOKなんです!小さな節約テク、ぜひ覚えておいてください。

◆ここがポイント!「キュンパス」では乗れない区間をどう攻略するか?
 


但し、注意点があります。
新青森〜新函館北斗は「キュンパス※」対象外!
※補足:動画の最初の方で券パスを使うと字幕がありましたが、でべそさんよ、券パスではなくキュンパスな!←申し訳ございませんbyでべそ(めんどくさ)
 



でも諦めないでください。ここで活躍するのが…
北海道&東日本パス+特定特急券!
 




この2つを組み合わせれば、新幹線「はやぶさ」にも格安で乗れちゃうんです。

▼具体的な乗り方:
✅ 北海道&東日本パス
✅ 特定特急券(はやぶさは全車指定席だけど空席に座れる)

通常、乗車券が往復で6,380円(函館まで7920円)かかるところ、このパスを使えば追加料金なしでいけます!翌日に仙台から東京へ向かう予定でその乗車券が6050円なので合計13970円なので元は取れています!
ちなみに旅費はキュンパスの10,000円+北海道&東日本パス11,330円+特定特急券8,000円=29,330円(通常48,180円で18,850円引きで行けます)
特定特急券、「自由席券」みたいな扱いで、空席があれば座れます。
ただし、指定された方が来たら必ず席を譲りましょう!

◆11:40頃:青函トンネル突入!
 



青函トンネルでは、電光掲示板や車内放送でトンネルの紹介が流れます。
昔は途中の竜飛海底、吉岡海底に停まる列車もありましたが、今は通過のみ。少し寂しいけれど、それでも本州と北海道を結ぶドラマチックな瞬間です。

◆12:15:新函館北斗に到着!初の北海道上陸!
 



東京を出発して約6時間。ついに北海道上陸!
 


階段を上がって改札階へ行ってみると正面が改札口、右手に在来線ホームへの乗り換え改札があります。
※写真は先日紹介した自動モザイクプログラムにてぼかし加工

※ここで大事な注意点※
「新函館北斗」と「函館」は別の駅です!
函館まではさらに在来線で15分ほど移動が必要。ここで多くの人がやってしまうのが…
🚫乗車券を新函館北斗までにする事。
新函館北斗までにしてしまうと、新函館北斗~函館まで440円分追加料金が必要になります。JRの運賃は遠くに乗れば乗るほど1kmあたりの料金が安くなりますので函館まで買った方安くなる場合があります。また、101km以上であれば函館まで買った場合でも新函館北斗に途中下車可能なので、函館まで買った方が総合的に安い事が多いと思います。途中下車制度についてはこちらの記事で解説してますのでご覧ください。

🚫 間違えて特急「北斗号」に乗ってしまうこと!
 



これに乗ると、函館までたった15分なのに760円の特急券が必要になります。
また、札幌行きの北斗号もこのホームから発着しますのでご注意を!
必ず、函館行きの列車で「函館ライナー」もしくは普通列車を選びましょう!
ちなみに「函館ライナー」は乗車券のみで乗車可能です。
在来線ホームには両方の列車が来るので、発車案内の行き先表示をよく確認してください。

◆12:50 函館駅に到着!
 



無事に函館駅へゴールイン!
駅の構造も面白くて、ホームとコンコースの間に防寒ドアがあるのが北海道らしい仕様。
詳しくは動画参照下さい!

ここまでの旅で、
✅ 混雑にどう対応するか
✅ きっぷの切り替え・特例利用のテクニック
✅ 特急と普通列車の違いと選び方
全部体感できました!

◆この記事で解決できること(おさらい)
✅ 東京から函館まで、キュンパスと北海道&東日本パスで格安に行ける
✅ 新幹線や特急の特例ルールを活用すれば移動もラクラク
✅ 初心者でも安心な乗り継ぎ&混雑対策を紹介


◆次は函館観光!旅はまだまだ続く…
次回の記事では、ついに函館の街を満喫!
歴史と異国情緒がただよう港町・函館の魅力と、コスパ最高な観光ルートをご紹介します!
あなたもこの旅ルートを参考にして、自分だけの鉄道旅を楽しんでみてくださいね!


◆補足

 北海道&東日本パスは北海道新幹線では新青森~新函館北斗の相互発着のみ乗車券として使え、その区間外を超えて使用する場合は全区間の乗車券が必要になります。区間外を乗るときは一旦新青森で降りることをおすすめします。





2025年4月19日土曜日

【新社会人へ贈る】仕事がうまくいかないのは当たり前!乗り越えるための4つのヒント by裏方徹也


★はじめに

こんにちは、裏方です。
新年度が始まって2週間。新しい環境に戸惑いを感じる方も多いのではないでしょうか?職場での人間関係や業務の多さに、「自分、向いてないのかも」と悩んでいませんか?
先日、新社会人へ向けてアドバイスの記事を書いた裏方も新人時代は、失敗だらけで「辞めたい」「つらい」と感じる日々が続いていました。でも、そんな時期を乗り越えたからこそ、今こうして笑っていられるんです。今回は、私自身の失敗談とともに、新社会人の皆さんが今日から試せる4つのヒントをお届けします。
リンク:前回の社会人へのアドバイスの記事


★裏方の社会人デビュー ―「できない」からのスタート

新社会人として最初に配属された職場で、私は失敗だらけでした。
・先輩から「なんでちゃんと相談しない」と叱られる
・メールの書き方がわからず無駄に時間がかかってしまう
・報告が遅すぎて「もっと早くするのが常識」と怒られる
こんな日々が続いて、帰り道では毎日「自分は社会人に向いてない」と反省していました。でも、今振り返ると、それは成長のために必要なプロセスだったんです。

★今、悩んでいるあなたへ ― 4つのヒント

失敗や悩みは、新社会人が誰もが通る道。それでも「つらい」と感じたときに、試してみてほしいヒントを4つご紹介します。

1. 見える部分だけで比べない
同期や先輩と自分を比べるのはよくあること。でも、彼らの「できている部分」しか見えていないことを覚えておいてください。実際には、皆が見えないところで努力や失敗をしています。
2. 一歩ずつ、小さな成長を喜ぶ
最初からすべてを完璧にこなす必要はありません。たとえば、「今日は先輩に相談できた」「ミスを早く報告できた」といった小さな成功を大事にしてください。
3. 焦らずに時間を味方にする
成長には時間と経験が必要です。1年後には、新人だったあなたが後輩をサポートしているかもしれません。だから、今日一日をまず乗り越えることを目標にしましょう。
4. 叱られても気にしすぎない
実は、叱った側の先輩は「新人だし仕方ない」とあまり気にしていない場合がほとんどです。一度の失敗で評価が下がるわけではないので、「次は気をつけよう」という軽い気持ちで進むことが大切です。

★最後に伝えたいこと

失敗や悩みは、社会人として成長するための通過点です。
明日も出勤するあなたは、それだけで立派な一歩です。小さなことでも自分を褒めてあげましょう!未来のあなたが、笑顔でこの時期を思い出せるよう願っています。

2025年4月17日木曜日

キュンパス&北海道&東日本パスで行く函館&青森弾丸旅行 その1 東京~青森編

 
 
★はじめに
こんにちは、裏方です!先日、東京から青森、そして函館までの弾丸旅行に行ってきました。



今回は青森編をお届けします。青森はその厳しい寒さと美しい自然、そして深い歴史で魅力的な土地です。新幹線での快適な移動をしながら、どんな体験が待っているのか、早速レポートしていきます!

6:10 東京駅

 

 早朝、東京駅から旅が始まります。まだ駅が静かな時間帯、しばし旅の準備を整えつつ、新幹線「はやぶさ」に乗り込みます。東北新幹線の車内での静かなひとときは、これからの大冒険の始まりを感じさせてくれました。

6:32 はやぶさ1号に乗車
 



新幹線に乗り込み、いよいよ青森に向けて出発です。車窓から見る都内の日の出は、どこか幻想的で、思わず目を奪われました。まだ夜が明けきらない東京の街を後にし、青森へと向かう時間が続きます。

6:40 都内の車窓から



 


 
外を見ると、美しい日の出が顔を少し覗かせていました。朝の清々しい空気を感じながらの出発です。思わず携帯で写真を撮ってしまいました。

 

 


 



6:58 大宮駅 - 乗客の列で大混雑
 



大宮駅に到着すると、乗客が多くて少し混雑。普段の通勤ラッシュとはまた違った、長距離移動ならではの忙しさが感じられます。1車両当たり20人近く並んでおり、車内もほぼ満席で、旅の人気の高さを実感しました。

8:03 仙台駅 - 乗客の列で大混雑

 

 



仙台駅もやはり混雑しており、到着した駅で一度人の流れを避けながら休憩。あちらこちらに観光客も多く、私の周りにも旅行に出かける人々の姿が目立ちます。仙台駅の美しい景色に少しだけ心を奪われつつ、次の目的地に向けて出発。

8:44 盛岡駅 - 連結していた「こまち号」と解結作業




 
盛岡駅に到着し、併結する「こまち号」との解結作業を見ることができました。
写真右側の秋田行きの「こまち号」と写真左側の新函館北斗行きの「はやぶさ号」が分かれ、
まるで新幹線の舞台裏を見ているようで、ちょっとした興奮を感じました。


 


↑こまち号が秋田へ向けて一足先に発車

8:50  盛岡駅発車後車窓


 

 

盛岡を発車すると奥に山が見え景色が、秋田方面に向かう秋田新幹線の高架が見えます。先ほどのこまち号はこの効果を通り秋田方面へ向かったようです。

9:50 新青森駅 - ほぼ全員降りる




 
いよいよ、新青森駅に到着。車内のほぼ全員が降りていきます。まるで民族移動のようでした。


 

はやぶさのお客さんが2両編成の普通列車に乗り込み車内は大混雑で東京の通勤ラッシュ並でした。

10:00 青森駅 - 駅から見える海
 



青森駅に到着すると、駅の通路から青い海が見えました。海の景色はとても広大で、旅の疲れが一気に吹き飛びます。駅前の風景は、いかにも青森らしく、冷たい風が心地よい。

10:10 青森駅 - りんごジュース自販機、ねぶたのコインロッカー発見
 
 



青森駅で面白い発見!りんごジュースだけが売っている自販機を見つけて、思わず購入。青森はりんごの名産地なので、ぜひとも味わっておくべき一品です。


 

駅内にはねぶた祭りのコインロッカーも発見。青森らしい文化が詰まっています。

10:20 八甲田丸へ向かう
 

 





青森駅から徒歩でかつて連絡船が発着していた港へ向かう途中、雪山を越えて行きました。除雪した雪の山が積み上げられており、まるで冬の日本の風物詩を見るような光景。


 

途中、八甲田丸にも立ち寄り、船の歴史を少し感じてみました。

 



↑駅の反対口に行くと自転車が2台雪に埋もれていました。

10:30 青森駅出発
青森駅を後にし、再び新青森駅へ向かうことに。今回はあまり時間をかけずに駅周辺を散策しましたが、次回はもっとじっくり探索したいと思いました。

★感想
青森に到着した時の感動は、やはり言葉では表せません。駅に降り立つと、海が広がる風景が目の前に広がり、その美しさに思わず息を呑んでしまいました。青森特有の清々しい空気、そしてりんごジュース自販機や、ねぶた祭りのコインロッカーといったちょっとした発見が、旅の楽しさをさらに引き立ててくれました。
新幹線での移動は快適そのもの。乗客の多さを感じつつも、車窓から見る景色や、人々の何気ない会話の中に、青森の「日常」を垣間見ることができて、普段では味わえない発見が多くありました。
特に、雪の山や、八甲田丸が印象的でした。これから訪れる場所に対して、ますます期待が高まりました。

★次回予告
今回は、東京から青森へ向かう新幹線の旅と、青森駅周辺の風景をお届けしました。次回の記事では、青森から函館へ向かう様子をじっくりとお伝えします。次回もお楽しみに!