「PowerShell」タグアーカイブ

PowerShellでスクリプトの絶対パス・実行フォルダを取得する方法

PowerShellスクリプトを書く際、
「実行中のスクリプト自身のパス」や
「そのスクリプトが置かれているフォルダ」を取得したいケースはよくあります。

特に以下のようなケースでは必須です:

  • ログファイルをスクリプトと同じフォルダに出力したい

  • スクリプトと同階層にある設定ファイル(config.json / .ini / CSV など)を読み込みたい

  • 相対パスではなく絶対パスで処理したい

  • バッチ(.cmd)から起動される場合でも確実に処理したい

この記事では、PowerShellでスクリプトの絶対パスとフォルダを取得する方法をわかりやすくまとめます。


🔎 実行中スクリプトの絶対パスを取得する

📌 解説

  • $MyInvocation.MyCommand.Path現在実行中の .ps1 ファイルの絶対パスを返します

  • エイリアス、コマンドライン引数、バッチ起動にも対応


📁 スクリプトの実行フォルダ(ディレクトリ)を取得する

または、もっと便利な $PSScriptRoot を使う方法:


📌 $PSScriptRoot の特徴

方法違い
$PSScriptRootPowerShell v3以降で利用可能。モジュールや関数内でも使用OK
Split-Path $MyInvocation.MyCommand.Pathv2でも利用可能。互換性が必要な場合に有効

💡 ログや設定ファイルを同じフォルダに出力する例


💡 設定ファイルの読み込み例(同階層のconfig.jsonを読む)


🚀 バッチファイルから実行する場合でも問題なし

PowerShell側で $PSScriptRoot$MyInvocation.MyCommand.Path を使っていれば、
バッチ起動であっても正しくスクリプト配置パスを取得可能です。


📌 まとめ

目的推奨コード
スクリプトの絶対パスを取得$MyInvocation.MyCommand.Path
スクリプトのフォルダを取得$PSScriptRoot または Split-Path
同階層へのファイル出力Join-Path $PSScriptRoot

PowerShellでは、パスを固定せずスクリプトの実行場所から動的に処理することが重要です。
設定ファイルの読み込み・ログ出力・ファイル操作まで柔軟に対応できるようになります。

PowerShellのバージョンはどこで確認できる?コマンド一覧と違いを解説

PowerShellでは、環境によって利用できるコマンドや機能が異なるため、自分のPowerShellが何バージョンなのかを正確に把握することは非常に重要です。
特に、**Windows PowerShell(5.1)PowerShell 7(PowerShell Core)**は内部構造が異なるため、確認方法を知らないと混乱しがちです。

この記事では、

  • PowerShellのバージョン確認方法の一覧

  • Windows PowerShell と PowerShell 7 の違い

  • どの方法で確認するのがベストか
    をわかりやすく解説します。


✅ まず結論:最も確実なバージョン確認方法

PowerShellのバージョンを確認する最も確実なコマンドは以下です。

実行すると、メジャーバージョンやクライアント情報が一覧で表示されます。


1. PowerShellのバージョン確認方法(コマンド一覧)

ここでは、実務で必ず使うコマンドを重要度順に解説します。


$PSVersionTable(基本&最重要)

表示される主な項目:

項目説明
PSVersionPowerShellのメジャー/マイナーバージョン
PSEditionDesktop(Windows PowerShell) / Core(PowerShell 6/7)
GitCommitIdPowerShell Core でのビルド情報
OS実行しているOS情報
PlatformWin32NT / Unix

もっとも正確な情報が得られ、Windows PowerShell と PowerShell 7 の判別も可能です。


Get-Host を使う方法(ホストアプリ情報)

Get-Host

HostVersion の欄にバージョンが出ます。

ただし、PowerShell ISE や Visual Studio Code など ホストアプリによって値が変わる場合があるため、バージョン判定としては不正確 です。

基本的には $PSVersionTable の方が推奨。


$Host.Version の省略形

Get-Host のバージョンだけを直接取り出す書き方です。
こちらもあくまで ホストアプリのバージョンなので注意。


■ PowerShell 7 以上限定:pwsh -v

PowerShell 7 を使用している場合のみ利用できます。

Windows PowerShell(5.1)では動作しません。


■ コンソールのタイトルバーで確認(GUI的な方法)

