Swiftを始めてみました | iPhone De Blog

iPhone De Blog

2009年12月7日からスタート
iPhone3GSからiPhoneユーザのLEONがiPhoneやAndroidなどを中心にしたデジタル系ガジェット、IT関連ネタ、趣味のコントラバスやチェロを中心としたクラシックネタ、2022年から始めた自家焙煎に関する話や日常の話まで幅広く書いてます。

Swiftはじめました

最近、MacBook AirとiPad Pro12.9を使ってSwiftの勉強をしています。

 

昨年、少々Android開発の知識が必要となりMacBook Airを買いました。

 

詳細は以下の記事で

https://ameblo.jp/iphone-fan/entry-12396766639.html

 

その後、当初の目的は達成したので、自分でもKotlinでAndroid開発をやってみようかと思って少し勉強してたのですが、結局、KotlinはJavaの延長線上にある為、言語の仕様がやや複雑(に感じました)で分かり難い事やAndroidStudioの使い方がイマイチ分かり難い点やAndroidのOSや取り巻く世界を含めて自由度が高い為、情報を探す場合、何をどう見たら良いのか分かり難い事等、ちょっとした事をやろうと思っても書籍から一歩出たらかなり膨大な知識が必要になりそうな印象がありました。

 

又、端末の種類も多く、安価に手に入る物もありアプリのリリースも容易と言う点や逆に端末やOSのバージョンの種類が多く、これらの管理を考慮すると、企業開発者が企業向として開発するのに適したものだろうと思いました。

 

膨大な知識や経験が必要でも、数人のエンジニアがいれば、自分の知らない事でも他の誰かが知ってるか経験している訳で、聞けば分かる様な事も多く、オープンソース系のライブラリ等を使いたい場合は情報が少ない事もあり、複数人で開発する方が適していると思いました。

 

一方でiOSの場合は、Appleと言う1社が作る端末用のOSであり、どちらかと言うと企業ユーザーよりも個人ユーザーの方が多く、以前はシェアが多かった日本でもAndroidのシェアの方が勝っていますし、企業で業務用として端末を使うユーザーをターゲットとして考えると開発も今後はAndroidへ注力される筈です。

実際に、言語の人気も従来からAndroidで使われているJavaが高く、新しい言語であるKotlinもiOSの開発言語として最近注目されているSwiftもそれ程人気は高くありません。

Kotlinの人気の低さは、恐らく、それまでJavaでやってたのだからJavaで良いだろうと言う企業リソース的な点からの判断が一番の理由でしょうし、Swiftに関しては上述した様に以前のiPhone人気と比較した凋落による個人ユーザーの減少や企業向けとして大量購入するには端末が高価である点や従来のiOSの開発主体言語だったObjective-Cがあれば敢えて変える必要も無いだろうと言う点等が考えられます。

 

個人でやるならSwiftもあり?

ただ、これらは全て企業開発者としてみた時ですが、私の様に個人で仕事をしている場合は、好きなものを好きな様に触れれば良い訳で、パイが大きいか小さいかは関係ありませんし、逆に言えば、企業が手を出さないところに面白さもある訳です。

iPhoneに関しては初めて触った3GSで感動してこのブログを立ち上げた訳ですし、Appleは嫌いでも(笑)iPhoneは好きですし、今年からiPadが別OSとなるので、これはこれで面白いかもしれません。

 

たまたま、MacBook Airもありますし、iPhoneもiPadも持っている訳ですから、取り敢えず触ってみて損は無いだろうと思った訳です。

 

自分は以前一度だけiOS(iPad)用のアプリを業務用で開発した事がある為(その時はAdobeAirで開発しました)、AppleDeveloperProgramに登録した事があり、多少の知識もありますのでストアへリリースしなくとも自分用のアプリを作ると言うのも有りでしょう。

 

確かに、iOSの現在のシェアは以前と比べると随分下がっていると思いますが、端末そのものは既に充分に枯れて来ている事や、Appleの1社独占管理と言うのは裏を返せばシステムや端末含めた安定感にも繋がります。

実際、MacBook Airを1年程、使ってみて感じるのは、システムとして(例えばコンピューターとして最も良く使うファイルの扱い等)決してWindowsよりも使いやすいとは思わないのですが、Updateした場合の問題の発生の少なさは素晴らしいと思います。

 

Windows等は何かUpdateする度に戦々恐々ですし、実際、Updateで被害にあった事も少なくありません。

 

この辺りは、iOSにも通じる点で、ある程度の古い端末でも最新のOSが走るので、端末とOSの関係による問題の発生がAndroidよりも圧倒的に少ないのでは無いかと思います。

 

