Swiftを学ぶのは大変だ

2024年を迎えてSwiftを学び始めた。

Swiftそのものの学習は初めてではなくて、書籍でUIKitやSwift UIの作成を一通り済ませたのだがそれ以降は結局Reactやブラウザのみでアプリケーションを書く機会が多かったのでほとんど文法やXcodeの使い方すら忘れてしまっていた。 きっかけとしてはモバイル開発をなんとなく始めてみたくてFlutterに手を出そうと思ったけれども、ちょうどUdemyのセールで購入したチュートリアルのシリーズがあったのでそこから着手してみようと思った。

Swiftという言語そのものはメジャーな言語の中では新しい部類だと思うし、それでいて文法は馴染みやすく思える。 触ってみると最近のRubyはSwiftを参考に取り入れたであろう文法を見かける。 Optional Chainingとかはまさにそうだと思うし、最近になって使い始めているブロックの引数を省略できるのもClosureの書き方はそういえばSwiftから来たのかもしれない。

Swiftを学んでよかったと思えるのはTypeScriptやJavaで出てきたInterfaceとDelegateの実装に対する理解が深まったことだと思う。 Interfaceの役割自体はある程度わかっていたつもりだ。 構造体とクラスでダックタイピングのようにメソッドを用意するくらいの認識だった。 そしてUIKitでよく出てくるDelegateに関してはRailsで関連モデルのショートカットくらいの認識だった。 もともとはこの話題について投稿をするつもりだったけれども、投稿するには少々内容が薄い気がして断念した。

そういう背景もあって、チュートリアルが秀逸なおかげもあり普段使っていない言語の習得がなぜか比較的すんなりできている。 直近ではTurboやStimulusの習得をしたけれども、新しい言語そのものの習得はもっと大変なものだと思っていた。 ある程度まとまった時間をかけて現在着手しているプロジェクトから離れる覚悟は必要だけれども、とても新鮮な気持ちでいる。

ただし言語そのものには不満がないのだけれども、私はAppleという企業が提供しているエコシステムに対して大きな不満がある。

まず開発するにあたって年額でコストが発生することだ。

ドメインの取得も年々ICANNの手数料が上昇しており1件あたり2,000円弱はかかる。 ドメインと比較するのは的外れなのかもしれないが、特に円安ドル高の現在で99USDはJPYに換算すると15,000円弱である。 App Storeでの収益も3割は引かれることを考えるとGoogleを見習うべきだと思う。 もし個人事業主として収益を得ることを目的にするならば最低でもこの手数料以上は売上を出したいところだが、1円以上の収益以前に挫折してしまう可能性のほうが高い。

とはいえかつて私も遠い昔にApple Developerに登録したことはあって、結局一度もApp Storeにアプリケーションを登録することはおろか、ビルドすらしなかった。 かつてRubyMotionというものが存在していて私はそれで開発をする夢を見ていた。 あとは確かiPadの初代が発売された頃だった気がする。 この当時はObject Cの文法すら知らない状況だったのだが、なぜか私はiOSの開発者としてデビューする気でいたから不思議である。 今となってはいずれもせめて1つはなにか形になるものを作ってから登録すればよいと思っていたのだが、当時はまだiOSのライセンスがなければ実機ビルドすらできなかったはずであったので仕方ないといえば仕方がない。

今となってもその時の失敗をふまえてなにか形になるまでは登録を控えようと思ってはいる。 幸い実機で動かすことも可能は可能である。 最近ではiPhoneをWiFi経由でつないでビルドすることもできるので快適になったし、開発環境は昔と比べるとはるかに改善されたのかと錯覚しがちである。

しかし実際にチュートリアルに沿って勧めていたら同時に作成できるプロジェクトの数に制限があることが判明したのだ。

例えばRailsを勉強しようと思ったら短いイテレーションでrails newを行うことはあるだろう。 AndroidやFlutterでもそれは変わらないと思う。 Xcodeに限ってシミュレーターを使わずにビルドすることが制限されているのだ。 つまりApple Developerでなくてもあたかも自分のiPhoneに対してビルドをできると思っていたらまずそこで躓いてしまう。

では使わないものだけ厳選すればよいのかというとこれもそういうわけではなく、ビルドしたアプリケーションを実行できる期間も1週間程度しか許可されていないようだ。 まるでゲームの体験版のように無料でできる範囲はかなり厳し目に制限されてしまっている。 これは結局のところApple Developerに登録するまではアカウントでビルドはできないと認識していたほうがよい。

私はオープンソースよりはクローズドソース寄りの人間であるので、すべてのアプリケーションを公開しようとは思っていない。 もともとモバイルアプリケーションの動機も仕事や収益化が目的ではなくブラウザの代替だった。 それがApple Developerに登録して仮にiOSのアプリケーションを仮にビルドできるようになったとして、自分に向けてビルドしたファイルを自分のiPhoneに配布する方法は残念ながらかなり限られているようだ。 Androidのようにバイナリを配布する、あるいはGoogleのPlay Store以外の非公式なストアが存在するわけではない。 セキュリティのためとはよく言うが、企業が掲げるSDGsという単語並に懐疑的な気持ちはある(ただし必ずしもセキュリティやSDGsの言い分が正しくないとも言い切れない)。

