MacでWindows VMを外付けドライブで稼働

我が家にはWindowsマシンは全くなく、MacでWindowsをVMで使うのでもう何年も過ごしています。自宅で仕事をすろときには、サーバのMac miniでVMを動かし、Remote Desktopで接続していましたが、立て続けに外出してWindowsを使わないと行けない仕事が発生しました。MacBook Air 2012を使っていますが、ストレージはいっぱいです。ということで、高速なメモリか、HDDかを迷ったのですが、両方買ってしまいました。実はメモリを買ったのですが、納期が遅れるということでHDDも念のために買いました。

結論は、HDDの方がスムーズにWindows 7のVMを使えました。購入したのは次の2つのデバイスです。前者は1万ちょい、後者は500GBを買ったので5000円程度。安い方がよかったのです。

TransMemoryは、サイトではMacだとUSB 2.0認識するように書かれていますが、実際にはUSB 3.0 Super Speedバスの方につながります。一方、ADATAのHDDは、仕様ではUSB 3.0対応と書かれていますが、システム情報を見ると、最大480Mbpsと出ています。つまり、USB 2.0接続しているということのようです。

ところが、両方に同じWindows 7を入れて稼働させると、TransMemoryの方は時々操作がまったくできない時間がしばらく続くと言った具合で、何か作業ができそうな感じはしません。一方、ADATA HDDはちょっともたつく感じはありますが、一定した応答で十分に使って作業ができそうです。実際、Excelで長時間作業をしたりもしました。

どうも逆の結果としか思えないのですが、そういえば、VMの最適化などはしていないので、もう一度時間ができたら確認をしてみたいと思います。

今年もよろしくお願いします

年末、新年、何かブログにと思いながらも単なる挨拶だけになりました。書く事はいっぱいあるのですが、ほかにもやるべき事がたくさんたまった2014年の新年です。昨年は前半は悪い事ばっかりで、まだ解決していないこともいくつもあるものの、後半はいいことが続き、上向きな感じです。個別に箇条書きにしたいくらいなのですが、余裕のない今は前だけを向いていようと思います。5日の日曜からフル稼働、そして、今年は珍しく大阪での仕事からスタートというところです。たくさんのことが降り掛かっているものの、なんだかどれも先の時間軸が見える感じのいい感じな仕事はじめでした。ビジュアルがないのも寂しいので、2014年正月の瀬戸内海の夕日です。今年もよろしくおねがいします。

IMG_0425

FileMaker Server 13の「デーモングループ」とは何か?

FileMaker Server 13のインストーラで次の図のような画面が出てきます。FileMaker Server 12までは、fmserverという決められたユーザでしか稼働できなかったのですが、任意のユーザでの実行が可能になったのです。

shot0050

つまり、今ログインしているユーザで稼働させることができるのです。そうなると、FileMaker Server内のフォルダやファイルが、ログインしているユーザが所有者となるため、削除や名前の変更をアクセス権のことを気にしないでできるようになります。自分のMacにFileMaker Serverを入れて開発をしている人に取っては一手間、二手間が減るということになります。以下の図は、私のmsykのアカウントでインストールした結果です。Web用のファイルのフォルダやデータベースのフォルダの所有者がmsykとなり、ログインしている私msykに読み書き権限があります。

shot0052

このように、fmserverアカウント以外での運用をするには、インストーラでインストールするときに指定をします。しかしながら、ログインをしているユーザを単に指定すると次の図のようなシートの警告が出て来て、インストールができません。

shot0051

デーモングループ? なんでしょうか? これ、日本語にすると意味が分からないのですが、OS Xにはdaemonという名前のグループアカウントがあり、そのグループに所属しているユーザでないと、指定ができないですよということです。なので「daemonグループ」と翻訳しないで書かないと意味は通りません。既定値ではdaemonグループには、rootユーザしか登録されていませんが、ここでは私のアカウントmsykを登録しておく必要があります。しかしながら、マニュアルに具体的には書かれていません。システム環境設定ではできません。

