ボクココ

サービス開発を成功させるまでの歩み

Swift 学習中の個人的考察

ども、@kimihom です。

f:id:cevid_cpp:20210117114311j:plain

以下の本でまず Swift の言語を学んでいる。一通り読みきったので、Swift の感想を書こうかと思う。

コンパイルによる厳密性

最近、プログラミング言語全体でよく出てくる話が、コンパイルで事前にエラー把握し、エラーの起きづらいプログラムを書くことの有用性である。型を厳格に管理することで、実行時にエラーが起き辛いプログラムを書こうという流れだ。そんな中で、クラスの継承を使うのではなく、インタフェースを定義していく流れである。

Swift はこの流れを極めるに極めた言語だと感じた。一度定義した型に入れた変数を後で変えることはできない。

  • nil と int が入るもの
  • int だけが必ず入るもの

の2つにも違いがあって、nil が入る可能性のあるものは、Optional 型として定義される。Optional 型の Int(nil の入る可能性のあるint型) を利用する場合、そこに実際にある int 型へアクセスするには、if 文で存在していた場合~ って処理を必ず書かないとコンパイルエラーが出る。

プログラミングする人の対象

さて、私には2種類のプログラマーがいると考えている。

  • 個人でプログラムを書く人
  • チームでプログラムを書く人

Ruby(v2を想定して欲しい) とかの柔らかい言語は前者が対象で、Swift は後者を対象として設計されているように思う。Ruby も最近のv3では(おそらく)チームプログラミングの人を考えたアップデートがされているみたいで、どんどんチームでプログラミングすることが前提とされた言語が増えていっているように見える。

個人で Ruby を使う分には、全て自分の想像通りにすぐプログラムが書ける Ruby の柔軟性が快適で、個人でサービスを運営する時の Ruby の便利さを感じてしまう。個人だったら、"変数AはB処理で変数が入ってCクラスから使われる" みたいなのが自分の頭の中に入っている。もちろん忘れることもあるけど、個人開発ならコードを見ればさっと思い出せるので問題が起きづらい。自分の思ったことをそのまま実現できる、Ruby の"楽しく" "簡単に" 書けるプログラミング言語が好きだった。

「チームでプログラミングする」って時に、何が問題になるかっていうと、Ruby などの柔らかい言語だと、"他の人が書いた" 変数の管理で意図しない動作が発生して、エラーがすぐ出てしまうことになりやすい。もちろん、柔らかい言語でもそれらを防ぐためにテストコードがあるわけだけど、それでも限度があるというわけだ。

Swift がチームプログラミング前提?

Ruby とかに比べて、Swift 言語の方がなおさら個人開発者が多い(と思う)ので、柔らかい言語にしてくれたらいいのになーと思った。

個人開発者がそこまで型を厳しく管理する必要があるのか。Webサービスよりも、大量にクラスや変数があるような大規模なスマホアプリで作ることがあるのか?私はスマホアプリは Webサービスに比べて小規模のエンジニアで小規模の機能を作ることが多いんだから、むしろ Swift は柔らかい言語ですぐに作れた方がいいのになぁと思った。

もちろんそんなことを言っても Swift で実装しなきゃいけないことには変わりないので、ルールに従って Swift でアプリを書いていこう。Swift でしっかり動くアプリを作れば、アプリを他の方が担当しても安全になる予想はできたので、その良さを考えながらプログラミングしていこうと思う。

終わりに

色々なプログラミング言語を学んでいると、それぞれの違いについて特に考えることになる。 それぞれにメリットがあり、それぞれにデメリットも出てくる。

Web サービスでは自分の好きな言語で扱う機会が多い。ただスマホアプリってなると Swift / Kotlin が基本となる。最近はそれ以外の選択肢もメジャーになりつつあるけどね。

次は SwiftUI という、新しい iPhoneアプリUI の作り方について学んでいこう。