MOSA Multi-OS Software Artists

MOSAはソフトウェア開発者を支援します

  • iPhone/iPod touch アプリ紹介
  • MOSA掲示板
  • 活動履歴
  • About MOSA(English)

【MOSAメルマガ#13】Swiftとはどんな言語か(またはSwiftのはじめどき) (2017年9月12日配信)

MOSAメールマガジン第13号 Swiftとはどんな言語か(またはSwiftのはじめどき)

◆目次
・MOSAからのお知らせ
・MSM湘南 2017(受付開始しました!)
・Swiftとはどんな言語か(またはSwiftのはじめどき)
・ニュース
・このメールマガジンについて
・バックナンバーについて
・配信先の変更・停止について

ーーーーーーーーーーーーーーーーーーーー
◆MOSAからのお知らせ
ーーーーーーーーーーーーーーーーーーーー
●【夜間】MOSA BUKURO.swift #12
受付期間: 2017年9月13日
開催日: 2017年9月13日

プログラミングを一人で勉強するのはつらくて長い道のり…
そんなあなたのBUKURO.swift

・macOS/iOS/watchOS/tvOSプログラマーのための勉強会です。
・関連があれば、他の環境についてもOKです。
・発表を希望される方は申し込み時のアンケートでお申し込みください。

詳細はこちら。
http://www.mosa.gr.jp/?p=41393

●【夜間】実践!ソフトウェア開発案件の営業見積もり術 / ちょっと便利な開発ツール小ネタ紹介
受付期間: 2017年9月27日
開催日: 2017年9月30日

MOSAでは、ソフトウェア開発案件の営業見積もりについて紹介するセミナーと、Xcodeや開発ツールの便利な機能を紹介するセミナーを開催します。

★セミナー概要 第1部 実践!ソフトウェア開発案件の営業見積もり術
ソフトウェア開発費用の見積りを依頼された時、何を基準にどのように算出したら良いか迷う方も多いのではないでしょうか。本セミナーでは、ソフトウェア開発者の立場から、案件の見積もり、交渉をどのように進めていくか、講師の体験と事例を紹介しながらお話しします。

★セミナー概要 第2部 ちょっと便利な開発ツール小ネタ紹介
Xcodeやその他の開発ツールのちょっと便利な機能を紹介するセミナーです。開発を楽にしたり、効率的にするために日々使っている機能です。このセミナーでは、Xcodeや講師が日頃使っている開発ツールのちょっと便利な機能を紹介します。

詳細はこちら。
http://www.mosa.gr.jp/?p=41516

ーーーーーーーーーーーーーーーーーーーー
◆◆ MSM湘南 2017(受付開始しました)◆◆
ーーーーーーーーーーーーーーーーーーーー
【日時】
2017年10月14日(土)~10/15日(日)

【会場】
湘南国際村センター(神奈川県葉山町)
( JR逗子駅からバス20分、車で都心から約55分)
ホームページ:http://www.shonan-village.jp
交通アクセス:http://www.shonan-village.jp/access.html

【参加料金】
ーーーーーーーーーーーーーーーーーーーー
・会員(ツイン、相部屋)/早割 33,000円、通常 38,000円
・会員(シングル)/早割 37,000円、通常 42,000円
・一般(ツイン、相部屋)/早割 43,000円、通常 48,000円
・一般(シングル)/早割 47,000円、通常 52,000円
ーーーーーーーーーーーーーーーーーーーー
◆一般の方、上記金額でMOSAに同時入会も可能です
◆上記は一泊3食、懇親会パーティ、受講料2日分込みの料金です
◆単日参加、宿泊なしでの参加の場合も上記金額となり、割引はありません

【受付方法】
◆peatixサイトでの受付(各種クレジット、ATM、コンビニ払等に対応)
◆銀行振込(MOSA口座へのお振込)ご希望の会員様、直接事務局にて承ります。

【受付開始日】
2017年9月1日(金)受付開始しました!
ーーーーーーーーーーーーーーーーーーーー

MOSAホームページに昨年のMSMレポートを公開しています。
こちらもぜひご覧ください。
http://www.mosa.gr.jp/?p=39038

MSM2017のセミナー内容など詳細や申し込みについてはこちら。
http://www.mosa.gr.jp/?p=41509

今年もたくさんの皆様のご参加をお待ちしております。

ーーーーーーーーーーーーーーーーーーーー
◆コラム 
ーーーーーーーーーーーーーーーーーーーー
Swiftとはどんな言語か(またはSwiftのはじめどき)
高橋真人(MOSA常任理事)

皆さん、Swiftやってますか?

