Text2Store
ダウンロード

ブログ

iMessage の会話をまるごと印刷する方法(84,000 件でも)

数千件を超えたあたりから、「会話をまるごと印刷する」は機能一覧のチェック項目ではなく、技術的な問題になります。多くの人がそれを痛い目にあって知ります。フォーラムには、いつまでも終わらない書き出し、500 ページ目以降が白紙になる書き出し、そのまま落ちる書き出しの話があふれています。私たちも痛い目にあって知りました。そこで、内部で実際に何が起きているのか、そして 84,000 件の会話を印刷できるようにするために何が必要だったのかを説明します。

大きな会話が書き出しツールを壊す理由

きれいなトランスクリプトを作るツールのほとんどは、私たちのものも含め、最終的にはブラウザのエンジンに会話のレイアウトとページ分けを任せています。ブラウザの印刷エンジンはウェブページのために作られたもので、何年分ものメッセージと何千枚もの写真を含む 1 つの文書のためのものではありません。それを 1 回でページ分けさせると、3 つのことが段階的に悪くなります。いつまでも終わらない。メモリが厳しくなると黙って白紙のページを出す。そして最後には描画プロセスのメモリが尽きて落ちる。私たちの作業を方向づけた実際の報告があります。8,400 件の書き出しで 811 ページの PDF ができ、583 ページ目以降が白紙でした。エンジンはエラーを出しませんでした。ただ描くのをやめたのです。

うまくいく方法:分割、確認、結合

  • 分割。トランスクリプトは 1 回の処理で最大 1,500 件まで描画し、処理ごとに別のパートファイルに印刷します。どの処理も、限界に達するほど大きくなることはありません。
  • 白紙ページのチェック。各パートは書き出したあとに検査されます。エンジンが何も描いていなければ、そのパートは捨ててやり直し、それでも描けないパートは半分に分けて再挑戦します。白紙の出力が最終的な文書に入ることはありません。
  • 堅牢な結合。パートは 1 つの PDF につなぎ合わされ、結合したファイルは、書き出し時に実際の PDF リーダーが問題にする不具合がないか確認されます。この確認の各ルールは、実際に壊れた書き出しから学んだものです。Acrobat のような厳しいリーダーは、寛容なリーダーなら平気で開くファイルを拒否します。
  • 見せかけではなく表示を。複数パートの書き出しでは、ヘッダーに「パート 3/9、84,000 件中 12,001〜13,500 件目」と示します。省いたものがあれば、文書がそう伝えます。

数字

この仕組み全体の負荷テストは、実際のユーザーの 84,000 件の会話です。何年分ものテキストで、写真があちこちにあります。これが 1 つの完全で読みやすい PDF に書き出せます。規模の目安として、同じ会話は初期のバージョンでは 1.05 GB でしたが、現在のエンジンでは 164 MB になり、写真の多い 2,500 件の会話は普通のデスクトップで約 17 秒で書き出せます。

実際に印刷する

正直に言っておくと、印刷ダイアログ自体にも、どのブラウザエンジンとも同じ 1 回処理の限界があります。そのため、とても長い会話では、Text2Store はダイアログを失敗させるのではなく「書き出す」>「PDF…」へ案内し、PDF から全部、または必要なページだけを印刷します。手順は iPhone のテキストメッセージを PDF に書き出すに、このページ全体の短い版は iPhone のテキストメッセージを印刷するにあります。

ご質問は?

hello@text2store.com までメールしてください。大きすぎるかもしれないと思う会話があれば、ぜひ聞かせてください。本当に楽しみです。