Uniqlo x Akamai "Peace for All" Bashスクリプトのイースターエッグを解読する
Uniqlo x Akamai "Peace for All" Bashスクリプトのイースターエッグを解読する
小売用Tシャツに搭載された機能的なBashスクリプト
AkamaiとUniqloは、「Peace for All」キャンペーンの一環として、背面に機能的で難読化されたBashスクリプトが記載された限定版Tシャツをリリースしました。デコードしてターミナルで実行すると、このスクリプトは、シアンとオレンジの間のカラーグラデーションを使用して、キャンペーンのメッセージである「PEACE FOR ALL」の連続的なサイン波アニメーションを生成します。
難読化の技術的分析
このスクリプトは、シバン(#!/bin/bash)と、base64 --decodeを介してevalに渡されるBase64エンコードされた「Here string」を含む、英数字のテキストブロックとして提示されています。この手法は、スクリプトの実際のロジックを、さりげなく観察する人々から隠すための一般的なテクニックですが、必要なツールを持つ者にとっては容易に逆転可能なものです。
解読されたソースコード
デコードすると、スクリプトは、ターミナル操作にtputを使用し、浮動小数点計算にbcを使用する、適切にコメントされたBashプログラムであることが明らかになります。コア・ロジックは以下の通りです:
- ターミナルの寸法:
tput colsとtput linesを使用して、現在のターミナルの幅(cols)と高さ(lines)を取得します。 - サイン波の計算:
bc -l数学ライブラリを介してサイン関数(s($angle))を使用して文字のx座標を計算し、水平方向の振動を作り出します。 - 視覚的効果: 256色グラデーション(色番号12から208まで)を実装し、ANSIエスケープコード(
\033[38;5;${color}m)を使用して文字に色を付けます。 - カーソル制御: スクリプトはカーソルを隠し(
tput civis)、tput cupを使用して画面上の文字を正確な位置に配置します。
#!/bin/bash
# Congratulations! You found the easter egg! ❤
# えもでちございます 覇されたさぷらいゖを見つかました ❤
text="❤PEACE❤FOR❤ALL❤PEACE❤FOR❤ALL❤PEACE❤FOR❤ALL❤PEACE❤FOR❤ALL❤PEACE❤FOR❤ALL❤"
cols=$(tput cols)
lines=$(tput lines)
text_length=${#text}
tput civis
trap "tput cnorm; exit" SIGINT
freq=0.2
for (( t=0; ; t+=1 )); do
char="${text:t % text_length:1}"
angle=$(echo "($t) * $freq" | bc -l)
sine_value=$(echo "s($angle)" | bc -l)
x=$(echo "($cols / 2) + ($cols / 4) * $sine_value" | bc -l)
x=$(printf "%.0f" "$x")
if (( x < 0 )); then x=0; fi
if (( x >= cols )); then x=$((cols - 1)); fi
color_start=12
color_end=208
color_range=$((color_end - color_start))
color=$((color_start + (color_range * t / lines) % color_range))
echo -ne "\033[38;5;${color}m"$(tput cup $t $x)"$char\033[0m"
echo ""
done
実装上の課題と観察事項
OCRと文字起こし
物理的な衣類からスクリプトを書き写すことは困難です。なぜなら、Base64エンコードはエラー訂正機能を持たないため、1文字でも間違いがあれば文字列全体がデコード不能になります。ユーザーからは、OCRツールに関する様々な成功例が報告されています:
- Android Circle-to-SearchとClaude: 組み合わせて使用し、差分を確認することで精度を高めることが効果的であることが証明されました。
- macOS Live Text: 文字起こしミスによるデコード不能エラーが報告されています。
タイポグラフィとデザイン
Tシャツに採用されているフォントに関する議論があります。Consolasを提案する人もいれば、Roboto Monoであり、InDesignのようなデザインツールを使用して非標準的なタイポグラフィ(オプティカル・カーニング)が適用されていると主張する人もいます。これは、一部の文字が標準的な等幅フォントよりも水平方向のシアンを占める理由を説明しています。
互換性問題
一部のユーザーは、スクリプトリポジトリが英語以外のロケール(例:スペイン語)では、ドットではなくカンマが小数点として使用されるため、スクリプトがクラッシュする可能性があると指摘しています。これは、スクリプトをロケールCに設定して実行することで解決できます:LC_NUMERIC=C ./shirt.sh。
文脈と意義
Akamaiは、このデザインを初期のインターネットへのオマージュとして説明しています。Tシャツの「ベージュ・ボックス」の色は初期のPCケースをカラーリングとして参照しており、Linux/Bashがグローバルブランドとユーザーを繋ぐ「共通言語」であることを示しています。
コミュニティのメンバーは、これを他の「ファッションとしてのコード」の例、例えばDVD解読キーを含むDeCSS Tシャツや、Quine ClockのようなASCII視覚化と比較しています。一方で、ある批判では、Uniqloの同じラインナップの中で、一部のデザインは「明らかに不完全」であり、コンパイルや実行ができない、途切れたコードブロックが含まれていると指摘されています。