#76 某SNSの終焉 & Swift Lint

どうも、esuiです。
某位置情報ARゲームの方で、追加のポケ某が大量に追加されましたね。
自分は細々とプレイしていましたが、久々に町中にプレイするユーザの姿が見えてちょっと嬉しいです。
と、それとは別の某位置情報ゲームの方でも大玉転がしイベントなどが開催中ですので、そちらもよろしくお願いします。。




某SNSの終焉



何やらものものしいタイトルではありますが、あるSNS(App.net)の終焉までについての実際使っていたユーザとしての考察などについての発表でした。

App.net


https://app.net/
スクリーンショット 2017-02-26 16.29.06.png

App.netとは、Twitterを強く意識した有料のミニブログサービス。
これまで同様のものが何度も現れては消えしてきましたが、このApp.netもこの3月を持って終了するとのアナウンスがされました…。

App.netについて詳しくはこのWikipediaなどを参照されたほうが早いと思うのですが、
ざっくりと説明を。

App.netのウリ


当初、App.netでは以下のような事を特徴としていました。

・広告無し
・ひとつの投稿は256文字まで
・写真・動画を(容量の許す限り)自由にアップロード可能
・開発者支援の制度
・各開発者の作ったクライアントを紹介するページを公式で運営
・評価の高いクライアントの開発者にインセンティブ(合計2万ドル/月)
・TwitterにあるようなAPI使用規制ナシ

料金形態として、当初以下の2種類がありました。

- ノーマルアカウント
- 月額5ドルor年額50ドル
- ストレージ容量10GB

- デベロッパーアカウント
- クライアント開発ができる
- 年間100ドル

App.netの沿革


# サービス開始〜2012年末まで
- プライベートメッセージ(Twitterのダイレクトメッセージ)実装
- 既読位置の保存実装
- 招待を受けた人は一ヶ月無料で使えるようになる

2012年当時、類似サービスであるTwitterがサードパーティの開発者にとって改悪されていく流れにあった中、
App.netでは開発者目線のサードパーティーアプリケーションの推奨するという事で注目を集め、
当初は機能開発も盛んだったようです。

# 2013年2月
- フリーミアムアカウント 追加
フォロー上限 40人,ストレージ容量500MBという制限があるものの、
ここで大量の流入があったのではないかということのようです。

# 2013年8月
開発者 @haru067 さんによるAndroid スマートフォン向けクライアント「Asterisk」 リリース
http://shootingstar.fm/asterisk/
によって、日本人ユーザ(特にDTMerとか音ゲーマーとかそういう層)が大量に流入

この時流入したユーザがどの月まで使用していたのかを調べてみたのが以下のグラフとのことです。
スクリーンショット 2017-02-26 16.53.11.png

この際、Asteriskで流入したユーザーの投稿を見てみると、
実際には人が沢山居る(以前に比べて)のに過疎だと感じるユーザーが多かった、とのことです。

# 2014年3月6日
全従業員をレイオフ
https://japan.cnet.com/article/35047491/

資金難になった原因としては、
そもそもユーザーに支払いを求めて広告主が存在しないサービスであったのにもかかわらず、
ユーザー拡大の為に用意したフリーミアムアカウントが大量増殖したこと
(フリーミアムアカウントであってもフォロー上限はあるが上限までで足りる,グローバルストリームが追える,外部サービスで画像あげればよいのでは等、なんとかなってしまう状況)
に加えて、
大量のbot,連携の垂れ流しを放置するなどの状況が続いたことで有料ユーザも減っていってしまってのではないかということです。
結果として今回のサービス終了という流れになってしまいました。

こうしたらよかったのでは


実際に使っていたユーザの声として、以下のような事を考えたそうです。

# 資金難について
アクティブなユーザは好きで過疎SNSを選んでいたファンだと思うので、wikipediaのようにもっとユーザーに訴えかけてもよかったのではないか

# スパムじみたbotの排除
(これはTwitterでも今言われていますが…)

# ユーザの不定着
過疎感を感じさせないように,オススメのアクティブユーザーの紹介をするとか