では、どうすればいいでしょうか? 以下のように、ターミナルでコマンドをたたいてください。どうしてもGUIで作業したいという方は、「ワークグループマネージャ」をダウンロードしてやれなくはないですが、手順は簡単ではありませんので、ここでは省略します。コマンドの方がはるかに簡単です、と言い切ります。msykの箇所は実際に利用するユーザ名に変えますが、あとはこのままです。2行目は追加されている事を確認するためのコマンドです。

sudo dseditgroup -o edit -a msyk -t user daemon
sudo dseditgroup -o read daemon

2つ目のコマンドでは、daemonグループに関するさまざまな情報が表示されるので、その中で、グループに含まれるユーザを示すdsAttrTypeStandard:GroupMembership以降にユーザ名が追加されているかを確認します。インストールの途中でターミナルを立ち上げて作業してもOKでした。

こんなコマンドは見た事がない? そんな方は、こちらの書籍をお勧めします(さりげない宣伝)。アカウントについても詳しく書籍で紹介があります。

こうしてインストールすると、fmserverdなどのデーモンやWeb共有のhttpdといったプロセスは、全部msykアカウントで稼働します。セキュリティ上大丈夫なのかと気にする人もいらっしゃるかもしれませんが、FileMaker Serverに変なバグがなければ大丈夫です。Webで公開するものは気をつけた方がいいかもしれませんが、たぶん、自分で開発しているアプリを入れるのが普通なので、通常のWebとは違ってグローバルIPにさらされることはほぼないこともあり、問題になることはほとんどないと思います。もっとも、こういう仕事をしている人は「問題になる状況かどうか」を自分で判断できるものじゃないかとも言えますし、自分で回避できるだろうとも言えます。

「FileMaker® Server 13入門ガイド」のp43に次のような事が書かれています。他のページにはアカウントの事はあまりきちんと書かれていません。インストールのところでも、ここを見ろというリファレンスがあるだけです。

OS X: アカウントは OS X のローカルユーザアカウントであり、ローカルファイルへのアクセス(デーモングループのメンバーシップを含む)に関して fmserver アカウントと同一の権限を持っている必要があります。ディレクトリサービス(Active Directory または Open Directory など)に由来するアカウントは使用できません。リモートボリュームにデータベースまたはオブジェクトデータフォルダを追加して設定する場合、アカウントはこれらのリモートフォルダに対する完全なアクセス権を持っている必要があります。

例によって解釈しづらい文章です。ここで、fmserverアカウントのアクセス権をidコマンドで確認してみます。ここで、1(daemon)、および61(localaccounts)がポイントなのではないかと思います。Open Directoryのアカウントは、localaccountsグループには所属していません。ローカルに作ったアカウントだと、足りないのがdaemonグループへの所属だけなので、前記の方法でFileMaker Serverの実行アカウントとして利用できるようになります。

$ id fmserver
uid=502(fmserver) gid=499(fmsadmin) groups=499(fmsadmin),1(daemon),12(everyone),61(localaccounts),100(_lpoperator),402(com.apple.sharepoint.group.1),240(com.apple.access_loginwindow)

FileMaker Server 13はWebDirectなどいろいろ新しい機能が増えていますが、こういう地道なところでも変化がありますね。

[IM] バージョン入りのINTER-Mediatorを生成する

INTER-Mediatorを使って開発をするとき、レポジトリからプルした結果を使うという話を別の記事で書きました。もちろん、動く状態としてそのままをアップしてもいいのですが、ページ最後に出ているINTER-Mediatorの帯のバージョンが@@1@@などといった文字列になっていて、ちょっと雑な感じがすると思います。独自のバージョンと本日の日付を組み込んだ現状のINTER-Mediatorを作るには、dist_docs/buildup.shというスクリプトを使ってください。

たとえば、INTER-Mediatorのディレクトリがカレントディレクトリであれば、

cd dist_docs
./buildup.sh

とコマンドを入力します。すると、だーっと何か出て来て、INTER-Mediatorフォルダと同じ階層に、「INTER-Mediator-4_2.zip」などとバージョン入りのフレームワークが作られます。中身は現状のINTER-Mediatorフォルダの内容とほぼ同じですが、日付とバージョンが入ったものになります。