Testflightを使えばおよそ90日間はビルドが有効だそうなので、今はこの情報を信じるほかない。 とはいえ私がRailsでアプリケーションを書いたところでだいたい90日以上も同じインスタンスが動き続けることも稀なのでこれは案外問題にならないかもしれない。 こればかりはどうなるかは現時点ではわからない。

では仮にアプリケーションを公開してみようと思ったらどうだろうか。 今度は正式にアプリケーションを全世界に向けて公開するわけだから、自分のブログに対して投稿をするよりも責任を持つ必要がある。 軽く調査をしてみたところ、App Storeに個人名を公開しなければならないようだ。 確かに私はこのブログですでに名前を公開しているのでそこに対する齟齬は起こり得ないのだと思いたいけれども、App Storeに自分の名前を表示するのは誇らしさよりも不安のほうがつきまとう。

普段私はiOSにしてもAndroidにしてもApp StoreないしGoogle Play Storeそのものはめったに使わないのであまりApp Storeを観察することはなかったのだが、たしかに検索を使わずに一覧に表示されているアプリケーションのほぼすべてが法人名義のアプリケーションばかりである。 個人で作っていそうな規模のアプリケーションでもちゃんと会社の名前が表示されていることに気づく。

検索をしてみて個人と思しきアプリケーションも見かけるのだが、かなり稀である。 iOSないしSwiftを使って仕事しようと思うと何かしら企業に属しているほうが一般的なのだろう。 それはAWSでも同様だ。 個人でAWSを扱う機会はほぼ皆無なので私は未だにAWSの知識は大きく遅れをとっている。 オンプレミスでならひととおりのことはできると思うのだけれども。

ということは私のような個人が参入してみたところで自分の名前が晒されるというリスクを気にする必要はまだなさそうだ。 そもそもSNSをしていないのでプロモーションという方向でむしろ苦労しそうだ。 そういう意味でいうと先述の15,000円の収益を得ることのハードルがとてつもなく高い気もするが、このブログのドメインのようにポケットマネーとして捉えるしかない。 しかし一度公開しようと思うと運転免許証は提示しないといけないようだし、審査に通れば自分の名前が否応なく掲載されるだろう。

ただ私のドメインもブログの公開だけではなく、そろそろちゃんとしたウェブサイトを作ろうと思っていた。 何かしらのアプリケーションを載せるのであれば書く内容にも困らなさそうだ。 そしてアプリケーションを作成を経験できれば、これまで停滞した状態から次のステップを踏み出せるきっかけになるかもしれない。

Swiftを捨ててAndroidやKotlinに鞍替えしようかも考えていた。 私はJavaで一時期、これも一瞬ではあったが書籍でAndroidの開発を行っていた時期があった。 個人的にはAndroidはストアの制約こそないものの、では普段使いしたいデバイスかというと大きく疑問符が残る。 私にとってAndroidというデバイスは長らく使ったことがない期間があり、今でもかなり強めのバイアスがかかっている。 Google Pixelも所有はしているが、私にとってはただのゲーム機なのでこれを学習用のデバイスに転用する可能性は低い。

Swiftを学ぶモチベーションとしてはやはり普段使うものを自分の手でなんとか改変できないかというものが一番重要だと思う。 新しいiPhoneへ買い換えるモチベーションも実はそこが大きかった。 今になって思い出したが、書籍をなぞったタイミングの前後にiPhoneの買い替えがあった気がする。 もしその当時へ遡ってXcodeを使い続けていたら、果たして今頃はApple Developerへ登録することはできたのだろうか。

せっかくSwiftを学んだばかりなのにそれらをすべて振り出しに戻してKotlinの学習というのもそれはそれで考えたくはない。 今日は深夜に目が冴えてしまったので半ば勢いだけでこんな投稿を書いているのだけれども、チュートリアル自体も一区切りしただけでまだ100%の完了はしていない。 完了はしていないどころか、むしろ後半からが本番にすら思えている(本来私が学習したかった内容だが、既存のブラウザの代わりを作り始めるという意味ではいい区切りでもある)。

ひとつの言語、ひとつのエコシステムの学習はそんなに簡単なものではない。 ちょうどUdemyが年始のセールをやっているのでよい機会ではあるのだが、そもそもこのチュートリアルを購入したのもいつだったか覚えていないわけで他にも未完のチュートリアルもまだある。 ビデオチュートリアルは進捗がわかりやすいからよいが、Kindleの電子書籍や物理的な書籍も含めるといわゆる積読はまだすべて消化しきれていない。

あとは細かい変化ではあるが、Xcodeのショートカットが独特なので私はテキストの移動でもともとCtrl+矢印を多用するのだが、macOSだとCommandだったりOptionだったりよくわからない文節でカーソルが動くのでそこそこストレスが大きい。 そして久しぶり(?)にこうしてVSCodeを触るとカーソル移動に混乱する。 Xcodeそのものの挙動もまだまだ不満が多く、便利な箇所はあるもののVSCodeに比べるとやはり遅れている感は否めない。 VSCodeに対する不満も投稿したものの、やはりこのエディタよりも使いやすいエディタはそうそうないのだと実感せざるをえない。

長々書いてみたけれども結局また使わなかったということもよくあることだし、次はKotlinの投稿をしている可能性もある。 翌日の自分が何をしているかはわからないけれども、今年何かしらの形でモバイル開発ができるようにはなっていれたらよいなと思った。