2024年振り返り

いろいろなことについて振り返ってみます。

技術的な発表編

2024年に技術的な発表したスライドについて書いてみます。たぶん3つくらいしか発表してないと思う。

Swift 5.9 からの Observation はiOS17 未満 からも使えて struct の変更検知もできるんすかね?

ゆめみさんとこの勉強会で発表しました。

SwiftUIはAppleのクローズドな技術なんですが、SwiftUI.VIewを更新するObservationはソースコードが公開されているSwift言語自体の機能となっています。その仕組みってどうなってんのという発表です。ObservationはiOS 17以上からしか使えないんですが、Observationのコードからバックポートを作ることはある程度は可能ですよ(SwiftUI.Viewが反応するようにする仕組みは別途必要)と。かつclassしか対応していないObservationをstructにも対応することって現実的なんですかという話です。

---

TCAの Shared Stateって どういう仕組みになってんの?

NewsPicksさんとこのTCAの勉強会で発表しました。

TCAでStateを共有する機能が当時Betaリリースされて、それってどういう仕組みなんだろうという内容です。

---

良いテストコードのために悪いテストコードを理解する

MagicPodさんとこの勉強会でiOSアプリの単体テストについて発表しました。

伝えたいことをざっくり書くと、モバイルのネイティブアプリというのはブラックボックスだらけでOSさえもユーザーによって違う。そんでOSSも使わなきゃいけない場面もあり、とにかく検証を自動化してある程度把握できることを広げないといけない。それでもテストが不安定な結果になることがあるんでそれを発表時間内で伝えられる範囲で整理した、という感じです。

もちろんこれが全てじゃなく日々不安定なテストの新しいタネは見つかり、解決したりしてます。

こんな感じでテスト結果が不安定になったとき、それによって開発のサイクルが止まってまいスピードを落としてしまうので、とりあえず暫定の対応をかましてそれから恒久的対応と2段階あり、だいたいそんな場面でもスキルの差が出ると思います。そういうのは発表からは絶対にわからない。だからこういう発表をいくらやってもスキルがあるとかないとかは分からない。こんなのはただの遊びだということを念頭に置かないといけないですよね。

クライアントワーク編

遊びではなく仕事編についても書いておきます。

モバイルアプリのデータベース統合

統合したいわけじゃないんですが1アプリ内で色々使われているDBを1つにしたりしました。1つにしたという表現が正しいのかは分からない。別に誰もRealmが好きなわけじゃなく、Core DataとSQLiteの役割を減らしていったら1つになったのが正しい。

そもそもRealm自体ももうアクティブに開発されなくなっているので、本当の本当はCore DataのほうがいいのでCore Dataへの移行をすることもあるかもしれない。あと基本的に処理をSwift Concurrencyで置き換えていけるのが最高に良いけど微妙に紛らわしいこともある。

測定し思い込みを避ける

頭でわかってるけど文章で箇条書きで書いておきます

推測すな測定せよ

  • 自分の頭で雑に効率を考えてもうまくいかないので測定を重視するのをわすれない
    • 効率偏重バイアスを避けないといけない
      • 測定しデータを尊重することでバイアスを避けられる
    • 計算量を気に掛ける
      • iOSアプリでもユーザのローカルデータが多くなることがある
        • 処理の計算量を考慮する(AIに任せたいが...)
    • 計算量に気を取られずコードの使い勝手も気に掛ける
      • バイアスを避けたその先で本当に使い勝手の良いコードを書ける
        • 自画自賛のコードを書いても意味がない

おそらく大抵の人は効率偏重バイアスに囚われている。そういうなんか面倒なことをプログラミングで避けようとしているが、計算量をもとに考えたりすればいちいち無駄なことに頭を使わなくて良いと思う。すぐに面倒なく戻ってやり直せるならすぐにやり直せば良いし、取り返しが簡単じゃないならそのレベルに応じてちゃんと考えて、すぐに手を動かしてしまわない方がいいと思う。

テストコードの役割は明確にする

  • テストコードの役割は明確に
    • 単体テストは品質を下げないようにしてくれるだけで品質を向上しない
      • コードの変更でぶっこわれたことを気づける
      • 分岐の経路を想定通り辿るかを明確にできる
    • 単体テストは使い方を示す
      • 型やら入出力やらの使い方を明示するドキュメントとなるだけ
        • ドキュメントとしての読みやすさが最重視で書きやすさなんて排除していい
          • テストコードのDRYなんて無視して良い