INTER-Mediator-4_2.zipファイルを展開すると、「INTER-Mediator-4_2」フォルダが出来上がります。現在のINTER-Mediatorフォルダの名前を変えるか削除して、「INTER-Mediator-4_2」フォルダの名前を「INTER-Mediator」フォルダすれば置き換え完了です。同じディレクトリにあるtempフォルダは一時領域なので、これも削除してOKです。

なお、このとき、INTER-Mediatorフォルダと同じフォルダに、yuicompressor-2.4.7.jarファイルがあれば、これを使ってJavaScriptのプログラムを圧縮します。ない場合には圧縮しないで、いくつかあるJavaScriptのファイルを1つにまとめることだけを行います。なお、別のバージョンのものを使う場合には、buildup.shファイルの最初の方にパスを記述する箇所があるので、それを修正してください。

バージョン番号については、同様に、buildup.shの最初の方に記述があるので、それを変更して利用してください。なお、バージョンのルールは次のようにします。

  • バージョン番号は、整数をピリオドで区切ることとする(例:3.4、3.11)
  • バージョン表記は、Ver.を基本とするが、vでもVersionでもversionでも基本的には構わない
  • 整数が2つのものを「正式バージョン」とする(例:3.4、3.11)
  • 開発者が独自にバージョンを付ける場合、3つ目の整数を必ず付ける(例:3.4.1、3.11.133)

つまり、INTER-Mediatorをダウンロードして、実際にアプリケーションに搭載する上で少し修正したとしたら、3つ目の整数で枝番号を付けてくださいということです。できれば、その状態をコミット/プッシュした上で、そのバージョンタグをつけていただけると、自分のバックアップ用にもなると思います。他の人とバージョンが重ならないように、レポジトリをチェックして異なる番号を付けてください。また、3桁目は飛び番号でもいいとしましょう。けっこう緩いルールですね。

 

 

[IM]レポジトリから取り出した結果で開発する

INTER-Mediatorはgithubでソースを公開しています。それとは別にサイトには特定のバージョンのファイルもアップロードしています。バージョンを固定し、フレームワークに手を入れないという前提なら、サイトからのダウンロードした結果をアプリケーションにコピーして使っていただいていいのですが、検証したりあるいはアップデートを取り込みたい場合、それだとファイルコピーを自分でしないといけなくなります。

非常に割り切った言い方をさせていただくと、サイトにある各バージョンのダウンロードファイルは、「それなりにアップデートしている」というアピールのものであると言っていいかと思います。githubにあるものと、サイトにあるものは若干違っていて、後者の方はJavaScriptのソースを一体化しつつYUIで圧縮かけたものですので、若干は動作効率は高いものです。

お勧めするのは、通常の開発は、レポジトリから取り出したもので進めておき、実際にアプリケーションを配備するときに、特定のバージョン向けにビルドしたものに置き換えるということになります。もちろん、それらの相違点に注意は必要かもしれません。また、そうした作業がしやすいように、Ver.3.11をリリース後にレポジトリの内容を大きく変更しました。gitの使い方はいろいろ難しいですが、gitを全く知らない方も、ともかく以下のようにしてみてください。

まず、あるフォルダに作成するWebアプリケーションのファイルをまとめておくとします。そのフォルダを作ります。以下は、Documentsの下にmywebappフォルダを作りました。

Dec 1, 2013, 14.44.15

次に、githubのINTER-Mdiatorのページに行きます。アカウントを持ってサインインしていただくのがいいのですが、なくてもソースのダウンロードは可能です。ここで、中央右付近にあるbranchがmasterになっているのを確認してください。ブランチのmasterがその時点でのコンプリートなソースです。そして、右の方にあるHTTPS clone URLをコピーしておきます。URLが薄く見える右のボタンをクリックすれば、コピーできます。

Dec 1, 2013, 14.45.25

そして、ターミナルを開いてください。次のように作業をします。#以降はコメントです。ファイルパスはもちろん、ご自分の作られているフォルダ構成に従って指定をしてください。

