ポエムです。
皆さん、Icepickをご存知でしょうか。ActivityやFragmentに書いたプロパティをSavedInstanceStateで保存/復元する責務だけを持つ、アンチAndroidAnnotations界隈では人気のあるAndroid向けライブラリですね。
このIcepickに、下記のコミットが行われました。
さよなら、@Icicle。
分かる人には分かる、寂しい変更です。この記事ではAndroid界の老害たちに向けて、昔を懐かしむ話をしたいと思います。
何が変わったのか
これまでのIcepickは、@Icicle
アノテーションを付加することで、状態保存の対象を指定していました。
class ExampleActivity extends Activity { @Icicle String username; ... }
しかしこれからは、代わりに@State
アノテーションを付加することになります。
class ExampleActivity extends Activity { @State String username; ... }
Icepickがやりたいことは、 onCreate
、 onSaveInstanceState
、 onRestoreInstanceState
などで行われる、savedInstanceStateに対するI/O操作の簡略化です。この責務において、この名称変更は理に適ったものと言えるでしょう。
Icicleという名前の由来
そもそも、Icicle
という言葉はどこから出てきていたのでしょうか。それを説明するには、Androidクロニクルにおける紀元前、Android 1.0より前の時代まで遡らなくてはなりません。
Significant API Changes
onFreeze(Bundle)
renamed toonSaveInstanceState(Bundle)
, to better reflect the fact that it does not represent an actual change in application lifecycle
Release Notes for Older SDK Versions | Android Developers
Android 0.9 SDK Beta (r1)での代表的な変更の中に、
onFreeze
がonSaveInstanceState
に改名
というものがありました。そしてこの頃、onCreate
は下記のような形でした。
@Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.any_layout); }
現在では savedInstanceState
と記されている場所に、 icicle
(つらら)の名を冠した変数が置かれていたのです。
おそらくは、「onFreeze
で凍らせた"状態"が、onCreate
でつららのように上から降ってくるよ」というニュアンスだったのでしょう。
Icicleの時代
日本にAndroidが上陸した2009年時点では、既にAndroidのバージョンは1.5 Cupcakeになっていました。もちろん、onFreeze
はとっくに滅びています。
しかし、何故か、その名残はしばらく残っていたのです。
2009年のStackOverflowに、ハッキリとicicle
の文字が載っていますね。また、2011年終盤の時点でも、Android Maps周りには古いコードが残っていたようです。
久々にMapActivityのonCreateを呼んでみたら、onCreate(Bundle icicle)とか書いてあって時代を感じた。
— なかざん@社内ポエム製造機 (@Nkzn) October 31, 2011
それらもいつしか savedInstanceState
へと置き換わっていき、 Icepickが故人を偲ぶように@Icicle
を残し続けるばかりとなっていました。
さよなら、Icicle
Icepickが@Icicle
を捨てたことで、恐らくAndroid界隈からicicleという言葉はほとんど消えてなくなるでしょう。機能の命名は過度に詩的であってはいけません。寂しさはありますが、Icepickにとっては、@State
が正しいのです。
さようなら@Icicle
。いままでありがとう。僕たちはこれからも頑張っていくから。見守っていてください。
あとがき
- そういえば俺、Icepick使ってるプロダクトないなー(
- それにしても、ButterKnife 7.0の件といい、Robolectric 3.0の件といい、命名の見直しが流行ってるんだろうか。