メインコンテンツへスキップ

Wablo — tomokiOS 26 ブログ

tomokiOS
32213人がログイン中🔋64%

プロフィール.txt

なまえ: tomokisun

しょくぎょう: iOS出身のなんでも屋

元々はiOSエンジニアですが、現在はモバイル、ウェブ、バックエンド、ブロックチェーンなど、様々な分野に携わっています。 「1日1個アプリを作る」挑戦を90日間完遂しました。

いま: ONE, Inc.(友人と共同創業)

10代向けのソーシャルモバイルアプリを開発中です。

まえ: CAMPFIRE, Inc.

日本最大級のクラウドファンディングサイトで、モバイルアプリのローンチを担当。立ち上げ期は3人のエンジニアで、その後はiOS・Android・APIサーバーをほぼひとりで開発していました。

にがて: インフラ層(笑)→

UTF-8 | プレーンテキスト | 変更なし

📁 Products

作ったもの。2つは旅立ちました

ネットワーク環境設定

接続済み9件、失敗1件(想定内)

📰 ブログ

  • Wablo
    友だちに30秒の落書きを送るiOSアプリの話。テキストも写真もフィードもなし。へたな絵ほど、よく届きます。

らくがきではなく、文章を書く日もあります。

らくがきではなく、文章を書く日

メモ.txt — メモ帳

0文字未保存(自動保存はOFF)

UTF-8 | 保存先: メモリ | 次の再起動まで有効

電卓

640KB 空きあり0

四則演算まで対応しています(それ以上は本人も暗算できません)

標準 | 12桁 | 関数電卓はv27で

tomokisun@tomokibook: ~

tomokiOS 26 ターミナル v1.0
「help」でコマンド一覧を表示します。
 
tomokisun@tomokibook ~ % whoami
tomokisun
tomokisun@tomokibook ~ %
zsh | 80×24 | 実権限なし

ゴミ箱

infra.zip(3.2GB)
インフラ層一式(Kubernetes、Terraform、他)— 削除日: だいぶ前

1 項目 | 3.2 GB(ほぼ後悔)

システム設定

この端末

モデル名tomokiBooktomokiPhone
OStomokiOS 26 "Cream Soda"
ビルド2006A
ストレージ639KB / 640KB 使用のこり1KB

ソフトウェア・アップデート

状態最新ですというより、これが全部です

プライバシーとセキュリティ

位置情報机の上(固定)
解析データの共有ON送り先は本人の好奇心
広告ありません

壁紙

現在の壁紙ソーダ

デスクトップの右クリックからも変えられます。コントロールセンターからも変えられます。

ホーム画面

Appライブラリいちばん右のページ

アイコンの長押しでも編集できます。削除は、だいたい断られます。

LaunchpadDockの ⌘ から
Spotlight⌘K または ⌘Space

デスクトップに出すアイコンは数個だけにしてあります。残りはDockとLaunchpadから。

明るさとサウンド

サウンドOFF静かなOS
Night Shift日没から日の出まで(体感)
True ToneON(クリームソーダ寄り)

アプリの設定

アプリごとの設定は、そのアプリを開けばだいたい正面にあります。階層はあさいほうが好みです。

通知

通知スタイルバナー
時間指定要約OFF要約するほど来ません

法定情報と規制

設計と開発tomokisun
製造
保証ありません(善意はあります)
tomokiOS 26.0.4 (Build 2006A)

このOSについて

tomokiOS 26
"Cream Soda" — 素通り禁止オペレーティングシステム
プロセッサ
なつかしさ 100%
メモリ
640KB(じゅうぶんなはず)
アプリ
70 個プリインストール済み
稼働開始
SINCE 2006
カーネル
Next.js + OpenNext on Cloudflare Workers
なつかしさ100%のプロセッサ

Finder — tomokisun

/Users/tomokisun

infra.zip だけ、いつまでもゴミ箱から消えません。3.2GB あるので、のこり1KBの計算はどこかで間違っています。

/Users/tomokisun | 639KB 使用

時計

東京ここ--:--
クパチーノ本社(憧れ)--:--
ロンドン起きているころ--:--
UTC争いのない時刻--:--

時差は正確です。約束の時間に間に合うかどうかは、また別の問題です。

スヌーズは9分です。9回まで押した記録があります。