cd ~/Documents/mywebapp  # Webアプリケーションのフォルダをカレントにする
git clone https://github.com/msyk/INTER-Mediator.git  # サーバからレポジトリを複製する

これだけでOKです。すると、mywebappフォルダに、INTER-Mediatorフォルダが作られます。このINTER-Mediatorフォルダがフレームワーク本体となります。この階層に、たとえば、index.htmlファイルやら、アプリケーションのhtml/phpファイルを作って行けばOKです。後はこれをサーバにコピーして稼働を確認します。

Dec 1, 2013, 14.47.28

ここで、レポジトリからクローンしたINTER-Mediatorを参照するには、定義ファイルのcontext.phpはたとえば、次のように記述をします。

<?php
require_once('INTER-Mediator/INTER-Mediator.php');
IM_Entry( .... );
?>

なお、サンプルファイルは、INTER-Mediatorフォルダ内のSamplesフォルダにあります。

もし、レポジトリ側に新しいソースコードが加わっていれば、以下のようにコマンドを入れれば、最新版を取得できます。INTER-Mediatorフォルダをカレントにして、git pullとすればいいです。

cd ~/Documents/mywebapp/INTER-Mediator
git pull

念のために説明しておきますが、pullは最新版に更新するという使い方は非常に稀で、正しくは別のレポジトリの修正を取り込むという意味合いがあります。ソースコードをメンテする上では単なる更新ではないのですが、ソースを利用する側の方から見れば更新コマンドと思っていただいて概ねいいかと思います。もし、自分でフレームワーク側のソースを修正された場合には、単純ではありませんので、ここではソースは参照だけでタッチしないという前提で、説明をここまでとします。

gitには実に多彩な機能があり、ここまでに説明した手順はほんとうにその一端でしかないのですが、これだけを知っていれば、とりあえず大丈夫かと思います。もし、フレームワーク側の修正結果をコミットしていただけるなら、それなりにコマンドを打ち込むか、あるいはアプリケーションを使うことになるかと思いますが、取り出すだけなら上記の手順以上はほとんどないと思います。

gitを使った場合の質問がある場合は、FacebookのIMのグループで質問を出してください。

事実上無料になったKeynote、AppleScript対応は大きく後退

OS Xに続き、iWorkも無料になってしまいました。新しいバージョンはツールパレットがなく、ユーザインタフェースも変更されているなど、久しぶりのアップデートで進化したかなと思ったところです。ですが、残念ながら後退したところがありました。

KeynoteやPagesはそこそこAppleScript対応があったので、プレゼンテーションの自動生成に使えていたのです。以下はKeynote Ver.5.3、つまり1つ前のバージョンの用語辞書です。slideというクラスに、bodyやmasterなどがあり、つまりはスライドの中身をスクリプトで構成できるのです。

スクリーンショット 2013-10-26 10.34.12

ところが最新版のKeynote Ver.6の用語辞書はこんなにさっぱりしてしまっています。slideクラスにはプロパティがなく、結果的にこれだと、自動的なプレゼンくらいしか用途はないというところでしょうか。

スクリーンショット 2013-10-26 10.34.54

幸いというか、iWork 09フォルダにあった古いKeynoteはそのまま残っていたので消さずに使い続ける事になりそうです。

Mavericksでは通知センターをスクリプトから使えるようになった

Mountain Lionで登場した通知センターは賛否ありますが、まあ、慣れてくると別に気にならないというか、逆にシステム側で便利につかえるようにどんどんなってきているので、今となってはなくなると不便な人も多いかもしれません。挙動は以前よりシステム環境設定の「通知」で変更はできますが、10.8では、コマンドラインから通知を出せなかったということがあります。しかしながら、それができるようになりました。スクリプトから通知ができます。

そのためのベースの機能は、AutomatorとApple Scriptでの通知のサポートです。それぞれ、次のようなアクションおよびコマンドが追加されています。display notificationコマンドはStandard Additionsにあるので、常に使えるものです。ご覧のように大量にパラメータがある…と思ったら、次のsayコマンドでした。パラメータは4つですね。

スクリーンショット 2013-10-23 13.44.59

