この度、個人開発でインターネットも携帯電波も一切不要なオフラインメッセージアプリ「RelayChat」をApp Storeにリリースしました。
新作アプリ「リレーチャット」をリリースしました🚀
— ツヅキ@限界個人開発 (@tsuzuki817) August 7, 2025
オフラインでも近くのスマホ同士がつながり、メッセージをバケツリレーのように運びます📦
アウトドアのイベントでは仲間と楽しむためのツールに
災害などの非常時には家族や友人との命綱に
圏外でも、繋がれるコミュニケーションアプリ誕生🎈 pic.twitter.com/MkpxduX3m1
このアプリは、スマホに必ず入っているBluetoothという無線技術を使い、近くにいる人々と直接つながるP2P(ピアツーピア)方式で動作します。
インターネット接続をオフにした状態でチャットができる様子です🟦🦷 https://t.co/AdWBOXJnoK pic.twitter.com/NYAC1jqa2W
— ツヅキ@限界個人開発 (@tsuzuki817) August 7, 2025
さらに、ユーザーのスマホが自動的に中継局となり、メッセージをバケツリレーのように遠くまで届ける「メッシュネットワーク」という仕組みを形成します。
「圏外を、安心に。いつもの会話を、もしもの備えに。」
このサブタイトルに込めた想いと、一つのアイデアが形になるまでの技術的な挑戦、そしてAppleとの闘い(笑)の全記録を、ここに書き残したいと思います。
すべての始まりは、夏フェスの「圏外」だった
オンラインであることは、もはや呼吸をするのと同じくらい当たり前の世界です。
そんな僕がなぜ「オフライン」なのか。その原体験は、数年前の夏フェスに遡ります。
大好きなアーティストのステージ。鳴り響く轟音と、熱狂する数万人のオーディエンス。最高潮の盛り上がりの中、ふと仲間とはぐれてしまったことに気づきました。「あとで合流しよう」とスマホを取り出すも、メッセージが送れません。アンテナは立っているのに、人が多すぎて電波が詰まっているのです。
キャンプ場でも同じでした。美しい自然の中で、仲間とリアルタイムに感動を共有したいのに、電波が届かない。スマホはただの重たい板と化していました。
「どうして、こんなに近くにいるのに、繋がれないんだろう?」
「スマホ同士が、直接話せればいいのに…」
この悔しさと純粋な技術的興味から、「Bluetoothを使えば、サーバーなしで会話できるアプリが作れるんじゃないか」というアイデアが、僕の中にぼんやりと芽生えました。それはまだ、具体的な形を持たない、夢物語のようなものでした。
相棒「Claude Code」との出会い、そしてアイデアの進化
その夢物語を現実へと動かす、大きな転機が訪れます。AIアシスタント「Claude Code」の登場です。
僕の頭の中にあった漠然としたアイデアをClaude Codeに投げかけると、驚くほど的確な設計案やコードスニペットが返ってくる。まるで、優秀なエンジニアとペアプログラミングをしているような感覚でした。一人では越えられなかったであろう技術的な壁を、次々と乗り越えることができたのです。
Claude Codeと壁打ちを繰り返す中で、僕のアイデアはさらに磨かれていきました。
そして、決定打となったのが、2024年の能登半島地震のニュースでした。通信網の途絶という現実を目の当たりにし、僕のアプリが持つべき本当の使命に気づかされたのです。
「これは、ただの便利ツールじゃない。人の命を救うライフラインになり得るかもしれない」
こうして、僕の個人的な原体験から生まれた「圏外問題解決アプリ」のアイデアは、Claude Codeという相棒を得て、「日常の"楽しい"と、非常時の"安心"を両立させる」という、RelayChatの確固たるコンセプトへと進化したのでした。
技術選定の分かれ道:「Multipeer」か「Core Bluetooth」か
iOSでP2P通信を実現しようと思った時、多くの開発者が最初に思い浮かべるのはMultipeer Connectivity Frameworkでしょう。
しかし、僕が選んだのは、より低レベルで、より気難しいCore Bluetoothでした。
なぜ、わざわざ茨の道を選んだのか。理由は、「完全なメッシュネットワーク」と「プライバシー」へのこだわりです。
Multipeer Connectivityはあくまで「近くの数台」と繋がるためのもので、デバイスがデバイスを中継して輪を広げていくような、複雑なネットワークを自前で組むには自由度が足りませんでした。
また、匿名性とセキュリティの重要性を痛感しました。通信のすべてを自分でコントロールし、将来的に暗号化を実装するなら、GATTのキャラクタリスティック一つひとつを自分で設計できるCore Bluetoothしかない。
設計と実装:サーバーレスの壁を越える
RelayChatの心臓部は、すべてのデバイスが「セントラル(探す側)」と「ペリフェラル(見つけてもらう側)」の役割を同時に担う、という設計です。
- アプリを開くと、自分の存在を知らせるアドバタイズパケットを常に発信し(ペリフェラル)、
- 同時に、周囲のRelayChatユーザーを探し始めます(セントラル)。
- ユーザーを見つけると、即座に接続。
- メッセージを送信すると、接続している全員にブロードキャスト。
- メッセージを受信すると、自分宛でなくても、接続している他の仲間(送信元を除く)に自動で転送(リレー)する。
このシンプルなフラッディング(Flooding)アルゴリズムにより、ユーザーが多ければ多いほど、通信網がネズミ算式に広がっていく仕組みです。
そして、プライバシーを守るため、CryptoKitを使ってエンドツーエンド暗号化を実装しました。
近くにいるユーザーグループで一時的な共通鍵を生成・共有し、通信はすべて暗号化。中継するだけのデバイス(人)には、メッセージの中身は一切見えないようにしました。
App Storeの赤い壁:Guideline 1.2との闘い
順調に開発が進み、満を持してAppleにアプリを申請。しかし、数日後に届いたのは、非情なリジェクト通知でした。
Guideline 1.2 - Safety - User Generated Content
あなたのアプリはユーザーが匿名でコンテンツを投稿できますが、適切な予防措置が講じられていません。
サーバーレスの匿名アプリにとって、最も恐れていた指摘です。Appleが要求してきたのは、不適切コンテンツのフィルタリング、報告機能、ブロック機能、そして「24時間以内の開発者による対処」といった、通常はサーバー側で実装する機能のすべてでした。
頭を抱えました。サーバーがないのに、どうやってユーザーを追放し、投稿を削除するんだ?
しかし、ここで諦めるわけにはいきません。これまでの開発の経験が、僕に「やり方を変えて試せばいい」と教えてくれました。
僕の出した答えは、「ユーザー自身に管理権限を委譲する」ことでした。
クライアントサイド・フィルター
まず、不適切な単語のリストをアプリ内に持ち、送受信時に自動で伏せ字にする機能を実装しました。
即時報告&ブロック機能
各メッセージを長押しすると「通報」できるようにしました。通報されたメッセージは、そのユーザーの画面から即座に消えます。同時に、その送信者の匿名IDをデバイス内のブロックリストに記録。以降、その人からのメッセージは二度と表示されません。
Appleへの説明
そして、審査への返信でこう伝えました。
「本アプリはP2Pの特性上、中央サーバーでユーザーを追放することはできません。しかし、その代わりに強力なクライアントサイドフィルターと、ユーザー自身が即時に不快な体験を排除できる通報・ブロック機能を設けており、不適切コンテンツの拡散を効果的に防いでいます」と。
利用規約への同意を必須にし、年齢制限を「17+」に引き上げ、祈るような気持ちで再申請。
そして数日後、ついに届いた「Ready for Sale」の通知。思わず声が出ました。
RelayChatが目指す、二つの未来
こうして、RelayChatは世に出ました。このアプリが目指すのは、二つの未来です。
一つは、「もしもの時の、命綱になる未来」。
このアプリが、いつかどこかで、誰かの「安心」に繋がってくれたら。災害時に、大切な人へ「大丈夫だよ」の一言を届ける手助けができたなら。開発者として、これ以上の喜びはありません。
でも、RelayChatはそんな真面目なだけのアプリではありません。もう一つは、「なんでもない日常が、少しだけワクワクする未来」です。
学生時代に夢見た、授業中に隣のクラスとこっそり話せる秘密のチャット。
長距離フライトで、同じ飛行機に乗っている人たちとだけ繋がる、その場限りのSNS。
高速道路のサービスエリアで、偶然居合わせたライダー同士が「この先の天気どうですか?」なんて情報交換したり。
非常時の「安心」と、日常の「楽しい」。
全く違うように見えて、根っこは同じです。それは「テクノロジーで、物理的な距離と心の距離を縮める」ということ。
この挑戦は、巨大な資本や組織がなくても、個人のエンジニアが持つ技術と情熱で、社会に新しい価値を提案できるという証明かもしれません。PayPayフリマで学んだリーンな開発、Pocochaで叩き込まれたアジャイルな思考、そしてZOZOTOWNで日々向き合っている多くのユーザーへの想い。僕がこれまで得てきた経験の、すべてを注ぎ込みました。
この開発秘話が、同じように何かを作りたいと思っている、誰かの背中をそっと押すことができたなら、本当に嬉しいです。
最後まで読んでいただき、ありがとうございました。
もしよろしければ、App Storeで「RelayChat」をダウンロードして、あなたのスマホに「もしもの備え」と「日常のワクワク」を入れてみてください。