画竜点睛を衝く@mapyo

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

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待ち時間に少しずつネタを書いていくと、 意外と細かくアウトプット出来ていけるんじゃないかと思った今日このごろ。

2017年の振り返り

立ててた目標の振り返りと、どんな事やってたかざっくり振り返っていきたい。

目標の振り返り

2017年の目標はこちら

2017年の目標は大きく3つだった

  1. Androidがんばる
  2. プルリク駆動勉強
  3. 運動

それぞれ1つずつ振り返っていこう

1. Android頑張る

主に3つを目標として上げていた。

これら3つは今の会社に入社してバリバリやれている。 今の会社だと、ほぼほぼkotlinで書いてるし、RxJavaも結構使っているし、クリーンアーキテクチャっぽいやつで書かれている。 胸を張ってめっちゃ出来るぜ!!と言えるほどではないけど、そこそこ出来てきた。といえるのではないだろうか。

2. プルリク駆動勉強

やりたいやりたいと思って、全然出来なかった。。。 Android Studioのバージョンアッププルリクや、細かいlintを直したプルリクくらいだった。 これは引き続き来年への課題である。

3. 運動

今年の途中から1駅分歩くようになって、多少は運動できている。今年の最初の方はゆるい感じで糖質制限をしてた。 1年前に比べると確実に2kgくらいは痩せているので、多少は効果あった気がする。 途中から減らなくなったし、食事も特に気にせず食べるようになったので、現状維持な感じ。

やったこと

ブログとかtwitterからやった事ベースで雑に振り返っていく。 年々、ブログ書く頻度が下がってるけど、書いとくと何やったか思い返せていいですね。

1月

  • 前職を退職して、現職に入社した。といっても、前職の最終出社は有給の消化があったので12月末頃。
  • 新年の目標を立てたら、その時のTweetに「数値目標以外はダメだ」とリプ頂いたのを見つけたw来年の目標は数値目標を入れようw

2月

  • ブログ特に書いてなかったし、記憶がない

3月

  • DroidKaigiで発表してきた。めっちゃ緊張した。
  • RxJavaとKotlinをバリバリやってる
  • CircleCIの4G制限に苦しんでた気がする
  • ポテチにオーディエンスとして参加してた

4〜6月

  • 難読化について調べてた
  • BLEとかやってたのかも
  • 今必要なものを変化に対応できる形で作れるのいいよなとか考えてた

7月

  • fastlaneでGoogle Playのベータ版にアップするようにしてた。これは、本当にやってよかったと思える事だったので、やってないAndroid開発者の方がいらっしゃったら絶対にやった方がいい。
  • Pythonのコードとも一時戯れていた。
  • ちょっと工数かかるけど、この方法でやるしかないか。。。と思って頑張って実装していて、完成直前までいってたけど、発想の転換でシュッとやればそんな事しなくていいしシンプルになると気がついて切ない気持ちになりながらシュッとやってた気がする

8月

  • 仕事大変だった気がする

9月

  • ずっとVysor使ってたけど、OpenSTFを自分のMacで使うようにしたらすんごいよかった

10月

  • ターミナルで実行した時に、時間がかかるコマンドが終了したら通知してくれるようにした。これは意外とよかった。ビルドとかしてる間にブログ書けるよ。
  • USBネタでDroidKaigiのCFP出した。出したの9月だったかも。
  • 仕事で始めてiOSアプリの修正を行った。大変だった。大変だった事をブログ書こうとしてたら忘れてた。

11月

  • DroidKaigiのCFPが無事通った。やっほい。

12月

  • 粛々と実装してた気がする。BLE接続周りについて、ゼロから実装してる。
  • ビルド途中にブロク書くのが流行ってたので、ビルド途中に会社のアドベントカレンダーのネタを書いたりしてた。
  • PS4地球防衛軍5を買って永遠とやってた。そのせいで腰を痛めた。

まとめ

2017年はいろいろあったけど、一番よかったのはKotlinやRxJavaや設計やBLEやUSBについて、それなりにやれた事だったのではないかと思う。他は、iOSを全くやった事がなかったけど、ちょっとでもやれたのがよかった。 新しい事をやるというのは、それだけでやる前とくらべて知識量が増えているのでいい感じ。 UI周りに関しては前職の方がしっかり出来てた気がする。

今年やってめっちゃ良かったことがもう一つあった。 Google Playのベータ版にアップロードするやつを自動化するのは、絶対にやった方がいい。本当にリリース作業が楽になったし、心理的な不安も少なくなりました。もしやってないところがありましたら、やりましょう。僕に飲みを2回分くらいおごってもらえたら僕が代わりにやってもいいくらいです(笑)

ずっと思ってることだけど、あれやりたいー。これやりたいー。と思ってメモしたりpocketに保存するんだけど、気がついたら月日がたって、やらなかったりする事が多い。この辺を上手くする方法ないのかな。結局はやりたい事をリストに書き出して、優先順位つけて日々コツコツやっていくしかないのかなぁ。

