https://youtu.be/ET-nUa4JbiY
今回からは、いよいよ Language Guide
の章に入っていきます。そんなせっかくの節目でもあるので、まずは最初にお久しぶりの オリエンテーション でこの勉強会を振り返ってみたりしながら、そしてそれから余った時間で Language Guide
の The Basics
から読み進めていく流れで行ってみますね。どうぞよろしくお願いします。
———————————————————————————————————— 熊谷さんのやさしい Swift 勉強会 #77
00:00 開始 00:25 オリエンテーション 00:58 この勉強会のはじまり 11:35 勉強会の目的 16:34 方向性 22:40 対象者 25:57 談笑形式 27:23 心持ち 31:21 心構え 34:09 Language Guide 34:48 The Basics 35:12 現時点の Swift と本のバージョン 36:43 Swift Package Manager のビルドフェーズ 39:44 Swift 言語 39:52 マルチプラットフォーム 45:40 次回の展望 ————————————————————————————————————
Transcription & Summarize : 熊谷さんのやさしい Swift 勉強会 #77
今日は新しいセクションに入ります。「The Swift Programming Language」のランゲージガイドですね。今までは「Welcome to Swift」を見ていたんですが、新しい単元に入るので、気持ち新たにオリエンテーションを行います。今日のメインはオリエンテーションで、それが終わった時点で実際のランゲージガイドに入っていこうと思います。
まずはこの会の始まりということで、初心に帰るようなイメージでお話しします。この勉強会は昨年の7月に始まりました。当時は大きなコンセプトも決めないまま、とにかく始めてしまおうという形でスタートしました。毎日でも開催可能な対話型の勉強会を作り上げようというイメージで始めたのです。
とりあえず週3回のペースで始まったのですが、その中でみんなと一緒に勉強会を進めるうちにイメージが固まってきましたね。最初は思い描いていたものとは若干違いましたが、対話型という言葉の捉え方次第だと感じました。実地での勉強会と比べて対話型ができているのか疑問に感じる時期もありましたが、Zoomを使った対話としてはこれでありかなと思うようになり、だんだんとしっくりくる形になってきたかなという印象です。
ここまで基本的なスタイルはすっかり定まった気がします。実際に勉強会で使うスライドを用意する中で感じたのですが、ランゲージガイドはSwiftツアーとはまた違う色合いがあるので、復習の観点も含めるとより細かいところまで見ていける感じがします。これからは「こんな感じになってるけど、どう思う?」という問いかけを今までよりも増やし、対話型に寄せていけそうだとイメージしています。
勉強会だけが全てではないなと、これまでの会を重ねる中で感じました。この会はこの会でこういった感じで進めていきますが、他の会ではもう少し対話に寄せた形で進められるかなと考えています。
今日の勉強会の後、2時半からは新しく「Swift技術マップを宣伝させよう会」、あるいは「Swift実習室」という形でもう少し黙々会に寄った感じで、勉強会の副次的な会を開催してみようと思います。例えば今日の開幕前にやっていたようなちょっと聞きたいことが出てきたとき、この勉強会の開催前の10分間の雑談タイムに持ってきてもらうのも良いですし、もっとまとまった時間が欲しいときや都合の良い時間に「自習室」のほうで話題を持ってきてもらうこともできます。いろんな形で適材適所に場や機会を作っていくのも対話型勉強会を模索する中での一つのアイデアだと思うので、そんなイメージを持ちつつこれから進めていこうと思います。 実地で勉強会を開催する中では、対話型のスタイルが自然と成り立っていたような気がします。しかし、オンラインで同じようにするのは難しいと感じています。カメラを使えば実地に近づくのではないかという考え方もありますが、実地とオンラインはやはり全く違います。私はカメラをオンにしてもオフにしても、どちらでも構わないと考えていますが、オンラインとオフラインの大きな違いは、発言がクローズアップされやすい点です。これが原因で、発言する際に身構えてしまうことが多いと思います。
Zoomではテキストチャットでの投げかけが実地での声の投げかけに近い感覚があると感じています。このような経験を通して得た知見が、自分の中に積み重なってきました。これからもこうした形で勉強会を続けていけば、新しい発見があると思います。
ユメミンの中でも、振り返りが重要とされている空気感がありますよね。一定の期間を経て振り返り、それをどう生かしていくかは重要です。欲張りすぎず、でも大事な機会として捉えることが大事だと思います。
さて、次に勉強会の目的についても振り返ってみたいと思います。現在の画面に表示されている目的は、第一回目のオリエンテーションで掲載したものと同じ内容です。これを振り返っても特に修正する必要はないと感じています。
この勉強会はプログラミング言語、特に Swift 言語の言語仕様を学ぶことが目的です。華のある分野ではないかもしれませんが、実務においても価値があると感じています。基礎学力をしっかりと身につけておくことは、応用に関わる開発者にとって非常に重要です。それがバグの少ないコードを書くことや、細やかな機能を使いこなすことにつながります。
勉強会を始めた当初は、参加者が投げかけに対してうまく反応できないこともありましたが、今では共通認識がスムーズに伝わるようになっています。ただし、自分の価値観に偏った解釈があると、他の人もそれに影響されてしまうことには注意が必要です。
これからもこの経験を活かしながら進めていきたいと思います。 なので、常に疑ってもらうことは大事なんですけど、それを抜きにして正しいとしたら、スムーズにプログラミング言語としての意思疎通ができている感じが、この勉強会の特にアーカイブを見返していると感じますね。そういう基礎学力がこの勉強会では養えている感じがして、それが養えるというのは大事なことだと思うので、改めて最初に掲げた通り、文化系の習い事のように言語仕様に対して深く長く親しんでいく場所を大事にしていきたいと思います。
あとは、そういう会話型勉強会にもつながることですけれども、自分が一方的に教える場所ではなくて、それぞれがプログラミング言語と向き合いながら各自で自分自身が考える力を養っていけたらいいなという感じです。そういう面では、この勉強会もどちらかというと、自分が一方的に教えている感がなんとなくあって、初めは違和感を感じたところでもありました。しかし、だんだん皆がテキストや声で参加してくれている感が出てきていて、一方的感が薄れてきています。これからは、ランゲージガイドを見ていく中で、情報交換をしながらそれぞれが考える場につなげていけたらいいかなと思っています。そして、会話型につながっていくのかなと思います。
勉強会の方向性として、基礎的な事柄に着目してSwift言語を広く見渡していくことは、これまで通りですね。「The Swift Programming Language」を軸として見ていく実地で勉強会をやっていますが、それよりもじっくり時間をかけて進めていくことがうまく進んでいます。この週3回の勉強会が助かっているんです。週1回だと前回の流れを忘れてしまいますし、進みが遅く感じるのでつい急いでしまうことがあるんですよね。週3回あるおかげで、途中まででも次でまた話そうという感じになれています。おかげで万遍なくSwiftツアーを見られています。長い時間がかかっていますが、あれだけじっくりと全て万遍なく見られる機会はなかなかないと思います。
今までの勉強会にほとんど参加された方々はすごい体験ができたんじゃないかと思います。そして、毎回参加できなかった方や、時々しか参加していない方々もこれからSwiftツアーをベースにランゲージガイドを復習していくスタイルを取っていきたいと思います。内容としては基礎的で簡単なことなので、いつからでも参加していただけますし、月に1回しか参加しない方でもついてくるのは問題ないと思います。
じっくり時間をかけて進めていくことが、広範囲でいい影響を及ぼしているという印象を持ちます。同じ話を何回もすることがあるのですが、広い視野で見ると、言語仕様がいろんなところに影響を及ぼしているので、何回も同じようなことを話すこともあるでしょう。それもいい具合に作用するんじゃないかと思いますし、参加しやすくなるんじゃないかと感じます。
補足として、この勉強会にそのつもりで臨んでもらえると、こっちも安心して進めていけるのかなという気がします。 ついつい焦ってしまいます。同じことを何度も話していると「これ既に聞いたよね?」と感じてしまうことがあるんです。しかし、この勉強会の大事なコンセプトの一つに「知っていると思い込まない」というのがあります。何かを知っているかどうかは個人の思い込みなので、自分が伝えるべきことをうっかり伝え忘れてしまわないように、気にせず進めていくことが重要です。そんなふうに時々自分に言い聞かせることがよくあります。
たとえば、今回話したことを次回、次回は金曜日が休みになっているので月曜日ですが、2日後に同じことをまた言うかもしれません。そして、参加者がそれを初めて聞いたということも往々にしてあります。そういったことを踏まえると、同じことを繰り返し触れていくことが大事だなと感じます。ですので、この勉強会ではあまり意気込んで何かを身につけようというよりは、1時間せっかくの時間を使って、昼ご飯を食べながらでも構いませんので、ゆっくりと学んでいただければと思います。
この勉強会の開催当初の対象はアソシエイトエンジニア、Swift言語に関わるプログラマー、そしてSwift言語に興味を持つすべての人、つまり誰でも参加できる設定です。特にアソシエイトエンジニアの方々には積極的に参加してほしいと思っています。プログラミングをしていると、何かを作る中では手法やAPIの使い方に偏りがちです。しかし、プログラムを作る上で大事なことや、意識しなければならないことがあります。
例えば、今日の勉強会開始前に話していた「クラスをエクステンションする」といったことも、実際に行うためにはいろいろな配慮が必要です。こういった細かいことを考えることがプログラミングの本質に近づきます。しかし、これらに触れる機会は少ないのです。ライブコーディングやペアプログラミングをしないと見えてこない部分もあります。
この勉強会では、言語仕様という観点からそういった部分に触れられる機会でもあるので、特にアソシエイトエンジニアの方々には参加していただき、プログラミングの進め方に気を配りながら進めていただきたいと思います。具体的に言える部分もあれば、そうでない広い部分もあります。それぞれが自分の視点で感じ取ってもらえればと思います。
また、プレイグラウンドを使ってライブコーディングするスタイルは非常に有益だと思いますので、そういった部分に意識を向けて感じ取ってもらえたら嬉しいです。これからランゲージガイドに入っていきますが、そういった気を配るところをうまく織り込んでいけたらと思います。
さらに、この勉強会は談笑形式で進めています。みんなと情報交換しながら学びを深めていきたいと思っていますので、いつでもテキストチャットで割り込んでいただいて構いません。最近はテキストチャットが主流になっていますが、どんなタイミングでも思い思いに入ってください。皆さん従順にテーマに沿った話をしてくれていますが、突然別の話を入れてもらっても全然大丈夫です。「そういえばこれさ」という感じで、話している内容とそんなに変わらない流れになると思います。 少なくとも少しは関係しているので、どんどん脱線してもらって大丈夫です。いい感じに有意義な時間を過ごしてもらえたらと思います。
話し合いの中で大切な心構えとしてこの3つを掲げています。話しかけることは結構難しいですよね。特にたくさんの人がいるときは、みんなにとって有意義な話題を提供したいという気持ちが働くと思います。しかし、この3つを意識すると、より話しやすくなり、結果的にみんなにとっても有意義な時間になるのではないでしょうか。まずは、その3つを紹介します。
まず一つ目は、「みんな知っている」という思い込みを捨てることです。どんなに詳しそうな人でも、ほんのちょっとしたことを知らない場合があります。ですから、自分が知っていることでも、他の人も知っているだろうと決めつけずに、話してみてください。それを他の人に知る機会を提供することになりますし、知っていたとしても、新たな視点や発見があるかもしれません。
次に、技術の話でありがちですが、「これは正しいのか?」「根拠があるのか?」「一時情報はあるのか?」といったことを気にしがちです。しかし、この勉強会ではそういった点を気にする必要はありません。仮に話した内容が間違っていても、話していく中で正しい情報が見つかることがよくあります。そもそも、それが正しいか間違っているかの答えが存在しない場合も多いです。そのため、証拠を探すことにこだわらずに、まずは話してみて、その後みんなで正しい情報を探しましょう。
最後に、一時情報(つまりソース)がない場合もあります。新しいことにソースなんてないことが多いです。そのため、ソースにこだわるよりも、自分の中でその情報が正しいかどうかを判断できる材料や知識が大事です。それを養う意味でも、まだ分からないことについても議論を重ねて、みんなと有意義な時間を過ごせればと思います。この3つの心構えを大事にしてもらえたら嬉しいです。
また最後に、この勉強会に参加する皆さん全員の意見が正しいということを忘れないでください。間違っていたとしても、その人にとっては正しいのです。少なくともこの勉強会で、誰かを騙そうとして嘘をつく人はいないと思いますので、その人にとっての「正しい」を尊重しましょう。
また、この勉強会は講習会ではないことも心に留めておいてください。これは、自分が初めて勉強会を引き継いだときに先代が掲げていた言葉で、とても好きなフレーズです。教えてもらう場所、聞きに来るだけの会ではなく、お互いに学び合う場です。この心構えを持つことで、勉強会の質がグッと上がると思います。 なので、この勉強会はただ聞きに来る場としてではなく、みんなで一緒に学ぶ場所として有意義に使ってもらえたらと思います。まあ、何でもそうですが、この勉強会に限らず全てにおいて、その場を有意義なものにするかどうかっていうのは自分次第というところがあります。ですから、この勉強会でも他の機会でも、その心構えを大事にしてもらえたら嬉しいです。言い換えれば、この心構えは特定の場面に限らず、いろんな場面で持っておくと良い結果が出るかもしれません。
はい、では、これから進めていきますので、改めて引き続きよろしくお願いします。さて、これから「The Swift Programming Language」のランゲージガイドに入っていこうと思います。残り時間が15分しかないので、全体の展望を見ていく形になるかもしれません。
何か質問や意見があれば、このタイミングでお願いします。大丈夫そうですね。それでは進めていきます。今日は「The Basics」から始めますので、もう少し基礎的な内容が続きますが、この機会を大切にしてじっくりと学んでいきましょう。
ちなみに、コメントを取り上げますが、「Swift 5.6」はまだベータ版です。「The Swift Programming Language」もiBooksではベータ版の5.6と正式版の5.5があるのですが、ウェブサイト上の「The Swift Programming Language」はすでにベータ版になっていて、一番最後に「このドキュメントはベータ版なので、正式リリースで内容が食い違う可能性があります」といった補足が入るようになっています。
ですが、おそらくベータ版でも大きく変わることはないと思いますし、あらかじめ新しい情報を押さえておくことも大切です。ベータ版でも正規版でも、ドキュメントと現実が食い違うことはよくあることなので、このまま5.6のベータ版をベースに進めていきます。
では、進めていきましょう。ちょうど面白そうなコメントがありましたので、こちらも取り上げます。「5.6では Swift PM
でビルドフェーズの処理が書けるようになる。」これは助かりますよね。Xcodeではビルドフェーズを追加してスクリプトで色々やることができ、これが便利だったので楽しみです。
この勉強会の範囲からは少し逸れますが、言語だけでなく開発環境やエコシステム全体に目を向けることも大事ですよね。「Swift」は言語としてだけでなく、広範なプロジェクトとして掲げられているので、そういった面でのアップデートも重要です。
今回の勉強会では言語仕様の基礎を中心に扱いますが、Swiftのエコシステムについても別途勉強会を設けても良いかもしれませんね。そうすることで、より自由自在にSwiftを操れるようになるでしょう。
はい、では引き続き、「The Swift Programming Language」を見ていきましょう。 変化が早いので自分だけでは手一杯な感じがしますし、アプリケーション開発とは少し違うところでは私はあまり得意ではありません。他の方で、もしそういった分野に明るくて興味がある人がいれば、そういう勉強会も始まってくれたら嬉しいですね。まあ、いいでしょう。
さて、基本的な部分に入っていきますが、まず Swift 言語とはどういったものかについて触れます。Swift についての概要ですが、iOS、macOS、watchOS、tvOS 開発のための新しいプログラミング言語とされています。ただ、Swift の紹介の時にはもっと Linux や Windows など、すべての環境で動くようなマルチプラットフォームを意識しているということも書かれていました。現在のところ、この本ではその点に触れているのかわかりませんが、少なくともマルチプラットフォームを想定しているという点は理解しておくべきです。
最近では、Flutter が非常に勢力を増してきている印象がありますね。Flutter はマルチプラットフォームであるため、Swift がその座を狙っているのかどうかは興味深いところです。現時点では、Swift と関わっている中で、そこまでマルチプラットフォームに加速している感じはありませんが、SwiftUI の登場により少し状況が変わってきているのかもしれません。
Swift は Apple のエコシステム内で使用されるのが主ですが、Linux もサポートしています。Flutter が Windows 向けのサポートを発表した中で、Swift もそこまで広がってくれたら嬉しいですが、現在は期待されている程度でしょうね。そのためにオープンソースにしたわけですから、Kotlin のように誰かがそのエコシステムを拡張してくれることを期待しています。
SwiftUI をオープンソースにするかどうかが大きなポイントかもしれません。現在は SwiftUI は Apple エコシステム内でしか使用できませんが、オープンソースになれば Swift パッケージを Android 向けにデプロイできるようになると便利です。今のところ、SwiftUI の仕様を固めている段階だと思うので、いずれオープンになることを期待したいですね。
今年の WWDC ではどうなるでしょうね。SwiftUI のオープンソース化が発表されたら大きな話題になるでしょう。しかし、まだ早いかもしれません。ですが、Swift 2 から 3 への移行のように、大きな変革があるかもしれません。
言語仕様が大きく変わることを望んでいる部分もあります。オープンソース化して意見を募り、言語仕様を大幅に改変するのも一つの方法ですね。それに伴う苦労はありますが、有意義な改変になるでしょう。
もういい時間になりましたので、今日の勉強会はこれで終わりにします。今後は引き続き The Basics を見ながら、言語ガイドに入っていこうかなと思います。今日はお疲れ様でした。ありがとうございました。