"Paper" テキストエディタ、ソロ開発者の9年間
- 2015年、一般的なフルスタックWeb開発者として、Apple開発の世界とは距離があった。
- Macを使う中でインディー開発者たちのアプリに魅力を感じ、シンプルでエレガントなMarkdownエディタであるiA Writerに触発され、似たアプリを作ることを決めた。
- Mac向けネイティブテキストエディタの開発のために、Xcode、AppKit、Objective-Cなど新しい技術スタックの学習を始めた。
- アプリ名を Paper とし、極端なミニマリズムを追求して、エディタを単純な長方形としてデザインした。
- 2017年にMac App StoreでMacアプリを公開し、2019年にはiOSアプリも公開した。
ネイティブアプリを選んだ理由
- Electronアプリではなくネイティブアプリを選んだ理由は、最高のユーザー体験の提供を目標にしていたからだ。
- ネイティブアプリは軽量で高速なうえ、テキストに関する独自機能を実装するための方法もより多く提供してくれる。
Objective-Cを選んだ理由
- 2015年にSwiftがまだ初期段階だったとき、Objective-CとSwiftでそれぞれ空のXcodeプロジェクトをコンパイルし、
.app パッケージを比較した。
- SwiftアプリはSwiftランタイムを含むため約5MBで、Objective-Cアプリは非常に軽量な約100KBだった。
- より軽く配布できるアプリを求めていたため、Objective-Cを選んだ。
サードパーティ依存
- Paperにはサードパーティ依存がない。
- すべてを自前で構築することで、競合に対してわずかな優位性を得ている。
- たとえば、PaperのMarkdownパーシングエンジンはカスタム製で、従来のMarkdownエディタより少ないMarkdown構文をサポートしている。
ビジョン
- Paperの初期ビジョンは、iA Writerの中核機能を持ちながら、さらにエレガントでミニマルなパッケージにすることだった。
- ユーザーの注意を散らす要素を最小限に抑え、集中力を高めることに焦点を当てた。
- 時間が経つにつれて、Paperはミニマリズムを保ちながらも段階的に機能を追加する形で、市場での立ち位置を見つけていった。
アーキテクチャ
- Paperのコードは2つの スコープ で構成されている: アプリケーションスコープ と ドキュメントスコープ。
- 各スコープに対して ストーリーボード を定義し、ビューやウィジェットを記述して、スコープ内の モジュール を結び付ける。
- モジュールはアプリ内機能の一部を担当するObjective-Cクラスで、機能を特定の機能に関連するひとつの場所にまとめている。
クロスプラットフォームコード
- AppKitとUIKitは似ている一方で、多くの点で異なる。
- その差異を解消するために、Objective-Cのマクロとカテゴリ機能を使っている。
デバッグ
- Appleフレームワークでは、コードではなくドキュメントを読む必要があり、ブレークポイントを使ってコンパイル済みのスタックトレースを分析する。
有料機能
- 2015〜17年当時はサブスクリプションがまだ広く普及しておらず、App Storeでは買い切りが一般的だった。
- ユーザーフレンドリーな方法で有料機能を提供したいと考え、機能面ではなく 見た目上の アップグレードのみを有料にした。
価格設定
- 当初は2種類のPro機能セットに対して、それぞれ5ドルの買い切りで始めた。
- 現在は月額10ドルまたはライフタイム100ドルの単一セットに価格設定している。
- 価格実験を通じて、ユーザーは無名の開発者のアプリに対しても最大100ドルまで支払う意思があることを発見した。
難しい部分
- テキストエディタは複雑で、OSのアップデートごとに新しいテキスト挿入、更新、操作の方法が追加される。
ギミック
- Thingsアプリに触発された ウィンドウサイズ変更バウンス のような楽しい機能を追加した。
GN⁺の見解:
- 革新的なアプローチ: 開発者はネイティブアプリ開発の経験がなかったにもかかわらず、ユーザー体験を最優先に据えてPaperを開発した点が印象的だ。これは、ソフトウェア開発においてユーザー中心設計がいかに重要かを示している。
- 学習と成長: 新しい技術スタックを学び、それを通じて製品を作り上げた過程は、初級ソフトウェアエンジニアにとっても刺激になる。これは、継続的な学習と挑戦が開発者として成長するために不可欠であることを強調している。
- ユーザー体験の重要性: Paperの成功要因のひとつは、ユーザー体験への細やかな配慮とミニマリズムへの集中にある。これは、ユーザーが本当に望むものを理解し、それを製品に反映することがどれほど重要かを示している。
7件のコメント
Appleの開発ドキュメントの大半は不親切なので、文書をかなり掘り返して調べなければならないのですが……それでも情報が足りないとSDKインターフェースまで探ることになる場面が多くて……別の意味で尊敬しますね。
「化粧的アップグレード」とは何だろうと思ったのですが、原文は
visual changesなんですね。「化粧的だ」という言葉は使いますか? 私は初めて見ました。
neo が ai bot なので、機械的な翻訳になったみたいですね(笑)
原文は cosmetic upgrade ですね
それなら、美的アップグレード程度のほうがより良さそうに見えるけど…
ロールモデルになりそうな開発者ですね
Hacker Newsの意見
「周辺部の細やかな部分こそが魔法のようなもの」
「iOSアプリ開発者として15年間の経験に基づく素晴らしい文章」
「Appleプラットフォームにおける低依存/無依存開発の可能性」
「Swiftの発展と、プラットフォーム内蔵またはバイナリ最適化に関する推測」
「依存関係の選択に対する不信と学習の重要性」
「AppKitとMac開発に関する学習資料とおすすめの要望」
「細部への注意と職人技への敬意」
「回転して取り消すジェスチャーへの興味深い言及」
「ブログとアプリのミニマリズムへの称賛」
「Apple開発エコシステムにおけるSDKコードへのアクセス不足への驚き」