読者です 読者をやめる 読者になる 読者になる

Windows PowerShell, WinFS, IQueryable

.NET PowerShell Vista

Windows PowerShell

@IT より.Monad 記事の改訂版.

ブックマークコメントを見ても概ね好評な模様.

自分が PowerShell で記事を書くと「関数型言語とは」とか「Monadとは」とかにページを割いてグダグダになりそうな気がするだけに,「まずどうやって使い始めるか」「何ができるのか」「何が便利か」をきちんと説明できているこの記事はやっぱり偉いかなと.

WinFS

んで,はてなブックマーク経由でまわっているとおもしろい話が.
『ラシウラ』より.

MacはシェルにObject指向プログラミングを組み込んだけど、VistaはシェルにOOに関数型の汎用コマンド演算体系(Monad)を組み込んだ感じだ。

これで任意のコマンドから利用できるデータソースたりうるWinFSがないのは正直もったいないと思った。これは、個別にコマンドを実装すらいいって話なのだろうけど、そうなるとfilterとデータ型は相互作用的に広がりることは起こらないだろう。結局、いままでのアプリと同じく、テキストやwell-known XMLといった共通フォーマットでない限りは、データとその処理は一体で一緒に普及させるしかなくなる。

これを読んでなんとなくセマンティックウェブを巡るいつもの議論を思い出したり.
http://slashdot.jp/article.pl?sid=06/07/20/1845249
もし仮に WinFS が登場していたとしても,「メタデータスキーマは魅力的か」「そもそもメタデータをみんなに入力してもらえるか?」という点では,やっぱり越えるべきハードルはまだまだあるんじゃないかなと.
例えば手元の PowerPoint 2003 で,ファイルのプロパティから「ユーザー設定」というタブを選ぶと,実に多くのメタデータが設定可能でびっくりします.

  • グループ
  • タイピスト
  • プロジェクト
  • メールボックス
  • リファレンス
  • リンク元
  • 宛先
  • 確認者
  • 完了日
  • 記録者
  • 記録日
  • 言語
  • 顧客
  • 行先
  • 差出人
  • 事業所
  • 事業部
  • 所有者
  • 進捗状況
  • 電話番号
  • 内容
  • 配置
  • 発行側
  • 部署
  • 編集者
  • 目的

さて,遙か以前から存在する Office のこれらのメタデータですが,一体どの程度利用実績があるのでしょうか?
ひとつは UI の問題がありそうです.そもそもプロパティのこんな奥底に入力インターフェイスを用意して,ちゃんと入力してくれる人がいるかどうか.
もうひとつは,そもそもこのスキーマが魅力的か? というものでしょう.まあ意識的に使えばいくつかのメタデータはそのまま使えそうな気はします.しかし,「汎用的なオフィス文章用のテーブルを設計してください」というお題でみて,このテーブル設計はどうなんでしょうかね?



結局のところ,先ほどの /.J のトピックで紹介されていた Google の主張のように,データごとにカスタムなロジックを用意するという場当たり的な方法の方が,今現在は勢いがあるという印象を受けます.Windows のデスクトップ検索もこの方向です.IFilter という以前から存在した仕組みを利用し,PDF,Excelファイルといった各データフォーマットごとにデータ抽出コードを作成する方法で,利用者が満足するならそれでいい,と.
そんな中,万能データストレージの計画が凍結され,代わりに万能変換フィルタとしての LINQ が生き残っているのはまあそれ程不思議でもないのかもしれません.

IQueryable

某スレで名無しさん♯が紹介されていたこれなどは,既存のデータをクエリ可能オブジェクトに見せかける例として非常に興味深いものです.

IQueryable インターフェイスと,Expression Tree によって,Amazon の Web Service をクエリ可能ソースにしてしまうというサンプルです.
PowerShell の Custom Provider がどこまでできるかは調べていませんが,LINQ が遅延評価を前面に押し出しているのは明らかで,単なるパイプ処理とは一線を画しています.

PowerShell, WF, LINQ

『ラシウラ』より.

現状はまだそんなにフィルタ化できるものはないけれど、フィルタ化するといいというものは実はかなりあったりする。とくにWebリソース(YouTube2chRSSはてブ、などなど)やOffice文書はそんなの多いわけだし。いまは、まあPlaggerを使えばいいのかもしれない。それよりもミクロレベルから、それと同じようなことがやりやすくなる可能性があるということだ。

あとGUIと合わないということもない。GUIのメニューは実質的にコマンド発行でしかないのだから。要はいかにフィルタ抽象できるかを解決できれば、むしろカスタマイズシステムとしてCmdletを起動するGUIを作ることが簡単になる。とくにWPFと組み合わせたらおもしろいだろう。

Microsoft 界隈でフィルタ指向のプログラミングというと,とりあえず次の 3 つが思い浮かびます.

  • PowerShell
  • Windows Workflow Foundation (WF)
  • LINQ

これらはいずれも .NET Framework 3.0 かそれ以降の技術であるものの,基本的に別個の技術であるところがおもしろいです.ベクトルとしては共通性を持ちますが,実装技術では実はそれほどリンクしていなくて,むしろかぶっている部分もちらほら.

PowerShell
バッチファイルに取って代われるかは未知数.実行エンジンを再利用可能なので,アプリケーション組み込み等マクロ言語への応用も可能.
Windows Workflow Foundation (WF)
Office 2007 のパートナーの座を射止めたという噂.Office 製品に対するバッチ処理やパイプライン処理の記述はこちら?
LINQ
プログラミング言語に最も接近した (密着した) 技術.Orcas 世代の目玉商品.XML (+Web),SQL Server (+ADO.NET vNext)と仲良し.

そのうち,LINQ と PowerShell の連携させる話だとか,LINQ でフィルタを書く話などがわらわら出てくるようになるかもしれませんね.