「ブログ」カテゴリーアーカイブ

ブログ投稿用のカテゴリ

Java Stream API入門:リスト操作を効率化する実用サンプル集

■ 導入:Stream APIでコードを劇的に簡潔化

Java 8以降で導入された Stream API は、リストや配列の操作を「宣言的」「関数型スタイル」で記述できる強力な仕組みです。
従来の for ループを使った処理に比べて、コード量を大幅に削減し、バグを防止 できます。

本記事では、List 操作を中心に、Stream APIの実践サンプルを多数紹介します。


■ 基本構文:Streamの流れを理解する

Streamの基本構成は以下の3ステップです。

イメージ:

データの流れ → 加工 → 出力(別のリストなどに変換)

■ サンプル①:条件でフィルタリングする

例えば「偶数だけを抽出する」処理は、以下のように書けます。

処理内容コード例説明
偶数のみ抽出filter(n -> n % 2 == 0)条件に一致する要素だけを残す

■ サンプル②:要素を変換する(map)

全ての要素を2倍にする変換も簡単です。

処理内容コード例出力例
2倍変換map(n -> n * 2)[2, 4, 6, 8]

■ サンプル③:ソート・並び替え

文字列リストをアルファベット順にソートする例です。

降順にする場合は:

処理内容メソッド説明
昇順ソートsorted()自然順序(A→Z, 1→9)
降順ソートsorted(Comparator.reverseOrder())逆順に並び替え

■ サンプル④:重複を除去する(distinct)

処理内容メソッド効果
重複削除distinct()同一要素を1つにまとめる

■ サンプル⑤:合計・平均・最大値を求める

数値リストの集計処理も簡単です。

処理メソッド結果型
合計sum()int
平均average()OptionalDouble
最大max()OptionalInt

■ サンプル⑥:複数条件の処理(filter + map)

処理順序内容
Aで始まる要素のみ抽出
すべて大文字に変換
新しいリストに収集

■ サンプル⑦:グルーピング(groupingBy)

Stream APIでは、SQLのように「グループ化」も可能です。

処理内容メソッド結果
長さごとにグループ化groupingBy(String::length){3=[Tom, Ken], 4=[John]}

■ サンプル⑧:並列処理で高速化(parallelStream)

大量データを高速処理したい場合は parallelStream() を使います。

ただし、順序が保証されない ため、結果の順序が重要な場合は通常の stream() を使用しましょう。


■ Stream APIを使うメリットまとめ

メリット内容
コードの簡潔化for文やif文のネストを削減
可読性向上処理の流れが直感的に理解できる
パフォーマンス並列処理で大量データにも対応
安全性NullPointerExceptionを防ぎやすい

■ まとめ:Stream APIを使いこなして効率化

Stream APIは一度慣れてしまえば、リスト処理を格段に楽にしてくれます。
特にJava 11以降では、ラムダ式やメソッド参照との相性も良く、業務アプリのコード品質を底上げできます。

Windows 11:BitLockerの回復キーを確認・バックアップする方法

Windows 11では、PCのセキュリティを強化するために「BitLocker(ビットロッカー)ドライブ暗号化」が搭載されています。
しかし、PCの修理やOS再インストール時などに「回復キーの入力を求められる」ケースがあります。
このキーを紛失するとドライブにアクセスできなくなるため、事前の確認とバックアップが非常に重要です。

本記事では、BitLockerの回復キーを確認する3つの方法と、バックアップ保存の手順をわかりやすく解説します。


💡 回復キーとは?

BitLockerでドライブを暗号化した際に自動生成される48桁の英数字のキーです。
これがないと、万一TPMチップのリセットやマザーボード交換などの際にデータへアクセスできなくなります。

項目内容
種類48桁の英数字キー
保存場所Microsoftアカウント / USBメモリ / 印刷など
必要になる場面マザーボード交換、TPMリセット、OS再インストール時など
推奨バックアップ数最低2箇所(オンライン+オフライン)

🧭 回復キーを確認する3つの方法

方法①:Microsoftアカウントから確認

  1. MicrosoftのBitLocker回復キー管理ページ にアクセス

  2. Microsoftアカウントでサインイン

  3. 登録済みデバイスごとに「回復キーID」と「キー番号」が表示されます

🔹 おすすめ:最も簡単かつ確実。複数PCを管理している場合にも便利です。


方法②:コマンドプロンプトで確認

