2021/03/05
【Swift Playgrounds】Macユーザー向けプログラミングの学び方
Swiftとは
Swiftは、Appleが開発したOpen Sourceプログラミング言語です。Swiftは、WWDC14で初めて紹介された言語で、歴史的にはJulia(2012年)、TypeScript(2012年)より2年後に発表されました。2020年で6年になりました。Swiftはバージョン2.Xと3.Xの間にC形式のfor文、++、–演算子の削除など大きな仕様変更があり、最新バージョン(5.3)では、3.0以前のコーディングスタイルはできません。
Swiftに注目する理由
Swiftは、OSX、iOSアプリケーション、Apple Watch、Native Gameなど様々なシーンで使えます。これだけ見ると、Apple製品でしか使えない言語のようですが、AppleのSwiftサイトに入るとこのように書かれています。
「Swift。誰も圧倒的に優れたアプリケーションを作れる、パワフルなオープンソースの言語です。 Apple」
ここで注意したいのは、Swiftを利用するためには、Macが必須です。Macを持っていないと、Swiftを試すことはできません。Swiftで注目しているのは、WWDC19で発表された「SwiftUI」とWWDC20に発表された「Macbook M1、Mac Mini M1」です。SwiftUIは、XcodeでUIコンポーネントを作成するためにはStoryboardを利用するか直接XMLを編集する方法でした。特にStoryboardの場合は、GUIでUIを作成する方法で当時はとても画期的な方法に見えました。Android StuidoやXamarinもGUIで作成する方法を採用していたんです。しかし、GoogleがFlutterを発表してから、UIをGUIで作成するよりコードで作成した方がより良い開発手段だと感じています。実際、Android Studioを利用するよりFlutterでコーディングする方が楽で簡単です。
Swiftのパラダイム
Swiftは命令型オブジェクト指向で関数型、プロトコール型プログラミングを指向します。Swiftは、C言語と同等なパフォーマンスを発揮するように開発されています。そして、厳格な文法で不具合を事前に防ぐことが可能です。別の言語を習った方は(Java、C、C++、JavaScript、C#、F#、Scalaなど)Swiftのパラダイムが理解しにくい可能性もありますが、GoやPHP、Pythonなどを触ったことがある方は意外と学習しやすいと思います。特に、Go言語の場合は使っている予約語も似ているように感じています。Swiftは安全で、高性能、利便性が高い言語です。
学習方法
公式ガイドブックを読む
Appleは、Swiftの新しいバージョンに合わせてGuide Bookを無償で提供しています。全て英語で書かれていますが、日本語のガイドブックもApple Educationで提供しているので、そちらを利用することも可能です。しかし、最新バージョンの新しい機能などは、日本語に翻訳されるまではかなり時間がかかるため、英語版の方が早く情報を得ることが可能です。
市販の本を購入
Swiftは、既に熟成しているので、本屋に行くとSwift関連の本はたくさんあります。好きな本を選べばいいと思います。
Playgroundsを利用する
私が今回注目して欲しいところは、このアプリケーションです。Swift Playgroundsは、MacからApp Storeを開くと左側に表示される「開発する」タブですぐ見つけられます。
Swift Playgroundsアプリケーション
Swift Playgroundsアプリケーションは、MacのApp Storeで公開されています。無料で誰でもダウンロードできます。(iPadは別途)
【1】星点が意外と低い
コメントを確認するとバグや起動の問題もありました。また、性能的に重たいなどの問題もありますが、私の場合は問題なくスムーズに動作しました。(高性能マックブックなので…)M1シリーズの場合は、もっとスムーズに動作すると思います。
【2】年齢は4+
デベロッパであるAppleでは、このアプリケーションの利用年齢は4歳以上に設定しています。
4歳子供の特徴(堺市から参考)
-
全身のバランスをとる能力が発達し、体の動きが巧みになる
-
様々な運動、遊びに自分から 取り組む(片足ケンケン、スキップ、目標に向かってボールを投げるなど)
-
遊具や用具の使い方に慣れる
-
簡単なルールのある遊びを楽しむ
-
生活に必要な習慣が身に付き
-
自分でできることは自分で行う
-
友だちと一緒に遊ぶ
-
少しずつ自分の気持ちをコントロールできるようになる「~だけれども」
-
身近な人の気持ちがわかり、自分の気持ちに折り合いをつける「~だけれども・・・する」
-
規範意識が芽生える
-
身近な素材を使って、遊びに必要なものをつくる
-
生活の中で必要に応じて数を数えたり、量の大小を比べたりする
-
自然など身近な環境に積極的にかかわる
-
様々なものの特性を知りそれらとの関わり方や遊び方を知っていく
らしいです。しかし、4歳の子供がどれくらい文字が読めるのか分からないので、まず大人が先にやってみて後で子供に教えながらやってみると楽しくできると思います。
【3】開発はApple自身
開発したデベロッパは、Appleです。自分たちが作った言語を利用してプログラミングの教育専用のSandBoxを用意してくれています。
【4】日本語対応
Appleの開発者のためのアプリケーションApple Developerもありますが、このアプリケーションでは、開発者に必要な情報を配信してくれます。ここは基本英語です。(日本語のコンテンツが多いですがそうでもないです。)
Swift Playgroundsを始める
Swift Playgroundsを起動すると「マイプレイグラウンド」と「その他プレイグラウンド」に分かれています。おすすめは、「コードを学ぼう1」から始め「コードを学ぼう2」に進むことです。「コードを学ぼう1」では「コマンド」のセッションで「はじめに」から順に進めます。「はじめに」には、コマンドについて簡単な説明と今回学ぶことについて説明しています。
コマンドを使う1
「コマンドを使う1」では、実際コマンドを実行して簡単な目標を達成します。最初は、順番に進めること、あとは繰り返し、条件によって実行するなどプログラミングの基本である「順次、分岐、繰り返し」を身につけることができます。Swift Playgroundsでは、プログラミングの基本をSwiftで勉強することで、アルゴリズムを探し、作成することを学ぶことができます。
「クリックしてコードを入力」をクリックするとコマンドが表示されます。今回の目標は、Byteを動かして宝石を取ることで2つのコマンドを組み合わせます。
Byteを前に進むには「moveForward」コマンドを利用します。「moveForward」コマンド1回はByteを1マス前に進むので3回入力します。「collectGem」は、宝石をとることなので最後に1回行います。
ここで「cmd」+ R で、コードが実行されByteが動き出します。
目標を達成したら、サイドバーから緑のチェックマークが表示されます。これは成功した証です。
コードが実行されるタイミングで、Byteがどのような状態なのか確認する方法は、コードをステップ実行をするとコードが実行されるステップが確認できます。
コードをステップ実行(Cmd+Shift+R)
自信がついたらBlueの冒険
Swift Playgroundsのコードを学ぼう1〜2まで完了したら、Blueの冒険を進めることをおすすめします。これからは、チャプタとソースコードが分離されているので、もっと本格的なコーディングが始まります。「コードを学ぼう2」でも目標がさらに高くなっていますが、Blueの冒険からは実務のプログラマーと同様な課題が始まるのです。
Swift Playgroundsのインターフェースは、まだゲームの用に見えますが、XCodeと比べて見ると、UI的には左から「ナビゲーション、コード、プレビュー」の順になっているのは同様です。こうやってSwift Playgroundsでプログラミングを勉強すると、今度はXCodeを利用して実用的なアプリケーションを自分の力で開発することができるのです。さらに、Swift Playgroundsから出題された目標のように実際のアプリケーションも目標があり、その目標を達成するために様々な問題を解決するのがプログラマーです。
Swift Playgroundsでロボットやドローンを動かす
Swift Playgroundsには、様々な会社がPlaygroundsを提供しています。例えば、MeeBotはロボットを繋げて動作させることも3Dアニメで動作させることも可能です。Parrot Educationの場合は実際のドローンが必要です。
MeeBot
Parrot Education
空白から自分のプレイグラウンドを作成する
Swift Playgroundsでプログラミングの基礎ができたと思います。開発者は、様々な言語を学び必要に応じて、その言語を選択し開発を進めます。
終わりに
Swift Playgroundsの星点数は、かなり低いと思いますが、現実世界でプログラミングをこのようにアクティブな学習ができるのは子供向けのScrachしかないと思います。Srcachもプログラミングの基本「順序、分岐、繰り返し」とアルゴリズムなどが学習することができるのですが、実際コーディングするような感覚は少ないです。その点だけみると個人的には、Swift Playgroundsの方がもっと実質的な役に立つのではないかと思います。プログラミングは「アルゴリズム、データ構造」で構成されていますが、Swift Playgroundsでは、少なくともアルゴリズムが学習できると思います。