BSDレイヤーシリーズ第5回は「OS Xの固有コマンド」について。ワープロ文書のフォーマット変換機能を持つコマンド「textutil」を引き合いに、OS Xの固有コマンドがどのような経緯で登場したか、新機能との関係も踏まえつつ解説してみたい。
「CloudKit」で文書が変わる?
先日開催されたWWDC 2014は、基調講演のみならず100を超えるセッションまでもがムービーで一般公開された。NDAを締結していない一般ユーザであっても、iOSアプリ『WWDC』を入手すれば何度でも鑑賞できてしまうので、これまでの(WWDCに関する)情報のあり方は一変したと言っていい。セッションムービーには、基調講演では言及されなかった新機能に関する情報も多数含まれているので、興味がある向きはチェックしたほうがいい。
今回の目玉はいくつかあるが、非エンターテインメント系のアプリを手がける開発者であれば「CloudKit」に目が行ったのではないだろうか。このフレームワークを利用するとデータをiCloudに保存できるが、アプリ側では保存場所を意識することなくOSに対し処理を依頼すればOK。CloudKitは認証機構とプライベート/パブリックなストレージエリアを提供するのみ、アプリ側ではデータ/ファイルそのものを意識する必要がない。このフレームワークが普及すれば、文書ひいてはファイルの概念すら変わる可能性がある。
AppleがCloudKitのコンセプトを具現化するとしたら、Keynote/Pages/Numbersからなる「iWork」を真っ先に対象とするだろうが、基調講演では特にこれといった新情報は発表されなかった。秋以降別の機会に発表されるのかもしれないが、その可能性には注目しておきたい。
ワープロソフトなしにワープロ文書を変換できる「textutil」
OS XおよびApple純正のアプリケーションは、すべてをGUI(アプリケーションバンドル)に収録せず、エンジン部分をCUIで提供することが少なくない。iPhotoでフォトストリームとのやり取りを担う「PhotoStreamAgent」然り、Mac App Storeでシステムのアップデートチェックを行う「softwareupdate」コマンド然り、実際の処理を行うのはCUIレベルのプログラムだ。
GUIアプリでふだん何気なく利用している機能にも、CUI版が用意されていたりする。「プレビュー」で行う画像フォーマットの変換は「sips」コマンドでも同じことができるし、Spotlightと同じデスクトップ検索は「mdfind」コマンドでも実行できる。フレームワークの形で機能を提供し、GUIとCUIをユーザに選ばせるというアプローチは、OS Xでは珍しいことではないのだ。
ここに紹介する「textutil」も、GUIと同等の機能を利用できるコマンドだ。OS Xに付属の「テキストエディット」は、OpenOffice.orgと後継のLibreOfficeを中心にサポートされる「OpenDocument ForMat(ODF)」およびMicrosoft Office 2007以降の標準ファイル形式である「Office Open XML(OOXML)」の文書を読み書きできるが、textutilコマンドもほぼ同じことをCUIで処理できる。対応するフォーマットはテキスト/ワープロ文書のみ、スプレッドシートやプレゼンテーションは扱えないものの、工夫次第で便利に使える。実行例を3つ示すので、どのような場面で重宝するか読み取っていただきたい。
- 1) Word文書をテキストファイルに変換する
このコマンド実行例では、引数に与えた文書(請求書.docx)を、「-convert」オプションで他のフォーマット(ここではテキストファイル)に変換している。この例の場合、Word文書の内容がそのままプレインテキスト化された「請求書.txt」がカレントディレクトリに出力されるはずだ。
$ textutil -convert txt 請求書.docx
- 2) 2つのWord文書を結合し、ODFとして出力する
このコマンド実行例では、引数に与えたファイル(doc1.docx、doc2.docx、フォーマットは自動判定)を読み込み結合、「-cat」オプションで他のフォーマット(表1)に変換し、「-output」オプションでODFとして出力している。「*.docx」などとワイルドカードを使えば、まとまった数の文書を1つに結合するとき便利に使える。
$ textutil doc_1.docx doc_2.docx -cat odt -output doc12.odt
- 3) システム情報をWord文書に書き出す
「system_profiler」コマンドで出力されるMacのシステム情報も、textutilコマンドを使えば直接ワープロ文書化できる。フォルダの内容一覧をワープロ文書に残したいときなど(ls -l | textutil -stdin ……)、役立つ場面は多そうだ。
$ system_profiler | textutil -stdin -cat docx -output sys.docx
textutilコマンドが対応する文書フォーマット | |
---|---|
フォーマット名 | 概要 |
txt | プレーンテキスト |
rtf | リッチテキスト |
rtfd | 添付書類付きリッチテキスト |
html | HTML/XHTML |
doc | Word文書(Word 97-2004) |
docx | Word文書(OOXML/Word 2007以降) |
odt | OpenDocument Format(ODF) |
wordml | WordprocessingML(XML) |
webarchive | Webアーカイブ(Safari) |
CloudKit以降、textutilはその役割を徐々に終えるのかもしれないが(すべてクラウドで完結するようになればフォーマットを意識する必要はなくなる)、いきなりファイルの概念が消滅することはないだろうし、Windowsなど他のOSとのデータ授受もなくなることはないだろう。それに、GUIとCUIの両方を用意するOS Xの"伝統"が守られるとすれば、クラウド上のデータを直接読み書きするコマンドがあってもいい。個人的には、textutilにはそのような役割で残ってほしいと思うのだが……