管理者権限のコマンドプロンプトを開き、以下を実行します。

出力例:

🔹 ポイント:ドライブ名(例:C:)を変更することで他ドライブのキーも確認できます。


方法③:ローカルグループポリシー / コントロールパネルから確認

  1. コントロールパネル → 「システムとセキュリティ」 → 「BitLockerドライブ暗号化」

  2. 暗号化されているドライブの「回復キーのバックアップ」をクリック

  3. 以下の保存方法を選択:

    • Microsoftアカウントに保存

    • USBメモリに保存

    • 印刷して保存


💾 回復キーのバックアップ方法

方法保存先メリット注意点
Microsoftアカウントクラウドどこからでも確認可能インターネット接続必須
USBメモリオフライン保存オフラインで安全紛失・破損リスク
印刷紙媒体確実な物理保存紙の劣化・紛失に注意

🔹 推奨構成
Microsoftアカウント保存+USBメモリ or 紙保存の二重管理がベスト。


⚠️ 注意点・トラブル対策

状況対処方法
回復キーを紛失したMicrosoftアカウントを確認、もしくはバックアップメディアを探す
BitLockerが有効かわからない「コントロールパネル」→「BitLockerドライブ暗号化」で確認
職場PCなどで個人アカウントに保存できないIT管理者に問い合わせ(ドメイン管理の可能性あり)
TPMリセットでロックされた回復キーを入力して解除後、再暗号化設定を行う

🧩 まとめ

BitLockerの回復キーは、PCの命綱ともいえる重要情報です。
日常的に意識しづらい項目ですが、トラブル時に慌てないように 今すぐ確認・バックアップしておきましょう。

チェックリスト状況
Microsoftアカウントに保存済み
USBメモリにも保存
印刷して保管
回復キーIDとドライブの対応をメモ

社内DXの第一歩:Power Automateで日報を自動化する方法

「毎日の日報作成が面倒」「報告フォーマットがバラバラで集計が大変」──
そんな課題を解決する第一歩が、Power Automate(旧Microsoft Flow)による日報の自動化です。
ノーコードで業務を自動化できるこのツールを使えば、日報提出を「忘れない・待たない・探さない」仕組みに変えられます。


⚙️ Power Automateとは

Power AutomateはMicrosoftが提供するクラウド型のワークフロー自動化ツールです。
Outlook、Teams、Excel、SharePointなど、Microsoft 365の各サービスと簡単に連携できます。

特徴内容
連携性Microsoft 365アプリや外部サービスとシームレスに接続
自動化対象メール送信、ファイル操作、承認フロー、通知など
難易度ノーコードで操作可能(テンプレートも豊富)
対応環境クラウド(Webブラウザ)およびデスクトップ版あり

📋 日報自動化の全体像

Power Automateを使えば、次のようなフローを構築できます。

この一連の流れを一度設定するだけで、毎日の定型作業を自動化できます。


🪜 ステップ別手順

ステップ①:入力フォームを準備

最も簡単なのは Microsoft Forms の利用です。

設定項目内容例
質問1今日の業務内容
質問2所要時間
質問3明日の予定
質問4特記事項

作成後、「応答をSharePointリストやExcel Onlineに保存」する構成にしておきます。


ステップ②:Power Automateで自動フロー作成

  1. Power Automate ポータル にアクセス

  2. 新しいフロー → 自動化されたクラウド フロー」を選択

  3. トリガーに「スケジュール – 毎日」を設定(例:17:00)

  4. 次のアクションを追加:

    • Teamsメッセージ送信:日報フォームのリンクを社員へ通知

    • Forms応答取得:入力データを収集

    • ExcelまたはSharePointへ追記:履歴管理用

    • Outlookで上司へ自動メール送信:日報集計結果を添付または本文に記載


ステップ③:テスト・動作確認

作成後は「フローテスト」から動作を確認します。
テスト結果に応じて、条件分岐(未入力者への再通知など)を追加するのもおすすめです。


🧠 応用アイデア

応用例内容
未提出者への自動リマインドForms未回答者にTeams DMを自動送信
週報・月報の自動集計Excelのテーブルをグループ単位で集約しメール送信
KPIダッシュボード連携Power BIと連携し、進捗を可視化
フォーマット自動生成Wordテンプレートに埋め込み、PDF出力して保存

💡 導入効果とメリット

