Hatena::ブログ(Diary)

Islands in the byte stream

2015-02-26

Maven Centralが依存ライブラリの "3.+" のようなバージョン表記を認めなくなってた

http://central.sonatype.org/articles/2014/Oct/28/enforcing-valid-dependency-versions/

2014年10月の話ですが、これのせいで手元のライブラリのアップロードが失敗するようになってました。これからは、依存ライブラリのバージョンは "3.+" ではなく"[3,4)" (3以上4未満)などのような数学的範囲表記(mathematical range syntax)をしなければならない、ということです。詳しくは上記エントリを参照のこと。

変更例:

https://github.com/gfx/android-power-assert-plugin/commit/01d9cdcb0a3f61a12779c92ef977c880eec29006

理由は+表記(dynamic version)が依存関係の仕組みを壊すからだということですが、それが+表記を禁止しなければならないほどなのかどうかはちょっとわかりませんでした。ともかく、maven centralにアップロードする際は新しいルールに従わなければいけません。

2015-02-23

AndroidエンジニアとJavaの関係

Androidエンジニアは初心者に対して「Javaくらいできるよね、さてそれではAndroidについて学ぼうか」みたいな態度をとってしまうことがよくあります。しかし実際にはAndroidアプリケーションを書くにはJavaの知識が必要不可欠で、Javaについては学ばなければならなくて、これがわりと奥が深くて大変だったりするのですよね。

自分はどうやって学んだのだったかなと振り返ると、発展的な内容はだいたい「Javaメモ」で学んだと思います。デザインは古いですが内容はアップデートされているし、細かな点までよく説明していて、読み物としても面白いのでおすすめです。

そういうわけで、AndroidエンジニアとJavaの関係を考える機会が最近いくつかあって、 DroidKaigiでそういうネタがないかなと思っているのでした。

DroidKaigiのトーク応募は2/25まで!自分が当然と思っていることも、他人にとってはそうとも限らないし、ぜひ知見の共有の機会に使っていただければと思います。

2015-01-05

Swift訳語集をつくった

https://github.com/gfx/swift-words

WEB+DBのSwift特集を書くときに訳語を決める必要があったので作ったものです。順次改定しているので必ずしも特集記事と一致しているわけではないですが、今後日本語でSwiftの記事を書くときはこれに従うつもりです。

2014-12-24

WEB+DB PRESS Vol.84にSwiftの入門記事を書きました

Swiftはまだ出て間もない言語で、いますぐ採用すべきかというとなかなか難しい所はあります。ただプログラミング言語としてはOptional型やパターンマッチング*1など面白い機能が豊富で、学ぶ価値のある言語だと思います。今回の特集がSwiftに触れるきっかけになれば幸いです。

*1正規表現ではなく、関数型言語でよく見られる値のパターンの検出と分解のほう

2014-12-03

Android依存ライブラリバージョン固定システムの構想

Androidのビルドシステムには、BundlerとかCartonみたいに推移的な依存関係*1のバージョンを固定するものがありません*2。これをなんとかしたいと思っています。

で、メモ。Gradleには「ビルドスクリプトの依存関係(Gradle plugins)」と「モジュールの依存関係」があって、どちらのバージョンも固定する必要があります。

バージョンの固定は、まず依存関係を解決した依存グラフをつくり、そのライブラリを持ったローカルなmaven repoを作ってそちらを参照するようにすればいいはず。このあたりはCartonを参考にすればいいと思っています。

依存関係の可決についてはAndroid用だと"androidDependencies"というタスクが依存グラフを出してくれます。これはDependencyReportTask.groovyが実体なのでこのあたりから掘っていけばいいはず。Gradleスクリプトについては未調査です。

$ ./gradlew androidDependencies
:app:androidDependencies
debug
+--- com.google.android.gms:play-services:6.1.71
|    \--- com.android.support:support-v4:20.0.0
|         \--- LOCAL: internal_impl-20.0.0.jar
\--- com.android.support:appcompat-v7:20.0.0
     \--- com.android.support:support-v4:20.0.0
          \--- LOCAL: internal_impl-20.0.0.jar
(snip)

ちなみに素のGradleにはgradle-dependency-lock-pluginというのがあるけどちょっとイメージが違うしAndroid用には使えなそうです。

See Also

*1:transitive dependencies: 依存ライブラリの依存ライブラリみたいな関係

*2:知らないだけかもしれない。もしご存知でしたら教えて下さい。