月次・年次カレンダー

日 月 火 水 木 金 土

このカレンダーを作った背景

既存のカレンダーサイトだと以下のような問題点を感じていたため

  • 機能の過不足:月次の土日祝日、たまに年次を確認したいが、いい感じのが無かった。
  • 広告の過多:巨大なバナーや広告が主張してきて見づらい。
  • 動作の重さ:外部スクリプトや広告確認などで表示までが時間がかかる。

なので自分が見たい情報だけ表示するようにした。

主な仕様

  • 当月1か月のすっきり表示:
    開いた瞬間に今月のカレンダーをダイレクトに展開(当日のハイライト表示付き)
  • 土日・祝日の色分け:
    • 土曜:青色
    • 日曜・祝日:赤色
  • 祝日名の表示:
    • 元日や建国記念の日などの固定祝日
    • 成人の日・海の日などの「ハッピーマンデー」
    • 計算ロジックによる「春分の日」「秋分の日」
    • 日曜と重複した際の「振替休日」
    • 祝日に挟まれた「国民の休日」
  • 月次・年次の切替表示:
    月次・年次の切替が可能(年次画面では祝日名の記載は省いた)
  • 年月切り替え対応:
    年と月のプルダウンを選択するだけで、過去・未来のカレンダーへ即座に切り替え可能
    (「今月」ボタンでワンタップ復帰)。

その他事項(運用の仕組み・検証方針)

  • 官報公表に合わせた年次確認:
    春分の日および秋分の日は法律上、前年2月の官報(暦要項)によって正式告示されます。本カレンダーでは天文学的な略算式を用いて自動算出していますが、官報の公表タイミングに合わせて毎年整合性を確認・メンテナンスしていきます。
  • Geminiによる定期検算のスケジューリング済:
    計算ロジックと正式な祝日にズレが生じていないか検証するため、毎年2月第1金曜日に私のGeminiを活用した突き合わせ検算を実施するスケジュールを登録済みです。但し、突発的な法改正や特措法による移動が発生した場合は、私が気づいたタイミングでコードを更新するようにします。

ThinkPad x13 gen6からルーターへ急に接続できなくなった

TL;DR

暫定対応:通信規格の上限をWi-Fi 6 (802.11ax) に下げることで解決できた。
恒久対応:2026/9/5時点では対応方法が分からない。

機器構成

事象

ThinkPad X13 Gen 6 (Intel Wi-Fi 7 BE201) から NEC Aterm 7200D8BE に接続していた。
購入して半年位問題無かったが、ある日急に接続できなくなった。
コンパネのネットワーク接続を確認すると、「認証を試みています」と表示されていた。
なお、スマホ(Pixel7・Pixel9・Pixel11)はそれぞれ接続が行えた。

この状態のまま接続が行われない

調査結果

Windowsのイベントログ(Microsoft-Windows-WLAN-AutoConfig/Operational)を確認した。
すると、以下のエラーが記録されていた。

WLAN 自動構成サービスは、ワイヤレス ネットワークへの接続に失敗しました。
失敗の理由: アソシエーションの実行中にドライバーが切断されました。

どうもパスワードの誤りではなさそうである。(一応変更は実施したが改善無)
PCとルーター間のネゴシエーション段階で通信が破綻し、ドライバー側から切断されてそう。

アダプター(Intel BE201)とルーター(Aterm 7200D8BE)はWi-Fi 7 (802.11be) に対応している。
何かのアップデートが原因で802.11beでのネゴシエーションに失敗していると思われる。

対応方法

暫定対応方法

  1. デバイスマネージャーを開く。
  2. 「ネットワーク アダプター」の Intel(R) Wi-Fi 7 BE201 320MHz をダブルクリックする。
  3. 「詳細設定」タブを開く。
  4. プロパティから 802.11n/ac/ax/be ワイヤレス モード を選択する。
  5. 値を 802.11ax に変更して「OK」を選択する。
    設定変更するだけですんなり接続されるようになった

恒久対応方法

現在不明である。
Lenovo Vantageでまめにアップデートしているが、現状改善されない。

補足

ネットワークアダプターの表示名について

設定を 802.11ax に下げても、ネットワーク画面に Intel(R) Wi-Fi 7 BE201 320MHz と表示される。
これはハードウェアの製品名である。
そのため、表示がWi-Fi 7でも、残念ながら 802.11ax で動作している。

良さげなスキル・ソフト・サービス

随時更新

スキル

Archify

説明文やリポジトリを渡すとコードベースをインタラクティブな図に変換

github.com

diagram-design

HTML+SVG図解を生成するためのデザインスキル

github.com

ソフト

Escrcpy

USB/Wi-Fi接続されたAndroidデバイスの画面をPCからリモート表示・操作可能

forest.watch.impress.co.jp

Raycast

ランチャーソフト
使いこなすと相当便利そう
とはいえ、Win + RとPowertoysで私は今のところいいかな
www.raycast.com

Superfile

ターミナル
綺麗で便利機能が色々組み込まれている
superfile.dev

Ctafting Apps