観点効果
時間削減毎日の手作業入力・転記を削減(約30分/日×人数分)
品質向上報告フォーマットが統一され、抜け漏れを防止
透明性進捗がリアルタイムで可視化され、管理工数を削減
モチベーション手間の少ない仕組みで社員の心理的負担を軽減

⚠️ 導入時の注意点

  • Microsoft 365アカウントが必要(無料では一部機能制限あり)

  • 共有Excelの同時書き込み制限に注意(テーブル化で回避)

  • 過剰な通知設定は逆効果(適度な頻度に調整)


🚀 まとめ

Power Automateによる日報自動化は、**「DXの小さな一歩」**として最適なテーマです。
最初はテンプレートを活用し、少しずつ自社フローに合わせて改良していくことで、
業務効率化 × 属人化防止 × 可視化 の効果を同時に得られます。

SQL:ウィンドウ関数(OVER句)でランキング・累計を計算する

データ分析やレポート作成では、「順位付け」「累計」 のような集計処理がよく登場します。
従来はサブクエリや自己結合を使う必要がありましたが、SQLの ウィンドウ関数(OVER句) を使えば簡潔に記述できます。
この記事では、代表的な使い方と主要DBMSごとの対応状況をサンプル付きで解説します。


🧠 ウィンドウ関数とは?

ウィンドウ関数とは、集計関数に対して「範囲(ウィンドウ)」を指定できる機能です。
通常の SUM()AVG() はグループ全体を集計しますが、OVER() を使うことで「行単位の集計」も可能になります。

🔸 基本構文

関数名(列名) OVER (PARTITION BY 列名 ORDER BY 列名)
役割
PARTITION BYグループを分ける(省略可)
ORDER BY並び順を指定
ROWS BETWEEN ~範囲を細かく指定(任意)

🏅 ランキングを求める

商品の売上データを例に、売上額で順位をつけます。

📘 サンプルテーブル:sales

productcategoryamount
A飲料300
B飲料500
C食品400
D食品200
E食品700

📗 SQL例

📊 実行結果

categoryproductamountrank
飲料B5001
飲料A3002
食品E7001
食品C4002
食品D2003

ポイント

  • 同じカテゴリ内で順位を付与 (PARTITION BY category)

  • 売上が高い順に並び替え (ORDER BY amount DESC)

  • RANK() は同順位がある場合にスキップ(例:1位,1位,3位)


🔢 累計を求める

カテゴリ別に売上の累計を出してみましょう。

📗 SQL例

📊 結果

categoryproductamountrunning_total
飲料B500500
飲料A300800
食品E700700
食品C4001100
食品D2001300

ポイント

  • SUM()OVER() を組み合わせることで行ごとの累積が可能

  • ORDER BY により順序を指定できる

  • PARTITION BY を省略すると全体累計に


🧮 他の代表的なウィンドウ関数

関数説明
ROW_NUMBER()連番(重複なし)を付与
RANK()同順位があるとスキップ(例:1,1,3)
DENSE_RANK()同順位があっても連続(例:1,1,2)
NTILE(n)n等分にグループ分け(例:四分位)
LAG(col, n)n行前の値を取得
LEAD(col, n)n行後の値を取得
SUM(), AVG(), MAX(), MIN()累計・平均などの集計を行単位で

💡 応用例:前回比を計算する

前回の売上からの増減を求めたい場合は LAG() 関数を使用します。



FROM sales;
categoryproductamountprev_amountdiff
飲料B500NULLNULL
飲料A300500-200
食品E700NULLNULL
食品C400700-300
食品D200400-200

🧭 DBMS別のウィンドウ関数対応表

DBMS対応状況対応バージョン備考
Oracle Database◎ 完全対応8i 以降ウィンドウ関数発祥の実装。機能最も豊富
PostgreSQL◎ 完全対応8.4 以降PARTITION, ORDER, RANGE句など全対応
MySQL○ 部分対応8.0 以降8.0から正式対応(それ以前は非対応)
SQL Server◎ 完全対応2012 以降LAG/LEADなどもサポート
SQLite○ 部分対応3.25 以降一部関数は制限あり(NTILEなど)
MariaDB△ 限定対応10.2 以降SUMなどは対応、LAG/LEADは制限あり
IBM Db2◎ 完全対応9.7 以降分析関数として強力なサポートあり
Snowflake / BigQuery◎ 完全対応最新クラウドDWH系でもネイティブ対応

