Swiftコーディング規約とコードスニペット
韮澤 賢三
こんにちは。スマートデバイス開発チームの韮澤(にらさわ)です。
スマートフォンアプリの開発や開発標準の策定、技術推進などを行っています。
私の得意分野はiOS開発なのですが、iOSといえばSwiftの勢いが凄まじいですね。
私は先日try! Swiftカンファレンスに参加し、その盛り上がりを肌で感じてきたところです。
Objective-CからSwiftへ
これまでiOS開発に使われてきたObjective-Cはその特殊な記法から、学習コストが高く開発を始めるための精神的な障壁が若干高めだったかと思います。
しかしSwiftの出現により、プログラミング未経験者はもとよりweb系エンジニアにとっても参入障壁がグッと下がった印象があり、社内でも「SwiftならiOSアプリを書いても良いかも」という意見が聞かれます。
そんな高まりを見せるSwiftの波に乗っていこう!ということでリクルートライフスタイルのアプリもSwift化していく動きが高まっています。
現在、新規アプリは全てSwift、そして既存のアプリに関しても徐々にSwift化を進めている状況です。
言語移行にあたって必要となるもの
ただ、言語を変更するとなったときには当然コーディングの際に従うべき標準が必要になってきます。
そして、コーディングを楽にするサポートツールが用意されていることも大切になってくるのではないでしょうか。
そこで我々は、Swiftのコーディング規約とコードスニペットを作成しGitHub上に公開しました!!
コーディング規約
Swift2.2に対応したコーディング規約を公開しました。
Swiftは型宣言やセミコロン、括弧や戻り値のVoidなど、様々なものが省略でき、書き方の自由度が高くなっています。
自由度が高く書きやすいのはとても良いことですが、不要な記述を省略できる分、社内、ひいては同一プロジェクト内でもコードのスタイルがバラバラになり、統一感の無い、読みづらいコードになってしまう危険も孕んでいます。
そのため、可読性と統一性向上のために、Swiftを本格的に導入していくこのタイミングで規約を制定することとしました。
Swiftのコーディング規約といえば
そして国内だと、
といった企業が公開されているものが有名かと思います。
今回我々はこれらのコーディング規約を参考にさせて頂いた上で、Swift2.2、そしてSwift3.0も見据えて規約を作成しました。
Swiftはまだまだ発展途上の言語であり、Swift3.0ではまた大幅な変更が入る予定となっています。
有名なところで言うと++
や--
、Cスタイルのfor
ループなどはSwift3.0で廃止される予定であり、本規約にもこれらは使用しないよう制定しています。
また、enumのcaseをlower caseにする(SE-006)といった変更も予定されています。
これは本規約では特に書いていませんが、3.0が公開されたら修正が必要になってくるかと思います。
発展途上の言語なのでこういった規約の運用はなかなか大変ですが、今後の更なる進化・発展を考えると楽しみで仕方ないですね。
コードスニペット
Swiftでのコーディングをより快適に行ってもらうため、コードスニペットも公開しています。私は
guard let strongSelf = self else { return }
と毎回記述するのが面倒だなぁと感じることが少なからずあります。
また、Swift2.0から新しく導入されたdo-catch
、defer
などもほぼ定形ですが書くと長くて面倒だと感じたり、シングルトンクラスの作成やNSUserDefaults
など、あまり使っていないと書き方を忘れてしまったりするものも多々あります。
そういったちょっとした不便を解消する手段としてスニペットを公開しました。
guard let
のように頻繁に記述する文の場合、頭文字数文字をタイプすると候補が出現し、一発で入力できます。
また、書き方をどうも忘れてしまう、というコードの場合、rls
のプレフィックスをタイプすることにより様々な候補が出現します。
さらに、comment
とタイプすることによりSwiftのドキュメントコメントの定型文を一発で表示することもできます。
2016/4/13現在、26のスニペットを公開していますが、今後便利なスニペットがあればどんどん増やしていきたいと考えています。
おわりに
今回はコーディング規約とスニペットを紹介しましたが、コードフォーマッタや変換ツールなど、必要なものはまだまだあると思います。
既存のツールを使用するのも一つですが、それらを作る必要がある!と判断した場合はどんどん作っていこうと思います。
Swiftはまだまだ進化を続けている言語で、今回公開した規約やスニペットに記載している内容がどんどんと古くなっていくことになったり、追加で記載しなければいけない事項が出てきたりするかもしれません。
我々も整備を続けていきますが、何かあれば是非Pull Requestを送って頂き、皆さんと一緒によりSwiftを盛り上げていければと思います。