実際、AndroidのUpdateはどちらかと言うと端末メーカーに依存している為、Androidの場合は、新しいOSが出てもメーカーがUpdateしない(出来ない)為、古いOSを積んだ端末も相当数動いていて、アプリによっては動かないと言うものも少なくないでしょうから、有償アプリとしてリリースする場合、これらのバージョン管理はかなり大変だと思います。

反面、iOSは古い端末でも比較的に最新のOSを入れている場合が多いのでOSのバージョンの違いもAndroidと比べて考慮しなければならない事が少ないと思います。

 

Swiftに関する書籍

 

SwiftはiPadがあればiPadで勉強できます。

プレイグラウンドというアプリがあり、これでゲーム感覚でプログラムの勉強が出来ますので、プログラムの経験が全く無い場合はこれがおすすめです。


 

私の様にプログラムの経験がある場合は、先にインターネットでSwiftに関する情報や言語構造等をザッと眺めてみられると良いと思いますが、その後、この2冊で取り敢えずSwiftの勉強を始めてみました。
 

 

 

実際、Swiftを少し触ってみると、自分もこれまで多くの言語をやって来たのと、物覚えが悪くなって来たので、過去の言語の何にどう似ているのかと言うのは分からなくなりましたが(笑)Kotlinと違って今まで自分がやって来た言語体系に似てる気がします。


又、IDEのXcodeも使いやすく、以前使っていたFlexBuilderに良く似てて言語補完機能含めて充実してます(この辺は最新のAndroidStudioも初期の頃と比べるとかなり進んでるとは思いました)し、さすがに端末を作ってる会社が作ってる開発ツールなので、例えば、端末特有の設定に対する処理等もきめ細かく可能です。

 

 


もちろん、使い難い点も無い訳ではなく、多分、後から問題になるかなと思ったのは「ストーリーボード」の考え方でしょう。

 

パーツを貼り付けて画面を作っていき、これらの関連付けをしていくと言う点は悪くなくAndroidStudioよりも正直使いやすいと思いましたが、FlexBuilderの場合は、こうして作った画面はそのままXML形式のコードとなった為、画面の修正や再利用と言う点では非常に使いやすく生産性が高いツールだったのですが、Swift+Xcodeの場合はあくまでヴィジュアル的な物とプロパティや画面の構造等を示す画面はあっても、これらをコードとして管理できる画面が無い様です。

 

その為、逆にストーリーボードを使わずにコードから画面を作る猛者もいる様ですが、Appleは基本的にストーリーボードでの開発を推奨してる様ですし、推奨しない事をやるのはAppleの会社の性格から言ってやらない方が良さそうですのでここは言われた通りにやります(笑)


技術書の選び方
 

書籍の方ですが、この手の書籍の場合、先ず、内容よりも最新刊から購入する事をおすすめします。

その点ではAmazon等で、ジャンルを決めて最新順に並べて検索するのが良いと思います。


 

自分もこれまで多くの言語を勉強して来ましたが、技術の進歩は早い為、基本的には書籍よりもインターネットで海外の情報を探すのが最も良いと思います。

 

但し、これだと言語が体系的に理解出来ない為、やはり言語仕様や通り一遍の制作方法含めて何らかの書籍で「写経」(=書かれてるコードを入力する)しながら勉強する事を最初にやるのが一番だと思います。

 

又、ネットの内容をあれこれ散見しながら勉強すると、書かれているサイトによって内容が古かったり新しかったりするのも良くないです。やはり統一性がある内容で一通り勉強するのは大切です。

 

ただ、この場合に良書を探すのが中々難しく、正直、一冊で問題ないと言う書籍にお目に掛かった事はありませんし、必ず、複数冊は購入してます。


時間があれば書店へ出向いてこれらの本の内容を吟味して購入されるのが良いと思いますが、その中でも、最初に書いた最新刊を探す方が良いという事です。

 

Kindle版がおすすめ

 

但し、これだとかなり時間が掛かりますし、書店に置かれている書籍の数にも限りがありますのでAmazonで探すのは悪くありません。


又、書籍の中はKindleへ対応しているものも多いですし、Kindle版はサンプル版がある事もすくなくありませんのでそれをダウンロードして読んで見るのも良いと思います。

 

自分は技術書は最近、Kindleでしか読んでません。技術書の場合は大抵、パソコンの画面を眺めながら開いてる場合が多く、開いた状態で置いていくスペースが無かったり分厚いので置き場所も考えないといけませんが、Kindle版でiPadであれば、写真の様な状態で読んでいればページを開いておく必要もありませんし分厚い書籍でも何冊でも入ります。

 