補足

  • 旧バージョンのMySQL(5.x系)ではウィンドウ関数が非対応のため、サブクエリで代替が必要。

  • PostgreSQLとOracleはROWS BETWEENなどの範囲指定も細かく制御可能。

  • BigQueryはOVER()句のほかQUALIFY句でフィルタリングが可能。


🔍 まとめ

観点内容
機能グループ単位での行ごとの集計・順位付け
主な用途累計・ランキング・前回比・順位比較
メリットサブクエリ不要・可読性向上・パフォーマンス改善
対応DBOracle, PostgreSQL, SQL Server, MySQL 8+, BigQueryなど

ウィンドウ関数は、分析SQLの最重要機能といっても過言ではありません。
集計・比較・順位などを自在に扱えるようになれば、レポート作成の幅が大きく広がります。

🧩 Oracle「ORA-01000: 最大オープン・カーソル数を超えました」対処手順

🔍 エラー概要

項目内容
エラーコードORA-01000
メッセージ最大オープン・カーソル数を超えました
発生原因開いたカーソルをクローズせずに処理を繰り返した結果、open_cursors の上限に達した
対応優先度高(アプリケーション修正・設定見直しが必要)

🧠 原因と仕組み

Oracle では、SQL 実行時に「カーソル」という内部ハンドルを使用して SQL 文を管理します。
アプリケーションが PreparedStatementResultSet を閉じずに再利用し続けると、未解放のカーソルが蓄積し、open_cursors パラメータで設定された上限値を超えた時点で ORA-01000 が発生します。


🧩 よくある原因パターン

原因詳細
JDBCのクローズ漏れResultSet や Statement を close() していない
ループ内で毎回 SQL を preparePreparedStatement を都度生成して再利用していない
コネクションプールの設定ミスコネクションが正しく解放されず、カーソルが残存
長時間実行バッチ同一セッションで大量SQLを連続実行してカーソルが累積
外部ライブラリのバグORM(MyBatis、Hibernate等)でのカーソル管理不具合

🧭 対処法(順序付き)

手順対処内容
アプリケーションコードを点検(ResultSet, Statement, Connection を確実に close)
try-with-resources 構文を使用して自動クローズ化(Java7以降推奨)
open_cursors パラメータ値を確認(show parameter open_cursors;)
必要に応じて上限を引き上げ(例:ALTER SYSTEM SET open_cursors = 1000 SCOPE=BOTH;)
v$open_cursor ビューで調査(どのSQLが残っているか確認)

🔧 調査SQL例 


💡 Javaでの修正例(try-with-resources構文)

✅ これにより、ResultSetPreparedStatementConnection が自動的にクローズされます。


⚙️ open_cursors の推奨設定値

システム規模推奨値備考
開発・検証環境300〜500検証負荷に応じて柔軟に設定
小〜中規模業務システム500〜1000通常アプリでは十分
大規模バッチ・Webサービス1000〜2000コネクションプール利用時に余裕をもたせる

🚨 注意点

  • open_cursors の値を単純に上げるだけでは根本解決になりません。
    アプリケーションでのクローズ処理修正が最優先

  • 定期的に v$open_cursor を監視することで、リークを早期発見できます。


✅ まとめ

観点内容
発生原因カーソルの未クローズや過剰生成
一時対応open_cursors の増加
根本対応コード修正(try-with-resources等)
チェック方法v$open_cursor / v$sesstat ビュー
再発防止コーディング規約・静的解析の導入

サイトの表示速度が遅い原因はこれ!画像の最適化で劇的改善

ブログなどの「サイトが重い」「表示に時間がかかる」と感じていませんか?
実は、その原因の1つに 画像の最適化不足 にあります。
どんなに優れたデザインや記事内容でも、ページの読み込みが遅いと離脱率が上がり、SEO評価も下がります。

この記事では、画像の最適化でブログの表示速度を劇的に改善する方法を、初心者でもできる手順で解説します。


🚨 表示速度が遅くなる主な原因

原因内容
画像サイズが大きい高解像度の画像をそのままアップロードしている
フォーマットが古いJPEGやPNGを多用し、WebPなどの軽量形式を使っていない
遅延読み込みが未設定ページ内の全画像を一度に読み込んでいる
キャッシュ未設定同じ画像を毎回サーバーから再取得している
CDN未使用地理的に離れたユーザーへの配信が遅れている

これらの要因を1つずつ対策すれば、PageSpeed Insightsのスコアが90点以上も狙えます。


