デジタルデータであれ紙資料であれ、業務上の資料を探す時間に膨大な時間を費やしている調査結果は枚挙にいとまがない。いわれてみると、ワークフローなど業務手続きの資料から人や会社名、メールまでツールを問わず何かを探す行為が毎日必ず入ってくる。生成AIによって随分と楽になった感もあるが、業務では使えるデータが制限されたりやはりまだ、平気で嘘を言うことがあったり(ちゃんと謝ってくれるから気にならないのではあるが)である。
検索エンジンがWebサイトを効率的に探せるようになったことでインターネットが便利になったが、AIだってとても根幹な部分では検索しているのである。そして検索を支える技術のひとつにgrepなどの検索コマンドがある。ファイルのなかのテキストを拾って該当箇所を一覧できる形で表示してくれるこのコマンドは、上記のようにローカル環境にある"何かを探す"ためにはとても強力である。
Windows環境のPowerShell 7.4には文字列とファイル内のテキストを検索するSelect-Stringが備わる。grep同様の機能をPowerShell環境に提供するものだが、ファイル取得の
Get-ChildItem -Path "." -File | Select-String -Pattern "マイクロソフト"
とするとマッチする余分な情報で埋め尽くされ、時間もかかるのでそのままでは実用的ではない。
ファイル名と該当箇所と行番号を表示できるように以下のようにカスタマイズして、任意のファイル名.ps1として保存。
Get-ChildItem -Path "." -File |
Select-String -Pattern "マイクロソフト" |
Select-Object @{Name="FileName"; Expression={$_.Path}},
@{Name="LineNumber"; Expression={$_.LineNumber}},
@{Name="MatchedText"; Expression={$_.Line}} |
Format-Table -AutoSizeyoh
PowerShellで./〇〇.ps1と実行すると検索結果が表示される。
PowerShellやWSLなどのコマンドを組み立ててスクリプトで実行するのは、なかなかハードルが高いという場合にはgrep機能を持つテキストエディタの活用がとても効果的だ。テキストエディター秀丸の場合、検索メニューの一番下に「grepの実行」がある。実行ダイアログの設定で検索するファイルを*.*、検索するフォルダを決められた場所(よくないことだが筆者の場合デスクトップに・・・)にピン留めしておくことがポイント。データでよく使われるCSVなども網羅し、瞬時に別のテキストエディタにgrepしたデータが色反転して高速表示される。
生成AIにおいても最終的にはデータの質であるということだが、自身がストックするデータの検索性においても同様のことがいえるのであろう。百ファイルもあれば人力手動ではファイルの内容から探し出すのは至難なほど時間がかかる。そんなときにはgrepな検索機能がとても効果的であると改めて思った。