Adobeの無料代替アプリ
まだ粗削りっぽいけど、Adobeオワコンになるかも

  • PhotoCraft(Photoshop)
  • VectorCraft(Illustrator)
  • FilmCraft(Premiere Pro)
  • LightCraft(Lightroom)
  • PrintCraft(Acrobat Pro)
  • EffectCraft(After Effects)
  • DesignCraft(InDesign)

getartcraft.com

PowerShellをインストール・アップデートするコマンド

PowerShellのインストール方法

以下のコマンドでインストールするのが楽である。
後は見慣れたインストーラが起動して、インストールできる。

winget install Microsoft.PowerShell

実行したら、ライセンス条件に同意するか聞かれるので、Yを選択すればよい。

PowerShellのアップデート方法

winget upgrade Microsoft.PowerShell

PowerShellのバージョン確認方法

$PSVersionTable.PSVersion

なお、PowerShellはv5まではpowershellが起動コマンドである。
しかし、v6以降はpwshが起動コマンドである。

インストールしているソフト一覧と名称確認方法

# 全量出したい場合
winget list

# 一部だけでも検索可能
winget list Power

# パイプしてgrep的に削る方法
winget list | Select-String Power

覚えておくと便利なコマンド

# コマンドの場所を見つける
Get-Command hoge

# ファイルダウンロード
irm "https://hoge.com" | iex

# カレントディレクトリのエクスローラを開く
ii .

# 環境変数の全量表示
Get-ChildItem Env:

# 環境変数の指定表示(例:PATH変数)
$env:PATH

# ファイル検索
Get-ChildItem c:\ -Recurse -File | Where-Object {$_.Name -like "*キーワード*"}

Powershellを実行するとエラーになる

事象

Powershellを実行すると下記の様なエラーになる。

PS C:\Users\user> .\hoge.ps1
.\hoge.ps1: File C:\Users\user\hoge.ps1 cannot be loaded.
The file C:\Users\user\hoge.ps1 is not digitally signed.
You cannot run this script on the current system.
For more information about running scripts and setting execution policy, 
see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.

なお、ポリシーはRemoteSignedに設定変更している。

原因

未署名の外部スクリプト(※1)を実行しようとしていたから。

※1 外部スクリプト
インターネットや外部ネットワークからダウンロードされ、
代替データストリームに Zone.Identifier(ZoneId=3など)が付与されているファイルのこと。

対応方法

以下の方法で実行可能になる。

  1. Zone.Identifierを削除する。
  2. PowerShellスクリプトの実行許可ルールを変更する。
  3. 署名付きファイルに修正する。(※2)

※2 対応難しい場合が多いため、説明割愛

Zone.Identifierの確認方法と削除方法

## 確認方法

# ファイルのすべてのデータストリームを出力
Get-Item .\hoge.ps1 -Stream *

# Zone.Identifierだけ指定(無い場合はエラー)
Get-Content .\hoge.ps1 -Stream Zone.Identifier

## 削除方法

# Zone.Identifier削除専用コマンド
Unblock-File -Path .\hoge.ps1

# ストリーム削除コマンド
Remove-Item -Path .\hoge.ps1 -Stream Zone.Identifier

## 複数削除方法

# カレントディレクトリ配下のすべての .ps1 ファイルのZone.Identifierを解除
Get-ChildItem -Filter *.ps1 | Unblock-File

# サブフォルダーも含めてすべてのファイルのZone.Identifierを再帰的に解除
Get-ChildItem -Recurse | Unblock-File

スコープ確認方法・変更方法

## 確認方法

# 現在適応されているポリシーの確認
Get-ExecutionPolicy

# 各スコープに設定しているポリシーの確認(※3)
Get-ExecutionPolicy -List

## 変更方法(管理者権限があるコンソールで実行する必要有)
Set-ExecutionPolicy -Scope <スコープ名> -ExecutionPolicy <ポリシー名>

### 例:今実行しているコンソールだけ実行可能にする
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

### 例:今ログインしているユーザーは、警告は出すけど実行可能にする
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

※3
各スコープに設定しているポリシーを評価し、適応するポリシーが決定される

実行ポリシーとスコープ名

スコープ名一覧

優先度 スコープ名 適用範囲・特徴
1 (最優先) MachinePolicy グループポリシー(GPO)によってPC全体に強制される。一般ユーザーや個別のスクリプトからは変更不可。
2 UserPolicy グループポリシー(GPO)によって現在のログインユーザーに強制される。変更不可。
3 Process 現在のPowerShellプロセス(セッション・タブ)内のみに適用される。ウィンドウを閉じると設定は消滅する。
4 CurrentUser 現在のログインユーザー全体に適用される。設定はレジストリ(HKCU)に保存され、次回起動時も維持される。
5 (最底辺) LocalMachine PC全体(すべてのユーザー)に適用されるデフォルトの保存先。設定の変更には管理者権限が必要。

実行ポリシー名一覧

