画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

株式会社スマートドライブをちょっと前に退職した

3月末をもって退職しました。

やったこと

Androidアプリのエンジニアとして働いていた。そんなに長くはない期間だったけど、いろいろな事を学ぶ事が出来た。 技術的なとこらへんは以下の通り。

  • Kotlin
  • RxJava
  • DDD
  • USB
  • BLE

まだまだ完璧に出来るようになったという感じではないけど、ある程度は出来るようになったと思う。 特にBLEなどを使ったハードウェアとの連携は一般的なアプリ開発では携わることはないのでとてもいい経験が出来た。

今までの社会人経験でゼロから何かを作るという経験があまり出来ていなかったが、その辺が経験できてよかった。

フルKotlinで書かれており、BLE周りが触れるのでIoTやってみたい人はオススメ。AndroidでBLEのツラミはあるけども。。

という感じの

退職ブログでした。

在籍中はいろいろな方々にお世話なりました。どうもありがとうございました。 ベンチャーなのでめっちゃ働き方やばいんじゃないかという怖さはありましたが、 そんなこともなく、休日出勤なども1度もなかったし、有給使いたい時に普通に使えるいい会社でした。

今は

サーバサイドエンジニアとして、渋谷で働いています。 GoとかGAE/AWSとかその辺使ってる感じの今日このごろです。

GoもクラウドサービスもHerokuくらいしか使った事なかったので色々勉強中。

参考文献

入社エントリ

mapyo.hatenablog.com

iPhoneXを購入した

数週間くらい前に購入した。今までは仕事でiOS版の方の挙動を確かめる為に触った事はあったけど、個人的にメインで使うということは一切やったことなかった。

www.apple.com

きっかけ

ポケモンGoプラスを購入したものの、今までメインで使ってたNexus5xに全然つながらなかった。。。

奇跡的に3・4日に1度くらいつながって、つながるとその後何度かは連続してつながるようになる。そして、不意に繋がらなくなって、またしばらく繋がらない日々が続く。。でも、諦めずに頑張ってつなげようとしたら、忘れたころにいきなりつながる。。。

という、ある意味では快感を得られそうな感じの状態になってしまっていた。

とうとう我慢できなくなってしまったのと、Androidのリファレンス機が発売される気配が全然しないのと、Androidからはしばらく離れて、サーバサイドのエンジニアになったので、iPhone買ってみよう!という感じ。

買った

値段

とりあえず、高い。高い。まぁ、しゃーない。

容量

店員さんに64GBを進められて、その流れで64GBを買おうと思ったけど、思い直して256GBの方を買うことにした。 結果買ってよかった。容量気にせずにバンバン保存出来るというのはめっちゃいい。

カバー

これを買ってつけてる。今のところ問題なく使えてる。使うために電磁波干渉 エラー防止シートなるものをつけているので、ICカードの履歴みるとかは、出来なさそう。。。

BLE

ポケモンGoプラスというか、BLE周りはめっちゃすぐつながる。さすがiPhoneAndroidがこのレベルになる日は来るのだろうか。。。 この辺はやっぱりApple1社が作ってるという事が大きいと思う。

Androidの戻るボタンはやっぱり優秀

Androidで1つ前のアプリに戻りたいと思ったら戻るボタンをタップすればOK。これはアプリ内でも、別アプリに飛んだときでも、基本的には同じ体験が用意されてた。たまに戻るボタンをいい感じにあれしてるアプリもあるけども。

iOSで戻る時は、アプリ内だと、左の端からスワイプするのが基本だと思う(たぶん)。そして、twitterからsafariを開いた時にtwitterに戻る時は、左上の方をタップするか、下のホームインジケータをスワイプすれば戻れる。 のだけど、左の端からスワイプするのか、アプリ間を戻るのかを意識しないと行けない。たまにアプリ間を移動しないといけないのに、忘れていて左の端からスワイプしてた。

とはいえ、Androidを使った事なくて、最初からiOSを使ってたらこの辺は特に違和感なかったのかもしれない。

さくさく動く

これはNexus5xをずっと使ってたから。という事だと思うんだけど、ポケモンGoやそれ以外のもろもろがサクサク動いて感動した。Androidの最新の機種だと普通にサクサク動くんだと思う。

ChromeよりSafari使った方がよさげ

Androidだと開くブラウザを自分で指定出来たケースが多かったように思うが、iPhoneだとSafariで開く。がデフォルトで設定されているケースが多いと思った。

郷に入れば郷に従えという感じでSafariも少しずつ使っていこうと思う

所感