スクリーンショット 2013-10-23 13.46.29

このdisplay notificationコマンドをosascriptコマンドで実行してやれば、コマンドラインから通知が可能です。たとえば、こんな感じです。osascriptコマンドの標準入力にAppleScriptのプログラムを送り込めばOKです。

echo ‘display notification “I am a command-line.”‘|osascript

上記のコマンドで、以下のような通知が出てきます。UTF-8での日本語もOKです。

4

パラメータを付けてみます。

echo ‘display notification “コマンドだ!” with title “Terminal” subtitle “ダークサイド”‘|osascript

5

 

通知センターでの表示は、システム環境設定の「通知」で、「AppleScriptエディタ」に対する設定となります。/bin/shとかいった項目が出るのではないということですね。

スクリーンショット 2013-10-23 13.59.29

ともかく、コマンドから通知を出せるようにできるようになるのはうれしいですね。

Mavericksでエネルギー消費をアクティビティモニタで監視

アクティビティモニタが少しすっきりした画面になっていますが、「エネルギー」というタブが追加されていて、エネルギー消費のインパクトになるものが分かります。簡単に言えば「電池を食うアプリケーション」を燻り出すツールでしょうか。

スクリーンショット 2013-10-23 12.50.36

ここでApp Napの列を見ると、App Napの状態に入っているかどうかを確認できるようです。刻一刻と変化するので、「対応しているか」ということではなく、App Napの状態かどうかを示していることになります。

App NapはAppleのサイトよると、バックグランドにあるアプリケーションのCPU使用をぐっと減らしてバッテリーの消費を伸ばすという仕組みです。パフォーマンスも少しは向上するかもしれませねんが、背後で作業をする場合には普通に作業するので、パフォーマンスの向上はわずかになるでしょう。

Appleのサイトでも唱われているSafariの効率化で、背後に回ったタブもApp Napの対象になるとなっています。つまり、Safariのタブは1つ1つ別のプロセスになっているので、事実上、タブ1つが1つのアプリケーションのようなものと思ってもいいでしょう。それらが、別々のプロセスで見えていて、表示していないページの一部はApp Napが機能します。ただし、全部ではないようです。

スクリーンショット 2013-10-23 12.56.42

 

一方、ChromeもGoogle Chrome Rendererというプロセスがアプリケーションの子プロセスになっているので、ページごとに別々のプロセスが描画を担っているようです。しかし、ChromeのRendererは単独でApp Napには入らず、アプリケーション自体だけが背後に回ったときにApp Napに入るのみです。アプリケーションがApp Napに入り、子プロセスがそうでない場合、子プロセスも省電力動作をするかどうかは判断できないところですが、実行機会はすべてのプロセスが持つのですから、親がApp Napだと子供もApp Napということではないと思います。

となると、やはりSafariの方がChromeよりもエネルギー効率は高いのかもしれませんが、よく考えると、ブラウザの種類に限らず、バッテリーを長持ちさせたいのならブラザの余分なウインドウを閉じる方が効果は高いということでしょう。また、使わないアプリケーションも落とすというのが基本ですね。

アクティビティモニタを見ていると、末尾にグレーのアプリケーションがあります。起動しているものもありますが、起動していないものもあります。App Storeアプリケーションがそうなのですが、これはもしかすると、アプリケーション自体が監視のためのデーモンを動かしていることの印なのかもしれません。また、この一覧には原則としてアプリケーションとその子プロセスが見えています。つまり、デーモンはApp Napとは関係ないという事でしょうか(だからAppか!)。

ヘルプを見ると、「高性能 GPU 必要」という項目もアプリケーションごとに出るようで、複数のグラフィックカードがある場合に、高パフォーマンスGPUを使用する必要があるかどうかを示すようですが、私のMacBook Air 2012ではこの列は出せないようです。「表示」メニューの「表示項目」では選択できません。