00:00.00

    本当に動きます。このOSでいちばん実用的な機能かもしれません。

    00:00

    3分=カップ麺 | 5分=「あと5分」 | 25分=ポモドーロ(1回だけ成功)

    協定世界時 | 誤差: 気持ちの問題

    カレンダー

    20269予定はだいたい「開発」
    123456789101112131415161718192021222324252627282930

    この先の予定

    開発毎日起きてから寝るまで
    「インフラを勉強する」毎週火延期
    ブログを書く毎月末書けたら
    Wablo をリリース2026/08/28完了

    「あとでやる」は予定ではないので、このカレンダーには入りません。

    1 カレンダー | 共有: していません

    リマインダー

    • インフラを勉強する2019年から書いてあります
    • ブログの2記事目を書く下書きゼロ
    • このOSにアプリを増やす増えました
    • 640KBで足りるか確認する足りました

    2 件のこっています

    通知しません言われなくても気にしています
    同期この画面のあいだだけ
    3 件未完了 | 期限: いつか

    メッセージ

    tomokisun自動応答(本人は寝ています)
    こんにちは。tomokiOS へようこそ。
    なにか聞いてください。だいたい返します(だいたい)。

    既読はつきません。つけると急かされている気がするので、この機能は実装していません。

    iMessage風 | 既読はつきません

    メール

    迷惑メールフォルダは空です。このアドレスは、ほぼ自分にしか使っていません。

    受信 3 | 未読 3 | 送信済み 0

    ビデオ通話

    tomokisunカメラは経費削減されました
    通話履歴0 件回線は良好です
    画質640×480640つながり

    かかってきたことはありません。着信音は毎年ちゃんと選び直しています。

    通話履歴 0 件 | 回線: 良好(未使用)

    電話

    履歴

    キーパッド

     

    640 とだけ押して発信すると、ちょっとだけ良いことがあります。

    不在着信 0 | 留守番電話 1

    連絡先

    tomokisunONE, Inc. / iOS出身のなんでも屋

    連絡方法

    Emailtomoki69386@gmail.com
    Facebooktomokisun
    LinkedIntomokisun
    Instagramtomokisun
    Twittertomokisun
    Discordtomokisun#1557ID のみ
    Telegramtomokisun
    BondeetomokisunID のみ
    ZEPETOtomokisun
    ふりがなともきさん
    所在地机の上出社率100%
    誕生日SINCE 2006OSと同い年

    グループ機能はありません。1件しかないので、分ける意味がありませんでした。

    1 件のカード | グループ: なし

    インビテーション

    tomokiOS 26 発表会いつか | 机の上640KBで足りることを証明する会
    主催tomokisun
    参加者1名主催者本人
    持ち物フロッピー(あれば)

    返事の期限はありません。開催日も決まっていないので、いつ返事をしても間に合います。

    1 件のイベント | 出欠: 未定(主催者が)

    ブラウザ — tomokisun.com

    tomokisun.com

    お気に入り(このOSの中)

    よく行くところ(別のマシン)

    github.com/tomokisunhttps://github.com/tomokisun
    suzuri.jp/tomokisunhttps://suzuri.jp/tomokisun
    newmatch.apphttps://newmatch.app

    アドレスバーは飾りです。行き先はこのOSの中か、はっきり「外のマシン」だけ。迷子にはなりません。

    読み込み完了 | Cookie: クリームソーダ味

    ミュージック

    ビルドが通ったtomokisun
    0:003:12

    プレイリスト「作業用」

    音は鳴りません。このMacにスピーカーはありません(ターミナルの say でも同じことを言われます)。

    1 プレイリスト | 音量: 0(仕様)

    クラシック

    作曲家作品指揮者
    音質ロスレス無音もロスレスです
    録音スタジオ(本人の部屋)

    クラシックだけ別アプリになっている理由は、本家にならいました。深い意味はありません。

    ハイレゾ | 実際には鳴りません

    ポッドキャスト

    640KB ラジオtomokisun / 週刊(第1回で停止)

    再生速度は 1.0× と 1.5× があります。どちらでも第2回は来ません。

    1 番組 | 1 エピソード | 続きは未定

    テレビ

    今夜の1本ある夜のリファクタリング(全1話)

    字幕は日本語のみです。制作も視聴も、いまのところ本人ひとりです。

    見放題 | ただし全1話

    ブック

    読書中

    今年読んだ本1冊去年は0冊なので進歩です
    積読3冊同期は正常です

    読書目標は設定できます。設定するだけで満足するので、毎年設定しています。

    4 冊 | 読了 0 冊 | 同期: 積読のみ

    写真

    ライブラリの容量は1KB未満です。ぜんぶ絵文字なので、バックアップも一瞬で終わります。

    ライブラリ | 容量: 1KB 未満

    カメラ

    レンズはありません。写るのは、いま目の前にある絵文字だけです。

    レンズ: なし | 画素数: 気持ち

    ボイスメモ

    00:00

    録音

    録音はできますが、再生はできません。世に出ない声のほうが多い、という設計です。

    マイク: 気のせい | 保存先: 記憶

    これなに?

    ボタンを押すと、いま流れている曲をあてます。

    これまでの判定

    ビルドが通ったtomokisun | 判定: たぶん
    冷蔵庫(変ロ長調)生活音 | 判定: 自信あり

    正解率は雰囲気です。だいたい「作業用BGM」と答えます。

    マイク待機中 | 判定精度: 雰囲気

    アプリストア

    本日のおすすめプリインストール 70 個。追加購入は不要です。
    アップデート0 件全部さいしんです
    自動更新ON更新されたことはありません

    課金要素はありません。支払い方法を登録しようとすると、ウォレットが 640KB を差し出してきます。

    アップデート 0 件 | 支払い: 未設定

    iTunes Store

    iTunes Storeまだ営業しています
    購入履歴0 件
    ギフトカード残高0円チャージ方法は未実装です

    このアプリだけ、なぜかいつまでも消えずに残っています。本家もそうでした。

    購入履歴 0 | ギフトカード残高 0円

    tomokiストア

    tomokiストア実在するグッズ(SUZURI)

    人気の Products

    NewMatch新しい友だちが作れるアプリ「NewMatch」は、スワイプで気になる人を見つけ、お互いにLikeを送るとマッチし、メッセージで仲良くなり、同性の友だちもどんどん作れ、共通の趣味や行きたい場所、音楽を共有できるなど、色んな探し方で気の合う人を見つけ、毎日をもっと楽しくしてくれます!無料
    BeMatchBeRealを交換できる無料アプリです。繋がりたい人をスワイプで選ぶことができます。気になる人とマッチしてBeRealをもっと楽しもう!無料
    CalculatorMultipleデバイスを横向きにすると、3つの計算機が表示されます。同時に複数の計算が必要な場合に使用できます。無料

    ここだけは本物の買い物ができます。OSの外=別のマシンなので、新しいタブで開きます。

    在庫: SUZURI におまかせ

    天気

    24°机の上晴れ | 体感 24° | 湿度 50%
    今日室内24° / 21°
    明日室内24° / 21°
    明後日窓を開けた23° / 21°
    洗濯物は室内22° / 20°
    外に出るかも25° / 21°
    降水確率0%室内なので
    UV指数0ディスプレイの明るさは別
    エアコン 2

    観測地点は机の上に固定されています。引っ越しの予定はありません。

    観測地点: 机の上 | 更新: たまに

    マップ

    よく行く場所

    縮尺は 1:640 です。この地図には、まだ「外」が描かれていません。

    縮尺 1:640 | 交通情報: なし

    コンパス

    NESW
    0° 北
    標高72cm机の高さ
    傾きノートPCの角度は115°

    本物の磁気センサーはありません。ボタンを押すと、それらしい方角を答えます。

    磁北 | 標高: 机の高さ

    ヘルスケア

    今日のまとめ

    歩数デスク ⇄ キッチン ×8412 歩
    睡眠就寝 26:40 / 起床 8:055時間25分
    心拍数デプロイ直前に上昇72 → 118
    カフェイン1日の上限を12時に到達3杯

    この1週間

    今週の目標(3000歩)

    数字はぜんぶ架空です。ただし、640歩の日だけは実話です。

    データは端末内に保存されます(されません)

    フィットネス

    ムーブ 360 / 500 kcalエクササイズ 12 / 30 分スタンド 11 / 12 時間

    ワークアウト

    スタンドリングだけよく閉じます。座りっぱなしに耐えかねて立つからです。

    今週のトレーニング: 0 回

    ホーム

    シーン

    この家には部屋が1つしかありません。机のある部屋です。

    1 つの家 | 応答するデバイス: 0

    ウォレット

    tomokiOS カード6400 0000 0000 0640残高 640KB | 有効期限 2006/06
    メロンソーダ ポイント★ ★ ★ ☆ ☆あと2杯で1杯無料
    搭乗券(未使用)TOKYO → クパチーノ出発時刻: いつか

    3枚とも使えません。使えないカードほど、財布から出ていきません。

    カード 3 枚 | 使えるもの 0 枚

    翻訳

    日本語エンジニア語
    文を入れて「翻訳」を押してください。

    よく使う言い回し

    ちょっと確認します→ 今から調べます(見当はついていません)
    一旦これで→ 直す気はあります(時期は未定)
    ベストエフォートで→ 約束はできません

    オフライン翻訳が常時オンです。というより、通信していません。

    対応言語 2 | オフライン翻訳: 常時

    株価

    TOMOtomokiOS 総研640.0+6.40%
    MELNメロンソーダ飲料1,206.5+12.06%
    INFRインフラ層ホールディングス3.2-99.90%
    CFFE深夜カフェイン303.0+3.03%
    市場開いています架空の市場が
    ポートフォリオINFR に全力含み損 -99.9%

    INFR だけ現物で持っています。ゴミ箱の中にある 3.2GB と、株価の 3.2 は無関係です。

    市場: 開いています(架空の市場が)

    探す

    3台とも同じ場所にあります。持ち歩く習慣がないので、探す必要もありません。

    デバイス 3 台 | 全員オンライン

    表計算 — 家計簿.numbers

    項目今月先月
    ドメイン代
    Cloudflare
    コーヒー
    インフラ学習書
    合計00

    セルは編集できます。合計はちゃんと計算されます。ただし保存はされません(このOSの共通仕様です)。

    4行×3列 | 数式: 合計だけ対応

    文書 — 名称未設定.pages

    0 文字自動保存: OFF

    第1章の1行目で止まっています。2章の構想はあります(頭の中に)。

    1 ページ | 0 文字 | 自動保存: OFF

    スライド — 事業計画.key

    tomokiOS 26素通り禁止オペレーティングシステム1 / 5

    5枚で終わる事業計画です。長い資料は読まれない、というのが本人の持論です。

    5 スライド | 発表練習: 0 回

    フリーボード

    30秒で描いた犬は、だいたいアシカになります。仕様です(ブログにも同じことが書いてあります)。

    ボード 1 枚 | 共同編集: ひとり

    ジャーナル

    • 2026/09/01アプリを増やした。増やしすぎたかもしれない。
    • 2026/08/28Wablo を出した。へたな絵ほどよく届く。
    連続記録1日更新のたびに1日から
    ふりかえり毎年12月やったことはありません

    3日坊主になりやすいので、1行だけ書けばよいことにしました。それでも3日です。

    1 件のエントリ | 連続記録: 1日

    スティッキーズ

    書き換えられます。画面を閉じると元に戻ります。付箋とはそういうものです。

    3 枚 | 剥がれません

    テキストエディット — 名称未設定

    0 文字プレーンテキスト | 折り返しあり

    最近使った項目

    名称未設定いま開いているもの未保存
    やること.txtメモ帳と内容が重複未保存

    リッチテキストにはできません。書式で悩む時間がなくなるので、これで十分です。

    プレーンテキスト | 折り返し: あり

    拡大鏡

    このOSの利用規約は1行です。素通り禁止。小さく書いてある大事なことほど、あとで効いてきます。

    コントラスト標準
    読み上げOFFスピーカーがないため

    倍率を上げるほど、読まなくてよかった文章がよく見えるようになります。

    倍率 1.0× 〜 4.0×

    辞書

    見出し語は8語です。出典は本人の体感。

    類語辞典もあります。「一旦」と「ひとまず」と「とりあえず」は、すべて同じ意味でした。

    見出し語 8 | 出典: 本人の体感

    ショートカット

    ここのショートカットは、本当にターミナルのコマンドを走らせます。結果はこの下と、ターミナルのウィンドウに出ます。SPにターミナルは無いので、結果はこの下にだけ出ます。安全です。

    5 個のショートカット | 全部1手順

    ヒント

    今週のヒント来週の予定はありません
    デスクトップを右クリック壁紙を変えたり、再起動したりできます。ウィンドウの整列もここです。
    ターミナルで help隠しコマンドの一覧が出ます。sudo は通りません。
    アイコンを長押しジグル編集になります。ターミナルだけは消せます(すぐ戻ってきます)。
    ステータスバーを引き下ろすコントロールセンターが出ます。壁紙と明るさは本当に効きます。
    アプリの下端から上へスワイプホームに戻ります。途中で止めるとAppスイッチャーです。

    ヒントを全部読んでも、インフラは得意になりません。それは本人も同じです。

    今週のヒント | 来週の予定: なし

    サポート

    tomokiOS サポート担当者は本人ひとりです

    よくある質問

    受付時間は「起きているとき」です。深夜のほうがつながりやすい傾向にあります。

    受付時間: 起きているとき

    アクティビティモニタ

    CPU
    メモリ(640KB中 639KB)
    ディスク
    プロセスCPU%メモリ
    tomokiOS本体0.4128 KB
    なつかしさドライバいちばん重い12.0256 KB
    window-managerドラッグ担当0.864 KB
    terminal (zsh)実権限なし0.032 KB
    infra-layer応答なし
    coffee-daemon常駐3.248 KB
    visitors-counter素通り検知0.112 KB

    いちばんCPUを使っているのは「なつかしさドライバ」です。これは仕様というより、性格です。

    プロセス 7 | CPU 使用率: 気分

    システム情報

    ハードウェアの概要

    モデル名tomokiBook
    プロセッサなつかしさ 100%
    コア数1集中したいので
    メモリ640 KBじゅうぶん
    グラフィックスドット絵内蔵
    シリアル番号000640KB
    稼働開始2006年

    ソフトウェア

    システムtomokiOS 26.0.4 "Cream Soda"
    カーネルNext.js + OpenNext
    実行環境Cloudflare Workersインフラは他人にまかせた
    ストレージCloudflare KV(訪問者カウンタのみ)

    唯一の永続データが「何人が素通りしたか」の数字です。優先順位は、たぶん間違っていません。

    ハードウェア概要 | シリアル: 000640KB

    タイムマシン

    バックアップ先2006年容量は無限(過去なので)
    最新のバックアップ2006/06/06 06:06
    次回未定

    過去に戻れるのは1回だけです。使いどころが難しいので、まだ使っていません。

    最後のバックアップ: 2006年 | 次回: 未定

    画面共有

    状態待機中
    共有相手0 名募集はしていません
    画質実物大

    画面を共有すると、机の上が映ります。片づけてからにしてください。

    接続先: 未入力 | 待機中

    Bluetoothファイル交換

    BluetoothONいちおう
    ペアリング済み0 台
    このアプリの起動回数1 回いま

    入っているのは知っているけれど、使ったことはない。そういうアプリも、OSには必要です。

    ペアリング済み 0 台

    AirMacユーティリティ

    検出されたベースステーション0 台
    製品の販売終了しました2018年
    思い出いっぱい

    白くて丸い機械のことを、たまに思い出します。このアプリはそのために残してあります。

    検出されたベースステーション: 0

    Font Book

    DotGothic16UIクローム用。ドットの角が立っているのが好み。使用中
    ヒラギノ角ゴ本文用。読みやすさは、こだわらないところで効く。使用中
    その他 0 書体増やすと迷うので、増やしていません。
    640KB あればじゅうぶん640KB あればじゅうぶん

    2書体で足りています。書体を選ぶ時間は、だいたい本文を書く時間より長くなります。

    2 書体 | 使用中 2

    イメージキャプチャ

    デバイス0 台スキャナは持っていません
    読み込み先デスクトップ
    形式PNG

    スキャナを持っていた時期があります。いまは、ぜんぶ写真で済ませています。

    デバイス 0 | 読み込み先: デスクトップ

    プレビュー — ogp.png

    tomokiOS 26
    ogp.png | 1200×630 | 48 KB

    このOSでいちばん外に出ている画像です。SNSでは、これしか見えていない人もいます。

    1 / 1 ページ | 100%

    QuickTime Player

    00:0000:00
    # 収録済みのファイル
    (なし)
     
    # ヒント
    このアプリは、だいたい画面収録のためだけに開かれます。

    再生機能もありますが、再生するものがありません。用途がひとつに絞られた、正しいアプリです。

    長さ 00:00 | コーデック: 想像

    オートメーター

    1. デスクトップのファイルを取得
    2. 名前に「あとで」を追加
    3. 何もしない
    ワークフロー1 個
    実行回数0 回いまのを除く

    ロボットが手を振っている画面が好きで残しています。自動化した仕事は、まだありません。

    ワークフロー 1 | 実行 0 回

    スクリプトエディタ

    tell application "tomokiOS"
    activate
    open window "プロフィール.txt"
    display dialog "640KBあればじゅうぶん"
    end tell

    英語の文章みたいに書けるのが好きでした。読めるけれど、書けない言語でした。

    未コンパイル | 構文: 雰囲気

    Xcode — tomokiOS.xcodeproj

    tomokiOS.swift
    Wallpaper.swift
    InfraLayer.swift
    Deploy.swift
    import SwiftUI
     
    struct TomokiOS: App {
    // メモリは 640KB あればじゅうぶん
    var body: some Scene {
    WindowGroup { Desktop() }
    }
    }

    ビルドログ

    ▸ Compiling TomokiOS.swift
    ▸ Compiling Wallpaper.swift
    ⚠︎ InfraLayer.swift:1: warning: 未実装のまま出荷されています
    ⚠︎ ... 他 639 件の警告
    ✓ Build Succeeded (12.0s)

    警告が640件あります。数が 640 になった時点で、直すのをやめました。

    Build Succeeded | 警告 640 件

    グラフ計算機

    関数を選ぶと曲がります。

    y = sin x気分の上下
    y = x² / 4締切前の作業量
    y = 2^x / 8技術的負債
    y = 4 / xやる気

    定義域は -6 から 6 です。それ以上のことは、このOSでは起きません。

    2D | 定義域 -6 〜 6

    Texas Hold’em

    ディーラーあなた
    チップ 640 | ブラインド 10/20

    役の判定はちゃんとやります。チップは何回負けても 640 に戻ります。減らないことが、いちばんの救済措置です。

    チップ: 640 | ブラインド: 10/20

    NewMatch.app

    新しい友だちが作れるアプリ「NewMatch」は、スワイプで気になる人を見つけ、お互いにLikeを送るとマッチし、メッセージで仲良くなり、同性の友だちもどんどん作れ、共通の趣味や行きたい場所、音楽を共有できるなど、色んな探し方で気の合う人を見つけ、毎日をもっと楽しくしてくれます!

    ひらく ↗

    所有者: tomokisun

    BeMatch.app

    BeRealを交換できる無料アプリです。繋がりたい人をスワイプで選ぶことができます。気になる人とマッチしてBeRealをもっと楽しもう!

    ひらく ↗

    所有者: tomokisun

    CalculatorMultiple.app

    デバイスを横向きにすると、3つの計算機が表示されます。同時に複数の計算が必要な場合に使用できます。

    ひらく ↗

    所有者: tomokisun

    Blackjack Counting.app

    このアプリを使えば、誰でも簡単にブラックジャックのカウンティングができます!

    ひらく ↗

    所有者: tomokisun

    Super NFT Products.app

    ACQUIRED → GMO Pepabo, Inc.

    あなたが所有するオリジナルNFT商品を購入できるサービスです。

    ひらく ↗

    所有者: GMO Pepabo, Inc.

    nererun.app

    子供たちの睡眠をサポートするために、寝かしつけに特化した読み聞かせサービスです。

    ひらく ↗

    所有者: tomokisun

    PokerONE.app

    ACQUIRED → deck, Inc.

    アミューズメントカジノのトーナメントを簡単に検索できるサービスです。

    ひらく ↗

    所有者: deck, Inc.

    wablo.md

    Wablo

    Wabloは、友だちに30秒の落書きを送るための iOS アプリです。テキストなし、写真なし、スタンプなし。指で描いたぐにゃぐにゃの線が、そのままカードになって友だちの机の上に積まれます。会社の仕事とは別に、個人プロジェクトとしてひとりで作っています1

    なんで落書きなのか

    メッセージアプリを開くと、まず「なにを書くか」を考えることになります。写真を送るなら「どれを選ぶか」。どちらも、ちょっとだけ腰が重い。用事がないと送れない空気があります。

    でも、仲のいい友だちに伝えたいことの大半は、用事ではありません。いま思い出した。授業がひま。へんな犬を見た。そういうものは文章にすると大げさになるし、送ったあとの既読の重さにも耐えられません。

    だから Wablo は、線だけにしました。指でぐにゃっと描いた線には、上手も下手もありません。うまく伝える義務から自由です。むしろ、へたな絵ほどよく届きます。

    30秒しかありません

    Wablo のキャンバスには30秒のタイマーがついています。時間切れになったら、その時点の絵がそのまま送信されます。描き直しはできません。

    ひどい仕様に聞こえるかもしれません。でもこれは罰ではなくて、考えすぎる前に送るための仕掛けです。30秒あれば犬は描けます。上手な犬は描けません。それでいいんです2

    ちなみに、まっしろのまま送ろうとすると、さすがに止められます。なにか一本は描いてください。

    画面遷移を捨てて、机にしました

    ここからが本題です。UXの話を、すこし長めにさせてください。なにしろ、いちばん頑張ったところなので。

    Wablo には画面遷移がありません。ナビゲーションスタックも、タブビューも、モーダルもありません。かわりに、横幅が画面6枚ぶんある大きな机がひとつだけあります。

    友だちの落書きが積まれる「らくがき」。自分の場所である「じぶん」。友だちいちらんの「ともだち」。これらは切り替わる画面ではなく、最初からぜんぶ机の上に並んでいます。左にらくがき、まんなかにじぶん、右にともだち。アプリの構造が、そのまま空間の記憶になります。「あの機能はどの画面だっけ」ではなく「あれは右のほうに置いてあった」と覚えてもらう設計です。

    そして、ユーザーに「画面が変わった」と感じさせる手段を2つだけに絞りました。カメラが動くか、机の上の物が動くか。この2つの語彙だけで、アプリ全体のナビゲーションを組み立てています。

    カメラだけが動く

    タブを切り替えても、Wablo では画面がスライドしません。かわりに、カメラがふわっと浮き上がります。

    まず机全体が見える高さまで離陸して、空中を移動し、目的の場所へ降りて着席する。3幕構成で、ぜんぶで約1秒。離陸の瞬間、滞空の頂点、着地で、それぞれ違う振動が指に刻まれます。俯瞰中のカメラにはマイナス1.8度だけロールをかけてあって、これは子どもが身を乗り出して机の反対側を覗き込むときの、頭の傾きのつもりです。

    この間、机の上の物は1ピクセルも動きません。動くのはカメラだけ。だから俯瞰したとき、隣のエリアが「本当にそこにある」のが見えます。しかも各エリアは机の上に少しずつ傾けて置いてあって、上から見ると散らかった紙の束のようです。着席するとカメラが逆方向にロールして傾きを打ち消すので、手元の画面はまっすぐ。散らかりは俯瞰でだけ見える、という小さな贅沢です。

    ひとつだけカメラについてくるものがあります。右下に貼ってあるタブのステッカーです。カメラが飛んでも、あれだけは画面の同じ場所に居続けます。机の上の物ではなく、手に持っている物だからです。

    カメラの移動は酔いやすい人には酔うので、Reduce Motion をオンにするとカメラは一切飛ばず、0.11秒の短いクロスフェードに切り替わります。世界観よりも、気持ち悪くならないことが先です。

    描くときは、机を片付ける

    では描くときはどうするか。ここでもカメラは動きません。机を片付けます。

    返信ボタンを押すと、上のバーは左上へ15度傾きながら、カードの束は右へ11度傾きながら、返信ボタン自身は右下へ18度傾きながら、それぞれ固有の方向へ紙切れのように飛んでいきます。残るのは方眼紙だけ。そこへ、まっさらな紙が下からすっと上がってきます。

    描き終えて戻るときは、同じパーツが同じ方向から同じ角度で帰ってきます。行きと帰りが対称だから、「片付けた物を元の場所に戻した」ように見えます。画面が切り替わったのではなく、机の状態が変わっただけ。描画中もあなたは同じ机の前に座っています。

    ルールもひとつ決めました。カメラが飛んでいる間は机を片付けない。机が片付いている間はカメラを飛ばさない。両方が同時に起きると、俯瞰で小さく縮んだ紙が斜めに飛んでいく「壊れた物理」が見えてしまいます。この世界の説得力は、そういう一瞬で崩れるので。

    紙には重さがある

    送信した落書きの動きは、いちばん振り付けに時間をかけたところです。

    描き上げた紙がすこし持ち上がって、画面の外へ飛んでいく。しばらくして、画面の外から戻ってきて、束の一番上にぽとっと着地します。ここからが本番で、着地の衝撃は6段階に分けてあります。束がわずかに沈み、跳ね返り、揺れながら収まっていく。この揺れは下のカードほど小さく伝わるようにしてあって、1枚下は86%、2枚下は50%の振幅です。紙の束に紙が落ちたときの、あの伝わり方。ぜんぶで約1.2秒です。

    更新ボタンを押すと、束はいったんばらばらに散らばって、画面の外から1枚ずつ飛び込んで積み直されます。1枚ごとに小さな振動が刻まれるので、何枚届いているか、指先でなんとなくわかります。

    なにもしていないときも、束は数秒おきにごくかすかに揺れています。机の上の紙は、完全には静止しないものなので。

    くるくるは机に存在しません

    ローディングにも同じ理屈を通しました。方針は単純です。回転する円弧は、この机の上に存在しない。だからスピナーは使いません。

    300ミリ秒以内に終わる待ちには、なにも出しません。一瞬だけ現れて消えるインジケータは点滅として知覚されて、「なんか遅い」という記憶だけを残すからです。それより長い待ちには、これから届く紙とまったく同じ寸法の白い紙を、先に机へ置いておきます。データが届いた瞬間、紙の中身が入れ替わるだけで、レイアウトは1ピクセルも動きません。

    読み込みに失敗したときは、墜落した紙飛行機の絵が出ます。取りに行った紙飛行機が落ちた、それだけの話なので、拾ってもう一度飛ばせばいい。エラーまで含めて、ぜんぶ机の上の名詞で語ることにしています。

    方眼紙、クレヨン、ラムネ色

    見た目の合言葉は「方眼紙」「クレヨン」「ラムネ色」「ぷにっと押せる」「ぽとっと落ちる」の5つです。

    白いカードと淡い色で、主役はあくまで描かれた線。角は大きく丸く、線は太く、ボタンは押すと少し沈んで戻ります。ミニマルで洗練されたSNSではなく、机の上の紙と、子どものころのおもちゃ箱。ガラスや金属のようなプレミアムな質感は、意図的に避けています。

    やらないことリスト

    作る機能を決めるより、作らない機能を決めるほうに時間を使いました。

    フィードはありません。いいねの数も、ランキングも、公開プロフィールもありません。フォロワーという概念自体がないので、増やすものも減らすものもありません。リアクションは、カードをダブルタップして置ける小さなマークだけ。しかも5個で打ち止めです。

    SNSが作りたかったわけではないからです。作りたかったのは、放課後の教室で、となりの机に落書きした紙を投げる、あの感じです。

    中身の話をすこしだけ

    iOS は Swift 6 + SwiftUI + The Composable Architecture。机とカメラの物理はぜんぶ自前で、カメラの移動は Core Animation に直接駆動させているので、本体の処理が一瞬詰まってもカメラは止まりません。サーバーは Cloudflare Workers + Hono、データベースは Neon、画像は R2 という構成です。ロック画面には WidgetKit のウィジェットで、友だちの最新の落書きがそのまま出ます。アプリを開くより先に、犬(もしくはアシカ)が目に入る設計です。

    インフラが苦手な人間3がひとりでサーバーまで面倒を見られているのは、ぜんぶエッジのプラットフォームがえらいおかげです。

    さいごに

    画面遷移をひとつも作らずにアプリをひとつ作る、というのは、正直に言えば遠回りでした。でも「アプリを操作している」ではなく「机の上の紙を触っている」と感じてもらえる瞬間が一度でもあるなら、遠回りのぶんは回収できたと思っています。

    Wablo はまだ小さなアプリです。でも、友だちのロック画面にへんな犬が届いて、3秒だけ笑ってもらえたら、このアプリは仕事をしたことになります。会話がそこから始まってもいいし、始まらなくてもいい。

    伝えたいことが特にない日にこそ開いてもらえるアプリに、なれたらと思っています。結論は、みなさんの指で描いてください。

    1. 内部のリポジトリ名は、いまだに開発当初のコードネームのままです。名前を直す時間があったら机の物理を作りたかったので。
    2. 30秒で描いた犬は、だいたいアシカになります。仕様です。
    3. くわしくはデスクトップのゴミ箱にある infra.zip をどうぞ。復元には失敗します。

    ともだちに送るときは、アドレスバーの tomokisun.com/blog/wablo をどうぞ。ひらくと、このウィンドウがそのまま開きます。

    UTF-8 | Markdown | 読了まで: 30秒ではたぶん無理
    App ライブラリ
    ユーティリティ
    仕事と作成
    つながり
    メディア
    くらし
    開発
    あそび

    69個ぜんぶ入っています。ホーム画面に出していないアプリも、ここから開けます。

    🗑
    ゴミ箱
    infra.zip がゴミ箱で3年間眠っています
    "ターミナル" は tomokiPhone では動作しません

    このAppはマウスとキーボードと本人のやる気を必要とします。