💡 改善策①:画像を最適なサイズに圧縮する(WordPress対応)

ブログの表示速度改善において最も効果的なのが画像圧縮とリサイズです。
特にスマホ撮影画像やAI生成画像は数MBになることもあるため、1枚100KB以下を目指しましょう。


🔧 方法①:外部ツールで手動圧縮

ツール名特徴URL
TinyPNGPNG・JPEG対応。画質を保ちながら最大80%圧縮https://tinypng.com
Squoosh(Google製)WebP変換や画質比較ができるhttps://squoosh.app
ImageOptim(Mac)複数画像をドラッグ&ドロップでまとめて圧縮https://imageoptim.com

コツ:

  • 不要に大きい画像は横幅1200px程度にリサイズ

  • JPEGは写真向き、PNGは透過画像向き

  • 画質80%前後に設定すると肉眼ではほぼ違いなし


⚙️ 方法②:WordPressプラグインで自動圧縮

WordPressで作成されているサイトなら画像のアップロード時に自動圧縮してくれるプラグインを使えば、毎回手動で調整する必要がありません。
更新頻度の高いブログや、複数人で運営しているサイトに最適です。

プラグイン名主な機能無料範囲備考
EWWW Image Optimizer自動圧縮・WebP変換・既存画像一括最適化無制限(ローカル圧縮)高機能で安定
Imagify3段階圧縮(Normal/Aggressive/Ultra)+WebP対応月25MBまで無料操作が簡単
ShortPixelWebP+AVIF変換対応。画質維持率が高い月100枚まで無料自然な仕上がり
Smush一括最適化・遅延読み込み・CDN対応無料で5MB/画像定番&安心

🔹 EWWW Image Optimizer の設定例

  1. プラグインをインストールして有効化

  2. 「設定」→「EWWW Image Optimizer」を開く

  3. 「画像の自動最適化」を有効にする

  4. 「WebP変換」をONに

  5. 「既存画像を一括最適化」でライブラリ全体を処理

💡 ポイント: 初回は時間がかかりますが、次回以降は差分のみ圧縮されます。


💡 改善策②:WebP形式に変換する

WebPはGoogleが開発した次世代画像フォーマットで、JPEGより最大50%軽量化できます。
見た目の劣化もほとんどなく、主要ブラウザはすべて対応済みです。

プラグイン名主な機能
EWWW Image Optimizer自動WebP変換+フォールバック機能
Imagifyアップロード時に自動変換+圧縮
ShortPixelWebPとAVIFを両方生成

導入のメリット:

  • 軽量化によりLCP(Largest Contentful Paint)が改善

  • モバイルでの読み込み体感速度が向上

  • SEOスコアにも良い影響


💡 改善策③:遅延読み込み(Lazy Load)を有効化

ページを開いた瞬間に全画像を読み込む必要はありません。
**Lazy Load(レイジーロード)**を有効化すれば、
「ユーザーの画面に表示されたタイミングで読み込む」ようになります。

設定方法

  • WordPress 5.5以降:標準で loading="lazy" が自動付与

  • プラグイン利用例:

    • a3 Lazy Load

    • WP Rocket(有料)

    • Smush(画像圧縮+遅延読み込み対応)

💬 Lazy Loadを導入するだけで、初期ロード時間を30〜40%短縮できる場合があります。


💡 改善策④:CDNを活用する

CDN(Content Delivery Network)は、
世界中のサーバーに画像をキャッシュして、
ユーザーの位置に近いサーバーから配信します。

サービス名特徴
Cloudflare無料プランでも画像CDNが利用可能
Jetpack BoostWordPress専用CDN(Photon)対応
AWS CloudFront高速&安定。企業向けに最適

💡 改善策⑤:キャッシュプラグインを活用

画像最適化とあわせて、HTMLやCSSもキャッシュ化するとさらに高速化します。

プラグイン名特徴
LiteSpeed Cache画像圧縮・WebP・CDN・Lazy Load全部入りで高性能
WP Fastest Cacheシンプル操作で安定した効果を発揮
W3 Total Cache細かなチューニングが可能で上級者向け

🧠 Tip: LiteSpeedサーバー環境なら、LiteSpeed Cache一択でOKです。


🧪 改善効果の実例