開発関連の情報を見る限りは、「App Napを有効にする」みたいなフラグがアプリケーションにあるわけではなく、Cocoa Frameworkを使ったアプリケーションには適用されるようなシステム機能と言えます。バックグランドでなるべく何もしないとか、タイマー処理の間隔を広めに取るなどの対策をすることで、よりApp Napに入りやすくなるということのようです。ただ、手元にある比較的古いアプリほど、グレーになっていたりするので、単にCocoaということではなく、一定以上あたしいフレームワークでビルドしないと、App Nap適用されないのではないでしょうか。

[Mavericks] AppleTVデスクトップ拡張でサウンド切り替えに困る

(追加情報)もっと簡単な方法がありました。末尾に追加しました。

OS X Mavericksで便利になった点にAppleTVにAir Playで画面を送る事ができることです。ミラーリングなら前からできましたが、デスクトップを広げる拡張先として、Air PlayのApple TVを使えることです。拡張ディスプレイを、いわばワイアレス接続できるわけです。外部のディスプレイを追加するためにUSBのアダプタを買ったのですが、このアダプタは使わなくなってしまいました。ちなみに、アダプタのUSBドライバはMavericksでは互換性がないとしてメッセージが出てはじかれているので、使えなくなってしまいました。

いずれにしても、Apple TVをAir Play対応にして、Macとペアリングすると、Apple TVをディスプレイとして利用できます(詳しい方法はきっと多くのサイトで紹介されているでしょうから省略)。メニューバーでAppleTVを選択すれば、少し待つと切り替わります。トラフィックの少ないワイアレスネットワークならそこそこ使えますが、せっかくなので、AppleTVもEthernetでつないでしまいました。表示に関する遅れはほとんど感じませんが、時々、微妙な表示途中の状態がチラっと見えることもあります。

pic2

システム環境設定の「ディスプレイ」を見ると、以下のような感じです。このAppleTVは、3rd Generationつまり現行機種です。外見がまったくそっくりな2nd GenerationのApple TVだと、最大解像度が720pまでだったので、Macのディスプレイとして使うためにAppleTVは買い直しました。とは言え、2nd Gen.の方はリビングで使っています。

pic3

こうしてUSBアダプタを使わずに、ネットワーク接続で「画面が広くなる」ということを標準機能だけで実現できるようになったわけです。ただ、ログインの度にApple TVへの接続を手作業でやらないといけないですが、まあ、それくらいはいいとしましょう。起動の度、つまり、毎朝、Apple TVを選択する事になります。

しかしながら、Air Playの送信先を切り替えるため、画面だけでなく、サウンドの出力先も同じApple TVに切り替わってしまいます。私が持っているいちばん音がいいのは、USB接続している初代のSoundSticksなんですが、音を鳴らしながらApple TVに接続すると、サウンドの出力先はSoundSticksから勝手にApple TVに切り替わります。「勝手」じゃなくて「仕様だ」といわれそうな気もますが不便です。なお、Apple TVからさらにAir Playで別のスピーカーを選択していても、Apple TVのサウンド出力、つまりHDMIケーブルで出力された先のディスプレイ等で音が出てきます。Air Playのカスケードはできないということですね。

そこで、Apple TVに切り替えた後、SoundSticksに切り替えたいわけですが、サウンドの出力先の切り替えはシステム環境設定を使う必要があります。メニューアイコンでの切り替えができません。それで、ちょっと不便だなーと思って、メニューアイコンで出力先を切り替えられないか、フリーソフトをあさって見ました。いっぱいあるのですが、比較的シンプルそうなのはこれらです。

SoundSourceは、Mavericksでは起動しませんでした。また、開発元のサイトでもリストアップされていないので、開発はやめているのかもしれません。Audio Switcherは2010年とやや古いのですが、Marvericksでも起動でき使えています。ただし、署名されていないアプリケーションなので、システム環境設定の「セキュリティ」の設定によっては起動しないかもしれません。いずれもアプリケーションなので、利用するには単にダブルクリックだけです。ログイン時に常に使いたい場合には、システム環境設定の「ユーザとグループ」にあるログイン項目への登録を自分で行います。

