SwiftLint を導入する
このページは
SwiftLint について、導入する方法と使い方を簡単に記す。
もっと詳しく知りたい場合は SwiftLint のプロジェクトを見るべき。 👇
また SwiftLint を試したサンプルプロジェクトは GitHub にある。👇
SwiftLint とは?
Swift コードのスタイルをチェックするリントツール。
Lint(リント)?
- コーディングルール違反や、冗長な記述など、を検査する
ルール違反の項目がある場合
- ビルド時に警告・エラーなどを発生させることができる。
- または、リントツールに自動でスタイル修正(コード修正)をさせることも可能。
リントツール導入のメリット
- コードのスタイルを機械的に一定に保てる
- コードレビューの質向上を計れる(スタイルに関する指摘は有人でする必要がなくなる)
インストール
Homebrew が入っている環境ならば
brew コマンドで install 可能。
$ brew install swiftlint
ルールファイルを作成する
.swiftlint.yml
ファイルにルールを記述する。
記述の仕方とルールは以下を参照する。
- SwiftLint/README.md at master · realm/SwiftLint · GitHub
- SwiftLint/Rules.md at master · realm/SwiftLint · GitHub
以下、.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 プロジェクトへの導入方法
Xcode の Build 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
でバージョンを指示すること。
- CocoaPods で配布するライブラリの場合は、
個人的にはルートにこのファイルがあると、何かのツールで使うとかでなくても、 使用する Swift バージョンが一目瞭然でわかって、親切な感じがする。
特定ドメインを特定/除外して Google 検索する
ドメインを特定して検索
site:ドメイン
を検索ワードに追加する。
例) ねとらぼ(nlab.itmedia.co.jp) 内で "ヤドン" を検索する。
ヤドン site:nlab.itmedia.co.jp
ドメインを除外して検索
-site:ドメイン
を検索ワードに追加する。
例) ねとらぼ(nlab.itmedia.co.jp) 以外で "ヤドン" を検索する。
ヤドン -site:nlab.itmedia.co.jp
ドメイン除外検索を使う場面
例) 「『ねとらぼ』についてのニュース」を Google から探したい。
この場合、Google ニュースで「ねとらぼ」を検索するとこうなる。
ねとらぼ内のページばかり結果にでるため、これでは「『ねとらぼ』についてのニュース」が見つけられない。
これを避けるため、ねとらぼ(nlab.itmedia.co.jp) を除外して検索する。
ねとらぼ -site:nlab.itmedia.co.jp
「『ねとらぼ』についてのニュース」も見つけやすくなった。
Huawei が発表した「HarmonyOS」
記事から抜粋
発表について
2019/8/9 HUAWEI DEVELOPER CONFERENCE2019 にて Huawei が発表
背景と HarmonyOS
- Huawei はアメリカ合衆国の圧力により、 Android OS が使用できなくなることも考慮しなくてはならなくなった
- そのかわりとなる独自の OS を公開発表する → HarmonyOS
- HarmonyOS は Google の Fuschia に似たマイクロカーネルフレームワークをベースにしたオープンソースプラットフォームとして考えられている。
Android との互換性
- Android と HarmonyOS は互換が無い
- アプリを移行するためには、調整と再コンパイルが必要になる
- しかし、 Richard Yu はその変換は「非常に簡単」にできるべき、と主張している
HarmonyOS の今後
- Harmony OS はスマートフォン、タブレットを発売するより前に
- Harmony OS は iOS, Android には差し迫った脅威をもたらさないかもしれない
- しかし Window 10 Mobile 以来の3頭の馬のレースになるため、製品開発の大きな変化の始まりになる可能性がある
個人的なメモ
- Harmony(調和) と言う名前が Good ですね
Google の OSS プロジェクトはテストデータ(テキスト)に何を使用している?
brotil と snappy は Google でリポジトリ管理されている圧縮ライブラリ。
それぞれテストデータは以下の場所にある。
- brotli/tests/testdata at master · google/brotli · GitHub
- snappy/testdata at master · google/snappy · GitHub
その中をみると、以下のデータが共通して使用されていた。
- Alice's Adventures in Wonderland / Lewis Carroll (不思議の国のアリス / ルイス・キャロル)
- As You Like It / William Shakespeare (お気に召すまま / ウィリアム・シェークスピア)
- Paradise Lost / John Milton (失楽園 / ジョン・ミルトン)
いずれも著作権の保護期間が終了した古典文学作品。
元のデータは Gutenberg Project から取ってきている?
Gutenberg Project は日本で言うと、青空文庫に近い。
2000年からの10年は仮想化の時代、2010年からの10年はクラウド化の時代
Coursera の Google が提供している講座の中で、タイトルの様なことが書かれていたと思う。(どの講座かは忘れた)
ふと思い出したので、事実を年代でリストしたい。
リスト
- 1995
- 2006
- AWS 開始(Amazon EC2)
- 2008
- 2011
- 2012
- Google Drive 開始
- 2014
- AWS Lambda アナウンス
グラデーションで
仮想化 → クラウド化
になっている??
参照
GDPR の触りをメモ
名称
General Data Protection Regulation
日本語では「一般データ保護規則」と訳す。
概要
EEA での個人データの保護規則。2018年5月25日 から実施。
EEAとは.
目的
- 基本的人権の確保が目的
- 個人情報の管理が適正か
違反したとき
- 行政罰あり
対象となる個人情報
EU を含む欧州経済領域(EEA)域内の自然人に関するあらゆる情報。
たとえば
- 名前
- メールアドレス
- クレジットカード番号
- 位置データ
- 個人特定につながるキー
など
違反例
個人情報を明確な同意なく処理すると違反となる。
- グーグル、GDPR違反で制裁金62億円--仏当局 - ZDNet Japan
- 大手航空会社が「GDPR」違反で約240億円の罰金 制裁は正当か:British Airwaysで何が起こっていたのか - TechTargetジャパン セキュリティ