この固定方法はこちらを御覧ください。

https://ameblo.jp/iphone-fan/entry-12465191835.html

 

 

外出する場合もiPadさへあれば全ての本を持って歩いている様なものですし、外出先で開く必要がある場合でも荷物が少なくて良いと思います。

 

古くなると仕様と合わなくなる

技術書を購入された経験がある方なら分かると思いますが、古いものは既に画面が書かれてる様になってなかったり、言語仕様が変わってて無駄な事をしていたりと言う事がかなりあります。ある意味すぐに陳腐化してしまうのが書籍の欠点ですね。

 

実を言うとKotlin用として購入した書籍もAndroidStudioへの対応は当時は古くなかったのですが、Kotlinとしてのプログラムの書き方が古く、Javaを書き直した延長線上となっているところが見られました。

 

 

ちなみに既に新しい版が出ている様です。

 

ただ、内容的には悪くなかったと思いますのでKotlinへ興味がある方は一度中を見られてみては如何かと思います。

 

自分がやりたい事が書かれてる?

 

書籍を選ぶ点で重要な事がもう一つあり、内容のサンプルが自分がやりたいことを詳しく解説しているか?という点です。

 

実際、iOSに関する書籍は紹介した2冊ともXcodeのインストールやDeveloperProgramへの登録など詳しく書かれているのですが、その辺りは自分は既にやってしまってますし、うーん。ここは要らないんだけどなぁ。という内容も含まれてます。

 

その為、複数の書籍を眺めて「これは面白かも?」という内容や「この知識は欲しい」という様な内容を含んでる物があれば、その部分だけでも欲しいということもあります。


その点では、この中に書かれているAR拡張等の基本的なものは興味ありますが、残念ながらKindleのサンプルではそこまで見られませんでした。そのうち書店で内容を見てみたいと思ってますが、買うとしらKindle(笑)=最近の家電の買い方みたいですね。。
 

 

 

折角なので少し紹介したいと思います。

初心者におすすめ

 

2冊のうち、こちらの方がより初心者向けとなっていますので、経験が少ない場合はこちらの方を先に買われる事をおすすめします。Amazonでもベストセラーとなっていますね。

 

実は私は後で紹介する方を先に買いましたが、途中で、分からなくなり(デリゲート辺り=Swiftで比較的難しい話し)、60%程度のところで挫折しかかったので、こちらを買ってみました。

何を持って初心者向けと言うかと言えば、出てくる言葉や概念をスルーしないでどれだけ説明しているかと言う点に尽きると思います。

 

ある意味、丁寧すぎて回りくどいところもありますし、(多分、他の言語の経験があると恐らく)底が浅い(全部は解説してない)かなと思う所もあるのですが、逆に「それって何?」という「チコちゃん」的な疑問が発生するのは少ないと思いますし、これより深い事を知りたい場合でも先にこのくらいの基礎を知っておく必要があると思います。

サンプルに関しても後の書籍はややツマラナイものが多く同じ様な傾向のサンプルが多いのですが、こちらはサンプルが地図だったりカメラだったりと比較的広範囲に渡ってますし、Swiftの文法の基本含めて、実際に自身でアプリを開発してリリースしてきた著者ならではと言う気がします。

特にXcodeの基本的な画面構成と各部の説明等も詳しく図入りで説明されていて、実際のバージョンに合致している為、ズレが無く、初心者には分かりやすい気がします。

 

確かに最後まで挫折しませんでした(笑)

こちらは最後の課題で作るニュースリーダーアプリを実機に入れた画面です。

 

 

 

自分の場合実機デバッグができる状態としていますが、自分のiPhoneの中でアプリが動くのは楽しいものです。

そのうちiPad用のアプリも作ってみたいと思ってます。

 

 

ややレベル高めか?

 

 

XcodeのインストールやSwiftの言語仕様の説明などは先の書籍の方が分かりやすいと思いますが、部分的にヒットなところがあります。

 

例えば、早い段階で実機デバッグを行う為の方法等を説明してあったのは良かったですし、Xcodeからワイヤレスで実機にプログラムを入れてデバッグできるのはすごいですね。

 

先にこちらをやっていた為、後から購入した書籍はそのまま実機デバッグで進みました。

もちろん、言語仕様の説明も、何れも基本はプレイグラウンドと言うXcode+Swift特有のインタープリターシステムを使って説明されていて、部分的には、それぞれになるほど!というところもあり理解を深められていて、こちらの方が扱っている内容がやや詳しい印象なので、2冊読んで損は無いと思います。

