SwiftLint を導入する

このページは

SwiftLint について、導入する方法と使い方を簡単に記す。

もっと詳しく知りたい場合は SwiftLint のプロジェクトを見るべき。 👇

また SwiftLint を試したサンプルプロジェクトは GitHub にある。👇

SwiftLint とは?

Swift コードのスタイルをチェックするリントツール。

  • Lint(リント)?

    • コーディングルール違反や、冗長な記述など、を検査する
  • ルール違反の項目がある場合

    • ビルド時に警告・エラーなどを発生させることができる。
    • または、リントツールに自動でスタイル修正(コード修正)をさせることも可能。
  • リントツール導入のメリット

    • コードのスタイルを機械的に一定に保てる
    • コードレビューの質向上を計れる(スタイルに関する指摘は有人でする必要がなくなる)

インストール

Homebrew が入っている環境ならば
brew コマンドで install 可能。  

$ brew install swiftlint

ルールファイルを作成する

.swiftlint.yml ファイルにルールを記述する。

記述の仕方とルールは以下を参照する。

以下、.swiftlint.yml の例。

# Lint 対象を指定
included:
    - SwiftLintSample/
# Lint 対象から除外する
excluded:
    - SwiftLintSample/T.swift
# 無効にするルール
disabled_rules:
    - file_length
    - trailing_comma
    - trailing_whitespace
    - trailing_newline
    - vertical_whitespace
    - function_body_length
    - type_body_length
    - line_length
    - vertical_parameter_alignment
# 変数などの名前の最低の長さを指定。これより短いと違反となる
# 1 にしておくと、このルールが実質無効となる
identifier_name:
    min_length: 1
# 型名のルールに対しての excluded(除外)
# ここでは lowerCamelClass という型名はルールの検査から除外される
type_name:
    excluded:
      - lowerCamelClass

Xcode プロジェクトへの導入方法

f:id:daisuke-t-jp:20190813121202p:plain

XcodeBuild Phases に新たな Run Script を追加する。

そして以下のスクリプトを埋め込む。

if which swiftlint >/dev/null; then
swiftlint --config .swiftlint.yml 
else
echo "warning: SwiftLint not installed."
fi

上のスクリプトを説明すると・・・

  • if which で SwiftLint がインストールされているかをチェックする
    • インストールされていない場合、 echo で警告を表示している
  • swiftlint コマンドの --config 引数で ルールファイル (.swiftlint.yml) のパスを指定できる。
    • 指定しなければ、カレントディレクトリにある .swiftlint.yml を参照する

これでビルドするたびに、 SwiftLint によるチェックが実行される。
もし SwiftLint に引っかかると、通常の警告・エラーと同じく Xcode 上に結果が表示される。

リントの運用

.swiftlint.yml で全体のルールを指定できるが、局所的にルールを決めたいときもある。

その場合は、以下の enable/disable で挟むことで、その部分だけルールの無効・有効を切り替えすることができる。

// swiftlint:enable ルール名
// swiftlint:disable ルール名

たとえば、 func のパラメーター数は SwiftLint ではデフォルトで 5個までとされているが、それを超えたパラメーター数をもつ func を居所的に許可したい場合は以下になる。

  // swiftlint:disable function_parameter_count
  static private func tooManyParameterFunc(a: Int,
                                       b: Int,
                                       c: Int,
                                       d: Int,
                                       e: Int,
                                       f: Int,
                                       g: Int) -> Int {
    return a + b + c + d + e + f + g
  }
  // swiftlint:enable function_parameter_count

おわり

プロジェクトルートにある .swift-version ファイルは何か?

はじめに

ルートに .swift-version ファイルがあるプロジェクトを発見することがある。

たとえば、下記のリポジトリ

.swift-version は何のためのファイルか?
わかったことを、ここにまとめる。

1. swiftenv

Swift のバージョン切り替えには swiftenv というツールがある。
これを使用すると .swift-version でプロジェクトの Swift バージョンを指示できる。すなわち、

  • グローバルとプロジェクト、それぞれの Swift のバージョンを分けることができる
  • プロジェクトごとの Swift のバージョンを分けることができる

これは Xcode からビルドする時は特に気にすることはないが、コマンドベースでビルドする時はこの恩恵があるだろう。

ちなみに他の言語だと以下がある。

2. CocoaPods

CocoaPods 1.7.0 Beta! - CocoaPods Blog
上記の CocoaPods アナウンス内の Deprecating .swift-version File の項目が見るべきところ。
簡単な訳と共に見てゆく。

Up until now, most pod authors have been relying on specifying a .swift-version file at the root of their repo in order to successfully publish their pod with the Swift version they officially support. However, this information is never transcribed within the published podspec and therefore during integration none of it is taken into consideration when choosing which Swift version to use.

  • 従来は CocoaPods で配布するライブラリのプロジェクトには .swift-version を入れることで、サポートする Swift バージョンを指示していた。

This can cause numerous issues especially when a new version of Swift is released. This is because a consumer will automatically pick the latest version of Swift to use without the pod author officially claiming that it is supported.

  • しかしこれは、新しい Swift のバージョンがリリースされた時、問題が起きる可能性がある。

