Mac版Swift Playgrounds
【2020年12月30日内容などを確認し一部追記しました。ドラッグ&ドロップ関連の情報を追加しました。】
【2020年12月8日macOS 11.0.1での情報などを追加しました。】
【2020年11月21日バージョン3.4に対応し変更部分は差し替えました。】
追加機能には【➕3.4】、改良変更点には【👍3.4】【変更点3.4】でマークしています。
【2020年4月3日バージョン3.3の変更点を加筆しました。】
【2020年4月20日メニューの説明に一部加筆しました(4-1-2 編集メニューなど)】
Mac版のSwift Playgroundsアプリについてレポートします。
Swift PlaygroundsはMac App Storeから無料でダウンロードできる、Apple純正のアプリです。
Swift Playgroundsは「コードを学ぼう」などの教材で試しながらプログラミングを学ぶ使い方が多いと思います。
ここではXcodeと同様に開発ツールとしての側面も含め、確認できた範囲で解説します。
バージョン3.4で開発ツールとしても磨きがかかりました。
画像はクリックで拡大表示できます。
1 Playgroundsについて
まずPlayground(単数のPlaygroundです)の小さな歴史から、PlaygroundはXcodeの機能としてスタートしました。
その後iPad用のアプリがリリースされ、2020年2月にMac用アプリがリリースされました。
1-1 XcodeのPlayground
Playground は Xcode 6 から導入された Swift の実行環境です。
完全なプロジェクトの準備やコンパイル& run の手順が不要で、とても手軽に Swift言語の動作を試すことができます。
1行ごとにすぐに結果を表示するので、Swift言語の学習に最適です。
新規に Playground を始めるには、最初に必ずファイル名を決め保存します。
その後入力したコードは自動保存されます。
(登場した当初からiCloud対応が想定されていたようです)
当時のPlayground書類はシーソーのアイコンでした。
XcodeのPlaygroundは最新のXcode 12でも健在で、SwiftUIにも対応しています。
Welcome to Xcode画面で開くことができ、Xcodeをはじめて使う場合にも使われています。
【Xcode 12のWelcome to Xcode画面では「Get started with a playground」のボタンがなくなりました。メニュー操作が必要です】
現在playground書類のアイコンはシーソーからSwiftのつばめに変わっています。
playground書類は単純なテキストファイルではなく、複数ページ対応で画像や動画などのデータを含むことのできるパッケージ形式です。
書式もマークアップで拡張され、入力編集可能な部分と編集できない解説にわけることができます。
実行できるプログラミング参考書的な用途が最初から考慮されています。
実際に The Swift Programming Language の「A Swift Tour」はplayground書類も公開されています(英文)。
swift.orgのA Swift Tourのトップページのリンクからダウンロードできます。
ダウンロードした実行できるSwiftのテキスト「GuidedTour.playground」をXcodeで開いた画面
このような書類を作成するためのマークアップのドキュメントが公開されています。
Markup Formatting Reference(英文)
マークアップはQuick Helpにも対応できます。
1-1-1 Playground の画面
XcodeでのPlaygroundの実行画面はソースエディタと結果サイドバーに分かれています。
結果サイドバーはソースエディタの各行に対応する「行の値」を表示します。
一行単位で実行できるところが最大の特徴であり、開発ツールとしての価値と言えます。
XcodeのPlaygroundでは画面下にdebug areaを表示させることができます。
debug areaではprint出力を表示します。
ソースエディタのエラーメッセージを表示する場合もあります。
Untitled Page 2.xcplaygroundpage:5:1: はエラー検出のファイル名と行とカラムを示しています。
1-1-2 debug機能
XcodeのPlayground画面にはdebug areaはありますが、ブレイクポイントなどのdebug機能はありません。
結果サイドバーには行の値だけでなく実行回数も表示されます。
値の変化をグラフ表示したり、リストで一覧も可能です。
指定行まで実行機能はあります。
1-2 iPadのSwift Playgrounds
Apple社が提供するiPad用アプリとしてSwift Playgrounds(アプリ名は複数で「s」が付きます)が登場しました。
プログラミング言語Swiftを手軽に試すことのできる強力な環境がiPadで使えます。
アプリアイコンはSwift言語Logoの地色と白を入れ替えたデザインです。
ホーム上のアプリ名は日本語環境でも「Playgrounds」です。
【2020年11月17日iPad版もバージョン3.4にアップデートされました。】
無料の教材も多数提供されました。(Playgroundsアプリの日本語ページ)
各国語対応にも力が入れられ現在アプリと「コードを学ぼう」などのコンテンツ(教材)はほぼ日本語版がそろっています。
iPadでコードを学ぼう1を実行中の画面:
教材用として新しい書類のフォーマット playgroundbook(ブック形式)が追加になりました。
Playgroundsアプリは従来のplayground書類とplaygroundbook書類両方実行できます。
ブック形式の書類は、利用者が入力するコードを独立して管理します。
このためページ単位あるいは書類全体をリセットし、教材として初期状態に戻すことも可能です。
ブック形式の書類に関する情報はSwift Playgroundsページで公開されています(英文)。
ブック形式の書類を作成するにはXcodeが必要です。
ブック形式書類のテンプレートもXcodeのバージョン別に公開されています。
注意:デベロッパとしてログインが必要です。
ブック形式ファイルのアイコンです。
1-2-1 AR
iPadのPlaygroundsアプリはiPad上で実行しているのでカメラやセンサーを直接利用できます。
ARKitも利用可能です。
これまでARはXcodeでコーディングして、iPhoneまたはiPadにアプリをインストールして実際に試すワークフローでした。
iPadのPlaygroundsアプリならiPadだけでコーディングもテストも可能なため、効率よく開発が可能です。
無料教材にもARを体験できるものがあります。
(その他のプレイグラウンド > チャレンジ > 拡張現実)
この教材はiPad専用です。(加速度センサーやジャイロを必要とするため)
Mac版Playgroundsアプリでは選べません。
1-3 MacのSwift Playgrounds
Mac版は2020年2月に登場しました。
2020年11月17日バージョン3.4にアップデートされました
インストール可能なのはmacOS 10.15.4以降です。
Mac App Storeの新機能には
• Console area shows the output of your print() statements
• Code suggestions appear much faster
• Export as a new playground to create custom lessons with a new reset point
• Fonts are resizable in the code editor
• Multiple playground documents can be opened at once as windows on the Mac desktop
と書かれています。
空白テンプレートはSwift 5.3対応になっています。【👍3.4】
そのほかのダウンロードできる教材はSwift 5.1がほとんどです。
アイコンはMac版登場時の丸いシェイプから、iPad版とほぼ同じ角丸に変わりました。【変更点3.4】
Mac版Swift Playgroundsをインストールするとブック形式書類のアイコンがオレンジ色に変わります。
ダブルクリックでSwift Playgroundsアプリが起動します。
バージョン3.3までは、ファイルの内容はiCloudにコピーされました。
3.4ではダブルクリックではコピーされません。【変更点3.4】
1-4 Xcodeとアプリの違い
Xcodeのプレイグラウンド(単数表記)とiPadやMacのPlaygrounds(アプリ名は複数表記)での実行で表示や挙動の違いが見られました。
最近SwiftUIのサンプルをプレイグラウンドで作り確認することが多いのですが、何度かXcodeとPlaygroundsアプリの違いを経験しました。
iPad版Playgroundsアプリで実行に問題がある場合『"結果"を有効にする』をオフにして実行すると解消する場合があります。
またPlaygroundsアプリでは正常に画面が更新されるが、Xcodeのプレイグラウンドでは画面が再表示されない場合もありました。
XcodeをCatalina(10.15.3以降)でお使いで、実行結果が怪しい場合Mac版Playgroundsでも試して比較することをおすすめします。
私のnote記事「SwiftUI UI部品カタログ 後編」にはいくつかXcodeとiPadのPlaygroundsアプリで違いが発生するサンプルを載せています。
表面的な違いもあります。
検索機能がない
Playgroundsアプリで不満な点は、入力したコードの検索ができないことです。
これはMac版Playgroundsでも同じです。
行番号を表示できない
Playgroundsアプリでは行番号の表示もできません。
教室でも『何行目をみてくださ〜い』などの用途はありそうですが、iPadの画面サイズは限られているので搭載を見送られたのかもしれません。
マークアップ部分を編集できない
Xcodeではマークアップ部分のレンダリングする/しないを切り替え表示の確認/編集が可能です。
Playgroundsアプリではマークアップ部分の修正はできません。
教材としては重要な機能です。
コメントとしてマークアップの入力は可能です。ページ切り替えなどでレンダリングされると、それ以降Playgroundsアプリでは編集はできなくなります。
Mac上のファイルを直接編集しない
バージョン3.3までFinderでファイルを選びMac版Playgroundsで開いた場合もiCloudにコピーしてから、iCloudの書類として開いていました。
バージョン3.4ではiCloudにコピーせずに開くように変更されました。【変更点3.4】
ファイル > プレイグラウンドを読み込む... メニューでは従来どおり読み込み、マイプレイグラウンド画面に追加します。
iCloudにコピーするとiPadでも共有できます。
メニューなどで「開く」はiCloudにコピーせず、「読み込む」はiCloudにコピーして「マイプレイグラウンド」画面に登録する操作です。【変更点3.4】
Jump to Definitionがない
Playgroundsでは「ヘルプ」を使います。
【2020年12月30日追記:この行から追記】
ドラッグ&ドロップを含むSwiftUIコードを実行した場合の挙動がiPadやXcodeと違っています。
詳細は『SwiftUIでドラッグ&ドロップ』を参照してください。
Mac版のPlaygrounds 3.4をmacOS Big Sur 11.1で使う場合は、少し問題がありますがドラッグ&ドロップを含むSwiftUIコードを実行できます。
【2020年12月30日追記ここまで】
1-5 開発情報
Playground Support
プレイグラウンド環境ではページ単位のコードを実行します。
Playground Supportフレームワークを使ってライブビューに表示します。
Xcode 11から setLiveView(_:)メソッドが追加になっています。
PlaygroundBluetooth
プレイグラウンドページ内からBluetooth周辺機器への接続を表示および管理するために使用する共通のインターフェースとしてPlaygroundBluetoothフレームワークが提供されています。
ドローンやロボット制御の教材で使われているようです。
これらのドキュメント(英文)はPlaygroundsアプリでも表示できます。
2 インストールとユーザガイド
2-1 インストール
Mac App Storeから無料でダウンロードできます。
Swift Playgrounds ←ここからリンクしています
2-2 ヘルプ/ユーザガイド
ヘルプメニューからPlaygroundsヘルプを開くことができます。
ヘルプはアプリの前に表示されるフローティングウインドウで使いにくい場合もあります。
ヘルプウインドウの共有のポップアップメニューで「Safariで開く」を選ぶと同じ内容をブラウザで表示できます。
表題はどちらも『Swift PlaygroundsユーザガイドmacOS用』です。
ブラウザで開くと各ページの下に『<前へ』『次へ>』ボタンがあります
URLはこちらです。
2-3 Release Notes
Swift Playgroundsのリリースノートがあり、iPad用とMac用両方について載っていました(英文)。
バージョン3.4では「ヘルプ」メニューからこのリリースノートのベージを開くことができるようになりました。【➕3.4】
3 Mac版Swift Playgroundsの画面など
Swift Playgrounds 3.4 for Macについて確認しながらご紹介します。【記事公開時のバージョンは3.2】
3-0 macOS 11.0.1での画面表示【2020年12月8日追記】
macOS 11.0(Big Sur)で実行するとファイル名をウインドウタイトル部分に正しく表示します。
ページタイトルは下に小さく表示します。(macOS 10.15ではページタイトルだけ表示していました)
エラーありの表示
コードにエラーがある場合、タイトルバーに赤丸を表示します。【👍3.4】
赤丸をクリックするとポップオーバーにエラーメッセージを表示します。
エラーメッセージをクリックするとその部分を表示します。
エラー行が画面外の場合はスクロールして表示し、モジュールなどを表示中はエラーのページに切り替わって表示されます。
エラーに不慣れなでも確実に問題の部分を示してくます。
macOS 10.15.7の場合はポップオーバーに「問題」のタイトルを表示します。
エラーの指摘がほかの部分の影響による場合もあります。
その場合はエラー行以外を修正しなければなりません。
3-1 Code suggestion area
これによると「Code suggestion area」に列挙するコマンドにヘルプ情報も表示されるとあります。
日本語版ユーザガイドでは「ショートカットリスト」と表示されていました。
「Code suggestion area」の正式な訳は「ショートカットリスト」です。
実際にヘルプ情報も1行ですが表示されます。
しかもスラッシュ三つで自分で追加したQuick Help用ヘルプ情報も表示されます。
定数startValueにQuick Help用のコメントが付けています。
(拡大画面)
ヘルプ情報が1行なのでSwiftに慣れていない場合の効果は微妙ですが、画面サイズに余裕がある場合には「Code suggestion area」を広げての利用もお試しください。
エディタとCode suggestion areaは escキーで行き来できます。
『4-3 プレイグラウンド書類の編集』を参照してください。
3-2 Sidebar
Mac版にはサイドバーがあります。
バージョン3.3までのiPad版ではページタイトルがポップアップメニューになっていました。
Mac版ではサイドバーがその機能を持ちます。
『ページ』部分にマウスオーバーすると➕ボタンを表示します。
➕ボタンクリックでページを追加できます。
ファイル > 新規ページ メニューでも追加できます。
モジュール
モジュールは各ページとは別の補助ファイルです。
Xcodeでは全てのページで利用可能なものと、ページごとに専用のものを設定できます。
Playgroundsでは全ページ共通の補助ファイルを追加できます。
書類にページ専用のモジュールが既にある場合はそちらも管理できます。
macOS 11.0.1ではモジュールとコードの対応が明確になりました。【👍3.4】【2020年12月8日追記】
編集中のコードに対応してサイドバーで強調されます。
3-3 Touch Bar
タッチバーを使うと「コードを実行」などのコマンドを実行できます。
3-4 Menu bar
Macアプリとして一般的なメニューを備えています。
機能はiPad版とほぼ同じです。
メニューについて詳しくは 4-1 メニュー に書きました。
3-5 Playgrounds 3.4 Mac版の変更点 【変更点3.4】
print()関数の出力をコンソールエリアで確認でき、各playgroundファイルをマルチウインドウで開くことができるようになりました。【➕3.4】
開発者のサブツールとしても嬉しい機能強化です。
また対応するSwift言語のバージョンも5.3となりXcode 12と同じになりました。【👍3.4】
【2020年12月30日追記:SwiftUIはLazy StacksなどiOS 14以降で利用可能な型などはまだ使えません。】
プログラミング学習用としても独立したデベロッパドキュメントウインドウとQuickLook相当の表示が(英語ですが)便利になっています。【👍3.4】
Mac版でとりわけ不便だった表示文字サイズが自在に変更可能になりました。⌘+で「大きく」、 ⌘-で「小さく」できます。
最初に表示する画面タイトルが「Playgrounds」から「マイプレイグラウンド」に変更され、iPad版と同じになりました。【➕3.4】
マルチウインドウに対応し複数の書類を開いた状態にできます。
ただしmacOS 10.15.7では各ウインドウのタイトルバーに相当する部分に表示されるのは『各ページのタイトル』です。
書類のタイトルは「ウインドウ」メニューの現在開いているウインドウのリストを確認しなければならないようです。
macOS 11.0.1以降では書類のタイトルも表示します。【2020年12月8日追記】
今後も記事を増やすつもりです。 サポートしていただけると大変はげみになります。