Koinから環境変数を利用する
こんにちは、普段はAndroidでKotlinを書いている人間です。 この記事は Kotlin Advent Calendar 2019 13日目の記事です。
最近、Kotlinサーバサイドにチャレンジをしているのですがその際に、環境変数の扱いをどうするのが良いのかと言うことについて考えていましたが、 Koinと言うDIコンテナの機能を利用すると便利にできそうだなと思ったので、Koinの紹介を軽くしてから、そのTipsを共有したいと思います。 なお、本記事執筆の際に利用した環境は以下の通りです。
- Kotlin: 1.3.60
- Koin: 2.0.1
まずKoinについて
KoinはKotlinで書かれた軽量でシンプルなDIコンテナです。 導入に関しては、ドキュメントをみていただくのが最適だと思うので、ドキュメントへのリンクを案内させていただきます。
Koinはそのままでももちろん、AndroidやKtorとも連携してシンプルにDIを行うことができます。
環境変数を出力するアプリケーションを作ってみる
今回は、環境変数をprintln
する小さなアプリケーションを作りながら解説します。
環境変数にはMESSAGE
が設定されており、値にはHello, World!
と書かれています。
この環境変数を出力するアプリケーションを作っていきます。
まずはKoinを使わずにやる
通常の方法でやった場合がこちらです。
fun main() { println(System.getenv("MESSAGE")) }
はい、これ表示できました。ではKoinを使ってこれを置き換えていきましょう。
Koinを使う方法
環境変数を格納するクラスを用意します。今回はConfig
と言うクラスにします。
data class Config(val message: String)
このクラスをInjectすることで、環境変数のDIを実現していきます。
次に、このクラスをmodule
に追加します。
val module = module { single { Config(getProperty("MESSAGE")) } }
ここのsingle
ブロック内のthis
はScope
と呼ばれるクラスです。
このScope
には
fun <T> getProperty(key: String, defaultValue: T): T
fun <T> getProperty(key: String): T
fun <T> getPropertyOrNull(key: String): T?
と言う3つの関数が用意されており、このkey
に環境変数の名前を指定してあげることで取得できる仕組みとなっています。
getProperty
の内部実装は、PropertyRegistry
へのデリゲートとなっています。PropertyRegistry
へどのようにして環境変数が格納されるかについては後述します。
次に、このConfig
を利用するクラスを作ります。
class MainComponent : KoinComponent { private val config by inject<Config>() fun sayMessage() { println(config.message) } }
あとはこのmodule
をKoinの初期化時に渡します。
ここで忘れてはいけないのが、environmentProperties
の呼び出しです。
ここで呼び出さないと環境変数はKoinのpropertyRegistry
に登録されません。
environmentProperties
の中では、System.getProperties()
とSystem.getenv()
を呼び出し、そこで取得した値をPropertyRegistry
の中に保持します。
このenvironmentProperties
の動きを少しみてみます。
この関数はKoinApplication
クラスに実装されている関数で、内部でKoin
のPropertyRegistry
へ接続し、PropertyRegistry
のloadEnvironmentProperties
へと処理をデリゲートしています。
KoinApplication#environmentProperties()
→ Koin#getPropertyRegistry()
→ PropertyRegistry#loadEnvironmentProperties()
と言う流れです。
より内部の詳細が気になる方はこちらをご覧ください。
fun main() {
startKoin {
environmentProperties()
modules(listOf(module))
}
MainComponent().sayMessage()
}
MainComponent
のsayMessage
を実行するとめでたくHello, World!
と表示されると思います。
これで環境変数バンドルするクラスをInjectすることができるようになりました。
また、Koinは環境変数だけではなく、Propertiesファイルの読み込みもサポートしています。
その読み込みに関しても、先程の、getProperty
関数でサポートしているため、環境変数とPropertiesファイルの両方を統一的に扱うことができるのもKoinの良いところです。
終わりに
短かったですが、Koinでの環境変数の利用の方法を共有させていただきました。 それでは。
2018年の振り返り。今年もいい年だったと思う。
こんにちは。約一年に一回だけブログ書く人です。 今年の振り返りと来年の抱負的なの書きます。 目的としては備忘だったり、一年間やったことを振り返ることによって「お疲れ、自分」するためだったり。
だいたいTwitterみながら遡りました。 ちなみに自分は普段はAndroidのアプリを作るソフトウェアエンジニアをしています。
ざっくりどんな年だったか?
仕事編
仕事でいうと、現職がもうすぐで2年になるみたいな感じです。 ジョブホッパーな気質の自分にとっては2年というのはとても長いような気がしています。 事実、現職が今までで一番長くいる職場になっていて、自分でも驚いています。
エンジニアとしては今年はAndroidだけじゃなくて細々としたいろんなものを書いた気がしています。 fastlaneのプラグイン、BitriseのStep、会社のアプリに組み込むための華やかな紙吹雪をJSとWebGL(THREE.js)で書いたり、アプリの中のある数値をグラフィカルに表示するための WebページをReactで作ってみたり…今までAndroidアプリしかほとんど書いてこなかった自分にとっては色々できたなって思える年でした。
こんな感じの紙吹雪作れた。作るために結構紙吹雪の動画をデザイナー氏と見て、ああでもないこうでもない言い合いながらやるのは楽しかった。
そのほかにも以前より少しだけプロジェクトを見るようになったり旗振り役のようなことをしたりして、マネジメントに関する書籍を読み始めたりした年でもありました。 かなり失敗したケースもありましたが、自分的には楽しくやることができたと思っています。
プライベート編
同棲を始めるために引っ越したり、ジムに行き始めたり、キャンプにはまったりフジロックに行ったりしました。 来年は登山と釣りに行きたい。
全部楽しかった。最高。以上。
以下ツイート振り返り
1月
特に技術的なアウトプットはしていない模様だった。 なんか友人の結婚式でギターを弾いて鈍りすぎて悲しかったのかこの時ギターアンプを買っているようです。 ちなみに、少しだけギターを練習する機会が増えました。コピーバンドしたい。
結婚式でギター弾いたけど全然弾けなさ過ぎて悔しかったのでアンプ買った。練習するぞ
— わくわく (@wakwak3125) January 20, 2018
2月
今の会社に入社して1年たった模様
入社して1年経った。あっという間だったなー
— わくわく (@wakwak3125) February 1, 2018
会社で出てきたLGTM画像をツイートしたらちょいバズりした
マアジして良いということらしい🐟 pic.twitter.com/PEpefXu07b
— わくわく (@wakwak3125) February 2, 2018
DroidKaigiで登壇した。 内容はアニメーションの実装の話をしたりした。
スライドを公開しました!
— わくわく (@wakwak3125) February 8, 2018
後で追って動画も公開します🙆
実例で理解する Material Design Animation https://t.co/na8vghQcg0 #droidkaigi_room2
ただ、内容的には、「筋肉でやっていこうな!」 みたいな話になってしまってるのでもう少しうまくお話したかった。
ZenWatch3を買ったみたいです。
えっへへへへへ pic.twitter.com/X9Za12Cb3q
— わくわく (@wakwak3125) February 9, 2018
多分この時Xファイルにどハマりしていた頃だった気がする。
Xファイルみてる
— わくわく (@wakwak3125) February 10, 2018
技術書典の準備をしている
#技術書典 の執筆者を社内で募集したら今のところこんくらい集まってる。 pic.twitter.com/qkezS3INo8
— わくわく (@wakwak3125) February 23, 2018
3月
Google I/Oの抽選に外れたようです
I/Oに行きたい人生だった
— わくわく (@wakwak3125) March 1, 2018
try!Swiftに参加してたみたいです。
どうやらCarthageを使い始めたらしい。 #tryswiftconf #はじめてのSwift pic.twitter.com/wSrK169Exi
— わくわく (@wakwak3125) March 2, 2018
この時、今の会社の人事の人がiOSアプリ開発に挑戦するライブコーディングをしていたのですが、 通りすがりの人たちが教えてくれている様子をみながら「優しい世界だ…」とほっこりしていたのを覚えています。
会社にLinuxのビルドマシンを導入してもらって喜んでいました
会社で強めのLinuxデスクトップを試験導入してもらった結果、クリーンビルドで39秒とかになった。すごい。
— わくわく (@wakwak3125) March 16, 2018
リモートビルド最高。今も元気に活躍しています。
技術書典の初稿が終わらなくて苦しんでいる
思った以上に分量があって初稿おわんねぇ頑張るぞ
— わくわく (@wakwak3125) March 24, 2018
Androidエンジニアデザイン部に参加して登壇しました。 https://twitter.com/wakwak3125/status/978977719798063105 今の会社のお仕事で、1月〜2月くらいの間にユーザーの新規登録フローの改善を大きく進めていました。 デザイナーやサーバーサイドのエンジニアと協働で手間取らないサインアップフローを作るぞ!と意気込んだ結果としてはかなりいいものになりました。 ログイン率やサインアップに必要なステップ数も大幅に改善しました。こういう仕事は楽しい。数字が上がらない時は苦しいけど。
4月
会社に出張回転寿司がきてわいわいしていた模様
オッ?! pic.twitter.com/lDVWWPR4D7
— わくわく (@wakwak3125) April 11, 2018
会社の執筆部として技術書典を無事に終了することができた模様。 https://twitter.com/wakwak3125/status/988708113460047873 https://twitter.com/wakwak3125/status/987988020384096257 この時書いたのは確か、前述のサインアップフロー改善の詳細についてを書いた気がする。 しかもめっちゃ買ってる。
#技術書典 の戦利品まとめた。
— わくわく (@wakwak3125) April 22, 2018
やはり日経電子の本が光る… pic.twitter.com/poZ3XICPJc
5月
Webフロントに興味が湧き始めたようです。
Webフロントに興味が湧いてきた
— わくわく (@wakwak3125) May 1, 2018
会社の同僚とキャンプに行った模様。 Amazonで買った激安テントが大活躍でした。
やばい。夏やん。 pic.twitter.com/RURFeMlUGo
— わくわく (@wakwak3125) May 4, 2018
キャンプです pic.twitter.com/m2WnniqOMO
— わくわく (@wakwak3125) May 4, 2018
会社でゆるっとGoogle I/OのKeynoteを見る会を開いた。
みんなでだらっとI/O 2018のkeynote見る会を始めた🍻 pic.twitter.com/jx9brf2xGZ
— わくわく (@wakwak3125) May 11, 2018
だらだらしてたらnon-devの人たちも見ていてみんなでわいわいできたので楽しそうでよかった。
OculusGoを買ったみたいです
Oculus Go届いた😎
— わくわく (@wakwak3125) May 16, 2018
会社で担当しているアプリに機能を追加していた。
名刺管理アプリ「Wantedly People」にて、名刺情報に加えて、自分をアピールできる機能『挨拶文』をリリースしました! | Wantedly, Inc. by @helene815 https://t.co/WICXoUQzXW
— わくわく (@wakwak3125) May 22, 2018
とてもいい機能だと思っているけど、当時のアプリの成長のフェーズや色々な要因でとても成功とは言えない結果になった。 ただいつもいつも施策が当たるわけではないし仕方がない。そしてこの時はプロジェクトの進め方にも問題があったなと思ってかなり反省した記憶が蘇ってきた。
6月
WorkManagerがとても使いやすくて色々感謝しながら帰宅している模様
WorkManagerに感謝しながら帰宅する
— わくわく (@wakwak3125) June 8, 2018
potatotipsで登壇していた。
発表資料です
— わくわく (@wakwak3125) June 21, 2018
Pay attention to the HUGE logs (めっちゃでかいログには気をつけよう) https://t.co/oCXhudTpjE#potatotips
内容としては、前述のWorkManagerを利用した際に出力しているデバッグログが大きすぎてOkHttpのLoggingInterceptorがOOMで死んだっていう話でした。 LoggingInterceptorにPR出したけど、忙しくなったりしたのもあってまだ未完成のまま…よくない。
ZOZOSUITSを手に入れてワイワイしていた見たい。
zozosuit、全然計測できなくて部屋を全身タイツでうろついてる
— わくわく (@wakwak3125) June 27, 2018
7月
Kotlin愛好家で登壇していた。
本日の資料です! KotlinJSでもCoroutines https://t.co/BvY2Wl31sJ#love_kotlin
— わくわく (@wakwak3125) July 3, 2018
Kotlin/JSでもシュッといい感じに async/awaitできたよ〜的な話をしました。
会社の仕事でちょっとWebフロントをしていた。 ただ知らないことだらけで結構苦労していた模様(主にCSS)
初めてウェブフロントをちゃんとやろうって思って仕事してるけど、知らないこと多すぎて進捗が若干悪くて辛いけど楽しい
— わくわく (@wakwak3125) July 6, 2018
TypeScriptさん、好きです。
— わくわく (@wakwak3125) July 14, 2018
ものとしては、単純なグラフを表示するだけのWebページを作るって感じだったのでちょうどよかった。
フジロックに行っていたみたいです。
I'm at Fuji Rock Festival - @fujirock_jp in 湯沢町, 新潟県 https://t.co/GqtTjL38gc
— わくわく (@wakwak3125) July 27, 2018
来ました pic.twitter.com/q0fvZiguZt
— わくわく (@wakwak3125) July 27, 2018
本当に最高だった。また来年も行きたい。
8月
GitHub Releasesから任意のファイルをダウンロードできるBitriseのStepを作ったみたい
GitHub releasesから任意のファイルをシュッとダウンロードするBitriseのstep作ったぞいhttps://t.co/prkvfn9SgZ
— わくわく (@wakwak3125) August 1, 2018
BitriseのStepの作り方については勉強会で登壇しました。
文字が小さくてすみません!資料公開しました。
— わくわく (@wakwak3125) August 16, 2018
Bitrise Stepの作り方 https://t.co/2hQtVXJVBQ #mobileCICD
また技術書典の準備をしている
今回もやっていくぞ #技術書典 pic.twitter.com/pGSNccTvRO
— わくわく (@wakwak3125) August 13, 2018
Kotlin愛好会で海辺にもくもくしに行ったぽい
ついたぞー #love_kotlin #love_swift (@ サザンビーチヒルズ in 茅ヶ崎市, 神奈川県) https://t.co/5s8QFU0TpB
— わくわく (@wakwak3125) August 18, 2018
9月
荒木飛呂彦原画展に行ってました
覚悟できてる。 (@ 荒木飛呂彦原画展 JOJO 冒険の波紋 - @jojoex_2018 in 港区, 東京都 w/ @ino22u) https://t.co/GdYhKfVHcT
— わくわく (@wakwak3125) September 2, 2018
本当に最高!最高だった。
酔っ払った勢いでAndroidXの対応をやり始めた模様
酔った勢いでandroidx対応し始めたけど明日後悔しそう
— わくわく (@wakwak3125) September 6, 2018
この時は後悔しそうだなーって思ったけど、案外簡単に終えることができたのでやはりアルコールは正義
Kotlin愛好会で登壇していました
資料公開しました!
— わくわく (@wakwak3125) September 20, 2018
KOINかわいいよ、KOIN https://t.co/wMoTXPO9nO#love_kotlin
KOINというDIコンテナの紹介をしました。
技術書典の初稿脱稿していたっぽい
初稿脱稿したああああ
— わくわく (@wakwak3125) September 24, 2018
京都に行ってたみたい
はー京都すき (@ 四条河原町交差点 in 京都市, 京都府) https://t.co/4bUJ4jJTec pic.twitter.com/WO1ni4stSI
— わくわく (@wakwak3125) September 24, 2018
macOS mojaveにアップデートしようとして完全に起動せず積んだのが9月だった見たい
mojaveチャレンジ成功した...
— わくわく (@wakwak3125) September 27, 2018
CylancePROTECTを入れているとすべてがダメになる模様だった。
single userで起動して、Cylanceを削除することでなんとかなった
個人的に今年かなり好きだった記事
王 貞治、長嶋茂雄、田中将大、大谷翔平……球界のレジェンド・野村克也が『パワプロ』各選手&自身の能力データをボヤキながら分析してみた https://t.co/vZeUVxpocZ @denfaminicogameから
— わくわく (@wakwak3125) September 29, 2018
10月
技術書典の準備がだいたい終わった模様
書いた
— わくわく (@wakwak3125) October 2, 2018
【目次付き】Wantedlyの技術をゴゴゴッ!!と詰め込んだWANTEDLY TECH BOOK5を技術書典で頒布します! | Wantedly Engineer Blog by @wakwak3125 https://t.co/cAs3lRIw4M
だいたい完了したぞ! pic.twitter.com/5AH9CVJGqQ
— わくわく (@wakwak3125) October 5, 2018
Androidテスト全書を読んでテストに燃えたのがこの頃な気がする。 https://twitter.com/wakwak3125/status/1047171209815838720 会社で担当しているアプリのUIテストが少し不安定なのもあって安定化させようとこの頃くらいから色々考えてたような気がする。
新しい機能を作っていたっぽい
オラッ
— わくわく (@wakwak3125) October 11, 2018
Wantedly People で過去の名刺や複数枚の名刺を登録できるようになりました! | Wantedly, Inc. by @helene815 https://t.co/cGLn27PFDh
初めて自作キーボードに手を出した。
同じやつ全部買って届いたぞ!やるぞ!
— わくわく (@wakwak3125) October 13, 2018
Mint60の組み立てに必要なもの - ゆかりメモ https://t.co/mTg1wrGt81
十数年ぶり?くらいの半田付けはとても難しかった。
そう言えばこの月に引越しをした。 ちょっと広くなったし快適な部屋になって最高。
11月
まだ先月のことなのにそういやこんなのあったな〜〜〜ってなってる
サイトがおしゃやん
— わくわく (@wakwak3125) November 3, 2018
https://t.co/Z8dCIsYJ02
結局今どんな感じなんだろう?
CI/CD Test Nightで2日連続で登壇してきた
ハッシュタグ間違えた🙇本日の資料です
— わくわく (@wakwak3125) November 7, 2018
Wantedly Peopleのリリースフロー https://t.co/BONUYFACNf#cicd_test_night
本日の資料です! #cicd_test_night
— わくわく (@wakwak3125) November 8, 2018
社内ライブラリのアップデートフロー https://t.co/r4TWKIpzNT
2日間登壇できて楽しかった!!!
— わくわく (@wakwak3125) November 8, 2018
CI/CDだいすき人間としては最高の2日間だった〜〜#cicd_test_night
この時、protbufについて調べていたみたい
protobuf 'https://t.co/HzVuvxenVZ.api.grpc:proto-google-common-protos:1.12.0'
— わくわく (@wakwak3125) November 28, 2018
おぼえました
12月
残念がっていた模様
大賞はとれんかったがまたがんばるぞ!!! pic.twitter.com/3ZOtRl89sP
— わくわく (@wakwak3125) December 7, 2018
以上だよ!さようなら!また来年! 来年は自分のプロダクトを作るぞっていうのが目標です。頑張るぞ。
DroidKaigi2017でリリースの自動化について発表しました
NativeScriptの環境構築をやってみたよ
NativeScriptの公式サイトにあるセットアップをしてみました。 どうやら二種類のセットアップ方法があるようです。
NativeScript
Quick setup
http://docs.nativescript.org/start/quick-setup
- モバイル開発未経験者向けのセットアップ方法
- インストール方法が簡略化されている模様
Advanced setup
- Mac http://docs.nativescript.org/start/ns-setup-os-x
- Windows http://docs.nativescript.org/start/ns-setup-win
モバイル開発経験者向け
- 色々とマニュアルでインストールしていくタイプ
私はAndroid開発経験があり、MacユーザーなのでAdvanced setup
のMac版を選択しました。
基本的には公式サイトの手順通りに進めていきます。
1. HomeBrewのインストール
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2. Node.jsをインストール
Node.jsの4.x, 6.x, 7.xのどれかの最新版かつstable版をインストールしてくださいとのことです。 NativeScriptの公式サイトでは、Node.js 6.xを使うことを推奨としているそうですが、すでにNode.js 7.4.0が入っていたのでそのまますることにしました。 HomeBrewでインストールします。
brew install homebrew/versions/node6-lts
brew install node
3. iOSの開発環境をセットアップしていきます
3-1. Xcodeのインストール
AppStoreから最新版を落として来ましょう。
3-2. Command Line Toolsのインストール
https://developer.apple.com/downloads/index.action この辺から自分のOSのバージョンとXcodeのバージョンにマッチするCommand Line Toolsをインストールしてください。
3-3. 色々gem等をインストール
gem install xcodeproj gem install cocoapods
Xcode7.3と古いcocoapods(0.39.0以前)を使っている人はこちらも必ずインストールしてくださいとのことです。
brew install xcproj
4. Androidの開発環境をセットアップしていきます
HomeBrewを使ってAndroid SDKをセットアップしている箇所は都合上、AndroidStudioをインストールするような形で代用させていただきました。
4-1. JDK8をインストール
http://www.oracle.com/technetwork/java/javase/downloads/index.html ここから最新版をインストールしてください。
インストールが終わったら、JAVA_HOME
を設定してあげましょう。
export JAVA_HOME=/path/to/your_java
4-2. Android SDKをインストール
https://developer.android.com/studio/index.html こちらから最新版のAndroidStudioをダウンロードしましょう。 インストール方法や設定が日本語で書かれているので、安心です。
4-3. ANDROID_HOMEを設定
インストールが終わったら、ANDROID_HOME
を設定してあげましょう。
export ANDROID_HOME=/path/to/android-sdk
4-4. Android SDKをアップデートする
結構時間かかるのでお茶でも飲んで待ちましょう。
android update sdk --filter tools,platform-tools,android-23,build-tools-23.0.3,extra-android-m2repository,extra-google-m2repository,extra-android-support --all --no-ui
5. いよいよNativeScript CLIのインストール
なんか長かった気がする… こちらのコマンドでインストールしましょう これも結構時間がかかります。コーヒーでも飲んで待ちましょう。
npm i -g nativescript
終わったら
tns doctor
と打って、問題がないか確認しましょう!
No issues were detected.
と表示されれば晴れてオッケーです。
以上です。
マッチングアプリ比較と傾向
この記事は カノジョできてるエンジニア Advent Calendar 2016 10日目 の投稿です。
こんにちは。ワクワクです。
三次元の彼女ができてるエンジニアです。
会社のエンジニアとマッチングアプリについて話をしていたら、それで1記事書いてくれと言われたので、この場を借りてやってみようと思います。
僕自身、マッチングアプリで彼女ができた人間なので参考になればと思っております。
この投稿の目的
- マッチングアプリってたくさんあるけど、どう違うの?
- どんなシステムなの?
- マッチングアプリで彼女って本当にできるの?
- マッチングアプリ使ってるってバレるの恥ずかしいんですけど。
的な内容を、マッチングアプリニュービー達に送りたいと思っております。
私の使ったことあるマッチングサイト一覧
DLして、プロフィールを埋めたり、マッチングしてメッセージ交換を行ったアプリ一覧です。
全てAndroidスマートフォンでの検証です。
- Pairs(ペアーズ)
- with(ウィズ)
- タップル誕生
- Tinder(ティンダー)
- Poiboy(ポイボーイ)
- happn(ハプン)
これらを順に比較していきたいと思います。
その前に...
前述したマッチングアプリは大きく二つの分類、本気っぽいもの と 比較的ライトなもの に分けることができるのではないかと思っております。
ちょっと他にいい単語が思いつきませんでしたが、要は、婚活を主目的とした女性が多いもの と 友達を探したり、気軽に恋人を探している人、かっこいい男性が見たいだけの女性が多いもの です。
ではまず、分類して見ましょう(個人的な主観です)。
本気っぽいもの
- Pairs(ペアーズ)
- with(ウィズ)
この二つに関しては、比較的本気で恋人を探している女性、婚活中の女性が多いと思われます。
では両者の特徴について見ていきましょう。
Pairs
Pairsはすごく有名ですよね!
エウレカさんの運営するマッチングアプリです。
公式情報によると、マッチング数は2700万組、累計会員数は450万人と圧倒的な登録者数を誇ります。
アプリのUIも使いやすく、他のいろんなマッチングアプリのベースのような存在になりつつあるのではないかなぁと思っております。
システムとしては、きになる女性に対して「いいね」を送ることで、好意を伝えることができます。
「いいね」を送った女性から「いいね」が返ってくれば晴れてマッチング、メッセージのやりとりが可能となります。
「いいね」できる数には限りがありますが、毎日ログインすることで、「いいね」に交換できるポイントがもらえます。リテンションも高そうですね。
メッセージのやりとりには月額会員になる必要があります。
月額会員の特徴などは公式サイトをご参照ください。
では特徴を列挙していきましょう。
- 会員数が多い
- 婚活・恋活を目的としたユーザーが多い
- UIが綺麗。
- サポート体制もしっかりしている
- ユーザー数が多いので、ライバルも増える
- しかし、その分自分のタイプの女性と出会える確率は高いと思われます。
Pairsに関しては、多くの紹介サイトもあると思うので、初めてマッチングアプリを使うといった方にはお勧めできると思っております。
何と言っても綺麗なUIや使いやすいアプリはさすがだなぁと思うところがあります。
エウレカさんには感謝です。
with
withはメンタリストのDaiGoが監修したとされる恋活・婚活アプリです。
基本的なシステムは前述のPairsと同じですが、ここでDaiGo要素が活きてきます。
DaiGo監修の診断のようなものが定期的に配信され、そちらに対して回答することで、診断したどうしだと「いいね」のポイントを消費することなく好意を伝えることができます。画期的ですね!
診断した結果で相手と趣味や考えが合うかどうかも一つの参考要素にできるようになっているので、マッチングアプリ群雄割拠の時代に一つの差別化要素をうまく追加できているので、素晴らしいなぁと思っています。
アプリのUIもマテリアルデザイン(Googleの提唱するデザインガイドライン)に準拠したような作りになっており、綺麗で使いやすいものとなっています。
ごくたまにですが、キャンペーンなども行なっております。
では特徴を列挙して活きます。
- 婚活よりは恋活のイメージがあります。
- UIは綺麗。
- ユーザー数がまだそこまで多くないようなので、ライバルも少ない分、好みの女性に出会える確率は下がる。
- しかし、Pairsは有名で会員数が多く、多くのいいねが男性からきやすい女性はこういった少し小さなコミュニテイに属することをこのむといった傾向もあるため、Pairsではマッチしなかったけど、withではマッチした、といった女性もいる。(私はいました。)
- 少数派ではありますが、友達を探している女性もいるようです。
- DaiGoが好きな女性が登録しているのも事実。そこをどう捉えるかはあなた次第です。(深くは書きません。)
withは最近Facebookの広告でもよく見るようになりましたね。
仕組みは基本的なマッチングアプリと変わりなく、UIも使いやすく、DaiGoの診断システムによるポイントを消費せずに好意を伝えることができるシステムは画期的だなと思いました。
しかし、登録しないとわからない利点であるためこういうところをもっと推していってもいいのかぁと思いました。
ちなみに筆者はwithで現在の彼女と出会いました。 楽しくやっております。
比較的ライトだと思われるもの
- Tinder(ティンダー)
- Poiboy(ポイボーイ)
- happn(ハプン)
この三つに関して書いていければと思っています。
あれ?タップルは?と思われた方もいると思いますが、後述します。
これらのアプリに共通して言えることは年齢層が比較的若いといったところでしょうか。
Tinder
Tinderはスワイプ形式で好みの女性を仕分けしていくアプリです。
その独特なシステムとUIは楽しく、気に入った女性を右スワイプすることで「LIKE」することができます。が、女性には伝わりません。 女性が運よくあなたを表示し、同じく「LIKE」することで マッチングが成立し、メッセージの交換を行えます。左スワイプで 「この女性はタイプではない」 とすることができます。これ、仕分けた結果は機械学習とかされてるんでしょうか。。。気になります。
LIKEしたことを相手に伝えることができる、 SuperLike という機能がありますがこちらは無料では1日一回だけ。ここぞという時に使いましょう。体感ではマッチする確率が高くなります。
料金は基本的には無料。マッチした相手とのメッセージも無料でできます。
有料登録すると以下のような機能を使うことができます。
- 一日のLIKE数が無限に
- SuperLikeが毎月プラスされる
価格も1000円程度とリーズナブルです。
では特徴をまとめていきましょう。
- 基本的には無料で使えるのでとりあえずマッチングアプリ使ってみたい人にはおすすめ。
- ユーザー層は外国人も混じってくる。
- 婚活というよりは、恋活、友達作りの方が多いと思います。
- 仕分ける作業は楽しい。
- 女性とメッセージでやりとりして、なんとなくの雰囲気をつかむ練習にはいいかも。
独特のUIとUXのTinderですが、スワイプしてめくっていくスタイルを実現するiOSとAndroidのライブラリも複数あるそうです。気になるかたは見てみてはいかがでしょうか?各プラットフォームずつ抜粋してみました。
- https://github.com/cwRichardKim/TinderSimpleSwipeCards (iOS)
- https://github.com/kikoso/Swipeable-Cards (Android)
Poiboy
Poiboyは男性がほぼ何もすることができないちょっと変わったマッチングアプリです。
仕組みとしては、女性がきになる男性を仕分けしていくアプリで、男性は基本的に仕分けを待つことしかできません。
しかしその分、仕分けてくれた女性とはスムーズに会話をすることができます。人は中身と言いますが、Poiboyにおいてはまず見た目。見た目に自信のある方、使ってみましょう。。
メッセージは有料会員のみ、ただ値段は1500円ほどでそこまで高くないですね。
女性は男性を仕分けしてグルーピングすることができます。例えば...
- メガネ男子
- 黒髪男子
- メッセージ返してくれた男子
などなど...
このグルーピングがキモで、グルーピングされることで、女性への露出が増え、仕分けてもらえる確率が上がります。
Poiboy側でもイベントが実施されることがあり、例えばメガネ男子イベントでプロフィールをメガネをかけた画像にすることで、女性への露出度が高まります。
こういったイベントをうまく使うことで、確率をアップしていくことができます。
また、最近は女性へ能動的にアピールする機能も実装されています。
アピールできる数は制限がありますが、使うことでマッチング確率が上がります。
では特徴まとめいってみましょう。
- 基本的に男性は何もすることができない。
- 見た目重視のある意味男性にとっては残酷かもしれない。
- マッチすると嬉しい。
- 婚活要素はあまりない。恋活もそうですが、女性が目の保養に使ってるイメージがあります。
- マッチ後は割とスムーズ。
happn
happnは道ですれ違ったhappnユーザーが表示されるアプリです。
似たようなアプリとしてはCrossmeというものがありますね。こちらは使ったことがないですが、すれ違いをベースに出会っていくタイプとしては同系統としても大丈夫でしょう。
こちらはもう完全に恋活や婚活ではないと思っています。
仕組みは新しく面白いなぁと思いました。まだまだアーリーアダプターが多い感じがしており、IT系/WEB系の人が多いイメージです。
そういった友人が欲しい人にはおすすめではないでしょうか。
例えば、近所でランチする友達が欲しいとか、そういった用途ではいいと思います。
すれ違った人に対してLIKEをすることができ、相手もLIKEしてくれればメッセージができます。 また、LIKEしたことを相手に伝える機能も付いております。こちらは無料で使うには数に限りがあります。
ではちょっと内容が薄いですが特徴いってみましょう。
- 無料でやっていける。
- 恋活目的ではまだ少し微妙かも。
- 近所のランチ友達を見つけるくらいにはちょうどいいかもしれない。
- そこからの発展もあるかもしれないけど不確実性が高い。
- すれ違ったということで、大まかな位置情報が共有されることになるので、嫌がる人は多いかもしれない。
タップル誕生について
こちらは上記の2分類に当てはめるのが難しいと思っています。その理由は
- TinderライクなUI
- 恋活イメージが強いが、価格帯は婚活アプリと同等
- もちろん純粋に恋活・婚活として使っているユーザーも多い。
と、使ってみた感じでは比較的ライトだが、値段設定は婚活アプリと同等...なので、ちょっと分類に困りました。また、いわゆるネットワークビジネス的な人が多いようにも感じられ、少し使ってやめてしまいました。
システムはTinderとほぼ同じです。
まとめ
はい、色々と比較と考察をしてみました。
マッチングアプリが非常に多く出てきた昨今ですが、その基本的なシステムは 相手に好意を伝える。そして相手から反応があればメッセージができるようになる です。この辺りを押さえておけばあとは各プラットフォームの独自機能を把握すればいいです。 最後になりましたが、こういったアプリを使うにあたってのTipsをまとめたいと思います。
ばれるのやなんだけど。
マッチングアプリは基本的には情報の正確性を担保するためにFacebookと連携することが求められます。
が、基本的にこの連携が他人にばれることはありません。安心してください。
しかしバレるリスクはあります。メインなものとしては
- スマートフォンのホーム画面に置いてしまっている。
これはもうどうしようもないです。
iOSの方はフォルダを作って奥地にしまっちゃいましょう。
Androidの方はホームに置かず、ドロワーにしまっちゃうかしましょう。
Android限定ですが、サードパーティのホームアプリを使えばドロワーからもアプリを隠すことができます。
これらで対策していきましょう。
出会ったけどアプリで出会ったっていうのやだ。
マッチングアプリで出会うということは恥ずかしいことではないです。
もはやインターネット社会になった昨今、選択肢の一つでしかないです。
そして、あなたの友人はそこまで出会った経路に関して興味を持っていません!きっと。
人間、他人に強い関心を持っていることは少ないです。伝えても多分3日もすれば忘れてます。きっと。
どうしても聞かれて伝えるのが嫌なら、友達の紹介とか合コンとかいっときましょう。
出会えないんだけど。マッチしないんだけど。
プロフィールを完璧に埋めましょう。
人となりを「情報と写真」でしか判断できない状況を乗り越えるには、その情報を厚くしていくことが最前です。
プロフィールや写真は一朝一夕ではいいものができません。常にPDCAサイクルを回し、改善していくことでマッチング率が上がっていきます。
終わりに
以上が、使って思ったところでしょうか。
内容に関して質問があれば聞いてくださっても構いません。
以上です。ありがとうございました。
今から新規でAndroidアプリを書き始めるなら。
この記事は Android Advent Calendar 2016 2日目の記事です。
こんにちは。わくわくです。
現在お仕事で書いているアプリを新規で書き始めたのが2015年で、現在は2016年です。
そう、1年が経ちました。その頃から今まで書いてきて、今から書くならこんなライブラリや設計を採用するよ(したいよ) というのをまとめたいと思います。
これからAndroidアプリを書くけどどんなものつかっていけばいいんや〜?といった方の参考になれば幸いです。
すでにAndroid開発をされている方にとっては内容が薄く感じられることと思いますがご了承いただければと思っております…(予防線)
(裏の目的としては自分の備忘録のようでもあったりします。)
この記事では紹介しているライブラリや設計などに関しては深くは説明を書きませんが、参考になる資料などをまとめて行ければと思っております。
言語について JavaかKotlinか
2016年にめでたく1.0がリリースされたKotlinですが、使っていてとても楽しくて好きな言語になりました!
現在は1.0.5-2が最新バージョンです。
Kotlin 1.0 リリース: JVMとAndroid向けの実用的(Pragmatic)言語 | JetBrains ブログ
現在お仕事で書いているアプリも新規で書くクラスやテストコードなどでは積極的にKotlinを採用しております。
1.0リリースからKotlinを導入してよかったことやちょっと残念だったこと等をまとめていきます。
メリット
- ラムダが使える
- 便利な拡張関数
- スコープ関数
switch
より便利なwhen
- null安全である
- interfaceにデフォルト実装を書くことができる
- デフォルト引数が使える
- 名前付き引数が使える
- リスト操作が容易
などなど、AndroidにおけるJavaでは使えないような機能が備わっております。
さらに、null安全であるため、AndroidでFragmentを使う際によく発生しがちなヌルポを防いでいくことができます。
では、そんなKotlinを使う上での自分なりのデメリットを考えてみました。
デメリット
- 公式の言語ではない事によるサポートの将来性
- 一部aptを使用したライブラリとの相性問題(IcePick, Parceler, Dagger2...etc)
- こちらはKotlin側でも積極的に改善が進んでおり、現在ではあまりデメリットとも言えないとは思いますが、まだまだハマってしまうことがたまにあるので、記載させていただきました。
- DataBindingを使う際、ソースコードが真っ赤になってしまう問題
- こちらもKotlin1.0.5でかなりカイゼンされました!
しかし上記のデメリットを受け入れた上でも導入してよかったと感じています。
Kotlin向けに作られたライブラリなども盛んです。
参考
設計について
Androidの設計についてはいろんなところで議論が進んでいますが、現在は MVP もしくは MVVM を採用することが多いのかなと思っております。
MVCだと簡単なアプリでは問題にはなりませんが、規模が大きくなっていくといわゆる筋骨隆々なマッチョActivity/Fragmentが出来上がってしまうことになります。筋肉が付く場所は自分の体だけでいいと思っています。
MVP
Model-View-Presenterでアプリを表現していきます。
Activity/Fragmentを完全にViewとして扱い、Viewで発生したイベントをPresenterが処理し、Modelと通信します。
ModelはPresenterに対して、データをわたし、Viewの描画処理を担います。
MVVM
Model-View-ViewModelでアプリを表現します。
MVPとめっちゃ大きく変わる!といったことはありませんがViewの描画処理をViewModelと言うクラスが担当します。
AndroidではDataBindingと一緒に使うことで今まで書いていたtextView.setText("hoge")
的なものを書かなくて済むようになるので大変楽になります。
参考記事
こちらのサンプルプロジェクトがとても参考になりました。
標準の実装からMVP, Android-DataBindingを使用したMVVMをまとめたリポジトリになっていてテストコードも用意されております。
また、上記プロジェクトを解説してくださっているエントリーもありますのでこちらにもとても助けられました。
全然関係ないですが内容が気になるこちら。
設計に関して、自分は読んだだけでは理解ができない頭なため、実際に手を動かして写経、そして自分でもアプリを書いてみる。などしてみることで理解が進みました!
どっちを採用すべきかはその画面などによるかとも思いますので、やはり一度手を動かしてみると気づきがあるのかな…と思いました。(基本的なところなんですが…)
ライブラリ
ライブラリも非常にたくさんありますね。よく使うものを抜粋させていただきました。
作者の方、コントリビューターの方々には足を向けて寝ることができないな…といった気持ちです。
基本方針としては最新版/それなりのユーザーが居るものを使います。
ネットワーク処理を楽にする
- square/Retrofit
- 超ド定番のRESTClientです。僕はこれがなければきっと何もすることができません。
- 2系になってからより便利になりました。今から開発を始めるなら迷わず2.x系を採用します。
- google/gson
FRP
- ReactiveX/RxJava
- 複雑なイベント処理/非同期処理などはRxJavaを使うことでシンプルに記述することができます。
- すでに多くのアプリで採用されていますね。しかしその独特の概念などもあるため無理して導入する必要は無いと思っています。もちろん、導入したほうが色々と楽になることは間違いと感じているのですが、新しい概念的なものもあるので学習はある程度必要なのかなと思っています。
- 導入に際しては前述のRetrofitと一緒に使うことができるので、そちらの通信周りの非同期処理から使い始めるのが良いかと思います。
- ReactiveX/RxAndroid
- RxJavaをAndroidで使う時に便利になるライブラリです。
- RxJavaを使用する際は合わせてつかうことになるとおもいます。
画像を扱う
- square/picasso
- URLから画像を非同期読み込みして表示してくれたり、またいい感じにキャッシュしてくれたりします。使い方もとても簡単です。
- bumptech/glide
- Picassoとほぼ同じような使い方で使うことができます。
上記のライブラリ2つはほとんど同じような使い方ができますがキャッシュ周りや優先度付けなどに若干の差があります。しかし通常使う分に関しては両者とも大きな差は無いので好きな方を使う。といった感じでも良いと思っています。
こちらの記事が大変参考になりました。
バックポート系
前述しましたが、Android開発におけるJavaではJava8で使えるような機能が使えません。しかしこちらはライブラリを使用することによってある程度改善することができます。
- aNNiMON/Lightweight-Stream-API
- Java8のStreamAPIのバックポートライブラリです。
- リスト操作において、
forEach
などが使えたり、さらにはOptional
も使えるようになります。 - Kotlinを採用しない場合等ではとても強力な助けになると思っております。
- JakeWharton/ThreeTenABP
- evant/gradle-retrolambda
データベース/ORM
-
- こちらは高速・使いやすいSQLiteのORMです。
- 上記のRealmと違ってアプリサイズが肥大化することもなく、またORMであるので今後別のORMに乗り換えることになっても移行が容易であることがメリットであると感じています。
- データベースはアプリを一度作り始めると変更をしにくい箇所でもあるとおもうので、どちらを使うかは要検討、、、と思います。 乱暴な言い方になってしまいますが、個人なら好きな方を使うのが良いとおもいます。
その他
-
- square社が提供しているDIコンテナのGoogleフォーク版です。通称Dagger2
- DIコンテナ自体は必要になったら導入、という風にするのでも良いのではないでしょうか。
hotchemi/PermissionsDispatcher
- Android6.0から導入されたPermissionをキレイにさばくことのできるライブラリです。
- 使い方はとても簡単ですが、まずはAndroidのPermission処理の大筋の流れを掴んでおくことが重要です。 developer.android.com
DataBinding
過去にAndroidアプリを書く際はButterKnife
というライブラリを使ってViewインスタンスの生成を行っていました。
こちらはfindViewById(R.id.text_view)
といったものを書かずとも、Viewのインスタンスを生成できる、といったライブラリでした。
しかし現在では、Googleの提供する、DataBinding
という機能を使うのが良いでしょう。
DataBinding
を使えば、ButterKnifeよりも、より楽にViewにアクセスできる様になります。
導入もとても簡単です。公式のドキュメントが一番わかり易いと思いますので導入・使用に際してはそちらを参照していただければと思います。
https://developer.android.com/topic/libraries/data-binding/index.html?hl=ja
リリース自動化
- Triple-T/gradle-play-publisher
- Gradleで完結できるリリース自動化Pluginです。
- Gradleだけで完結させたい…!と言った人はこちらがおすすめです。
- fastlane/supply
あとがき
さて、設計やライブラリの紹介をざーーっとしてきましたが、一応個人的な感想としては普段から本当にいろんなライブラリやインターネット上の情報に助けられて開発をしているな、と言った気持ちです。もしなければヒーヒーいって開発をしていたことでしょう…
感謝の気持ちでいっぱいです。
が、それと同時に非常に多くの選択肢があるのも事実です。
なので、1からAndroid開発を始めたいけど、何をつかったらええのかよくわらん。って言う人向けに今回の記事を書いてみました。
当初はRealm Mobile Platformで書こうと思っていましたが、自分なりに開発を進めて1年がたった節目でもあるのでこれからやっていく人のほんの最初の手助けでもできればと言う感じです…。
他に質問・「こっちのほうがいいぞ!」などあれば随時受け付けていますのでぜひともお申し付けください。
以上です!ありがとうございました。
最近のこと。初めてLTしたり、HoloLensを触る夢を見たり。
去年、勢い良くブログやるぞ!って言ってからいい気分になっちゃって書いてなかったので、ちまちま楽に書いていこうと思います。 とりあえず、最近あったことを自分なりに整理する。あと今年の目標なんかの達成率的なのも現時点でまとめときたい。
初めてLTというものを経験した。
Gunosyさんのオフィスで開催されている、Gunosy beer bash という勉強会でLTをしてきました。 グローバル x アプリ開発ということで、偶然お声がかかり軽く「いいっすよ」といったものの勉強会で登壇すること自体が初めてだったのですごく緊張した。 スライド作るのなんていつぶりだっただろうか…
こんな発表をしてきました。
ええ、それはそれはもう緊張しました。
他の方の発表などは安心して聞けるものが多く、勉強になるなぁという思い出楽しく聞いておりました。 特に、トランスリミットの高場氏のグローバルアプリの開発に関するところは「そうだよね…」と同意しながらも、僕自身まだできていないところがあるよなぁと思いながら聞くことができたので非常に有意義でした。
一応発表の反省点としては、
- ゆっくりしゃべる
- スライドは後でアップロードするもの。スライドだけ見てもだいたいの内容が伝わるようにしたい。
- ビールは飲み過ぎない(でも少しくらいなら飲んだほうが心が和らぐ。)
という感じでした。下戸の僕にとっては最後がなかなか難しいですが、次回発表する際は上記3点を改善していきたいと思いました。
HoloLensを触る夢を見てきました。
みなさんHoloLensってご存じですか?知ってますか? Microsoftが現在開発している、 MR(Mixed Reality) デバイスです。 ARやVRはよく聞くのですが、MRは聞き慣れなかったので、なんだろうという気持ちですが、Wikipediaの一部を抜粋するとこういうものだそうです。
現実空間と仮想空間を混合し、現実のモノと仮想的なモノがリアルタイムで影響しあう新たな空間を構築する技術全般を指す。 複合現実感とも。 拡張現実と拡張仮想を包含する概念である。
なるほど。よくわらかん。 とりあえず見た夢を奇跡的に写真に収めることができたのでここに共有できればと思います。 場所はエクセルソフトさんで行われました。 @mitsuba_tan さんが開発者キットに当選されたということで、この場を設けていただけたとのことです。本当にありがとうございますm( )m
詳しいことはググるとたくさん出てきますのでどんな様子だったかをお知らせできればと思います。
こんな感じでした。
まずはケース。まるで湯たんぽのようです。かあいいです。質感Goodです。でも40万円です。高い湯たんぽだ。
ゆたんぽみたい#hololensjp pic.twitter.com/TULpbmEdhr
— 元家具屋 (@wakwak3125) 2016年4月29日
ついにおさわり!かっこいい…!
わいわいかっこいいー! #hololensjp pic.twitter.com/R5Bc6Ap1d3
— 元家具屋 (@wakwak3125) 2016年4月29日
触った感じがもうなんていうかその、いろんな物体を部屋にぽいぽい置けるぞ!すげええ!っていう感じです。未来を感じることができました。 空間情報をHoloLensが覚えてその座標にオブジェクトを配置していくので後ろからも見れるししゃがんでも見れるしでもうほんとにトニー・スタークの開発ルームを実現できるのでは無いかって思いました。
めちゃくちゃ楽しかったです。
HoloLensをおさわりさせていただいた@mitsuba_tan さん、エクセルソフトさん、本当にありがとうございました!
という夢をみました。
今年の目標について
- ブログちゃんと更新する。
- サーバーサイドも少しは分かるようになる。
- 設計などをしっかりできるエンジニアを目指す。
- より速いスピードで品質の良い物を作れるようになる。
- 勉強会であと4回は登壇する。
全部できるかな…いややるんだ!という強い意志を持って頑張ります。
以上