実行ポリシー名 実質的な権限・挙動 外部スクリプトの実行可否
Restricted すべてのスクリプトの実行を禁止。 インタラクティブな個別コマンドの入力のみを許可する(Windows クライアントOSの既定値)。 ✕ 不可
AllSigned 署名付きスクリプトのみ許可。 ローカル作成・外部ダウンロード問わず、信頼された発行元のデジタル署名が必要。 ◯ 許可(要署名)
RemoteSigned ローカル作成は許可、外部ダウンロードは要署名。 ネットから取得したファイル(ZoneId=3)を実行する場合はデジタル署名が必要(Windows Serverの既定値)。 ◯ 許可(要署名)
Unrestricted すべてのスクリプトを実行許可。 ただし、インターネットからダウンロードした未署名のスクリプトを実行する際には、事前の警告プロンプトが表示される。 ◯ 許可(警告有)
Bypass すべてのスクリプトを実行許可(警告なし)。 警告やブロックが一切発生しないため、自動化タスクやバックグラウンド処理で広く使われる。 ◯ 許可
Undefined この階層(スコープ)での設定は「未定義(空)」であることを示す。 固有の権限は持たず、判断を下位スコープやOSのデフォルト値に委ねる。(※3) —(委ねる)

※4
デフォルト値は、OSにより異なる。

PowerShellの初期ロードに設定すると良い内容

設定ファイルの配置場所とファイル名

配置場所

通常

C:\Users\<ユーザー名>\Documents\PowerShell

OneDrive設定がある場合

C:\Users\<ユーザー名>\OneDrive\Documents\PowerShell

設定ファイル名

多少分類の境界線微妙なとこはあるが、以下の様な役割で分かれてそう

  • Microsoft.PowerShell_profile.ps1(※1):主にシェル操作に関する設定
  • powershell.config.json:PowerShell全体の処理に関わる設定

※1
これとは別にprofile.ps1も存在する。
これは同じ内容を定義するが、対象とする範囲が別になる。
Microsoft.PowerShell_profile.ps1は、PowerShellコンソールのみ範囲となる。
一方、profile.ps1はVSCodeなど別ホストからPowerShellが実行された場合も当内容が適用される。
(逆にMicrosoft.PowerShell_profile.ps1の内容は読込されない)
そのため、全環境共通にしたい場合は、profile.ps1を作成する方が良い。

設定しておくと便利な設定

Microsoft.PowerShell_profile.ps1

# ==== エンコード関連 ====
# 2026.10.27 PowerShell 7系は当定義は無い方が良さそう 
#
# コンソールの表示をUTF-8にする
# 設定確認方法:chcp
#chcp 65001 > $null
#
# 標準入力の文字コードをUTF-8にする
# 設定確認方法:$InputEncoding.WebName
# $InputEncoding  = [System.Text.Encoding]::UTF8
# 
# 標準出力の文字コードをUTF-8にする
# 設定確認方法:$OutputEncoding.WebName
# $OutputEncoding = [System.Text.Encoding]::UTF8
 
# ==== コンソール操作関連 ====
 
# Tabキーの補完動作設定
# 設定確認方法:Get-PSReadLineKeyHandler | Where-Object { $_.Key -eq "Tab" }
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
 
# 過去の履歴から予測候補を表示
# 設定確認方法:Get-PSReadLineOption | Select-Object PredictionSource
Set-PSReadLineOption -PredictionSource History
 
# 予測候補の表示形式の指定
# 設定確認方法:Get-PSReadLineOption | Select-Object PredictionViewStyle
Set-PSReadLineOption -PredictionViewStyle ListView

powershell.config.json

{
  "Microsoft.PowerShell:ExecutionPolicy": "RemoteSigned",
  "POWERSHELL_TELEMETRY_OPTOUT": "1",
  "DisableImplicitWinCompat": true
}
  • Microsoft.PowerShell:ExecutionPolicy:明示的に指定
  • POWERSHELL_TELEMETRY_OPTOUT:MSに情報送るの停止
  • DisableImplicitWinCompat:PowerShellの古い互換機能を無効化

PowerShellでコマンドが実行できない

事象

スペースを含むため、.\みたいな直接指定ができない。
そのため、絶対パスでダブルクォーテーションで括って実行した。
しかし、PowerShellからコマンドが実行できない。

"C:\Program Files\OpenSSL-Win64\bin\openssl.exe" s_client -connect sts.amazonaws.com:443 -servername sts.amazonaws.com

原因

コール演算子(&)の付け忘れ

対応方法

頭に"& "を指定すれば良い

& "C:\Program Files\OpenSSL-Win64\bin\openssl.exe" s_client -connect sts.amazonaws.com:443 -servername sts.amazonaws.com

補記事項:直接指定とコール演算子の違い

項目 .\hoge.exe (直接指定) & ".\hoge.exe" (コール演算子)
主目的 静的ファイルの即時実行 文字列や変数の動的実行
スペースを含むパス 不可(エラーになる) 可能("で囲む必要あり)
変数の使用 不可(変数の値を展開して実行できない) 可能(& $path の形式で実行)
評価の仕組み 文字列をコマンドとして実行 演算子の後ろを評価した結果をコマンドとして実行