「もちろん! 既にSwift 4への準備もバッチリ」という方には今回のコラムは残念ながらあまり得るところがないかもしれません。

「Swiftねぇ… 気になってはいるんだけど手を出すタイミングがつかめなくて。時間もないし」
そんなあなたは、このコラムを読まれると何かしら得るところがあるかもしれません。しばしお付き合いいただければ幸いです。

さて、「MOSAの会員やこのメールマガジンを読んでる人にSwiftやってない人なんてそんなにいないんじゃない?」と思ったそこのあなた。実は私も一年ほど前まではそれに近い考えでした。

ですが、昨年のMSMに参加した時、参加者の何人かとお話ししてみて「思ったほど皆Swiftに手を出していないんだな」という印象を持ったのです。

確かに、今までにプログラミングの経験のない人であれば、逆に何の制約もないのでいきなりSwiftに飛び込むというのはありでしょう。ですが、Swiftは現時点でも既に十分使い物になる言語であると同時に、ゴールがどこにあるのか想像も付かないほどの勢いで進化・成長している言語ですから、メンテナンス性が重視され、コードの変更が必要とされることのある現場ではそうそう簡単にSwiftに手を出せないということもあるかもしれません。

私の場合は、以下のような感じでした。

基本的に言語好きなので、2014年のWWDCでSwiftが紹介された時には一通り試してみて、何となく「こんな感じ」という感触は得ました。
ですが、その後仕事などに追われてしばらく触れない期間があり、再びSwiftを触った時には想像以上にあちこちが変化していたのです。
そこで、「この後もまだ変わりそうだし、本格的に取り組むのは必要に迫られてからでいいかな」と思い、そこで学習を一旦保留にしました。
もっとも、その時に「Swiftが過去の言語にはなし得なかった大きなアドバンテージを持っている」ということにも気付いたので、Swiftへの興味は失うどころか増していたのですが。

2015年の秋ごろのこと、ちょうど職場で利用しているマシンの大幅更新に伴い、それまで10.5近辺でずっと足踏みしていたシステム環境を一気に最新のものにアップデートすることになり、私自身もそれまで知識のみで実践はあまり伴っていなかったmacOSの新しい技術を実際に使い込む必要が出てきたのです。

毎年のWWDCでの発表内容には簡単に目を通していたし、技術項目もざっと頭には入れていたのですが、知ると使うは大違い。コードを書くたびに未経験のことに遭遇しては調べて、学んで、理解しての繰り返しの日々を送っていました。

そんな中で目にする説明の中にかなりの比率でSwiftが使われていたのですが、学習を止めていた私には、既に半分ぐらいはちゃんと理解できない状態で、「これでは解説を理解できない」と思って、そこからSwiftの勉強を再開したのです。まあ、再開というより改めて勉強し直したと言った方が正しいかもしれません。

ちょうどタイミング的にはSwift 2.1がリリースされようとしていた時期でもあり、実質、私のSwift歴は2.1からということになります。

ほどなくして、翌年のWWDCではSwift 3が紹介され、秋には正式リリース。さらに半年後のWWDCでSwift 4が紹介され…と、順調に進化していますが、このペースは当分は衰えることがないのではという気もします。

言語仕様が早く落ち着いてくれることを願う気持ちもないではありませんが、むしろそれとは裏腹に、「この部分は、もっと書きやすくなってほしい」と思うところも多々あったりします。(笑)

さて、このように今となれば「比較的早い時期に」と言えなくもない2.1で手を出した私ですら、始めた当初からSwiftについて検索すると過去のバージョンの言語例に行き当たることも少なくはありません。Swiftの最初のバージョンもちょっとは触ったことがあるので、コードを見て、「これが現在のものなのか、過去のものなのか」の区別はほぼ問題なくできます。ただ最近ではSwift 2の例しかないため、3だとどう書いたら良いのかが分からないというケースにもたまに行き当たります。

今のところStack OverflowなどでもSwift 2で書かれた例にSwift 3の例を追記してくれているのをよく目にしますが、これからSwift 5、Swift 6と上がっていった時にもその状況が続くのかと考えると、あまり楽観視はできません。

やはり、自分である程度は過去のバージョンからの書き換えをできるようにしておく方が有利でしょう。その観点から申し上げると、まだSwiftを触ってもいない方に対しては「すぐにでも試してみるべき」ということになると思います。

これからどんどんSwiftは進化していきますし、大方のものはSwiftのみで書けるようになるでしょう。場合によってはSwiftからでないと呼び出すことのできない機能などが出てくる可能性もあります。

ただ、そうは言っても、すべてがSwiftになることもないと思います。