PowerShellを起動したとき、タイトルバーに次のような表示が出る場合があります。

  • Windows PowerShell 5.1

  • PowerShell 7.4.0

ただし環境によって表示が異なるため、確実ではない方法です。


2. Windows PowerShell(5.1)と PowerShell 7 の違い

PowerShellのバージョン確認が重要な理由は、5.1 と 7 系で仕様が大きく異なるためです。


【比較表】Windows PowerShell と PowerShell 7 の主な違い

項目Windows PowerShell 5.1PowerShell 7.x
実行ファイルpowershell.exepwsh.exe
基盤.NET Framework.NET 6/7(Core)
対応OSWindowsのみWindows / macOS / Linux
コマンドの互換性高い一部非互換あり
モジュール古いWindows専用モジュールが多い新世代のPowerShell向け

特に、

  • HULFTのスクリプト

  • ActiveDirectoryモジュール

  • Windows専用モジュール

などを扱う場合は、5.1でないと動かないケースが多いため注意が必要です。


3. どの確認方法を使えばいい?(実務向けまとめ)

目的推奨コマンド
バージョンの正確な取得$PSVersionTable
Core か Desktop か判断$PSVersionTable.PSEdition
PowerShell 7 かだけを確認pwsh -v(PowerShell 7の場合)
ホスト環境の確認Get-Host

4. よくある質問(FAQ)


■ Q. 自分のPCに PowerShell 5.1 と 7 が両方入っているのは普通?

はい、普通です。
Windows標準は5.1で、最新版の7は別途インストールされます。


■ Q. どちらを使うべき?

  • Windows管理タスクが多い
     → Windows PowerShell(5.1)

  • クロスプラットフォーム / 最新のPowerShellを使いたい
     → PowerShell 7


■ Q. PowerShellのバージョンアップはどうする?

PowerShell 7 は winget でアップデート可能。


まとめ

PowerShellのバージョン確認は、環境差異によるトラブルを避けるための最重要ポイントです。

🔍 今日覚えておくべき3つ:

  1. 基本は $PSVersionTable を使う

  2. PowerShell 5.1 と 7 では機能が大きく異なる

  3. 用途に応じて使うバージョンを選ぶ

この知識があれば、スクリプト実行時の「動かない…なぜ?」を大幅に減らせます。

PowerShellで数十万行のCSVを高速処理するベストプラクティス

PowerShellで数十万行以上のCSVを扱うと、
「読み込みが遅い」「メモリが一気に膨れる」「処理が固まったように見える」
といった問題が発生しがちです。

実はこれ、PowerShellのCSV処理の仕組みによる“あるある”で、
正しい書き方をすれば劇的に高速化できます。

この記事では、現場でも使われている 高速処理テクニック・実装例・注意点 をまとめます。


✔ なぜPowerShellはCSV処理が遅くなるのか

PowerShellの Import-Csv は便利ですが…

  • 全行を一度にメモリへ展開する

  • オブジェクト化のコストが高い

  • 数十万件を超えると数百MB〜GB級のメモリ使用

という特徴があります。

そのため、以下のような書き方は最も遅くなります。


✔ 高速化のポイントは「逐次読み込み」と「Stream処理」

PowerShellで数十万行を高速に処理する場合の最重要ポイントは以下。

💡 高速化の基本

  1. Import-Csv を使わず StreamReader を使う

  2. 1行ずつ処理して不要になったデータは捨てる

  3. Select-Object, Where-Object をループで使わない

  4. 型変換を最小限にする

  5. 出力は StringBuilder にまとめて最後に書き込む


✔ ベストプラクティス①:StreamReaderで逐次処理

最も高速でメモリ効率も良い方法です。

✔ 特徴

  • Import-Csv ではなく Split で直接取得 → 超高速

  • メモリ使用量は常に一定

  • 数百万行でも余裕


✔ ベストプラクティス②:Import-Csv を使う場合の高速化

「やっぱりオブジェクトで扱いたい」という場合はこちら。

✔ 注意点

  • ForEach-Object -ParallelPowerShell 7 以降限定

  • 並列化は CPUコア数に依存

  • メモリ使用量は多め


✔ ベストプラクティス③:Select-Object / Where-Object を避ける

以下は遅くなりがち:

理由:すべての行をオブジェクトとして保持してしまう。