We strongly recommend pod authors to migrate over to use the officially supported swift_version DSL within their podspec instead.

  • その代わり、 Swift のバージョンは podspec ファイル内の swift_version で指示することを 強く 勧める。

We also recommend deleting the .swift-version file in your repo unless you use it for other tools such as swiftenv. The swift_version DSL will always take precedence over the .swift-version file.

  • swiftenv などの他のツールで使用しない限り、 swift_version ファイルを削除することを勧める。

Finally, a warning will be displayed during lint that encourages pod authors to migrate away from using the .swift-version file and in a future major release of CocoaPods we plan to completely remove support for it.

  • CocoaPods で配布するライブラリ開発者が .swift-version ファイルを使用をする警告が lint に表示される。 CocoaPods の将来のメジャーリリースでは、サポートは完全に削除する予定である。

まとめ

  • .swift-version はプロジェクトの Swift バージョンを指示するファイルである。
  • 注意点として
    • CocoaPods で配布するライブラリの場合は、 .swift-version は削除した方が良い。
    • 代わりに podspec ファイル内の swift_version でバージョンを指示すること。

個人的にはルートにこのファイルがあると、何かのツールで使うとかでなくても、 使用する Swift バージョンが一目瞭然でわかって、親切な感じがする。

特定ドメインを特定/除外して Google 検索する

ドメインを特定して検索

site:ドメイン を検索ワードに追加する。

例) ねとらぼ(nlab.itmedia.co.jp) 内で "ヤドン" を検索する。

ヤドン site:nlab.itmedia.co.jp

f:id:daisuke-t-jp:20190812013842p:plain
ヤドン site:nlab.itmedia.co.jp

ドメインを除外して検索

-site:ドメイン を検索ワードに追加する。

例) ねとらぼ(nlab.itmedia.co.jp) 以外で "ヤドン" を検索する。

ヤドン -site:nlab.itmedia.co.jp

f:id:daisuke-t-jp:20190812015002p:plain
ヤドン -site:nlab.itmedia.co.jp

ドメイン除外検索を使う場面

例) 「『ねとらぼ』についてのニュース」を Google から探したい。

この場合、Google ニュースで「ねとらぼ」を検索するとこうなる。

f:id:daisuke-t-jp:20190812015443p:plain
ねとらぼ

ねとらぼ内のページばかり結果にでるため、これでは「『ねとらぼ』についてのニュース」が見つけられない。
これを避けるため、ねとらぼ(nlab.itmedia.co.jp) を除外して検索する。

ねとらぼ -site:nlab.itmedia.co.jp

f:id:daisuke-t-jp:20190812020209p:plain
ねとらぼ -site:nlab.itmedia.co.jp

「『ねとらぼ』についてのニュース」も見つけやすくなった。

Huawei が発表した「HarmonyOS」

gizmodo.com

記事から抜粋

発表について

2019/8/9 HUAWEI DEVELOPER CONFERENCE2019 にて Huawei が発表

背景と HarmonyOS

Android との互換性

  • Android と HarmonyOS は互換が無い
    • アプリを移行するためには、調整と再コンパイルが必要になる
    • しかし、 Richard Yu はその変換は「非常に簡単」にできるべき、と主張している

HarmonyOS の今後

  • Harmony OS はスマートフォンタブレットを発売するより前に
    • 車載インフォテインメイント、Huawei Vision などのスマートスクリーンデバイス(これは今後詳細発表する予定)から始めて
    • 今後3年間で徐々に展開する予定
  • Harmony OS は iOS, Android には差し迫った脅威をもたらさないかもしれない
    • しかし Window 10 Mobile 以来の3頭の馬のレースになるため、製品開発の大きな変化の始まりになる可能性がある

個人的なメモ

  • Harmony(調和) と言う名前が Good ですね

Google の OSS プロジェクトはテストデータ(テキスト)に何を使用している?

github.com github.com

brotil と snappy は Googleリポジトリ管理されている圧縮ライブラリ。

それぞれテストデータは以下の場所にある。

その中をみると、以下のデータが共通して使用されていた。

いずれも著作権の保護期間が終了した古典文学作品。
元のデータは Gutenberg Project から取ってきている?
Gutenberg Project は日本で言うと、青空文庫に近い。

2000年からの10年は仮想化の時代、2010年からの10年はクラウド化の時代

CourseraGoogle が提供している講座の中で、タイトルの様なことが書かれていたと思う。(どの講座かは忘れた)

ふと思い出したので、事実を年代でリストしたい。

リスト

グラデーションで
仮想化 → クラウド
になっている??

参照

GDPR の触りをメモ

名称

General Data Protection Regulation

日本語では「一般データ保護規則」と訳す。

概要

EEA での個人データの保護規則。2018年5月25日 から実施。

対象となる個人情報

EU を含む欧州経済領域(EEA)域内の自然人に関するあらゆる情報。

たとえば

  • 名前
  • メールアドレス
  • クレジットカード番号
  • 位置データ
  • 個人特定につながるキー

など

違反例

個人情報を明確な同意なく処理すると違反となる。

参照