起動確認できたのは最初の2つで、左側がSound Switcher、右側はVTAudioSwitchです。Sound Switcherは、入力の切り替えができる点と、Preferencesから起動時に選択する項目を指定できることです。出力先の変更はどちらもできますね。右側のVTAudioSwitchはショートカットが割り当てられていますが、アプリケーションのショートカットと当たるのであまり当てになりません。

pic1

ということで、サウンド切り替えもメニューバーからできるようになり、手作業が必要だとは言え、システム環境設定を呼び出すより手軽です。

純正機能でサウンドの出力先を変更できる

標準の機能でできないと思っていたら、メニューバーにあるサウンドのアイコンをoptionクリックしてできることを教えていただきました(ありがとうございます>Miyuki Imaizumi)。左が通常の状態ですが、optionクリックすると、入出力の選択ができますね。悩む必要がなかった(笑)。

2

Mavericksから搭載されたiBooksのデータはどこに?

OS Xにやっと、標準のePubリーダが搭載されました。PDFも登録できます。iBooksを起動すると、iTunesにあるデータを引継ぐかどうかをたずねるので、引継ぐと、iTunesのライブラリから書籍データは消えます。ただし、デバイスへ同期する書籍の選択は、iTunes上で行います。書籍の購入もiBooksで行います。

スクリーンショット 2013-10-23 2.55.56

別に使い方が難しいわけではないでしょう。ePubの場合、ウインドウは広くなりますが、文字部分の幅は一定のところまでしか広がらないので、大画面に大きく表示できないのがちょっと残念ですが、あまりレイアウトを崩さないようにという意味なのでしょうか。縦方向には長ーくすることはできます。PDFはプレビューで表示しますが、PDFファイルとのリンクが切られたようなウインドウで表示されます。保存をしてみると、保存する先を指定するシートが表示されます。PDFを編集すると複製が作られるので、iBooksにあるものを編集すると、ファイル管理の手間が増えるので、原則として行わない方がいいでしょう。ちょっと重いというか、レスポンスが悪いときもありますが、十分に実用にはなっていると思います。

スクリーンショット 2013-10-23 2.54.21

さて、このiBookのデータはどこにあって、どのように運用すべきなのでしょうか?検索をかけて探したところ、以下のようなパスにありました。「BKAgentService」は、Book Agent Serviceというところでしょうか?

~/Library/Containers/com.apple.BKAgentService/Data/Documents/iBooks

つまり、「ライブラリ」の中です。PDFやePubをドラッグ&ドロップすると、ここにコピーされます。iBooksにはiTunesのようにデータフォルダの指定はできないので、事実上、自分のホームに書籍のデータがどんどん増えて行く事になります。見方を変えると、ここのディレクトリにあるコンテンツを見るアプリケーションという作り方もできるんじゃないかと思います。もちろん、iBooksとは異なる機能を持ったアプリケーションが作れます。たとえば、2冊、3冊同時に読めるリーダーなんて欲しいですよね。

この中のディレクトリを見てみると、こんな感じで、ePubファイルはZIP圧縮アーカイブが展開されてディレクトリとして保存されています。そのため、ほぼ全部、元ファイル名は保持されていません。一方、PDFは概ねもとファイルのファイル名を保持してそのままの形で残されています。また、ibooks拡張子のファイルも見られます。iBooks Authorの拡張子は.ibaであり、iBooks Authorから出力するのが.ibooksファイルです。ibooksファイルをダブルクリックすると、iBooksに読み込まれます。

スクリーンショット 2013-10-23 3.00.14

もちろん、このディレクトリはTime Machineでバックアップが取れます。従って基本的なバックアップはTime Machineでいいでしょう。しかしながら、購入したePubやPDFのファイルはここに残せばいいのかというと、結論としては別途バックアップを残した上でiBooksに読み込ませるのがいいと思われます。ePubは展開されていて元の状態にはなっていないので、元のファイルを残しておくのが何かと便利と思われます。もっとも、PDFだけなら同じなので別途残す必要はないかもしれません。だけども、「ライブラリ」の下にあるものは普段のファイル管理の作業では顕在化しないので、存在を忘れてしまう可能性もあります。やはりiBooksに読み込ませた後、どこかにバックアップも取っておくのが安全だと思います。