項目最適化前最適化後改善率
トップページ画像10枚約6.2MB約1.8MB約70%削減
PageSpeed Insightsスコア63点91点+28ポイント改善
読み込み速度(3G環境)5.8秒2.1秒約3.7秒短縮

🧭 まとめ:画像最適化は“SEOとUX”の両方に効く!

  • 📉 無駄なデータ転送を削減 → 表示速度アップ

  • 📈 Core Web Vitals改善 → SEO評価向上

  • 😍 ユーザー離脱率を下げて滞在時間を増加

画像最適化=ブログの信頼性向上です。
一度設定しておけば、自動で軽量化される仕組みが完成します。
今日からあなたのブログも、「速くて軽い」理想のサイトへ変わります!

Java初心者必見!Optionalでnullチェックを安全に行う方法【サンプル付き】

Javaで避けて通れないのが「nullチェック」。
しかし、if文を多用するとコードが読みにくくなり、思わぬNullPointerExceptionが発生することもあります。
そんな悩みを解消してくれるのが Optionalクラス です。

本記事では、Optionalを使った安全でスマートなnullチェックの方法を、サンプルコード付きで分かりやすく解説します。


💡 Optionalとは?

Optionalは、Java 8で追加されたクラスで、
nullの代わりに値の有無を明示的に扱う」ためのラッパーです。

Optionalは「値がある」か「空(empty)」かを明確に区別できるため、
if (obj != null) のような古い書き方を減らせます。


✅ よくあるnullチェックの問題例

この書き方は一見安全ですが、
複数のフィールドをネストすると次のようにネスト地獄に陥ります。

→ これをスマートに書けるのがOptionalです。


🧩 Optionalを使った安全な書き方

これだけで「nullがあれば自動的にスキップ」されます。
つまり、nullチェックをネストせずに安全に値を取り出せるのです。


🔍 Optionalの主なメソッド一覧

メソッド説明使用例
of()null禁止でOptionalを作成Optional.of("Hello")
ofNullable()null許可でOptionalを作成Optional.ofNullable(obj)
isPresent()値が存在するか判定if(opt.isPresent())
ifPresent()値がある場合に処理を実行opt.ifPresent(System.out::println)
orElse()値がない場合のデフォルト値を設定opt.orElse("default")
orElseGet()遅延生成のデフォルト値opt.orElseGet(() -> "default")
orElseThrow()値がない場合に例外を投げるopt.orElseThrow()

🧠 orElseとorElseGetの違い

比較項目orElse()orElseGet()
評価タイミング常に評価値が空のときのみ評価
パフォーマンス無駄な生成が起こる場合あり必要なときだけ生成
opt.orElse(createDefault())opt.orElseGet(() -> createDefault())

💬 ポイント:
createDefault() のような重い処理を含む場合は、orElseGet()を使う方が効率的です。


🧾 サンプルコード全体

✅ 出力結果:

名前が未設定です。

🚀 Optionalを使うメリットまとめ

メリット内容
可読性向上if文のネストを削減できる
安全性向上NullPointerExceptionのリスクを軽減
関数型スタイルmap, filter, flatMapなどと組み合わせ可能
メソッドチェーン処理の流れを1行で表現できる

⚠️ 注意点:Optionalは「すべてに使う」ものではない

  • フィールド変数に使うと逆に可読性が下がる

  • シリアライズ対象(例:エンティティクラス)には不向き

  • 「戻り値専用」として使うのが基本スタイルです。


🧭 まとめ

Optionalは「nullチェックを明示的に表現する」ための便利な仕組みです。
使い方を覚えることで、より安全で読みやすいJavaコードが書けるようになります。

🪟 Windows 11:PINやパスワードを忘れたときのリセット方法

Windows 11では、MicrosoftアカウントやPINコードを使ってログインするのが一般的です。
しかし、「PINを忘れた」「パスワードを思い出せない」といったトラブルは誰にでも起こります。
この記事では、Windows 11でサインイン情報をリセットする方法をわかりやすく解説します。

この記事でわかること

  • PINやパスワードを忘れたときのリセット手順

  • ローカルアカウント・Microsoftアカウントの違い

  • トラブル時に試すべき順序と注意点


🧭 1. まず確認!どのタイプのアカウントか?

アカウント種別特徴リセット方法
MicrosoftアカウントOutlook、OneDriveなどと連携Web経由でリセット可能
ローカルアカウントPC単体で使うオフラインでパスワード変更可能
会社や学校アカウント(Azure AD)組織管理下のPC管理者またはIT部門に依頼