AppleがSwiftをアピールするに際し、「学びやすい」という点を挙げています。このこと自体はその通りかと思いますし、例えばSwift Playgroundsのように学校のプログラミング教材として適したものもありますから、Swiftでプログラミングを学ぶのはありなのでしょう。

ただ、「学びやすい」と「何でも簡単に書ける」は同義ではありません。

私の場合、業務面でデータベースサーバー(MySQL)に直接アクセスする必要があり、以前はCもしくはObjective-Cを使っていました。
アプリケーションの主言語をSwiftに置き換えた場合、MySQLアクセスの部分もSwiftで書くことになります。(もちろん、Cで書いてブリッジすることも可能)
ただ、MySQL用のドライバのAPIは今のところSwiftでは提供されていないので、CのAPIをSwiftから呼ぶことになります。この場合、Cにおいては頻繁に使われるポインタはSwiftには存在しないため、通常の(?)Swiftではあまり目にしないUnsafePointerやらUnsafeMutableRawPointerなどというゴツいものを使うことになります。

実は、MySQLのようなサードパーティーのライブラリを利用する場合のみならず、Apple提供のフレームワークのみで完結するケースですら、これらの仕組みを使わざるを得ないことはあるのです。(例:CGEventのコールバック関数を実装するケースとか)

これらのCでポインタを駆使して書かれた仕組みをSwiftから使う場合、Cでポインタを使ってそれらを書けるだけの技術のみならず、ポインタの本質的な部分までの理解がないと、自力でSwiftに書き換えるのはほぼ無理だと思います。

CもObjective-Cも型に関しては比較的緩い言語ですが、同じ整数型であるIntとLongですらそのままでは比較や代入ができないくらい型に厳密な言語なので、正直これは、Cで書くよりかなり複雑で骨が折れます。

一口に「Swiftをやる」と言っても、この辺までをカバーする必要がある場合には、とても「必要になってからやればいい」とタカをくくっているわけには行かないでしょう。いざ必要になった時点で、「思うように書けなくて困った」ということにならないように、それなりにSwiftに触れておくのは決して無駄なことではないと思います。

さて最後に、先に触れた「Swiftの大きなアドバンテージ」とは何かということについてお話しします。

プログラミング言語というのはその性質上、一度リリースされると変更は簡単にはできません。既に世の中にその言語で書かれたプログラムが存在する可能性があるからで、仕様変更などをすれば、当然それらは影響を受けることになります。人間が作るものである以上、プログラミング言語であろうが実装ミスも設計ミスも起こり得ます。
しかし、仮にバグに類するミスが見つかったとしてもコンパイラなどの実行環境のアップデートには慎重さが要求されます。

仕様変更が与える影響があまりに大きいため、設計ミスだと分かっていてもそれをそのままにせざるを得ないケースもあります。
Cにおける演算子の優先順位などは有名な例で、例えばビット演算子は優先順位が低すぎると言われながらもそのままにされています。

