2tch配信終了で見直すこの15年
もう,何年もアップデートしていないので知らないかもいらっしゃる方もいると思いますが,2tchは,iOS向けの2ちゃんねるビューアです.実際,この5年くらいはAppStoreのログを見ていませんが,100万ダウンロードは超えていたと思います(多分).2008年9月に最初のバージョンが公開されたので,13年弱というところでしょうか.iOS SDKが公開される前の野良アプリ時代も含めると,14年ということになります.しかし,4年くらい前に審査がにっちもさっちも行かなくなり,メンテナンスも事実上止め(っていうかできない)ていたので,実質10年というところでしょうか.今まで,使ってくださっていたユーザ各位,今までありがとうございました.また,色々フィードバックはバグレポートを送ってくださったユーザ各位,ありがとうございました.
未公開のSwiftバージョン.多分誰も見たことないはず.
私は,2tchの開発を通じて,さまざまな開発者コミュニティと関わることができ,さらに本を執筆したり,色々なところで講演の依頼をいただいたりと,割と楽しい時間を送ることができました.そもそも,コンシューマ向けのアプリなど開発したことがないホビープログラマの私のアプリをたくさんの方が使ってくれたことは非常に楽しい経験でありました.2tchを作っていて,実際,脅迫メールが来て警察に相談したこともあったりと,負の経験も多少ありましたが,ここでは,後進に向けて,楽しかったこと,よかったことを中心に話をまとめたいと思います.
2tchの歴史
2tchの歴史は,基本Appleの審査の歴史でした.カリフォルニアから突然電話がかかってきて,あまり意味を分かっていない日本語ができる英語ネイティブの方から放送禁止用語を読み上げられ,これらを表示できないようにしろといった指示を受けたこともあります.その歴史は,同類の2ちゃんねるアプリが審査で軒並み全滅していくなか,突然,私のアプリだけが審査が通ったり,その逆もあったりと,まさに,Appleに生殺与奪握られた開発者の右往左往のそのものでありました.2tchの審査は,3年ほど前,悪名高き,"4.2 Minimum Functionality"と,フィルタしきれないアダルトコンテンツのフィルタ不足で,リジェクト祭りに突入し,開発を中止しました.
実を言うと,この審査に落ち続けたバージョンの2tchは,Swiftで書き換えたバージョンであり,これによって,公開されずに死蔵されたコードは結構な量なのですが,まぁ,それも人生・・・という・・・・ことです.もっというと,そのコードもSwift4.0で止まっているので,現状,相当書き換えないと,美しくない状態でもあります.
2chのAPI化はどうだ?と言われる人もいるかもしれませんが,あれは大した問題ではありませんでした.まぁ,サービス配信側が一定の売上やユーザ管理をするのは私は当たり前だと思いますので,まぁ,言われた通り,淡々とやるだけという感じでありました.
iPhone OS 2.0~4.0くらいまでは,とにかくデバイスが遅かったので,処理をいかに高速化するかに腐心していました.データの保存形式をバイナリにして,読み込みを高速にしたり,独自でレイアウタを実装するのは大変でしたが,なかなかに勉強になりました.Swiftへの書き換えを含めて,3回くらい作り直しをしました.理由は,勉強して,新しいアーキテクチャを考え直し,よりコードを減らすために行ったもの,レイアウトをよりインタラクティブにするために行ったもの,Swiftへの書き換え・・・といったところです.
もっとも大変だったのは,二回目くらいのアーキテクチャの刷新で,キャンセル,リダイレクト可能かつ,結果を非同期で受けとることができるダウンローダを自作したときでした.私の不勉強でブロックでダウンロード結果を処理するところまでは自作できませんでしたが・・・・画像のダウンロード,スレッド,スレッド一覧,まちBBS,書き込みなど様々な通信の基盤として使うことできるものを頑張って作ったのを覚えています.
次に大変だったのは,CoreTextやNSStringを使って,タップ可能なスレッドを表示するところビューを実装したところです.その結果は,以下のリポジトリで公開しています.もうメンテナンスしていないので使えないかもしれませんが・・・・.
潮目
SDKに関する情報がNDAであったために,コミュニティを作り,クローズドに情報交換を行うしかありませんでした(これについても,コミュニティだったらよかったのかは,未だグレーな気がしますが).このコミュニティ活動で知り合った人たちは,本業や研究のコミュニティとちょっと違う分野であったので,私にとって非常に新鮮なものでありました.今では,みなさん,その頃とは所属する会社であったり,業態であったり,業務が全く違ったりしていますが,ここで得た知己は私にとってかけがえのない財産になったとと思います.@k_katsumi, @fladdict, @shachi, @Psychs, @mootoh, @cqa02303, @takiuchiのみなさんですかね・・・・ここからもどんどん大きくなっていったので,あげきれません・・・・・.残念ながら,もう何年も物理的に会ってない人が多いです.
このコミュニティをベースに,本書いたり,色々やっていましたが,数年後に,勉強会なんかの趣旨が変わってきたなというのが私の記憶の欠片です.本を書いた数年後から,「何が開発できるか?次にどんな機能がiOSに実装されるか?新しいAPIやハードウェアでどんなおもしろいことができるか?」というテーマから,「どうやって作るか?どういうフレームワークがよいのか?」というようなテーマに勉強会の主眼が移っていったなというのが私の感想です.MVCなんて,初期のコミュニティでは,まったく話にでてきませんでした.まさに,このテーマの切り替わりの潮目がiOS,ひいてはAndroidの開発が様々な企業に注目され,必須とされ始めたモバイル開発業界の転換点だったのかと今更ながらに思います.もう,この頃になってくると,趣味で開発している私(本業でもiOS関連の仕事に携わっていましたが,直接の開発はやっていませんでした)は,話についていけなくなり,メンバーも若い人たちが増え,古くからの知己たちも,仕事なんかが移り変わっていき,コミュニティから疎遠になり始めました.
後輩は先輩になる
私がまた,コミュニティにぽつぽつで顔を出し始めたのはSwiftがリリースされてからでした.新しい言語が出てきて,関数型言語というのを勉強してみようと思ったからです.まさに,今までは発表者という立場が多かったですが,聴講がメインでコミュニティに復帰した感じでした.そこで,ちょっとうれしいというか,驚愕というか,色々な感情が入り混じる出来事がありました.コミュニティのメンバーから「学生の頃,sonsonさんの本やブログをめっちゃ読んでコード書いてましたよ.お会いできてうれしいです」と話しかけられたのです(細部はあやふや).20年前にMacOS XのAquaに魅せられて,Objective-Cをぽつぽつ始めた学生がその10年後に偉そうにプログラミングの本を書いて,それをまさか読んでいた若手に挨拶されるようなことになるとは,本人に全く予測もつかないことでありました.
心の声(学生・・・・?え・・・・?あの本書いたの最近・・・・ではないな・・・っていうか,あの本を読んで勉強・・・?え・・・なんか僕,前途ある若者の未来に影響与えちゃった・・?烏滸がましい?え?)
みたいな・・・・・.実は,私も,その彼と同じような経験を,したことがあったのです.ご本人はもう忘れてらっしゃるというか,記憶にも残っていないと思いますが,その相手は清水亮さんです.3Dプログラミングが好きだった私は,「Direct3Dプログラミングガイドブック」を買って,Direct3Dのコードを大学生の頃に書きまくっていました.学生の頃,僕より3つ年上なだけなのに,こんだけコードが書けて,本も書ける人がいるのか・・・・すごい・・・・.そう思っていました.まさに,雲の上の存在のように当時学生だった私には思えました.いつかのWWDCで飲み会に途中から私が参加した時,そのテーブルに清水亮さんが座っていらっしゃったのです.思わず,「Direct3Dプログラミングガイドブック読んでました」と伝えたのを今でも覚えています.清水さんは,「また古い本を・・・・・・」とおっしゃっていましたが・・・.
そんな昔話を,コミュニティのメンバーから話かけられたときに思い出すと同時に,本を書く意味やコミュニティで活動することについて,再度考えさせられました.やはり,コミュニティへの貢献というのは大切だなぁと.私の本業は,リサーチエンジニアで,論文を書いたり(最近全然書いてない・・・)するのも仕事のウチです.論文を発表することの本質は,コミュニティへの貢献です.まさにこの辺は,ソフトウェアエンジニアリングも,研究者も変わらないと思います.ソフトウェアエンジニアはオープンソースを軸に,研究者は論文発表を軸にコミュニティ活動を行なっていると解釈してもいいのかもしれません.
話がまとまらない
私は,誰かを驚かせたり,喜ばせるために何かを作ったり,発明することを仕事にしたいと17年間,働いてきました.数年前に割と研究者としての仕事をどうしようかな・・・・と考える時期もありましたが,ちょうど,そのタイミングでありがたいことに,新しい目標を見つけることができ,今現在,研究者として楽しくやれています.一方で,オープンソース的な活動やアプリ開発から見たソフトウェアエンジニアとしての活動は,模索中であります.近年,何のアウトプットもないにコミュニティに顔出すのも嫌だなと思うし,何もしてないと技術の進化が早いので,あっという間に取り残されてしまうからです.その模索の最中生まれたのが,LLVMプロジェクトへの貢献であったり,nextstep.fmであったりします.
今までは,Obj-Cを知ってる&C/C++をちょっと書けることを活かし,iOSなんかのモバイルプログラミングの立ち上がりにアーリーアダプターとしてなんとか貢献するという立ち位置で活動してきました.今後は,この老害という立ち位置と,今までと違いリサーチエンジニアとしての立ち位置を使って貢献していければなと思います.
sonsonの次回作(貢献)にご期待ください.
・・・・・・・・で終わると思った?
もう数年経って,思いも薄れてきたので,過去の2tchのソースコードなんかを公開することにしました.
比較的新しいものは,広告ライブラリや認証に関するコードなんかが含まれていて,ちょっと公開に時間がかかりそうですが,追々やっていきます.そしてですね,このソースコードを動かしてみよう!というアンカンファレンスをiOSDC2021でやりました.そんで,なんか賞もいただいてしまいまして・・・・.
この時の話もおもしろかったので,また書きたいと思います.