フリーランスの収入見込みをチェック
Swiftとは
Swiftは2014年に登場した比較的若いプログラミング言語で、前述のようにAppleが自社製品上で動作するアプリケーションの開発用に作成しました。
※参照 : Swift - Apple Developer
現在では、Swiftはオープンソース化され、WindowsやLinuxを含んだマルチプラットフォームで動作する、汎用プログラミング言語となっています。
基本的にSwiftは、コンパイルされて機械語へと翻訳されてから実行される、ネイティブ言語です。しかし、ユニークなことに、一行一行実行しながらデバッグする、インタラクティブな動作にも対応しており、Xcodeやターミナル上の環境からまるでスクリプト言語のように利用することもできます。
実は、Appleが自社製品用に用意したプログラミング言語には、Swift以前にもObjective-Cという言語がありました。しかし、Objective-Cは、現代から見ると古めの言語設計に依存しており、モダンな言語での開発環境が望まれていたのです。
Swiftの最大の特徴は、何といっても近代的でモダンなプログラミングスタイルにあるでしょう。Swiftは2010年代に開発が始められただけあって、さまざまな近代的なプログラミングパラダイムが導入されており、それまでのObjective-Cに比べてはるかに扱いやすい言語となっています。
Swiftの言語設計は、Objective-Cの他に、Rust、Haskell、Ruby、Python、C#、CLUなどさまざまな言語の長所が取り入れられており、オブジェクト指向プログラミングはもちろん、命令型や関数型での記述も可能なマルチパラダイムなプログラミングスタイルを可能とします。
また、従来のObjective-Cと比べて、多くのコレクションがライブラリから組み込み型となったことも大きく、Pythonのようなスクリプト言語から移行するプログラマーにとっても、それほど違和感のないプログラミングが可能でしょう。
JavaScriptやTypeScriptとの違い
前述のようにSwiftは2010年代に開発された言語なので、同年代に開発されたモダンなプログラミング言語と、多くの共通点があります。
中でも、TypeScriptなどは文法的にもSwiftとの共通点が多く、TypeScriptでプログラミングを学んだプログラマーであれば、Swift言語への移行は非常にスムーズになるでしょう。
一方で、TypeScriptやJavaScriptとSwiftでは、根本的に異なっている点もあります。
Swiftは、基本的にコンパイルされて機械語へと翻訳されてから実行されるため、その点が仮想マシン上で実行されるJava やJavaScriptやTypeScriptとの最も大きな違いといえます。
CPUネイティブな機械語で実行されるということは、CPUの性能を最大限に利用できるというメリットがあり、それはスマートフォン等のモバイルデバイスで動作するアプリケーションの場合は、特に大きな利点となります。
また、プログラミングのコード上においても、Swiftがネイティブな言語であるがゆえの違いがあります。
例えば、Swiftは変数に「型」を持つ言語です。JavaScriptは型のない変数を扱うことができますが、Swiftでは型のない変数は許されません。
変数の「型」については記事の後半で再び触れますが、その他にも、クラスやコレクションの扱いなど、細かい部分に差があります。
しかし、そういった差は、異なるプログラミング言語であれば当然に存在するもので、基本的な考え方でいえば、JavaScript(特にTypeScript)を使い慣れているプログラマーであれば、Swiftの学習は比較的容易である、といえるでしょう。
Swiftでできること
Swiftはそもそも、Appleが自社製品の上で動作するアプリケーションの開発用に作成したことから、Apple製品に向けたアプリケーションを開発するのであれば、まず採用を検討すべき言語です。
iOS, OSXアプリケーションの開発
SwiftはiPhone等で動作するiOSアプリケーションの作成にも、Mac等で動作するOS Xアプリケーションの作成にも使用できます。現時点において、それらのプラットフォームで動作するアプリケーション開発を一から開始するのであれば、Swiftを採用しない理由はないと言っていいでしょう。
また、コンパイルされて機械語になるSwiftは、従来のObjective-Cで作成されたライブラリもリンクして利用することができます。なので、古いソースコードがレガシーとなっている場合であっても、Swiftを採用した上でレガシーを利用することができます。
アプリケーション開発のための環境は、Appleが用意しているXcodeを利用することが一般的で、その場合は開発用のPCもMacを利用することになるでしょう。
さらに、 開発者へのサポートはApple Developer Program上でAppleが直接行っています。
そうした、垂直統合型モデルならではの、統合された環境と手厚いサポートも、Swift開発者を目指す場合の魅力の一つです。
バックエンド開発
Swiftはオープンソース化されたとはいえ、Appleが自社製品用のアプリケーション開発に作成した生い立ちから、長らくApple製品専用に近い位置づけにありました。
しかし、2020年5月に、AWS Lambda上でSwiftが利用できる「Swift AWS Lambda Runtime 」が公開され、AWS S3とAWS Lambdaを組み合わせたサーバーレス開発において、Swift言語が利用できるようになりました。
サーバー上でのSwiftは、Swift Server Work Groupというチームがメンテナンスをしており、Apple、Amazon、MongoDB、Vapor等の企業からサポートを受けたコミュニティが形成されています。
これにより、Swiftによるバックエンド開発が、商用レベルでのクオリティを担保したうえで現実的な選択肢として利用できる状態にあります。
バックエンド開発においてSwiftを利用するメリットは、その実行速度と、フロントエンドであるアプリケーションと同じ言語でバックエンド開発も行える、という点にあるでしょう。
現状、単一の言語でiOSアプリとバックエンド開発の両方を行おうとするならば、Swift AWS Lambda Runtimeがほとんど唯一の選択肢となります。
Swiftエンジニア入門のためのステップ
Swift入門のための学習ステップを、順を追って説明していきます。
- 1.開発環境の構築
- 2.変数型の扱いに慣れる
- 3.SwiftUIを学ぶ
- 4.ネイティブAPIの扱いをマスターする
- 5.Swiftを教える
1.開発環境の構築
現状で、Swiftを学ぶ動機としては、iPhoneやMacといったApple製品上で動作するアプリケーションを開発したいから、というものが多いでしょう。
そうした場合、Mac上でXcodeを使ってプログラムを開発する必要があります。また、作成したアプリケーションを、App Store等で配信するためにはApple Developer Programへの登録も必要になります。
オープンソース化されているSwiftを利用して、WindowsやLinux上でSwift開発を行うこともできますが、その場合はiOSやOS XのAPIを利用することはできないので、純粋に言語としてのSwiftしか学ぶことができません。
逆にいえば、Mac PCを入手してAppleアカウントを作成さえしてしまえば、App StoreからXcodeをインストールするだけで統合されたSwiftの開発環境が得られるため、Swift開発の環境構築は、ほかの言語と比べても楽である、といえます。
また、アプリケーション開発ではなくSwiftの学習のみであれば、インタラクティブにSwiftコードを実行できるPlaygroudsアプリケーションが、MacとiPad向けにリリースされています。
iPad上にApp Storeからアプリケーションをインストールするだけで、Swiftの学習を開始できるというのは、プログラミング教育用ツールとしても優れた環境といえるでしょう。
2.変数型の扱いに慣れる
その他の言語を使い慣れているプログラマーが、Swiftを学ぶときに初めに慣れなければならない要素が、変数の型の扱いについてです。
前述のように、Swiftは変数に厳密な型を持つ言語で、その点ではCやC++言語と同じなのですが、モダンな言語としての表記方法はむしろTypeScript等の言語に近いものがあります。
例えば、
var i = 0;
というコードは、SwiftでもJavaScriptでも正しく動作します。これは、変数に初期化式があるため、Swiftにおいても変数の型を暗黙的な推測から(上の場合はInt型)定義されるからです。
一方で、
var j;
というコードは、JavaScriptでは正しいですが、Swiftではエラーとなります。これは、初期化式のない変数では型を暗黙裡に決定できないためで、Swiftで値を持たない変数を作成するには、
var j: Int?;
とします。
このコードにおける「?」という箇所がSwiftに特有の部分です。この場合の「?」は、変数jが「値を持たない」こともありうる、とコンパイラに教える役目を持っています。
ここで言う「値を持たない」は、JavaScriptやPythonのようなスクリプト言語におけるUndefinedに相当し、CやC++言語におけるNULLとは異なる概念です。
Swiftでは、CやC++言語と同等の厳格な型定義と、JavaScriptやPythonのようなスクリプト言語におけるUndefinedの概念を両立するために、このような仕組みが取り入られています。コンパイラに変数型を教える必要があり、かつ、変数が値を持たない可能性もあるという点で、Swiftの変数型に対する考え方は、ほかの言語にはないユニークなものになっています。
そのため、JavaScriptやPythonのようなスクリプト言語に慣れているプログラマーにとっても、CやC++言語に慣れているプログラマーにとっても、まず、Swiftの変数型に慣れる必要があるのです。
この部分は言語の基礎的な箇所なので、既に何らかの開発経験があるプログラマーであれば、前述のPlaygroudsアプリケーション上でチュートリアルを実行すれば、無理なく理解することができるでしょう。
もしも、より詳細な言語使用を学び、Swiftのエキスパートを目指すならば、英語のドキュメントになりますが、Appleが出しているSwiftの公式ドキュメントを参照することをお勧めします。
※参照 : Apple BooksでThe Swift Programming Language (Swift 5.3)を読む
3.SwiftUIを学ぶ
Swiftの言語仕様それ自体は、その他の言語とさほど大きな違いはありません。そのため、その他の言語での開発経験のあるプログラマーがSwiftを学ぶ場合は、Swift特有のキーワードだとか、クラス定義の方法の違い、名前空間の扱い方など、個別の要素を一つずつ学習してゆくことになります。
そうした学習は何の目的もなく学ぶだけでは辛いものがあるので、やはり実際に動くアプリケーションを作成しながら、言語の詳細についても理解を深めてゆきたいところです。
前述のとおり、SwiftはApple製品に向けたアプリケーションの開発ができる言語なので、実際にiPhoneやMacで動作するアプリケーションを作成することが、Swift学習の次のステップとなるでしょう。
実際に動作するアプリケーションを作成するには、言語としてのSwiftだけではなく、オペレーティングシステムとのインターフェイスとなるAPIの利用方法や、UIの作成方法なども学ばなければなりません。
SwiftでiOSやMac上で動作するアプリケーションを作成する場合、SwiftUIという共通のインターフェイスを使ってGUIアプリケーションを作成することができます。
SwiftUIについて学ぶ最初のステップは、英語のドキュメントになりますが、Appleが用意しているチュートリアルを実行することがお勧めです。
※参照 : SwiftUI Tutorials | Apple Developer Documentation
約4時間半のチュートリアルを実行すれば、iOSとOS X上で動作するGUIアプリケーションを作成する基礎が身につきます。
4.ネイティブAPIの扱いをマスターする
さらに、Swiftエンジニアとして実際の仕事をこなせるようになるためには、実案件におけるSwiftの主な使い道であるiOSアプリケーション開発について、より専門的な知識を身につける必要があります。
実際のiOSアプリケーション開発では、SwiftUIとは別の、iOSネイティブのAPIであるUIKitを使ってGUIを作成する場合も多くあります。
そのため、一人前のSwiftエンジニアを目指すのであれば、UIKitの扱いをマスターし、iOSアプリケーション開発のエキスパートを目指すのが良いでしょう。
このUIKitは、Swiftの他、Objective-Cからでも利用できるAPIなので、ネイティブライブラリとの結合やObjective-C APIの利用など、Swiftのより深い箇所にある機能を利用するシーンが増えます。
例えば、Swiftにおけるネイティブの文字列型はString型ですが、UIKitではObjective-Cで使われるNSString型で文字列を扱う場合もあります。
var swiftstr : String = "あいうえお";
var nsstr : NSString = "かきくけこ";
通常はString型とNSString型は交換性があり、意識せずとも互いに型キャスト可能なので、型の違いを意識することは少ないかもしれません。
var swiftstr2 : String = nsstr;
var nsstr2 : NSString = swiftstr;
しかし、ネイティブ型の違いを理解せずにAPIを使用していると、思わぬところで足をすくわれることになります。
var f : NSString = NSString.localizedStringWithFormat("%s", swiftstr); // 文字化け
例えば、上の例では、NSStringクラスの「localizedStringWithFormat」関数を使って文字列に変数を埋め込もうとしていますが、「%s」はC言語のネイティブ型を想定しているので、上の例は文字化けを起こします。
おそらくこの場合の正しい解法は「%@」を使うか、Swiftネイティブの変数を文字列に埋め込む記法で、それは以下のようになります。
var f : String = "\(swiftstr)"; // 正しい
その他にも、UIKitが提供するGUIのAPIであるUIViewクラスや、コントローラーとなるUIViewControllerクラス、さらにそのライフサイクル等についても学ばなければ、iOSアプリケーション開発のエキスパートとななれません。
こうしたネイティブAPIの扱いをマスターするためには、Swiftの言語そのものではなく、iOSアプリケーション開発やOS Xアプリケーション開発のための知識を学ぶ必要があります。
UIKitの使い方を含んだアプリケーション開発については、これもAppleから書籍が出版されているので、そうした情報を参考にしてください。
※参照 : Apple BooksでSwiftによるアプリケーション開発:入門編を読む
5.Swiftを教える
実際の仕事でSwiftを使えるレベルに到達したならば、次のステップは、Swiftを他人に教える事ができるようになる事です。
前述のようにSwiftは、Playgroundアプリケーションをインストールするだけで学習できるので、プログラミング教育にも向いています。
Swiftを他人に教えようとする場合、Appleが、Playgroudsアプリケーションを使ってプログラミングを教える、教師に向けたドキュメントを出版しているので、そちらが参考になります。
※参照 : Apple BooksでSwift Playgrounds: コードを学ぼう1&2を読む
この段階まで到達すれば、完全なSwiftマスターとしてSwift言語を自在に使いこなしていることでしょう。Swiftマスターに向けて、プログラミング初学者も実務経験者も、現在の自身のレベルにあった地点から学びをスタートさせてみてください。
Swiftエンジニアの需要と将来性
Swiftは2014年リリースと言語の中では比較的新しく、将来性は未知数と言えます。Swiftを使っているエンジニア人口はまだ少ないものの、その分競争率は低いため、Swiftによるアプリ開発の前線で活躍できるチャンスが秘められています。
求人・案件においては、市場規模ではJava等が圧倒的な多さを誇りますが、新しい分野に挑戦するスタンスの企業は積極的にSwift技術者を歓迎しているケースが多く見られます。Google社やFacebook社でもSwiftエンジニアを募集し始めており、Swiftは次世代を担う言語として注目されつつある言語であることが伺えます。
またSwiftは他言語に比べ、学習難易度が比較的容易なことが特徴です。もしSwiftの開発ツールであるXcodeが使いこなせるようになれば、Apple製品に対応するアプリを開発できます。
iPhoneやMac用のアプリを作りたい方、また業界初心者の方で、効率的に勉強・習得して仕事に結びつけたい方にとってには、Swiftは可能性をもった言語であるといえるでしょう。
関連記事 : Swiftエンジニアの年収|求人案件数や将来性、有効なスキルなど解説
Swiftエンジニアの年収・単価相場
2022年3月時点でレバテックフリーランスに公開されているSwift案件の平均月額単価は79万円であり、最高月額単価が125万円、最低月額単価が45万円となっています。それぞれ12ヶ月分を年収として計算すると、平均年収が948万円、最高年収は1,500万円、最低年収でも540万円となります。
平均年収(フリーランス) | 948万円 |
---|---|
最高年収 | 1500万円 |
最低年収 | 480万円 |
これはあくまでも、レバテックフリーランスに掲載されているフリーランス向け案件の単価をベースに計算した、税金や保険料を差し引く前の金額であり、Swiftエンジニア全体の平均年収を表したものではありません。また、在宅案件の年収・単価相場とも異なるため、ひとつの目安としてお考えください。
※本記事は2022年3月時点の情報を基に執筆しております。
最後に
簡単4ステップ!スキルや経験年数をポチポチ選ぶだけで、あなたのフリーランスとしての単価相場を算出します!
※相場算出に個人情報の取得はおこないません。