visible true

技術的なメモを書く

Vue.jsでvue-routerを使ってルーティングする時にGoogle AnalyticsでPage Viewを取る

ググってもパッとでてこなかったので。

前提条件

  • index.htmlなどにGoogle Analyticsを初期化するコードが埋め込まれていて、グローバルにga関数にアクセスできる
  • vue-routerを使っている

コード

main.jsとする。VueRouterのafterEachにコールバックをセットしてga関数を呼び出せばよい。

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({/*省略*/})

// これ
router.afterEach(function (to, from) {
  ga('send', 'pageview', to.path)
})

// 省略

おわりに

vue-reportingというのもあるらしい。

AndroidアプリケーションをGoogle Compute Engineのインスタンスでビルドする

AndroidのBuildを別マシンで行うスクリプト書いたった - Qiitaがとても興味深かったので、Google Compute Engineのインスタンスでビルドする環境の構築を試してみました。体験としては最高だったので、環境構築の手順を簡単にまとめます。

解決したいこと

前述の記事で語られている通り、Androidアプリケーションのビルドはとても時間がかかります。しかもCPUをフルで持っていくのでビルドしているあいだは他の事ができません。そこでビルドの処理を別のマシンに委譲することで、待っている時間を有効に使えるようにします。

Google Compute Engineのインスタンスを作る

まずGoogle Compute Engineのインスタンスを作ります。環境としては次を選択しました。

- ゾーン: asia-east1-a
- CPU: vCPUx2 (n1-standard-2)
- OS: Ubuntu 16.4 LTS
- ディスク: 20GB

f:id:sys1yagi:20161113153138p:plain

ゾーンはおそらくasia-northeast1とかの方がいいんでしょうが、転送の速度よりはビルド速度の方が大きい影響を受けると思うので、安いゾーンでCPU積んだ方が体験としてはよさそうです。

静的IPを追加する

rsyncを使うのでインスタンスのIPを固定します。静的IPはインスタンスの編集画面で追加できます。

f:id:sys1yagi:20161113154544p:plain

ssh keyの登録

インスタンスAndroid開発環境を整えるため、sshでアクセスします。ドキュメントの手順に沿ってキーを作成して登録します。

Connecting to Linux Instances  |  Compute Engine Documentation  |  Google Cloud Platform

javaのインストール

インスタンスsshでログインし、必要なソフトウェアをインストールします。まずはjavaの環境を整えます。

sudo apt-get update
sudo apt-get install openjdk-8-jdk-headless

Android SDKのインストール

次にAndroid SDKをインストールします。場所はどこでも構いません。今回は~/に置いてます。

wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar xvf android-sdk_r24.4.1-linux.tgz

ANDROID_HOMEの設定

.bashrcANDROID_HOMEと、androidコマンドのパスを設定します。

vim ~/.bashrc

export ANDROID_HOME=~/android-sdk-linux
PATH=$PATH:$ANDROID_HOME/tools

android update

androidコマンドを使ってビルドツールなどをインストールします。大体次でよさそうです。不足したものがあれば適宜入れてください。

android update sdk -u -t 1,2,3,4

license fileの作成

アプリケーションのビルド時にライセンス同意のファイルが必要です。ローカル環境の$ANDROID_HOME/licenses/android-sdk-licenseの内容をリモートインスタンス側にコピーします。

mkdir $ANDROID_HOME/licenses
vim $ANDROID_HOME/licenses/android-sdk-license

# localの`$ANDROID_HOME/licenses/android-sdk-license`の内容をコピーする

/tmp/buildディレクトリの作成

※追記 2016/11/14: インスタンスを再起動するとtmp/buildが毎回消えてしまってめんどくさいので、~/でやるようにgistのコードを更新しました。なのでこの節は省いて大丈夫です

次の項目のfabfile.pyでワーキングディレクトリとして/tmp/buildを使っています。最初は存在しないので、予め作っておく必要があります。

mkdir -p /tmp/build

fabfile.pyの準備

AndroidのBuildを別マシンで行うスクリプト書いたった - Qiitaで掲載されているgistのコードをforkし、少しだけ変更しました。

https://gist.github.com/sys1yagi/1f395190061a8d48db5e30ae160b4b99

設定項目は次のとおりです。

  • env.user = sshのユーザ名
  • env.hosts = VMインスタンスのIP
  • env.key_filename = VMインスタンスに登録したSSHキーファイル
  • module = ビルドするモジュール名
  • flavor = ビルドするフレーバー名
  • package = アプリケーションのパッケージ名
  • launch_activity = 起動するアクティビティのFQCN

これでfab buildでビルドできるはずです。

おわりに

vCPUx2 (n1-standard-2)のインスタンスの場合、手元でのビルドの3倍程度時間がかかるようでした。この辺はプロジェクトやローカルマシンのスペックなどによって様々と思いますが、インスタンスのスペックを積めばローカルより速いビルドも実現できるでしょう。