ただ、残念ながら、自分は「デリゲート」と言う思想のある言語をやった事がなかったので、言語仕様で説明がなく、サンプル作りで突然出てきて詳しい説明が無いと「?」と言う状態となります。

 

サンプルアプリに関しては、一番初めにつくる「値引き計算アプリ」はかなり詳しく説明されていて、実際に作る事に関しては、こちらを先にやっていて良かった様な気がします。

 

 

このサンプルアプリでは、割引が固定でしたが、自分で修正して値引き額をステッパーで設定できる様にしたり、金額が全て3桁区切りで表示されたり、テンキーからの数値の処理をまとめて行ったり、割引後の計算結果を実用的になる様に修正して自分のiPhone8へ入れました。

 

 

 

 

 

その他、データーを保存するアプリとなるTODOアプリで、iPhoneへデータを保存する基本を学びますが、この辺りはAndroidの方が簡単にデータの保存が出来そうでiOSは面倒くさいと言う印象でした。

個人的にはややこしいものはデータベースのRealmを使いたいと思ってますし、これに関してはどちらも説明が無いので自分で勉強しないといけないでしょうね。

 

著者はヤフーのiOSエンジニアという事で、ヤフー内の「黒帯」エンジニアと言う事でセミナー等で教育に当たってる人の様ですが、普段の対象者もレベルの高い人が多いのかもしれませんが、やや内容的に高度な反面、説明がもう少し欲しいところも多いですね。

 

特に後半になって同じ様にファイルを追加して画面の実装クラスを新しく作る場合も○章○を参照してと言う具合に省略されてますが、何度も作業しているレベルでは無いのでやはり面倒でしょうが都度操作を記載して欲しいところで、先の書籍はその辺は冗長ですが都度説明されています。

反面、先の書籍に無いレベルの話も出てくるので、2冊めとして読むには良いと思います。

 

実際は、自分の場合、途中で先の本に移って、その後こちらへ戻りました。

 

追記)

 

まだ完読してませんが、この著者は「黒帯エンジニア」と言う事らしいですが、指導する人としては向いてないかもしれません。
 

特に「写経」レベルの初心者に説明する内容としてみた時に、もう何十年もこの手の書籍を見てますが、最初にコードの全貌を見せて、その後、詳細を解説して行くべきなのに、先に詳細を解説しているので、この部分は全体の何処に書くの?と言う事を一々後ろ(それも結構遠い)へ行って確認する必要があるので非常に面倒くさいです。


又、プログラミング方法としては独特だと思う、ストーリーボード上のUIとクラスの関連付けの「操作」的な場所を○章の○を参照。と言う事で省略されている事が多い為(この省略すると言うのはこれだけではありませんが)操作的に漏れたり誤ってるのだ思いますがエラーとなります。

 

さすが黒帯、一度言われた事は全て理解して記憶しているのでしょうね。

私の様な頭の悪い人間とは違う様です(笑)

 

結果的に6章のクイズアプリも長々構築しましたが結果的に上手く動作してません。

恐らくこの辺りの関連付けのミスだと思いますが、正しく動く事を追求せずに割り切って、この人はこう言う人なんだろう(この書籍はこう言うもんだろう)と言う事で理解して、動かなくとも仕方ないと言う事で先に進む事にしました。

それともう一つ、コードの書き方が非常にコード数が多い書き方になって全く洗練されてません。

自分のプログラミングに関しては初心者ではありませんので、いやいや、これはどうなの?と言う書き方が随所に出てきてSwiftのコードの勉強にはなってもプログラミングの勉強にはならないと思います。

 

まあ、内容的にはもう一つの書籍で扱ってない部分も扱っているので挫折せつず先に進みたいと思います。


追記終わり)

 

個人的にはどちらも買って読んで良かったと思いますし、MacがあればXcodeは無料ですし、実機デバッグに関しても今はDeveloperProgramへ登録していなくとも問題ない様で(先にネットの情報を見て、実機デバッグがやりたくてDeveloperProgramへ登録してしまいましたが、ちゃんと書籍には「不要」と書かれてました。。)、書籍さへAmazonでダウンロードすればあっと言う間に勉強開始できるので何ともお手軽なのも良いですね。

 

それにしても、少し前まではWindowsマシンがメインだった自分がMacを使ってiOSアプリを作るなんて思ってもみませんでしたが、まあ、コントラバスしか弾いてない時は、チェロを弾いてるなんて考えもしなかったので同じですね(笑)