テストコードがドキュメントでもあるので、そういうドキュメントにおいて表面的にDRYをなぞってコードを繰り返さないから書きやすいってなったとしても、それが良いテストとして意味があるとは思えないんですよね。いちいち何でも繰り返せということではなく、テストコードの大切なところを省略してしまうとデメリットの方がでかくなるので、検証したい内容に対してそれが近くに明示されていることが重要っつうか...。テストコードで繰り返しを避けてしまうのも結局、効率偏重バイアスにかかっている。

Swift Concurrencyが良いがわかりづらいことも多い

Taskが暗黙的にExecutorを引き継いだり引き継がなかったりが厳しい。具体的にはSwift 5.7で仕様が変わって自分がそれを忘れ去ってしまったりすることもあるのがなかなか厳しい。

---

おわりに

2024年もインターネットとか現実社会とかでいろいろお世話になった方達に感謝です。来年も新しいことがしたい。

あと、同人誌活動についてもおまけとして書いておきます。

おまけ: 電子書籍編

アリスとボブの株式取引 〜投資信託入門編〜

https://swift.booth.pm/items/6320101

電子書籍の同人誌をつくってみました。

きっかけとして、新NISAが始まって積立投資枠があることで、投資信託やったことなかったんですがやってみたら意味も分からず含み益が増えてしまったんですよね。個別株を買うシンプルさとは違い不思議で調べたのでそれを文章にしました。

興味深いのはYouTubeみるとインデックス投資は「複利」で増えるという人が多いんですが、その意味が分からない。複利というのは言葉としても数式でも定義されてます。

n 期末の元利合計 = 元金×(1+利率)n

その定義通りに増えるわけでは絶対ないのにYouTuberは「複利で増える」なんていう言葉を使っているわけです。意味が分からないっすよね。もっと詳しく投資信託の仕組みを調べてみたら解説している人たちが複利とは何かというのをおそらくちゃんと理解していない。言葉の定義上の使い方が正しくないのと数式が読めていない。投資信託は複利で増えているのではなく、「投資信託を売る側が、過去実績から年利という単純実績を値にし、シミュレーションをする際に複利の計算式を使っているだけ」です。そのときの表面上の説明を読んだ人がその売り手の言葉をそのまま使って複利で増えると言ってしまっている。

でも複利効果という言葉を運用会社が使ってるじゃん

三菱UFJアセットマネジメントの問い合わせに雑な回答があるんですが、すげーインチキだなと思います。

https://faq1.am.mufg.jp/answer/660f62c2b2e2fad884e65df4/?query=%E8%A4%87%E5%88%A9%E5%8A%B9%E6%9E%9C

引用すると

って何が何だか分からない度が高くないですか?すげー魔法っぽい。

  • 基準価額の上昇で複利効果が期待できる
  • 分配金や運用利益を再投資に回す
  • 利益が利益を生み資産が膨らむ
  • 元本より下がることもある

これを複利効果と呼ばれるとめちゃくちゃ変でおかしいじゃんという気持ちです。

  • 基準価額の上昇で複利効果が期待できる
    • -> 上昇しないと複利効果が発現しないとはどういうことでしょう?結果に依存してるよね
  • 分配金や運用利益を再投資に回す
    • -> それは単に再投資と呼べば良いだけじゃないかな?
  • 利益が利益を生み資産が膨らむ
    • -> それギャンブルでも同じです。ギャンブルは複利で増えるとは言わないっすよね?
  • 元本より下がることもある
    • 複利という言葉使っているのに予防線を張ってるように思える...

もしくは複利の元の定義を知っていれば計算上絶対に増えそうに感じる。で、実際には複利の定義とは違うので、当然元本から減ることもあります。そして予防線としてそれも書かれてる。だから投資信託は複利で増えるっておかしーじゃんっていう話なんですよ。

結局、投資信託は投資信託運用会社の運用担当者の努力と、再投資、投資先の株式会社の努力によって株価が上がることで評価額があがっている。マジで「複利」で伸びるんだったらなんの苦労もないし、その仕組みを複利と呼ぶのは定義上何の正しさもないと思います。つまり投資信託が複利で増えるという言葉選びは思考停止ワードだと思う。

これ「投資信託は複利で増えない」という発表をしてる人結構昔からいるみたいで、検索すると残骸が結構あります。その都度軋轢を生んでるんですよね。複利で増えないと言ってる人たちは、結局、定義と合わない言葉を使って思考停止してしまうことを危惧している。危惧して心配しているんですが、その反対派の人たちは証券会社の宣伝文句としての複利効果を信じてしまっているから議論が平行線を辿っちゃうんですよね。

でもそういうこんがらがったことだからこそ、自分がアウトプットするモチベーションにもなるということに気がつきました...。良いお年を。