プレビュー
ファイルをプレビューする
プレビューには、SFTP接続に加えてSSH経由でコマンドを実行できることが必要です。SFTP専用サーバーでは利用できません。その場合は「設定 → 操作」で「ダウンロードして開く」を選び、Macのアプリで内容を確認してください。
基本操作
一覧で通常ファイル、または通常ファイルへのリンクを一つ選び、スペースキーまたは右クリックの「プレビュー」で、読み取り専用のプレビューウィンドウを開きます。ダブルクリック・Return・「開く」は、「設定 → 操作」の動作設定に従います。
- 開いたまま一覧の別ファイルを選ぶと、表示が切り替わります。
- ウィンドウはドラッグして移動でき、右下のつまみでサイズを変更できます。位置と大きさは保存し、次回復元します。
- 「閉じる」またはEscapeで閉じます。
- 通常ファイルへのリンクは、リンク先のファイルを表示します。リンク先の確認が終わるとプレビュー操作が有効になります。
- フォルダ・フォルダへのリンク・リンク切れ・特殊ファイル・複数選択は対象外です。
Terminalで開く(less)
テキストファイルを検索しながら読む場合は、一覧で通常ファイルを一つ選び、右クリックメニューの「Terminalで開く(less)」を選びます。MacのTerminalに新しいウィンドウを開き、表示中の接続先へSSHで接続して、選択したファイルをlessで表示します。Terminalの既定シェルがfishやzshでも、コマンドの実行はローカル・接続先の両方で明示的に/bin/shを通します。スペースキーのプレビューと、ダブルクリック・Returnの設定はそのまま使えます。この操作のための設定項目はありません。
- スクロールは矢印キーやPage Up / Page Down、検索は
/、終了はqを使います。qでlessとそのSSHコマンドが正常終了すると、表示用のTerminalタブも自動的に閉じます。最後のタブであればウィンドウも閉じます。接続や実行のエラーがあった場合は、内容を確認できるようタブを残します。 - 接続先にはSSH経由のコマンド実行と
file・lessが必要です。テキスト形式を接続先で確認し、画像などのバイナリ、フォルダ、リンクはlessへ渡しません。SFTP専用サーバーでは使えません。 - 通常のSSH設定と対話認証を使い、ホスト鍵は厳格に検証します。認証や接続、ファイル形式、lessの起動に関するエラーはTerminal側に表示します。
- リモートファイルの内容をMacへ保存せず、転送キューにも追加しません。Terminalには短い起動コマンドだけを渡し、SSHコマンドはMacの一時スクリプトから実行します。一時スクリプトは本人だけがアクセスできるディレクトリに作成し、実行開始時に削除します。アプリ内プレビューの取得量・行数・処理時間の上限は適用しません。終了と中断はTerminal側で行い、OpenSFTPを閉じても開いたTerminalのセッションは継続します。
初回は、macOSからOpenSFTPによるTerminalの操作許可を求められる場合があります。許可しなかった場合は、「システム設定 → プライバシーとセキュリティ → オートメーション」でOpenSFTPからTerminalへの操作を許可してください。この操作には、makeで作成したアプリを利用してください。
対応形式
必要なコマンドは接続先サーバーで実行します。PDFは抽出したテキストと1ページ目の画像を切り替えられます。音声・動画は形式などの情報を表示します。
まずfileでファイルの種類(MIMEタイプ)と文字コードを判定し、その結果に応じて以下の方法でプレビューします。
| 内容 | 表示とサーバー側の必要コマンド |
|---|---|
| テキスト・ログ・ソース | head / tailでページ取得。行番号と簡易構文色分け、「先頭」「前」「次」「最後」を表示。行番号は「最後」の横にあるチェックボックスで切替可能で、初期状態では表示します。「最後」の行数確認にawkを使います。 |
| 画像 | statでサイズを確認し、headで先頭情報と上限内のデータを取得。Mac側で寸法を検証し、縮小した静止画像を表示。 |
| ZIP・tar・圧縮tar | unzip -lまたはtar -tvfの先頭ページを一覧表示。通常のgzipはgzip -cdによるテキスト先頭表示も試みます。ディスクへの展開は行いません。 |
「テキスト」はpdftotextで先頭3ページを抽出。「1ページ目」はpdftoppmで先頭ページを画像化して表示。最後に選んだタブを次回以降も復元します。 |
|
| Word(docx) | unzipで本文XMLと文書プロパティを取得し、本文の先頭ページを表示。装飾・表のレイアウト・画像は再現しません。 |
| 音声・動画 | ffprobeによる形式・長さ・コーデック等の情報を表示。動画はフレーム寸法を確認し、ffmpegで縮小した1秒位置の静止画も表示。本体の再生は行いません。 |
| その他のバイナリ | 先頭256 Bをオフセット・16進数・ASCIIで表示。テキストにNULを検出した場合もこの表示に切り替えます。 |
PDFは選択中のタブだけを取得します。「1ページ目」は初めて選んだときに接続先で長辺最大2,048ピクセルのPNGを生成し、SSHの標準出力から受け取ります。取得済みのタブは同じPDFを開いている間だけメモリに保持し、選択変更・プレビュー終了時に破棄します。画像化には「上限 → プレビュー」の画像・動画の最大取得量とコマンドの処理時間を適用します。pdftoppmがない場合などのエラーはそのタブに表示し、テキスト側へ切り替えられます。画像タブを記憶している場合は、次回はテキスト抽出をせず画像を取得します。
形式判定は拡張子に依存しません。文字コードはUTF-8/ASCII、ISO-8859-1、Shift JIS等に対応し、復号できない場合は理由を表示します。アーカイブのサイズ・日時・名前は一般的なtar / unzipの出力を解析し、解析できない行も元の文字列で表示します。
画像の表示と保護
画像は、元画像をそのまま画面で開く代わりに、寸法を検証してから表示用の静止サムネイルを作ります。以下は設定項目を増やさず、固定の保護上限として扱います。
| 項目 | 固定の仕様 |
|---|---|
| 元画像の最大画素数 | 5,000万画素 |
| 元画像の最大辺長 | 幅・高さとも16,384ピクセル |
| 表示用サムネイル | 縦横比を維持し、長辺を最大2,048ピクセルに縮小。小さな画像は拡大しません。 |
| アニメーション・複数ページ画像 | 最初のフレーム・ページだけを静止PNGにして表示。 |
| 解析失敗・上限超過 | 表示を中止して理由を表示。元画像を直接表示したり、外部アプリで自動的に開いたりしません。 |
受信前に接続先のstatでファイルサイズを確認し、取得上限を超えていれば画像データの転送を開始しません。次に先頭64 KiBまでを取得し、そこで寸法が判明する画像は本体全体を受信する前に判定します。寸法が先頭部分だけでは分からない形式は、取得量の上限内で全体を受信した後、デコード前に検証します。確認後のファイル変更に備えて、受信後も取得量と寸法を再確認します。
寸法の解析と縮小はMacのImageIOで行い、縮小処理はバックグラウンドで実行します。接続先にImageMagickなどの画像変換ツールを追加する必要はありません。表示用画像が2,048×2,048の場合、8ビットRGBAの画素データは約16 MiBですが、デコーダーの作業メモリは別に必要です。元画像の画素数・辺長の制限も併用します。
動画の代表フレームにも同じ寸法・サムネイルの上限を使います。ffprobeで最初の動画ストリームの寸法を確認し、ffmpegで接続先側でも縮小してから受信します。代表フレームを表示できなくても、取得できたメディア情報は表示します。
設定と制限
「設定 → 上限」の「プレビュー」で、テキストのページ行数(初期50行)、テキスト・目次・抽出XML・メディア情報の最大取得量(初期1 MiB)、画像・動画の最大取得量(初期5 MiB)、コマンドごとの処理時間(初期30秒)を変更できます。設定は全ウィンドウで共有・保存し、次の取得から反映します。HexDumpは先頭256 Bです。テキストはページ送りの判定用の次の1行を含めて上限を確認し、超過時は途中までの内容も表示せず、ダウンロードして確認するよう案内します。巨大な1行やWord本文XMLが上限を超えると表示を中止します。
サーバー側でSSHコマンドを実行できない場合や、必要なツールの不在、権限不足、サイズ超過がある場合は、理由をプレビュー内に表示します。取得した内容はSSHコマンドの標準出力からメモリに受け取り、Macに一時ファイルを作りません。コマンドはリモートのログインシェルを経由して /bin/sh で実行し、コマンドごとに設定した処理時間(初期30秒)で打ち切ります。「最後」の行数確認や圧縮ファイルの処理にはサーバー側で時間がかかる場合があります。