あとは、ここ最近ずっとAndroid開発してたけど、アプリよりもサーバの方がやりたい気持ちが高まってきた。アプリよりもサーバサイドの方が俯瞰してサービスを見れる気がするのと、サーバサイドは基本的にどのプロジェクトにも存在するのと、最近のクラウドサービスをいい感じに使った開発をやっときたいというところ。前にサーバサイドやってた時はオンプレだったので。

そんな事をやったり、思った2017年だった。思い返すと色々とあったなぁ。2018年に何をやっていきたいかは年明けて書いていこう。

Android plugin for Gradle 3.0.0からは、buildToolsVersionを指定しなくてもよくなったっぽい

https://developer.android.com/studio/releases/build-tools.html

このページの一番上に以下のように書いてあった。

You should always keep your Build Tools component updated by downloading the latest version using the Android SDK Manager. If you're using Android plugin for Gradle 3.0.0 or higher, your project automatically uses a default version of the build tools that the plugin specifies. To use a different version of the build tools, specify it using buildToolsVersion in your module's build.gradle, as follows:

Android SDK Managerを使ってBuild Tools componentの最新バージョンを使いましょう。 Android plugin for Gradle 3.0.0以上を使ってたら自動的にデフォルトのバージョン使ってくれますよ。もし違うバージョンを使っていたら以下のように指定して下さい。

なのでbuildToolsVersionは消してもいいのかなという感じ。

最近ブログあんまり書いてないから小ネタを刻んでいきたい。

時間のかかるコマンドの実行が終了した時にディスプレイに通知する

10秒とか20秒とか1分とか時間のかかるコマンドを実行する事はしばしばある。 この間ずっとiterm2を目視しているわけにもいかず、何か別の事をする。しかし別の事をしていると、コマンドが終わった時に気が付けない。10秒くらいで終わるコマンドを実行しているのに、気がついたら5分くらい別の事をしてた。なんてあるあるだ。

なのでコマンドの実行が終わったら通知して欲しい。

探したらいいのを見つけた。

qiita.com

そして、参考サイトのコピペするだけで動いた!

function notify_precmd {
    prev_command_status=$?

    if [[ "$TTYIDLE" -gt 1 ]]; then
        notify_title=$([ "$prev_command_status" -eq 0 ] && echo "Command succeeded \U1F646" || echo "Command failed \U1F645")
        osascript -e "display notification \"$prev_command\" with title \"$notify_title\""
    fi
}

function store_command {
  prev_command=$2
}

autoload -Uz add-zsh-hook
add-zsh-hook preexec store_command
add-zsh-hook precmd notify_precmd

さらに、これのいいところは、1秒より長いコマンドを実行した時には自動的に実行してくれるので、短いコマンドで無駄に通知されることもない。 これでちょっと便利になったー。

[追記] 実際にしばらく使ってみてはいるが、たまに通知してくれない時もあるようだ。。。

戦略とか戦術とか

あれ、どっちがどっちだっけ?と迷った時に、よくこのブログを思い出して検索する

d.hatena.ne.jp

不意に読もうという気持ちになってさくっと購入して読んでみた。

booth.pm

さくっと読めるのでオススメ。この中に戦略的設計と戦術的設計が出てきたのでブログを検索して読み直してみたのだった。 そんな今日この頃。

VysorからOpenSTFに乗り換えた

今まではVysorを使っていた

Vysor

Androidの実機をPCから操作したい時に主に使っていた。 ディスプレイにうつして他の人にデモしたり、テキストを入力する時に便利。

しかしながら、無料版だといくつかの欠点があった

  • 画質が悪い
  • たまに広告が勝手に起動する

特に音が出るアプリを開発している時は、スマホのボリュームをある程度上げている。その状態で音声つきの広告が再生されるとびっくりする事があった。 いろいろと考えてみると、OpenSTFを普通にMacにインストールして、自分専用にして使えばいいんじゃないか。。?と思ったので試してみた。

導入はMacであれば、基本的に

github.com

これを見ながらやればOK

よかったこと

  • 画質が荒くなく、普通にいい
  • PCでコピーしたURLをスマホのブラウザで開く時に便利(好きなブラウザで開くための機能がある。Vysorでもコピペして入れればOKだったが、機種によってはちゃんとコピペが出来ない時もあって不便だった)

わるかったこと

  • PCと接続すると、STFService is runningの通知がずっと出っぱなしになって結構気になる
  • ↑がアンインストールするまで消えない。
  • 何故かマナーモードにしていても、PCと接続すると勝手に解除されて音がちょっと出るようになる
  • 悪くはないけど、Vysorではスクロールで画面が移動していたのだがOpenSTFは出来なかった。。

こんな感じ。わるかったことに関しては今後、対応出来るものであれば対応していきたいけど、ざっと調べた時は出来なさそうな感触ではあった。。。 そんな今日この頃。