世界を動かす技術を、日本語で。

Blueskyがスクリーンショットにロゴを描く方法

2026年8月18日原文(timmarinin.net)

概要

  • Blueskyアプリ の投稿スクリーンショットにロゴが表示される仕組みの考察
  • iOSのAPI を活用したロゴ表示のトリックの解説
  • GrowthHack.tsx および expo-privacy-sensitive パッケージの役割
  • セキュリティ機能 を応用した他サービスでの類似事例
  • APIの意図的な用途外利用 かどうかの議論紹介

Blueskyのロゴがスクリーンショットにだけ現れる仕組み

  • Blueskyアプリの投稿画面で、通常時は 「Follow」ボタン が表示
  • スクリーンショットを撮ると、 Blueskyロゴ が右上に現れる現象
  • iOSアプリでは、 UITextFieldのisSecureTextEntry プロパティを利用
    • このプロパティを true に設定したUITextFieldを作成
    • 実際のボタンなどのコンテンツをその.layer上にレンダリング
  • iOSでスクリーンショットを撮る際、 セキュアなUITextFieldは自動的に内容が隠される
    • その隠された部分にロゴを描画することで、 ロゴだけが浮かび上がる演出
  • 他のプラットフォーム(Android等)では 通常通りボタンを表示 し、マスキング処理は行わない

GrowthHack.tsxとexpo-privacy-sensitiveの役割

  • この仕組みは GrowthHack.tsx ファイルで導入
    • 2026年1月に mozzius によって追加
  • 実際の処理は expo-privacy-sensitive パッケージに依存
    • 同じく mozzius による開発
  • パッケージの仕組み: isSecureTextEntry=trueのUITextField を利用し、 スクリーンショット時に内容を隠すAPI を活用
  • iOSの仕様により、 ユーザーがスクリーンショットを撮るときだけ このトリックが発動

スクリーンショットとアプリ切り替え時の挙動

  • アプリ切り替え中にスクリーンショットを撮ると 「Follow」ボタンが写る
    • iOSは 切り替え開始時点 でウィンドウのスナップショットを撮影
    • そのため、 リアルタイムのUITextFieldインスタンスが存在しない
  • 通常のスクリーンショット時のみ UITextFieldのセキュア機能が有効

類似事例とAPI利用の是非

  • TelegramやSignal の「シークレットチャット」でも同様の技術を応用
  • Appleによる対策やパッチ は現時点で予定されていない
  • API本来の用途外利用 (abuse)かどうかは議論が分かれる
    • 一部ユーザーからは 否定的な意見 もあり、スレッドはロック
    • 投稿者は「 可愛いトリック」と評価

まとめ

  • iOSのセキュリティAPI を創造的に活用したUI演出
  • Blueskyアプリ のオープンソース性により仕組みが可視化
  • 技術的な裏技 として他サービスでも認知されている現状

Hackerたちの意見

まあ、スクリーンショットに反応してプロセスを制御するアプリが、私にとって敵対的でイライラする以外の何かだったことは一度もないんだよね。これも全然役に立たないし、現代のソフトウェアエンジニアリングがどうかしてるって感じの完璧な例だと思う。自分のデバイスの機能が、提供している側にだけ利益をもたらすなんてさ。こういう流れがいつか消えてくれればいいなって、心から願ってるよ。

OSがアプリの希望をユーザーの希望よりも優先するのが普通になってしまったのが、いまだに信じられないよ。スクリーンショットプロセスをハイジャックするのは、取り消す権利があるべき特権だと思う。ソフトウェアにもっとコントロールを与えるなんて、正気じゃないよ。それがセキュリティに関係してるなんて言わないで、いろんな方法で回避できるんだから。

敵対的でイライラする GoogleマップやLinkedInのチームの人がここにいるならお願い、私がスクリーンショットを取るのは、シェアするためじゃなくてスクリーンショットを取りたいからなんだよ。誰がそれが役に立つって考えたのか全然わからないけど、全く役に立たないよ。

これがOSレベルでオフにできないとか、アプリの権限設定でできないのが本当に驚きだよ。アプリが俺がスクリーンショットを撮ったことを知ってるのは、キーロガーに近い気がする。どれだけのアプリがその情報を静かにキャプチャしてるか想像してみて。俺にとって、スクリーンショットはアプリのコンテキストの外で起こっていることだから、アプリがそれを知っているのはセキュリティの欠陥だと思う。

余談だけど、スクリーンショット文化自体はもう終わってほしいな。シェアボタンで十分なことが多いのに、なんでスクリーンショットや地図をシェアするのか理解できない。ピンを使って場所をシェアすればいいのに。確かにスクリーンショットが役立つ場合もあるけど、大半は「この場所に来て」ってなるから、逆に難しくなっちゃうんだよね。みんなピンで場所をシェアする方法を知らないみたいだし。

ChatGPTでスクリーンショットを取ると、「このチャットをシェアしますか?」っていうトーストが上に出るんだ。スクリーンショットの後にトーストが表示されるんだけど、俺のスマホの長スクリーンショット機能が上の部分をもう一回キャッチしちゃうから、チャットの上の部分が読めなくなっちゃうんだよね。

この「スクリーンショットブロック」っていうのも本当に嫌だ。デバイスはアプリじゃなくて、自分のために聞くべきだと思う。スクリーンショットは生のピクセルのコピーであって、アプリはそれを知る権利なんてないはず。もちろん、GrapheneOSみたいなオープンソースのOSではできるけど、新しいバージョンが出るたびにOSを修正しなきゃいけないのは本当に面倒だよね。

同意するよ。

これが原因で、リリース以来ずっとChromeを避けてる。ティーンの頃にYouTubeチャンネルの背景を右クリックして、自分のチャンネル背景をPhotoshopで作ろうと思ったら、無効になってたんだよね。Firefoxではできたのに。

ユーザーがOSにアプリに嘘をつかせるようなコントロールが必要だと思う。アプリがスクリーンショットや録画が行われているか、実際の位置情報、ファイルシステムの内容などを知る必要はないよね。

XやThreadsも同じことしてるよね。みんながそうしないことを願ってる。スクリーンショットをいじるのは、セキュリティ対策として防ぐ時だけでいいと思うんだ。

Redditもそうだね。確か、無効にするオプションがあったと思うけど。

Hacker Newsで議論の続きを見る