確認方法(通常時):
「設定」→「アカウント」→「あなたの情報」→「アカウントの種類」で判別できます。
サインインできない場合は、ログイン画面に「Microsoftアカウントでサインイン」と出ていればオンライン型です。


🔑 2. PINを忘れたときのリセット手順

✅ サインイン画面から再設定する

  1. ログイン画面で「PIN(I forgot my PIN)」をクリック

  2. Microsoftアカウントのパスワードを入力

  3. 登録しているメールまたは電話に確認コードが届く

  4. 新しいPINを設定して完了

💬 補足:PINはローカルPCにのみ保存されるため、他のデバイスには影響しません。


🌐 3. Microsoftアカウントのパスワードを忘れた場合

手順内容
スマホや別PCから https://account.live.com/password/reset にアクセス
登録メールまたは電話番号を入力
セキュリティコードを受け取り入力
新しいパスワードを設定

ポイント:

  • セキュリティ情報を事前に設定していないとリセットが難しくなります。

  • その場合、「追加情報の提供を求める」フォームから本人確認が必要です。


💻 4. ローカルアカウントのパスワードを忘れた場合

方法1:パスワードリセットディスクを使う

以前に作成したUSBキーを挿して「パスワードをリセット」を選択。
作成していない場合は、次の方法へ。

方法2:セーフモード+コマンドプロンプトで再設定

※上級者向けの手順です。

  1. 電源ボタンを押して再起動 → ログイン画面で「Shift」+「再起動」

  2. 「トラブルシューティング」→「詳細オプション」→「コマンド プロンプト」

  3. 以下を入力して新しいユーザーを作成


  1. 再起動後、「NewUser」でログインし、既存アカウントのパスワードを変更。


🧱 5. サインインオプションからPINを再設定する方法(設定から)

手順操作内容
「設定」→「アカウント」→「サインインオプション」
「PIN(Windows Hello)」を選択
「削除」→「新しいPINを設定」
再ログイン後にPINを再登録

⚠️ 一部環境では「この設定は組織によって管理されています」と表示され、管理者権限が必要な場合があります。


🧠 6. トラブルを防ぐための事前対策

対策項目内容
セキュリティ情報の登録Microsoftアカウントに電話番号・予備メールを登録
PINのバックアップメモ帳やパスワードマネージャーに控える
ローカルアカウントの予備作成管理者権限のバックアップユーザーを追加
パスワードリセットディスクの作成「コントロールパネル」→「ユーザーアカウント」から作成可能

🧩 7. どうしてもログインできない場合の最終手段

  • **リカバリドライブ(USB)**から起動し、Windowsを再インストール

  • 重要データがある場合は、別PCでドライブを読み取り救出可能

  • 組織PCの場合は、IT管理者に連絡


🚀 まとめ

状況リセット方法注意点
PINを忘れた「PINを忘れた」から再設定Microsoftアカウント認証が必要
Microsoftパスワードを忘れたWebでリセットセキュリティ情報が必須
ローカルアカウントのパスワードを忘れたセーフモードや別ユーザー上級者向け手順

🧠 Pythonで学ぶ画像認識入門:TensorFlowとKerasで手書き数字を判定する方法(5) ~複数の自作画像を一括で認識~

前回

🧠 Pythonで学ぶ画像認識入門:TensorFlowとKerasで手書き数字を判定する方法(4) ~学習済みモデルで自作画像を認識~

の記事では、学習済みモデルを使って「1枚の手書き数字画像」を判定しました。
今回はさらに発展して、フォルダ内にある複数の画像を一括で認識してみましょう。

これにより、手書きで作成した「0〜9」の数字画像をまとめてテストできるようになります。


🧩 動作環境(共通)

項目バージョン / ツール
OSWindows 11 Pro 24H2
Python3.12.6
pip24.2
エディタPowerShell / VS Code
ライブラリpandas 2.x / matplotlib 3.x / openpyxl 3.x


📁 ステップ①:フォルダ構成を準備

まず、テスト用フォルダを作成します。

各画像は 白背景 × 黒または青文字、中央寄せ、28×28ピクセル推奨です。


🧠 ステップ②:複数画像を一括認識するスクリプト

ファイル名:predict_batch.py

内容:


⚙️ ステップ③:実行方法

仮想環境を有効化して、次を実行します:


🧾 ステップ④:出力結果(例)