💡 改善

または、最速は StreamReader + Split


✔ ベストプラクティス④:StringBuilderで出力バッファを作る

行ごとに Add-Content を実行すると激遅になります。

✔ StringBuilderを使う(高速)


✔ ベストプラクティス⑤:PowerShell 7 を使う

PowerShell 5.1 から PowerShell 7 に変えるだけで速度が倍以上になるケースが多いです。

理由

  • .NET Core ベースで高速化

  • ForEach-Object が最適化

  • Parallel 処理対応


✔ 実際の処理速度比較(目安)

手法100万行の処理メモリ使用量
Import-Csv → ループ数十秒〜数分数百MB〜1GB超
Import-Csv -Parallel10〜40秒多め
StreamReader + Split5〜15秒数MB

※ PCスペックにより変動。


✔ まとめ:最速は「StreamReader+Splitによる逐次処理」

PowerShellで数十万行のCSVを高速処理するなら

✔ 最適解

  1. 逐次読み込み(ストリーム処理)

  2. 行ごとにSplitして必要な列だけ触る

  3. StringBuilderでまとめて出力する

  4. PowerShell 7 ならParallel化も可能

業務バッチで使う場合は、
StreamReader方式が最も安全で高速です。

実際の現場でも「メモリ溢れ対策」「速度改善」で最も採用されています。

PowerShellの構文エラー原因TOP3:全角引用符・NBSP・BOM

🧩 PowerShellの構文エラー原因TOP3:全角引用符・NBSP・BOM

PowerShellスクリプトを実行したときに、
UnexpectedToken」や「文字列に終端記号がありません」という赤エラーが出て動かない——。
そんな経験はありませんか?

実はこれらの構文エラー、文法ミスではなく「文字の種類」 が原因で起きていることが非常に多いです。
特に日本語環境では、以下の3つがPowerShellを混乱させる典型的なトラブル要因です。


🥇 第1位:全角引用符(“ ”、” ”)