# 決定打となるクライアントの不足
ユーザーにクライアント開発を積極的にしてもらうという立ち上げ当初の方針もあって、公式(?)はWebブラウザ版クライアントしかなかった事もあるが、やはり一定層のリテラシのユーザが入ってくるとなると定番ものは必要では?

# 多言語対応

# サービス名がいいにくい,Googlabilityが低い
App Dot Net → ADN という略語を住民たちは使っていたが…(Googlabilityの低さゆえの閉鎖感を好むユーザーもいた)

これから


# Twitterへの回帰
過疎SNS特有の雰囲気が好きな住民が多いので無理っぽい

# 他SNS
https://pnut.io/
App.netの住民が作った招待制SNSというのもあるようで、発表者は開発者アカウントをもらったそうです。

https://beta.10centuries.org/
他にもこういうSNSが出てきているそうです。

まとめとして、
12000人の支援者による約80万ドルという資金があっても、5年持たなかったということで、
広告無しサービスというのはやはり難しく、広告は重要ですね、、ということでした。




SwiftLint



第二部はSwiftLintについての紹介でした。

SwiftLintとは


GitHubのSwift Style Guideに基づいて、スウィフトスタイルとコンベンションを強制するツール。

何をしてくれるのか


ビルド実行時以下のような場合にwarningやerrorを出してくれます。

- ファイル内の行数が多い場合(400以上でwarning、1000以上でerror)
- 変数名は小文字から始まり3~40文字以内になっているか
- スペースを2つ以上連続で入力してはいけない

- 空行があるとwarning
スクリーンショット 2017-02-26 17.28.05.png

- Optional型の変数をForce castするとerror
スクリーンショット 2017-02-26 17.28.53.png

- コメントにTODOがあるとwarning
スクリーンショット 2017-02-26 17.29.28.png

- 循環性の複雑さを10以内に収めないとwarning
スクリーンショット 2017-02-26 17.30.07.png

その他、定義されているルールは75以上あるそうです。
https://github.com/realm/SwiftLint/tree/master/Source/SwiftLintFramework/Rules

ターミナルから swiftlint rules でも確認できるとのことです。
スクリーンショット 2017-02-26 17.31.35.png

さて、実際のプロジェクトで適用してみたところ・・・
WarningとError含めて当初5134となってしまったようです。

さすがに空行は許可したいし、中には1000行超えでも仕方ない場所もあったり、、ということで除外条件も設定で作成することが可能となっています。
以下のように除外リストの設定ファイルに記述するか、
スクリーンショット 2017-02-26 17.33.50.png
個別に除外したり、
スクリーンショット 2017-02-26 17.34.48.png
自分でルールを定義することもできます。
スクリーンショット 2017-02-26 17.35.39.png

導入手順


Homebrewからインストール
brew install swiftlint

CocoaPodsからインストール
pod 'SwiftLint'


プロジェクトのRun Scriptに以下を追加
スクリーンショット 2017-02-26 17.37.56.png

※CocoaPodsを使用した場合はスクリプトを以下のように設定
"${PODS_ROOT}/SwiftLint/swiftlint"


その他の静的解析ツール


SwiftLintの他にも、以下のような静的解析ツールがあるそうです。

# Analyzer
- Xcodeに標準で付いてるツール
- 論理的な欠陥。初期化していない変数にアクセスする、nullポインタが指すアドレスを参照しようとするなど
- メモリ管理上の欠陥。メモリリークなど
- 何にも使わない変数などの欠陥
- APIの使い方に関する欠陥。フレームワークやライブラリが要求する指針に従っていないなど

# OCLint
http://oclint.org/
- Objective-Cの静的解析ツール
- 行の長さ、メソッドの長さ、変数の使い回し、defaultが無いswitchなどをチェック
- オプションでHTMLのレポートを出してくれる

# Tailor
https://tailor.sh/
- Swiftの静的コード解析ツール
- 実行環境がJavaのためMac/Linux/Windowsのクロスプラットフォームで使える
- 解析結果のレベルに応じてカラーリング表示

いろいろあるんですね…
ということで、SwiftLintを使って最終的には適用プロジェクトの方もWarningとErrorも0になり、だいぶスッキリできました、とのことでした。

この記事へのコメント