リモートでのビルドは、ローカルマシンのCPUを専有しないように出来るというだけでもかなり価値がありそうです。コストについてはまだ環境を作って間もないのでなんとも言えないですが、インスタンスを使う時だけ起動すればよいのでかなり低コストに抑えられるのではないかと思います。

「解剖 Kotlin ~バイトコードを読み解く~」をGitBookで公開しました。

テクブの夏コミ(C90)のアンドロイドアカデミアに書いた解剖 Kotlin ~バイトコードを読み解く~をGitBookにて公開しました。

GitBook

こちらから読めます

解剖 Kotlin ~バイトコードを読み解く~

概要

解剖 Kotlin ~バイトコードを読み解く~はKotlinで書いたプログラムを逆アセンブルすることで、Kotlinが提供している特徴的な機能がJavaでどのように表現されているかを読み解いていきます。Kotlinの特徴的な機能たちもJavaになってしまえばこっちのもの。なーんだKotlinもJavaなんだね。

目次

  • Introduction
  • KotlinとJava
  • 本書のアプローチ
  • 1. null許容型の正体
  • 2. 関数型とラムダ式の正体
  • 3. インライン関数の正体
  • 4. 拡張関数の正体
  • 5. プロパティの正体
  • 6. デリゲートプロパティの正体
  • 7. 末尾再帰最適化の正体
  • おわりに

Circle CIでAndroid SDK周りのライセンス許諾をローカル環境に合わせる

Circle CIの公式ドキュメントのTest Android Applications - CircleCIにある通りAndroid SDKをCircle CIでダウンロードするには次のようにcircle.ymlに記述する必要がある。

dependencies:
  pre:
    - echo y | android update sdk --no-ui --all --filter "package-name"

この記述の場合package-nameが可変なため、新しいSDKが出た時に変わることがありCIがコケる。 新しい名前をパッと調べる方法がよくわからないので大体はまる。つらい。

CI環境でAndroid SDKのダウンロードを自動化する2016 - Qiitaにローカル環境で行ったライセンス許諾のライセンスファイルを使う方法が書かれていて、最高だったのでCircle CIにも適用した。

ライセンスファイルの中身をコピーする

ライセンスファイルの中身はハッシュ値になっている。ファイルは次の場所にある。

$ANDROID_HOME/licenses/android-sdk-license

circle.ymlに設定

ライセンスファイルから取り出した値をcircle.ymlに設定する。 ディレクトリを作ってechoでライセンスファイルを作ればOK。

dependencies:
  pre:
    # 省略
    - mkdir $ANDROID_HOME/licenses
    - echo "ここにライセンスファイルの値" >> $ANDROID_HOME/licenses/android-sdk-license

これでローカル環境で許諾したものと同様のSDKを自動的にインストールできるようになる。

WEB+DB PRESS vol.94で特集「はじめてのKotlin」を書きました

2016年8月24日発売のWEB+DB PRESS vol.94(¥1,598)で特集「はじめてのKotlin」を書きました。

特集「はじめてのKotlin」について

「はじめてのKotlin」の目次は技術評論社WEB+DB PRESS Vol.94のページで見られます。以下に抜粋しつつ補足の解説をします。

  • 第1章:Kotlinとは何か
    • Kotlinの概要と特徴、近年のAndroidの開発言語を取り巻く環境に言及し、なぜAndroidの開発言語として注目されているのかについて、具体的な理由を解説します。Jack and Jillを含めたJava8環境とKotlinのどちらを選択するべきかについても言及しています。
  • 第2章:Try Kotlinで基本文法を学ぼう
    • null許容型,スマートキャスト,制御構文,クラスなどKotlinを使う上で必要な基礎を解説します。最低限の知識は身につくはずです。
  • 第3章:ラムダ式と関数を使いこなそう
  • 第4章:Android開発に導入しよう
    • KotlinをAndroidプロジェクトへ導入する方法と,つまずきやすいポイントの解説とその解決方法を説明します。
  • 第5章:Kotlinを活用しよう
    • 拡張関数を使ったAndroid APIの改善や、スコープ関数の解説、kaptの使い方、Kotlin Bytecodeによるコンパイル結果の確認などについて解説します。
  • 第6章:Kotlinの将来
    • 公式採用の可能性について言及しています。またKoltin 1.1で追加される予定の機能などについて解説します。

全体的にAndroidエンジニアを対象として書いていますが、2章、3章はKotlinにだけ言及するので、Androidエンジニアでない方にも価値がある内容になっているのではないかと思います。

執筆の感想

4月か5月頃に技術評論社 編集長の稲尾さんに声をかけていただき、一度ランチしながらKotlin特集のプランニングをして、その後Goが出て書き始めたといった感じでした。ランチの時に「バリバリ書いて前倒しっすよ〜」とか言っていたんですが案の定ギリギリとなってしまいました。ちょうど仕事の方も修羅場になっていて全体的に修羅場でした。

