公式Android APIに隠されたジョークとユーモア
(voxelmanip.se)- Android公開APIには ユーモラスなメソッドや定数 が隠されている
- 代表的なものとして isUserAMonkey() や isUserAGoat() などのメソッドは、実用性とともにジョーク要素も含んでいる
- DISALLOW_FUN、Log.wtf() などは、公式APIにジョークめいた説明や面白い挙動を内包している
- 気の利いた命名 やパロディ(例: TWEET_TRANSACTION, GRAVITY_DEATH_STAR_I)が公式ドキュメントやコード内にしばしば登場する
- こうした要素は 開発者に楽しさとちょっとした発見 をもたらす役割を果たしている
Android公開APIにおけるジョークとユーモア要素
AndroidのオープンAPIには、開発者向けのさまざまな 気の利いたジョークやイースターエッグ要素 が、実際の機能とともに含まれている
ActivityManager.isUserAMonkey()
- 開発者ツール UI Exerciser Monkey が動作中かどうかを判定するメソッド
- UIに ランダム入力をシミュレーション してアプリをストレステストする環境で、特定の動作を制限できるよう設計されている
- 実際のユーザーではなく monkey がアプリを使っているとき、重要な機能(例: 緊急通報の発信など)を制限する目的で導入された
- Android 2.2(Froyo, API 8)で公開APIに追加された
- Android開発初期に実際の偶発的な問題を解決するため実装された背景がある
UserManager.isUserAGoat()
- 公式ドキュメントでは ユーザーが瞬間移動の対象かどうか を確認する用途と案内されているが、これはジョークである
- 当初は常に false を返していたが、Goat Simulator の発売後は、そのゲームがインストールされている場合に true を返すよう変更された
- Android 11(API 30)以降では プライバシー保護 の目的で常に false に固定されている
- Goat Simulatorアプリを検出するロジックが存在したが、アプリ一覧へのアクセス方針の変化により、情報漏えいを防ぐため修正された
- Google Chrome Task Managerのイースターエッグから着想を得ている
UserManager.DISALLOW_FUN
- Android 6 Marshmallow(API 23)で追加された 楽しさを制限するポリシー を意味する
- 公式ドキュメントでは、ユーザーが 喜びや楽しさを感じられないよう制限 できると表現されている
- 実際には、デバイス所有者がユーザー機能の一部を制限するポリシーとして使われる
- 一部のアプリやシステム自体でこのポリシーを検出し、イースターエッグなどの「楽しい」機能を無効化 できる
- 教育機関などで 注意をそらす機能を無効化 する目的で活用できる
Chronometer.isTheFinalCountdown()
- Android 8 Oreo(API 26)で isTheFinalCountdown メソッドが追加された
- 呼び出すと自動的に Europe の「The Final Countdown」YouTube動画 を起動する
- 直接的な実用性はなく、明らかなジョーク/参照である
- コード内の Intent 命令文にはっきり表れている
- 開発者にささやかな遊び心を提供する
PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND
- Android 2.3 Gingerbread(API 8)で追加された マルチタッチ対応の有無 定数である
- Jazz hands(音楽パフォーマンスのジェスチャー)をもじった名称である
- 最大5本の指を同時認識できる機能を意味する
Log.wtf()
- What a Terrible Failure の略で、絶対に発生してはならない状況を記録するためのログ用である
- Assertion レベルの深刻なログに分類される
- 開発者の間で最もよく知られたジョーク的APIのひとつである
AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()
- Android 3.0 Honeycomb(API 11)で追加
- 非公式っぽく愉快な命名 で、ビューがホストによって進められる際に呼び出される
- 実際の命名過程におけるコミカルな発想に由来すると推測される
- コンピューターサイエンスの根深い問題である 命名の難しさ を機知に富んで表現している
IBinder.TWEET_TRANSACTION
- Android 3.2 Honeycomb(API 13)で導入されたトランザクションタイプ
- ツイート送信 を思わせるが、実際には何も動作せず、メッセージ長の制限(130文字)は旧Twitterのポリシーを参照している
- 名前自体が完全にパロディである
IBinder.LIKE_TRANSACTION
- Android 4.0.3 ICS(API 15)で追加された LIKEトランザクション である
- 呼び出し元がアプリを気に入っているというシグナルを送るためのもので、実際の記録やカウントは行われない
- アプリの自尊心を高めるというジョークめいた説明がある
SensorManager.SENSOR_TRICORDER
- Star Trek の Tricorder にちなんで名付けられた定数である
- Android 1.0の時代から存在したが、その後 deprecated になった
- Tricorder は実在しないSF機器で、開発者に笑いをもたらす
SensorManager.GRAVITY_*
- SensorManager には、さまざまな天体(太陽、冥王星など)の重力値を収めた定数が存在する
- その中でも GRAVITY_DEATH_STAR_I(スター・ウォーズのデス・スター)、GRAVITY_THE_ISLAND(ドラマ LOST の島)などはジョークである
- 一部は実用性よりもパロディ的な意味合いが強い
<blink> タグ
- Androidのビューレイアウトシステムには <blink> という隠しタグ が存在する
- 子ビューをHTMLの古い
<blink>のように点滅させる - 公式ドキュメントには説明がないが、2011年のコミットで追加され、現在もAOSPに残っている
- 実際に使われているかどうかは議論の対象である
結論
Android公式APIの各所には ジョーク、パロディ、イースターエッグ的な要素 が意図的に挿入されている
こうした要素は開発者にちょっとした楽しさと発見の喜びを与え、Androidのコミュニティ文化と遊び心を垣間見せる例になっている
2件のコメント
Hacker Newsのコメント
FBでは長年にわたり、危険だったりすでに廃止されたトークンに
_DO_NOT_USE_OR_YOU_WILL_BE_FIREDのような接尾辞を付ける慣習があった。皆このジョークを理解していたが、パンデミック後に新規人材の比率が高まり、リモートでのオンボーディングが不十分だった時期には、こうした内輪ネタが恐怖や不確実さを生むという不満も出ていた。これはあくまで私が経験した範囲での話だReactの
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIREDのような、愉快でありながらやたら長い名前を昔から面白く見ていた記憶がある。だが残念ながら、最近はこうした「ユーモア」が少しずつ消えつつある 関連PR昔Googleで、ネットワークスタックのどこかに理解しづらく修正も難しい巨大なコードの塊があり、それがどんどん肥大化していった。私たちのチームはそのコードを "[Foo]Sorcery" に改名した。どこか不気味で奇妙な名前のおかげで、以後は誰もそのコードに新しく追加しようとしなくなり、ときどき誰かが一部を整理して削除するようになった。面白いネーミングが効いたのだと思う
Androidのソースで私がいちばん好きな洒落の利いた関数は
android.os.Handler.runWithScissors()だが、残念ながらpublic APIには含まれていない ソースリンクこの関数のコメントに「@hide このメソッドは誤用されるおそれがあるためAPIに入れないほうがよく、追加する場合は runUnsafe() のような、もっと面白くない名前に変える必要があるかもしれない」とあって笑ってしまった
この記事本文にこの関数が入っていないのは少し残念だ。私のお気に入りの関数のひとつだ
X11ですぐ思い浮かぶ例としては、
party_like_its_1989というグローバル変数があり コードリンク、DRI2拡張のchangelogには "Awesomeness!", "True excellence", "Enlightenment attained" のような表現が満載だ changelogリンクBeOS(およびHaiku)には
is_computer_on()とis_computer_on_fire()という関数があり、説明文が実に素晴らしい 参考リンクDelphiには
EProgrammerNotFoundという例外があり、公式ドキュメントも非常にそっけないながら真顔のユーモアを含んでいる ドキュメントリンクもちろんこうしたネーミングが面白さを狙って作られたのは分かるが、高度な省電力管理が適用された現代のコンピュータでは、こうした状態はかなり一般的だ。OSはディープスリープからの復帰や、マザーボード温度が200度という状況さえ当然のように扱わなければならない
is_computer_on_fire()は非同期イベントベースのトリガーとして使えたらもっと面白かったと思う気になる人のために関連ソースへのリンクもある コードリンク
こうしたユーモアのセンスが大企業のコードベースにちゃんと生きているのがいい。APIを使っているだけでは分からないが、ソースコードを直接読むとたまに出会うこうしたイースターエッグが、実際に人間がコードを書いたのだとはっきり感じさせてくれる。最近のソフトウェアはあまりに冷たく感じるが、むしろこの対照に温かみを覚える。正直、こういう部分はもっと増えてほしい
Androidで isUserAGoat や isUserAMonkey のようなものを自分で試してみたいなら、私がそうした機能を提供する小さなアプリを作って公開してある アプリリンク。今後さらに多くのイースターエッグも追加してみたい
DISALLOW_FUN ポリシーチェックのような機能も入れるとかなり面白そうだ。関連コードを探そうとGitHubで検索してみたが、ほとんどはシステムSettingsアプリでバージョンのイースターエッグを隠す用途ばかりだった。おそらくこの機能を実用する最初のサードパーティになるかもしれない
でもAndroid 15ではアプリをインストールできない。Googleが minimum compileSdk を必ず合わせるよう求めているので、アプリを更新してもらえるとありがたい
Chromeのタスクマネージャーには、かつて「ブラウザープロセスがテレポートさせたヤギの数」を表示する隠しカラムがあった。今はその機能はなくなったが、昔のスクリーンショット で確認できる。昔はカラムが234個もあったのに、今では16個に減ってしまって少し寂しい
テック製品にイースターエッグがあふれていた時代が恋しい。あらゆるものが企業化されるにつれて、こうした文化が消えていったように感じる
このスレッドへの返信を面接の必須質問にしたい。私を面接するときも含めて。本当に「世の中には二種類の人間がいる」という瞬間だ
技術文書にユーモアやジョークがあるという話で、一般には否定的に見られがちだが、私はドキュメントにユーモアが入るのが大好きだ。関連する文章を書いたことがある
「ユウマー」という表現はAIで翻訳されたものなんですか……? ブルブル