コンソール出力例:

グラフ表示:

  • 横一列に数字画像が並び、各画像の下にAIの判定結果が表示されます

  • 一目でどの画像をどの数字と認識したか分かります


📊 ステップ⑤:結果と考察

項目内容
処理対象フォルダ内の全画像(png/jpg)を自動スキャン
推論処理load_modelでCNNモデルを再利用し、一括predictを実施
表示形式コンソール出力+matplotlibで可視化
精度1枚ずつ推論と同等(約99%)を維持
応用例書類や帳票の一括認識、データセットの一括評価など
考察単一推論を拡張してバッチ処理化。フォルダ単位で実行できるため自動化が容易


💡 発展ポイント

テーマ内容
結果をCSV出力pandas.DataFrame(results).to_csv('result.csv', index=False)
サブフォルダ対応os.walk() を使えば階層フォルダも処理可能
推論速度UPGPU環境なら処理時間が大幅短縮
異常画像の検出サイズやフォーマットが不正な画像をスキップ処理可能

✅ まとめ

本記事では、学習済みモデルを使って複数の手書き数字画像をまとめて判定しました。
フォルダ単位で一括処理できるため、データテストやAIモデルの精度検証にも最適です。

次回は、

🧠 (6) 判定結果をCSV出力し、正解データと比較して精度を分析
として、「自作データセットの評価編」に進みます。

SQL:NOT IN と NOT EXISTS の違いとパフォーマンス比較

SQLでサブクエリを使って除外条件を指定する際に利用される「NOT IN」と「NOT EXISTS」。両者の動作の違いやNULLの扱い、パフォーマンス差を実例付きで徹底解説します。

EXISTSANSI SQL(国際標準SQL)に含まれる構文 のため、
ほぼすべてのリレーショナルデータベースで利用できます。
古いバージョンの一部DBを除き、標準構文として移植性が非常に高いのが特徴です。

1. NOT IN と NOT EXISTS の基本構文

構文例説明
NOT INSELECT * FROM A WHERE ID NOT IN (SELECT ID FROM B);サブクエリの結果に含まれないIDを抽出
NOT EXISTSSELECT * FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE A.ID = B.ID);Bに同じIDが存在しない場合のみAを取得

ポイント:

  • 両者とも「除外」目的だが、評価タイミングとNULL処理が異なる。


2. 動作の違い(NULLの扱いに注目)

条件NOT INの結果NOT EXISTSの結果
サブクエリにNULLが含まれるすべての行が除外される正常に比較できる
サブクエリが空(0件)全件取得される全件取得される

理由:
NOT IN は内部的に「A.ID <> B.ID」を繰り返すような処理を行うため、NULLが含まれると比較結果がUNKNOWNとなり、全体が評価されなくなる。
一方、NOT EXISTS行ごとに存在チェックを行うため、NULLの影響を受けない。


3. 実行結果の比較例

以下の例を見てみましょう。

テーブルA

ID NAME
1 田中
2 鈴木
3 佐藤

テーブルB

ID
1
NULL

4. パフォーマンスの違い

比較項目NOT INNOT EXISTS
NULLの影響受ける受けない
実行計画(最適化)インデックス利用されにくい場合あり最適化されやすい
大量データ時の効率遅くなるケースありより安定して高速
Oracleの最適化傾向半結合(Anti-Join)に変換されることあり同様に最適化される

実測例(概略)

件数NOT IN所要時間NOT EXISTS所要時間
1万件0.25秒0.20秒
10万件3.1秒1.8秒

※ 実測環境:Oracle 19c、インデックスあり、CPU 4コア相当


5. どちらを使うべきか

条件推奨句
サブクエリにNULLが含まれる可能性ありNOT EXISTS
データが小規模でNULLなしどちらでも可
大規模データ・実行計画を重視NOT EXISTS(推奨)
可読性を優先NOT EXISTS のほうが誤動作が少ない

6. まとめ

観点内容
ANSI SQL対応○(どのDBでも使用可能)
実行パフォーマンスDBごとに最適化される(MySQL 8以降で特に改善)
推奨度高い(NOT INより安全で移植性が高い)
注意点MySQL 5.x 以前では最適化が弱いケースがある

✔ 結論:
除外条件を指定する場合は、基本的に「NOT EXISTS」を使う方が安全で高速です。
ただし、NULLが確実に存在しないことが保証される小規模データではNOT INも選択肢になります。