本投稿は TECOTEC Advent Calendar 2023 の2日目の記事です。
証券フロンティア事業部の桑原です。弊社の株式投資管理・分析アプリ「カビュウ」のiOS版開発に携わっております。 kaview.jp
今回はiPhoneアプリ開発に欠かせないプログラミング言語、Swift(スウィフト)についてご紹介します。
本投稿は「なんかiPhoneアプリ作るときSwiftってやつ使うらしいね?でも詳しく知らないヨ」という方を想定した記事になります。
プログラミング初学者の方や他言語を扱うエンジニアさんに、新たな発見を提供出来ればと思います。
基本的な内容に焦点を当てていますが、Swiftにすでに親しんでいる方々にとっても、この記事がSwiftへの理解を深め、より一層の愛着を感じるきっかけになれば幸いです。
はじめに
プログラミング言語は、それぞれの開発者が目指した特定の目的や要求に応えるために設計されました。その結果、この世には多種多様なプログラミング言語が存在しています。
各言語は独自の強みがあり、最終的に作りたいものが決まれば、自ずとどの言語を使うかというのは絞られます。
そしてその目的が「iPhoneアプリを作りたい!」であった場合、基本的にはSwiftを採用することになります。
Swiftの話題になると多くの場合、特定のコードでどのような機能を実装できるかに焦点が当てられがちです。
「このコードを書くと、こんな素晴らしい機能を搭載できますよ!!」と具体例が示されることが多いですね。
それらもとても勉強になるのですが、今回はアプリ開発という領域から一歩離れて、Swiftのより基本的な要素に着目したいと思います。
Swiftのキホン
Swiftは2014年にAppleによって発表されたプログラミング言語で、iOSやmacOSなどのアプリ開発に特化しています。まだ9歳!
Swiftという英単語は形容詞としては速い、迅速なという意味があり、後述するSwiftのコンセプトに関わる単語となっています。
一方で、名詞としてはアマツバメを意味します。
(↓この可愛らしいアイコンはつまりそういうことです。) developer.apple.com
Swiftがどういう書式なのか見たことない方も多いと思いますので、簡単なサンプルを以下に示します。
// 三角形の面積を計算する関数 func calculateTriangleArea(base: Double, height: Double) -> Double { return (base * height) / 2.0 } // 関数の返り値を定数に格納 let area = calculateTriangleArea(base: 10.0, height: 5.0) // 結果を表示 print("三角形の面積: \(area)")
Swiftの特徴
Swiftの特徴についてApple公式は
なんかそれっぽい単語並べてそれっぽいキャッチコピーにしてるだけじゃないの〜?と思ったそこのアナタ!
これらのキーワードには、Swiftが持つ独特の強みと具体的な根拠が隠されています。
モダン(現代的)
プログラミング言語としては若めということもあり、直感的で簡潔なコーディングを実現しています。
モダンな構造であるということは「読みやすい」「書きやすい」にも繋がります。
たくさんの機能が採用されていますが、いくつか抜粋して紹介します。
クロージャー
短いブロックのコードを変数に割り当てたり、関数の引数として使用できます。
// 三角形の面積を計算するクロージャー let calculateTriangleArea = { (base: Double, height: Double) in (base * height) / 2.0 } // クロージャーを使用して三角形の面積を計算 let area = calculateTriangleArea(10.0, 5.0)
タプル
異なる型の値を一つの複合値として扱うことができる機能。
// 気象データを含む名前付きタプル let weatherData = (city: "Tokyo", temperature: 25.5, humidity: 60) // 名前付きタプルの要素にアクセス print("City: \(weatherData.city)") // "Tokyo" print("Temperature: \(weatherData.temperature)°C") // "25.5°C" print("Humidity: \(weatherData.humidity)%") // "60%"
オプショナル型
値が「何もない(nil)」ことを安全に扱うための機能。
型名の後ろに!や?を付与することで設定できます。 下の例ではStringに「?」を付けています。
// データベースからキーに対応する値を返す関数の仮定 func fetchFromDatabase(key: String) -> String? { let database = ["name": "Alice", "age": "30"] return database[key] } // 通常の型と同様の使い方をしたパターン if let name = fetchFromDatabase(key: "name") { // こちらが実行され、"Name is Alice."が表示 print("Name is \(name).") } else { print("Name not found.") } // 存在しないキーを指定するとnilが返ってくる if let address = fetchFromDatabase(key: "address") { print("Address is \(address).") } else { // このケースが実行される print("Address not found.") }
安全
Swiftにおける「安全」とは、特にアプリのクラッシュ(いわゆる"アプリが落ちる”)を防ぐことに関連しています。
例えば、iPhoneアプリ開発において、nil
(空の値)を持つ変数から値を取り出そうとすると、アプリがクラッシュする可能性があります。
そのために、開発者の意図しない動作を防ぐ一定の制約が課せられています。
変数の初期化の強制
Swiftでは、変数を明示的に初期化することが必要です。例えば以下のコードはエラーになります。
// エラーになるコード var x x = 3
別にいいじゃん!と思うかもしれませんが、次のような事故を防ぐためです。
var x // ここにx = 3を書き忘れちゃった print(x + 1) // 中身が空の変数を参照しているのでクラッシュする
正しくはこう。
var x = 3
オプショナル型を使う理由
なぜわざわざ!や?を使ってオプショナル型を扱わなければならないのでしょうか? 通常の型にnilという値も扱えるようにすればいいじゃないか!!と考えてしまうものです。 では、実際にそれを許したとき、何が起こり得るのか見てみましょう。
// 仮に、通常の型にnilを入れてもOKな世界 var x:Int = nil print( x + 1 )
これでなにが起こるかというと、エラーは発生しないのにアプリはクラッシュします。困る!!
というわけで、そもそも仕組みとして出来ないようになっています。
初学者のうちは多少煩わしく感じるかもしれませんが、こういった縛りのおかげで安全なアプリ開発が意識せずとも実現されます。
高速
英単語としての「Swift」にあたる部分ですね。
コンピュータは情報をメモリという場所に保存しますが、Swiftでは「自動参照カウント」という機能を使って、メモリの管理を上手に行います。
これにより、不要な情報を効率的に片付け、必要な情報をすぐに使える状態に保つことができます。
インタラクティブ(対話的)
Swiftを扱う際にはXcodeという統合開発環境を利用することが多いです。
そして、このXcodeには「Playground」と呼ばれる開発環境があります。
(※プログラミング学習アプリ「Swift Playgrounds」とは別のものです。)
この環境では、コードを書いてすぐに結果を見ることができます。
これにより、試行錯誤をしながら学習して問題解決を行うことができます。
おわりに
少し早足でしたが、Swiftの基本的な特徴について紹介しました。
普段は触れ合わない世界が、皆さんに新たな発見や刺激をもたらしてくれたなら嬉しい限りです。
参考
- WWDC2014(Swiftの発表箇所は1時間43分50秒あたりから) www.youtube.com
- 荻原剛志『詳解 Swift』,SBクリエイティブ株式会社,2017年(初版)
- 高橋京介『絶対に挫折しないiPhoneアプリ開発「超」入門』,SBクリエイティブ株式会社,2018年(初版)
おまけ:iPhoneアプリ開発に興味を持ったときの注意点
アプリ開発のフレームワークが大きく2種類、UIKitとSwiftUIがあります。
自分がどちらを使いたいのか、技術書がどちらについて書かれたものなのかといった点にご注意ください。
SwiftUIについては、テコテック 赤池による記事もぜひご参照ください! tec.tecotec.co.jp
テコテックの採用活動について
テコテックでは新卒採用、中途採用共に積極的に募集をしています。
採用サイトにて会社の雰囲気や福利厚生、募集内容をご確認いただけます。
ご興味を持っていただけましたら是非ご覧ください。