char c = 0xF6;
if (c & 0×80 != 0) {

この例は、慣れない人が犯しがちな書き間違いで、ここはホントは

if ((c & 0×80) != 0) {

と、ビット演算の部分をカッコで囲わなければりません。(そうしないと0×80 != 0が先に計算されてしまう)
しかし、もしこの演算子の優先順位の設計ミスがなければ、カッコを付けなくても問題ありません。

Cが抱えてしまったこの問題を、問題があると分かった上でも引き継ぐに至った言語は多く、C++、Objective-Cはもちろんのこと、C派生ではないJavaですらこの仕様を引き継いでいるのは、プログラミング言語のジレンマを表していると言っていいかもしれません。

しかし、Swiftは自分自身の過去のバージョンとの互換性すら必要とあらばすっぱり切り捨てるほどに大胆に進化していく言語ですから、当然こんなCの負の遺産など引き継ぎません。(SwiftとCを比較してみると、Cの何が問題点なのかが見えてくるかも…)

加えて、2015年にオープンソース化される前から存在するSwift Evolutionというサイト( https://apple.github.io/swift-evolution/ )において、Swiftの言語仕様に対する提案と議論がオープンで行われています。

これは、言語の発展のプロセスをオープンにすることで公正を期するという効果もあると思いますが、私としては複数の人の意見が取り入れられる体制になっていることで、言語がより先進的に発展する可能性があるところに期待しています。(あの言語にあるこの便利な機能を入れようという意見か出やすくなる)

先にも述べたように、私は言語好きな方なので、いろんな言語をつまみ食いしていますが、仕事柄テキスト処理をすることが多く、正規表現は欠かせません。

しかし、最初に正規表現を学んだPerl以降、これ以上に正規表現が使いやすかった言語を知りません。残念ながら他の部分でいろいろ制約があるために、最近はPerlはめったに触る機会がないのですが、正規表現を含む文字列処理の書きやすさは他の言語を圧倒していると思います。
2016年の夏にまだAppleにいたクリスラトナーが Our goal is to be better at string processing than Perl と書いているように、SwiftもPerlの文字列処理の優秀さは意識していますので、いつかはPerlと同等かそれ以上に正規表現も使いやすくなるものと期待しています。

https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160725/025676.html

今年もMSMにおいてSwiftは大きなテーマです。
しかし、言語はあくまで道具であり、それ自体が目標になることは稀です。
多少派手な仕様変更は治まりつつあるようではありますが、きっとこれからもSwiftはダイナミックに変化していくことでしょう。

過去の経験によっては、Swiftは異質のものに見えるかもしれませんが、私が思うにかなり合理的に設計されている言語ではあります。一度しっかり学べば、バージョンアップによる変更もさほど大きなストレスにはならないと思いますので、実際の仕事に導入するかどうかは別にしても、一通りに読める/書けるようにしておくと今後がラクになるのではないでしょうか。

ーーーーーーーーーーーーーーーーーーーー
◆ニュース
ーーーーーーーーーーーーーーーーーーーー
●Apple Special Event
https://www.apple.com/apple-events/september-2017/
いよいよです。日本時間9月13日午前2時からです。

●グーグルの新AR技術「ARCore」はアップル「ARKit」に追いつけるか
https://japan.cnet.com/article/35106534/

●AIやボットは本当にビジネスで使えるのか–日本マイクロソフト・澤氏が解説
https://japan.cnet.com/article/35106803/

●Siriさんの開発責任者、エディ・キューからクレイグ・フェデリギに交代
https://www.gizmodo.jp/2017/09/siri-leader-craig-federighi.html
Siriの方向性に大きな変更は無いと思いますが、他のアプリとの連携は増えていくと思います。

●新型iPhoneの発表会が行なわれる「スティーブ・ジョブズ・シアター」外観の最新映像
https://www.gizmodo.jp/2017/09/steve-jobs-theater-september.html
このメルマガが配信される直後くらいですね。

●山手線火災の原因は「安物のモバイルバッテリー
http://japanese.engadget.com/2017/09/11/Battery/
安いものは壊れやすいとはいっても、このような発火は別次元の問題だと思います。それでも安すぎるものは気をつけた方が良いようです。

ーーーーーーーーーーーーーーーーーーーー
◆このメールマガジンについて
ーーーーーーーーーーーーーーーーーーーー
このメールマガジンではMOSA会員の皆様からの寄稿を募集しています!!
法人会員の皆様、自社のイベントやプレスリリースなどの案内を掲載しませんか?
個人会員の皆様、自作のアプリやOSSで作ったライブラリ、試してみたことなどを掲載してみませんか?
会員ではない皆様、MOSAの会員になって、寄稿してみませんか?

寄稿したい方は以下のページから、お寄せください。
https://mosa-gr-jp.heteml.jp/mosa.gr.jp/?page_id=40953

MOSAの会員については、以下のページをご覧ください。
http://www.mosa.gr.jp/?page_id=4

ーーーーーーーーーーーーーーーーーーーー
◆バックナンバーについて
ーーーーーーーーーーーーーーーーーーーー
バックナンバーは以下のページで公開しています。
http://www.mosa.gr.jp/?page_id=41102

ーーーーーーーーーーーーーーーーーーーー
◆配信先の変更・停止について
ーーーーーーーーーーーーーーーーーーーー
配信先の追加はこちらです。
https://mosa-gr-jp.heteml.jp/mosa.gr.jp/?page_id=40929

配信先の停止はこちらです。
https://mosa-gr-jp.heteml.jp/mosa.gr.jp/?page_id=40938

配信先の変更は、新アドレスを追加後に旧アドレスを停止してください。

このアドレスは送信専用のため、このメールにご返信頂きましてもご回答出来ません。
お問い合わせについては、以下のページをご覧ください。
https://mosa-gr-jp.heteml.jp/mosa.gr.jp/?page_id=4711

ーーーーーーーーーーーーーーーーーーーー
(C) 2017 特定非営利活動法人MOSA
http://www.mosa.gr.jp/

MOSAメールマガジンについて

MOSAからのお知らせ、コラム、IT系ニュース、MOSAの会員からの寄稿をお届けします。
基本は隔週火曜日配信+臨時特別号。購読料も無料です。
是非、ご登録ください!

メールマガジンの配信登録はこちらから。