稲尾さんは流石に何人もの技術者を相手してきているだけあって、サクーッと進める所は進め、シュッと用意するところは用意し、バシバシッと尻を叩く所は叩くというメリハリある編集の進行で、執筆者として大変安心して取り組めました。原稿はGithub上で管理していて、稲尾さんもissueをバンバン立てたりPRをバンバン出すのでめっちゃやりやすいです。

原稿書いてる時はマジで「ああなんでやるって言ってしまったんだろう?」と辛い思いになる事が沢山あるんですが、終わってみると「あれとかこれとかも書きたいな」とか思っちゃうので危険ドラッグでは〜?って気がします。技術書典夏コミ(C90)の原稿も重なって「死ぬのかな...?」って思いました。

最後に

特集のページ数が31Pなのでかなり盛々で濃い内容になってると思います。一方で言語の解説としては網羅性は足らないので、特集を読んでKotlinを気に入った方はぜひKotlinスタートブックも読んでください。

また、夏コミ(C90)で頒布したアンドロイドアカデミアに、Kotlinのnull許容型やラムダ式、関数型、インライン関数、拡張関数などがJavaバイトコード上ではどのように表現されているのかを読み解く「解剖 Kotlin ~バイトコードを読み解く~」という章を書いたので、こちらも合わせてぜひお読みください。

Kotlin学習の知見のかたまり「Kotlinスタートブック」はサイコーのKotlin入門本です

Kotlinスタートブックを献本頂いたので感想を書きます。

Kotlinスタートブック-新しいAndroidプログラミング

概要

KotlinスタートブックはJavaエンジニアおよびAndroidアプリケーションエンジニア向けにKotlinの基本を解説する本です。Kotlinの文法や機能を広範囲にわたって身に付けられます。また後半にはAndroidアプリケーションへKotlinを適用する例を解説する章があり、Androidアプリケーションにどのように導入するかイメージをつかむことができるでしょう。

こんな人におすすめ

  • Kotlinを効率的に学習したいひと
  • Android Javaに疲れたひと
  • Android Javaはやりたくないひと
  • AndroidはまぁJava 8でいいじゃん、と確認したいひと

解説

Kotlinについて「聞いたことがある」とか「ちょっと触ったことがある」とかいった人にとても良い入門本だと思います。また1.0未満のときに触って捨てた人にも良いです。

Kotlin学習の知見のかたまり

Kotlinのドキュメントや情報はそれなりに充実してきているものの、どこから手をつけるか、どのように活用するかについてはKotlinを触る人それぞれに依存していました。 Kotlinスタートブックは日本Kotlinユーザグループ代表の@ngsw_taroさん(黙認エバンジェリスト)が、Kotlinに出会ってから現在に至るまでの約3年間のあいだに学んだ事をしっかりと消化したうえで、これからKotlinを学ぶ人へ向けて適切な学習の順序付けを行った本です。3,780円でKotlinを学習するために必要な時間を大幅に節約できるのでたいへんお得です。

Androidに適用するアイデアがたくさん

Androidは開発に占める言語の割合が小さいので、Kotlinに対しては腰が重い人が多いのではないかと思います。 KotlinスタートブックにはKotlinの基本を学んだあとAndroidアプリケーションをひとつ作る章があります。 アプリケーション自体はシンプルであるものの、そこかしこにKotlinのフレーバーが散りばめられており、Kotlinを学んだあとに読めばきっと「なるほどこういう風に使えばいいのか最高だな」と思うに違いありません。 さらにそこから「では、こういったことは出来るのだろうか?」という問いが立ち上がり、芋づる式にさまざまなAndroidにまつわる課題の解法を思い描いていけるのではないかと思います。

感想

個人的には「本を書く時あるある」を感じながら楽しんで読めました。「あ〜ここ、こういう風に書き出したくなるよなー」「ここは指摘があって色々見直した跡があるな」「説明めんどくさすぎてこれ省略したな」「ここはめちゃくちゃ攻めたな」とかいった箇所がたくさんあって面白いと共に胃がキュッとなりました。

Kotlinを実際にAndroidアプリケーション開発に導入する気がなくても、新しい言語を学ぶという側面で読む価値があると思うのでぜひ皆さんお手にとってお召し上がりください。

KotlinのDestructuring Declarationsを非構造化宣言呼ぶことにした けど色々あって分解宣言にした〜

分割代入とか分解宣言とか呼んだりするケースを見かけるけどどうもしっくりこないので非構造化宣言と呼ぶことにした。

  • Destructuring = 非構造化
  • Declarations = 宣言

じっさいデータ構造を複数の変数へ非構造化してるしー。まぁそれなら分解でもいいじゃんて気もするけどDestructuringは分解じゃないっぽいしー

val (id, name) = Pair(1, "mike")

まーそんなにこだわりはないけどー。

2016/6/6 追記

こういう感じがいいのではというアドバイスを元に「分解宣言」と呼ぶことにする事にしました。ありがとうございます。

中略