新しい概念に触れるというのはいろいろと面白い。直近で何も作るつもりはないけど、意識が高まればアプリとか作ってみたい。その時はReact NativeとかFlutter使ってみるかもしれないけども。

iterm2でフルスクリーンにした時に新しいデスクトップになってしまう設定をやめる

いつもiterm2を起動して、⌘+Enterで最大化して使っているのだが、 デフォルトの設定だと、新しいデスクトップ?の方に最大化してしまって、ちょっと自分としては使いづらい部分がある。

そして一度設定するとめったに触ることがないので、新しいPCにiterm2を入れるたびに毎回忘れてしまい、結構頑張って探して設定しているのでメモ。

Preference -> Window
Native full screen windowsのチェックを外す

自分で書いたから、今度はきっと忘れないし、ぐぐってもすぐ見つけれられるはず。。。!

参考

https://qiita.com/koh110/items/b7e9471330308fdb7250

DroidKaigi2018で「USB接続するアプリを開発した時に試行錯誤した事」というタイトルで登壇してきました

ちょっと時間がたってしまいましたが、発表してきました。

こちらの発表です。

https://droidkaigi.jp/2018/timetable?session=15880

資料はこちら。

www.slideshare.net

今回は事前に資料を公開されている方が何人かいらっしゃったので、その流れに乗って僕も事前に公開しました。

mapyo.hatenablog.com

予想よりちょっと多かった

今回一番参加者の方にお聞きしたかったのが、USB接続するアプリ作った事ある方、こらから作る予定がある方はどれくらいいらっしゃるのか?ということでした。

緊張していて記憶が怪しいのですが、たぶん10人くらいはいらっしゃったと思います。数人くらいしかいないだろうなと思ってたのでちょっと意外でした。

いろいろとフィードバックがいただける

発表した後の質問タイム的なところで、いろいろとお話しができてとてもよかったです。その後の懇親会でも発表した内容について情報交換する事が出来ました。こうやって直接話して情報交換出来るというのが、カンファレンスで発表する事のいいことですね。

デモか動画を入れておけばよかった

PCと接続してUSB接続するアプリの開発出来るよ!という事を説明していたのですが、図で簡単に説明するだけだったので、どんな感じかの雰囲気が伝わりづらかったかなと感じました。デモや動画は上手く動かせない事があるとちょっと辛いなと思っていて入れる事はあまり考えてなかったのですが、他の発表している方がデモを入れているのを見て、めっちゃ分かりやすかったので、この辺はちょっと後悔です。

slideshareの資料の更新の仕方がわからなかった

発表前に、事前に公開した資料からちょっと修正しました。 そして、slideshareに資料を上げなおそうと思ったら、 更新の仕方がわからず(もしかして更新出来ない?)、結局一度上げていたスライドを削除してアップロードしなおすというやりかたで対応しました。 発表する1時間前くらいにわかって、ちょっと焦りました。

所感

とりあえず、人前で発表するのは久しぶりだったのですごい緊張しました。 自分で発表するだけじゃなくて、発表を聞きに行ったりハンズオンに参加したり、パーティでいろいろ話したりととても楽しい2日間でした。 最近カンファレンスとか勉強会とか殆ど参加してなかったけど、またちょこちょこ参加したいなと思いました。 来年もネタがあれば是非ともCFP出したいと思います!!

DroidKaigi2018 Room 2 - 2018/02/08 16:50-17:20 USB接続するアプリを開発した時に試行錯誤した事 のスライドを公開します

スライドを事前に公開する流れが来ているなと思ったので公開します。

[追記]スライドを少し修正したのでアップロードしなおしました

www.slideshare.net

変更があるとしても、おそらく、微修正があるかなというくらいなはずです。

僕の発表はUSBに関する事なので、ニッチ中のニッチだと思います。 スライドの中身を見ていただいて、ご自身の興味に会うかどうか判断していただければと思います。 既にUSB接続するアプリを開発した経験がある方にとっては、把握済の内容が多いかもしれません。 USB開発経験のある方や、開発の予定があるかたは是非とも一緒にお話させて頂きたいです!!

久しぶりの発表なので、めっちゃ緊張しそうな気持ちがいっぱいある一方で、 USBの需要は結構ないと思うので、実はめっちゃ人少ないからそこまで緊張しないんじゃないか?という楽観的な気持ちがあります。

心配事としては、インフルエンザのリスクと隣り合わせで過ごしているので、後2日間は体調を崩さないようにしっかり努めます。

それでは僕自身もDroidKaigiを楽しみたいと思います!

cookpad/license-tools-pluginを使ってみる