最も多いのがこれ。
WordやWebサイト、ブログなどからコードをコピーした際に、
「普通のダブルクォート(")」が「全角のスマートクォート()」に変わってしまう現象です。

PowerShellはこれを文字列の区切りとして認識できません
そのため以下のようなエラーが出ます。

式またはステートメントのトークン '営業企画部' を使用できません。

🔧 対処法:

  • 全角の “ ” を半角の ” ” に置換

  • コードエディタで「スマートクォート自動変換」をOFFにする


🥈 第2位:NBSP(ノーブレークスペース)

見た目は半角スペースですが、内部的には U+00A0 という別の文字です。
HTMLページやブログからコピーしたときに非常によく混入します。

PowerShell上では、
「半角スペースとして解釈されない」ため構文が崩れ、
UnexpectedToken などの不可解なエラーが出ます。

🔧 対処法:

  • サクラエディタやVS Codeで「不可視文字表示」をONにする

  • 以下のコマンドでNBSPやゼロ幅文字を除去可能:


🥉 第3位:BOM付きUTF-8で保存されている

UTF-8自体はPowerShellでも推奨されていますが、
「BOM(Byte Order Mark)」付きUTF-8 で保存された .ps1
スクリプトの先頭に見えない U+FEFF が混入し、これが原因で構文エラーになる場合があります。

🔧 対処法:

  • ファイルを UTF-8(BOMなし) で保存

  • サクラエディタやVS Codeで「保存形式:UTF-8(BOMなし)」を明示的に選択


✅ エラーを防ぐためのおすすめ設定

PowerShellのスクリプトを書くときは、以下の設定を徹底すると安心です。

・エンコード:UTF-8(BOMなし)
・行末コード:CRLF
・クォート文字:必ず半角(" または ')
・不可視文字表示:ON
・自動変換(スマートクォート、全角変換など):OFF

🧰 トラブルを一掃するワンライナー

既におかしな文字が混入している場合は、
次のPowerShellコマンドでクリーンアップできます。

これで、全角クォート・NBSP・BOMをすべて除去できます。


🚀 まとめ

PowerShellの構文エラーの多くは「コードが壊れている」のではなく、
文字の種類が混ざっているだけ です。

  • “全角クォート” → 半角 " " に直す

  • “NBSP” → 普通のスペースに置換

  • “BOM付きUTF-8” → BOMなしに保存

この3点を意識するだけで、
もう意味不明な赤いエラーに悩まされることはありません。

PowerShellでExcel操作を自動化!セル入力・保存・集計まで一括処理

日々の業務でExcelを開いてデータ入力・集計・保存を繰り返していませんか?
PowerShellを使えば、Excelアプリを自動で起動し、セル操作や保存、集計まで一括処理できます。
この記事では、PowerShell × Excel COMオブジェクトを活用して、実際に自動化する方法を解説します。


1. Excelアプリを起動してシートを開く

まずはExcelをPowerShellから操作する基本構文です。

このスクリプトを実行すると、Excelが自動的に起動して新規ブックが作成されます。


2. セルへデータを自動入力する

次に、セルに値を入力してみましょう。


3. 合計を自動で計算する(SUM関数)

PowerShellからExcel関数を呼び出すことも可能です。

これで「B2:B3」の合計が自動的に計算されます。


4. ファイルを自動保存する

作成したブックを任意の場所に保存します。


5. 応用:既存ファイルを開いて集計処理する

既にあるExcelファイルの集計を自動で行うこともできます。


まとめ

PowerShellを使えば、Excelの単純作業を一瞬で自動化できます。
日次レポートや集計処理などをバッチ化しておけば、毎日のExcel作業をゼロにすることも可能です。

管理者必見!PowerShellでシステム情報・ハードウェア情報を一括取得するスクリプト

システム管理者や情シス担当者にとって、複数台のPCやサーバーのハードウェア情報・OS情報を一括で把握することは欠かせません。
PowerShellを使えば、標準コマンドレットだけでCPU・メモリ・ディスク・ネットワーク・OSバージョンなどをまとめて取得できます。

この記事では、実用的な一括取得スクリプト例と出力方法を詳しく解説します。


🧠 PowerShellで取得できる主なシステム情報

PowerShellでは以下のような情報を簡単に取得できます。

項目コマンドレット内容
OS情報Get-CimInstance Win32_OperatingSystemバージョン、インストール日、ビルド番号
CPU情報Get-CimInstance Win32_ProcessorCPU名、コア数、スレッド数、クロック周波数
メモリ情報Get-CimInstance Win32_PhysicalMemoryメモリ容量、スロット数、メーカー
ディスク情報Get-CimInstance Win32_LogicalDiskドライブレター、空き容量、総容量
ネットワーク情報Get-CimInstance Win32_NetworkAdapterConfigurationIPアドレス、MACアドレス
BIOS情報Get-CimInstance Win32_BIOSBIOSバージョン、リリース日

💻 システム情報を一括取得するスクリプト例

以下のスクリプトをPowerShellに保存して実行すると、主要なハードウェア情報をまとめて取得できます。


🗂 結果をCSVで出力する場合

複数台の端末を管理する場合は、CSVファイルに出力しておくと便利です。


⚙️ リモートPCから取得する方法

Active Directory環境などで、他の端末の情報も取得したい場合は次のようにします。

PowerShellリモーティングを有効化すれば、ドメイン内の端末を横断的に管理できます。
(事前に Enable-PSRemoting -Force を実行しておく必要があります。)


🔒 実行時の注意点

  • 管理者権限でPowerShellを起動する必要があります。

  • 一部の情報(BIOS・ネットワーク)取得にはセキュリティ制限がかかる場合があります。

  • WinRM通信がブロックされている環境では、リモート取得が失敗する場合があります。


✅ まとめ

要点内容
スクリプト1本で主要なシステム情報を取得可能OS・CPU・メモリ・ディスク・ネットワーク・BIOS
CSV出力で資産管理にも活用できる複数端末の一覧作成に最適
リモートPC情報も取得可能Get-CimInstance -ComputerNameを活用

PowerShellを使えば、GUI操作より数倍早く正確に情報を収集できます。
システム管理の自動化・標準化の第一歩として、ぜひこのスクリプトを活用してみてください。

PowerShellでリモートサーバーを操作!Enter-PSSessionとInvoke-Commandの使い方

リモートサーバーをPowerShellで操作したいけど、何を使えばいいの?
そんな疑問に答えるのが、Enter-PSSessionInvoke-Command の2つです。

どちらもPowerShellのリモート管理コマンドですが、使いどころが異なります。

コマンド用途動作
Enter-PSSession1台のサーバーに対して対話的に操作SSHのように「接続してその場でコマンド実行」
Invoke-Command複数サーバーに対して一括実行可能コマンドを送って結果を受け取る

この記事では、初心者でも確実に理解できる具体例と、業務で使えるセキュアな設定方法まで解説します。


事前準備:WinRMが有効か確認

PowerShellリモートを使うには、WinRM(Windows Remote Management) が有効である必要があります。

WinRM状態確認

有効化(必要な場合)


1. Enter-PSSession:対話形式でリモート接続

接続コマンド

  • server01 → 接続先ホスト名(IPでも可)

  • Get-Credential → ユーザー名とパスワード入力画面を出す

実行例

切断

用途例

  • 単体サーバーの手動確認作業

  • ログ確認、サービス再起動テストなど


2. Invoke-Command:コマンドをリモート実行

単一サーバーへコマンド実行

複数サーバーへまとめて実行

実行結果を変数で受け取る

用途例

  • 定期メンテ(サービス状態取得、ログ収集)

  • 複数サーバーの一括設定変更


セキュアに使う:認証方法のポイント

資格情報を変数に保持

HTTPS通信を利用する場合

管理セキュリティポリシーが厳しい企業ネットワークではHTTPSリモート設定が推奨される場合もあります。


よくあるエラーと対処

エラー原因対処
WinRM cannot process the requestWinRM無効Enable-PSRemoting -Force
Access is denied権限不足管理者権限or適切なアカウント
Kerberos 認証エラーWorkgroup環境TrustedHosts設定 or HTTPS

TrustedHosts 例:


実務Tips:こんな時に便利

✅ 監視スクリプト
✅ バッチ反映の自動化
✅ 管理サーバーから20台へ一括処理
✅ 休日バッチメンテの効率化

PowerShellリモートは、定型作業の自動化サーバー負荷・ログ確認の省力化に非常に強力です。


まとめ

使い分け特徴
Enter-PSSession1台に接続して手動操作
Invoke-Command複数サーバーに対して一括命令

まずはEnter-PSSessionで慣れ、
次にInvoke-Commandで自動化へ進みましょう。

PowerShellスクリプトの基本構文まとめ:変数・条件分岐・ループを完全マスター

Windowsの自動化やサーバ運用で大活躍するPowerShell。
「使い始めたいけど、基本構文がよく分からない…」という人向けに、この記事ではPowerShellの基礎構文を一気に整理します。

以下の内容を押さえることで、シンプルなスクリプトはすぐ書けるレベルになります。


✅ PowerShellスクリプトの基本ルール

内容説明
拡張子.ps1
コメント# コメント
大文字小文字区別しない (例: $Value と $value は同じ)
変数宣言$変数名 = 値
実行ポリシー変更Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

💡 セキュリティのため、実行ポリシー設定は理解したうえで操作しましょう。


🧮 変数の基本 

ポイント

  • $ を付けて変数を宣言

  • 文字列中で変数展開できる


🔁 配列(リスト) 


📦 ハッシュテーブル(連想配列) 


✅ 条件分岐(If / ElseIf / Else) 

よく使う比較演算子

演算子意味
-eq等しい
-ne等しくない
-gtより大きい
-ltより小さい
-ge以上
-le以下

🔁 ループ制御

for文

foreach文 


🔄 while / do-while 


📦 関数の定義 


📎 パイプラインとフィルタ

コマンド説明
Get-Processプロセス一覧取得
Where-Object条件絞り込み
Sort-Object並び替え
Select-Object指定列のみ取得

💡 実用例:ファイル一覧を取得して出力


🎯 まとめ

PowerShellの基本構文は次の通り:

  • ✅ 変数 $var = 値

  • ✅ 条件分岐 if () {}

  • ✅ ループ for / foreach / while

  • ✅ ハッシュテーブル @{ Name = "A" }

  • ✅ 関数 function X(){}

  • ✅ パイプライン |

まずは小さな処理から試し、Windows作業をどんどん自動化していきましょう!


❓ よくある質問(FAQ)

Q. PowerShell ISEとWindows Terminalどっち使うべき?
A. 基本は Windows Terminal + VS Code を推奨。補完機能が強いです。

Q. 管理者権限はいつ必要?
A. ファイル操作・レジストリ操作・サービス制御等で必要になります。

PowerShell正規表現攻略ガイド:文字列操作が劇的に速くなる実践技

PowerShellでのテキスト処理で、もっと効率良く抽出・置換したいと思ったことはありませんか?
そんなときに威力を発揮するのが**正規表現(Regex)**です。

ログ解析、ファイル名整形、データ抽出、フォーマット変換など、
業務効率が劇的に変わる超重要スキルです。

本記事では、PowerShell × 正規表現の基本から実務で使えるテクニックまで徹底解説します。


正規表現の基本:PowerShellでの使い方

マッチ判定 -match

否定パターン

文字列からValue取得

$matches[1] にキャプチャした文字列が入る


よく使う正規表現パターン

用途パターン
数字\d+1234
英字[A-Za-z]+UserName
メール\w+@\w+\.\w+test@mail.com
日付\d{4}/\d{2}/\d{2}2025/01/10
任意の文字列.*?全部

実践例:ログからIPアドレスだけ抽出

出力


置換:-replaceでデータ整形

電話番号のハイフン削除

メールのドメインを隠す


ファイル名の一括リネーム

大量ファイルの命名変換で超便利


キャプチャした値を使った置換

日付フォーマット変換(YYYY/MM/DD → YYYY-MM-DD)


否定・条件抽出の例

IP行だけ抽出

エラー行だけ取得

“Warning”を含まない行


欲しいパターンはGitHub Copilotじゃなく、正規表現辞書を使え!

以下のキーワードで検索すると精度高い例が見つかります👇


まとめ

機能PowerShellでのコマンド
マッチ判定-match / -notmatch
抽出$matches[]
検索Select-String
置換-replace
ファイル検索Get-ChildItem + Select-String

正規表現を使いこなすと、
データ処理・ログ解析・自動化スクリプトが一気にプロレベルになります。

PowerShellでログ収集とバックアップを自動化する実践スクリプト

システム運用や開発現場では、ログ収集やバックアップ作業を「手動で行う」ケースがまだ多く残っています。しかし、PowerShellを使えばこれらを自動化し、毎日の定型作業を一気に効率化できます。

この記事では、**「ログを自動収集してバックアップするPowerShellスクリプト」**を実例付きで紹介します。
スクリプトはWindows環境でそのまま動作し、日次・週次の定期ジョブとしても活用可能です。


⚙️ 実践スクリプト:ログ収集&バックアップ自動化

以下のスクリプトは、

  • ログフォルダをスキャン

  • 日付別フォルダにコピー

  • 古いバックアップを自動削除
    する一連の処理を行います。


📦 処理の流れ

処理内容
① 初期設定ログフォルダ・バックアップフォルダ・保持日数を設定
② 日付フォルダ作成yyyyMMdd形式で新しいバックアップフォルダを作成
③ ログコピー対象フォルダからすべての.logファイルをコピー
④ 古いフォルダ削除30日より古いフォルダを自動削除

🕒 定期実行する方法(Windows タスクスケジューラ)

  1. Windows検索バーで「タスクスケジューラ」と入力して起動

  2. 「基本タスクの作成」→ タスク名を「ログバックアップ」とする

  3. 「毎日」または「毎週」を選択

  4. 「操作」で「プログラムの開始」を選択し、以下を指定

    Program/script: powershell.exe
    Add arguments: -File "D:\Scripts\log_backup.ps1"
  5. 完了後、右クリック → 「プロパティ」 → 「最上位の特権で実行する」を有効にする


💡 応用ポイント

  • ZIP圧縮も追加可能Compress-Archiveを使ってバックアップサイズを削減

  • ログローテーション:ファイルサイズや日付で自動的にローテーションするよう拡張可能

  • メール通知:バックアップ完了後にSend-MailMessageで報告を送信可能

  • CSVやJSON対応:ログ形式が異なる場合もGet-ContentConvertFrom-Jsonなどで加工可能


🚀 まとめ

PowerShellを使えば、GUI操作では面倒なログバックアップを簡潔に自動化できます。
1日1回の定期タスクに登録するだけで、手動の手間を大幅削減。
運用の安定化にもつながります。

ポイント:小さなスクリプトでも「業務時間を削減」できるのがPowerShellの強みです。