28 ポイント 投稿者 GN⁺ 2024-01-06 | 7件のコメント | WhatsAppで共有

"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⁺の見解:

  1. 革新的なアプローチ: 開発者はネイティブアプリ開発の経験がなかったにもかかわらず、ユーザー体験を最優先に据えてPaperを開発した点が印象的だ。これは、ソフトウェア開発においてユーザー中心設計がいかに重要かを示している。
  2. 学習と成長: 新しい技術スタックを学び、それを通じて製品を作り上げた過程は、初級ソフトウェアエンジニアにとっても刺激になる。これは、継続的な学習と挑戦が開発者として成長するために不可欠であることを強調している。
  3. ユーザー体験の重要性: Paperの成功要因のひとつは、ユーザー体験への細やかな配慮とミニマリズムへの集中にある。これは、ユーザーが本当に望むものを理解し、それを製品に反映することがどれほど重要かを示している。

7件のコメント

 
woung717 2024-01-06

Appleの開発ドキュメントの大半は不親切なので、文書をかなり掘り返して調べなければならないのですが……それでも情報が足りないとSDKインターフェースまで探ることになる場面が多くて……別の意味で尊敬しますね。

 
ndrgrd 2024-01-06

「化粧的アップグレード」とは何だろうと思ったのですが、原文は visual changes なんですね。
「化粧的だ」という言葉は使いますか? 私は初めて見ました。

 
geeker 2024-01-08

neo が ai bot なので、機械的な翻訳になったみたいですね(笑)

 
apkas 2024-01-07

原文は cosmetic upgrade ですね

 
cosine20 2024-01-08

それなら、美的アップグレード程度のほうがより良さそうに見えるけど…

 
ragingwind 2024-01-06

ロールモデルになりそうな開発者ですね

 
GN⁺ 2024-01-06
Hacker Newsの意見
  • 「周辺部の細やかな部分こそが魔法のようなもの」

    • ユーザーは最初、アプリの細かな部分に気づかないかもしれないが、時間が経つにつれてそうした点を発見していく。
    • こうした細やかな追加機能が、ユーザーがアプリを単に気に入る段階から愛する段階へ進む要素として作用する。
    • 開発者がユーザーを理解しており、製品がきちんと手入れされているという印象を与える。
    • Procreateアプリを例に挙げ、ユーザーインターフェース(UI)を簡潔に保ちながらも、発見できる隠れた機能が多いことを称賛している。
  • 「iOSアプリ開発者として15年間の経験に基づく素晴らしい文章」

    • ネイティブ開発を貫き、サードパーティ依存を排除し、Objective-Cを使った判断が良かったと述べている。
    • Swiftへ移行したが、ときどきObjective-Cの長所が恋しくなるという。
    • アプリをダウンロードして使ってみたところ、メニューバーにある小さなヒントが気に入ったとしている。
  • 「Appleプラットフォームにおける低依存/無依存開発の可能性」

    • AppKit/UIKitの豊富さと奥深さのおかげで、サードパーティ要素なしでも完成度の高いアプリを実用的に作ることができる。
    • Qtのような他のフレームワークと比べても、Appleのフレームワークには競争力があると言及している。
  • 「Swiftの発展と、プラットフォーム内蔵またはバイナリ最適化に関する推測」

    • Swift 5からABI(Application Binary Interface)の安定化が実現した。
    • 2014年からSwiftのみを使うと決めた判断がうまく機能していることを明かしている。
    • SwiftUIについては、まだUIKit/AppKitを置き換えるほどには発展しておらず、改善すべき点が多いと考えている。
  • 「依存関係の選択に対する不信と学習の重要性」

    • コードを書く前に外部パッケージやライブラリを追加することへの反感を示している。
    • Appleエコシステムの欠点を前向きな学習体験へと変えた筆者のアプローチを高く評価している。
  • 「AppKitとMac開発に関する学習資料とおすすめの要望」

    • Mac開発に関する情報を探すのに苦労していると述べている。
    • Appleの最新ドキュメントが不足しており、古いドキュメントもSwift向けに更新されていないため、Xcodeの自動補完に頼らざるを得ない状況だと説明している。
  • 「細部への注意と職人技への敬意」

    • 筆者の細やかな注意と職人技を高く評価し、文章が美しく刺激を与えてくれると称賛している。
  • 「回転して取り消すジェスチャーへの興味深い言及」

    • 映画『ドクター・ストレンジ』の主人公が時間を巻き戻したり進めたりする場面を連想させるジェスチャーだと述べている。
  • 「ブログとアプリのミニマリズムへの称賛」

    • 自分が作ったアプリを使うときに感じる喜びを表現し、vim-motionsやNeovimを使うときにも似た感情を覚えるとしている。
  • 「Apple開発エコシステムにおけるSDKコードへのアクセス不足への驚き」

    • アセンブリコードを直接見なければならないという事実に驚きを示し、それが本当なのか確認を求めている。