github.com

techlife.cookpad.com

つまづいたこと1

普通にREADMEのSetupを実行しただけではエラーになります。

https://github.com/cookpad/license-tools-plugin#for-gradle-plugin-3-users

ここに書かれてますが、Android Studio 3を使ってる場合は、そのための対応が必要になります。 exampleにサンプルが書かれていました。

https://github.com/cookpad/license-tools-plugin/blob/master/example/build.gradle#L54-L63

def implementation_project(arg) {
    if (project.gradle.startParameter.taskNames.contains("checkLicenses")
            || project.gradle.startParameter.taskNames.contains("generateLicensePage")
            || project.gradle.startParameter.taskNames.contains("generateLicenseJson")
            || project.gradle.startParameter.taskNames.contains("check")) {
        dependencies.implementation(dependencies.project(path: arg.path, configuration: 'default'))
    } else {
        dependencies.implementation(dependencies.project(path: arg.path))
    }
}

こんな感じのコードを入れる必要があります。これを入れると解決!

つまづいたこと2

解決!と思いきや、複数moduleで開発していると、先程作ったメソッドを、

app/build.gradle hoge/build.gradle

など、複数ファイルで同じ記述をしなくてはなりませんでした。共通化したい。。!ということで、ファイルを作り、そのファイルから呼び出すようにしてみます。

license_tools_plugin_helper.gradleというファイルを作って以下のように書きました。

ext.implementation_project = { arg ->
    if (project.gradle.startParameter.taskNames.contains("checkLicenses")
            || project.gradle.startParameter.taskNames.contains("generateLicensePage")
            || project.gradle.startParameter.taskNames.contains("generateLicenseJson")
            || project.gradle.startParameter.taskNames.contains("check")) {
        dependencies.implementation(dependencies.project(path: arg.path, configuration: 'default'))
    } else {
        dependencies.implementation(dependencies.project(path: arg.path))
    }
}

そして、これを各module配下で以下のように書いて読み込みます。([追記] 全moduleで必要な場合は、rootのbuild.gradleのallprojectsに書けば1回で済む事を教えて頂いた!)

apply from: "${rootDir.absolutePath}/license_tools_plugin_helper.gradle"

groovyちゃんとわかってなくて、普通にdefという記述のままファイルに書いたら各所でよしなに使えるのかと思ったら、そうでもなかった。。。org

めんどくさかったこと

./gradlew checkLicenses

これを実行した時に、出力される内容をapp/licenses.ymlに保存して、 自動的に取り切れてなかった部分を修正していくのですが、この作業が結構手間がかかった。。。

運用

  • ciで./gradlew checkLicensesを定期的に実行(checkでも流れる)
  • エラーが出たらその時の出力をymlファイルに追加。手直しする部分は手直しする
  • ./gradlew generateLicensePageでhtmlファイルを再出力してコミット

こんな感じで出来るから楽だなーという感じ。

所感

ライセンス、ライブラリ追加したら更新するの忘れがちなので管理が楽になりました。

play-services-oss-licensesを本当は使いたかったけど、使ってみたところ、使ってるライブラリが表示されなかったので断念しました。原因わからず。。。

DroidKaigiのアプリではちゃんと出力されいる様子だったので、こちらのアプリの作りか、環境が影響してそうな感じ。。。

Android Studioでscroll from sourceが出来るショートカットを探してたらいい解決方法をみつけた

やりたいこと

Project Viewの以下の部分をクリックすると、今エディタで開いているファイルがProject View内でフォーカスされる。

f:id:mapyo:20180111174055p:plain

でもこれを毎回手作業でやるのはめんどくさい。でもショートカットがどうもないっぽい。

プラグインを入れる

以下のプラグインを入れる

intellij-support.jetbrains.com

これをいれる事でコンテキスト・メニューに以下の項目が追加されて、それをタップしたり、ショートカットを押すと開くようになる。

f:id:mapyo:20180111174058p:plain

もっといい解決方法

人によっては好みがわかれるかもしれないけど、

Project Viewの歯車の部分をクリックして、Autoscroll from Sourceにチェックを入れると、 エディタでファイルを選択してる時にProject View側では勝手にファイルが切り替わってくれる。地味に便利

f:id:mapyo:20180111174104p:plain

こちらのサイトで見つけた

tips4storm.tsunamayo.net

所感

最近あんまりブログ書けてなかったので、ビルド待ち時間や、CI待ち時間に少しずつネタを書いていくと、 意外と細かくアウトプット出来ていけるんじゃないかと思った今日このごろ。