サイバーエージェントを支える技術者たち

第68回 主力の「Amebaアプリ」をネイティブ化!

この記事を読むのに必要な時間:およそ 3 分

ニュースや芸能人のブログ,最新のエンタメ情報など,幅広いカテゴリの最新情報がチェックできるほか,アメーバブログへの投稿機能も備えたAndroid/iOSアプリが「Ameba」です。従来,この「Amebaアプリ」は,アプリ内でWebコンテンツを表示する「WebView」クラスを使って開発されていましたが,今回のアップデートではネイティブアプリとして開発されました。このアップデート作業に携わった4名のエンジニア,藤原 聖氏写真1)⁠藤田 琢磨氏写真2)⁠田坂 和暢氏写真3)⁠レ ヴァン ギア氏写真4に,ネイティブアプリ化した理由や苦労した点などを伺いました。

Androidの「65K問題」に苦闘

─⁠─まず,「Amebaアプリ」がどのように変わったのかを教えてください。

藤原:昨年の夏頃から,Android/iOS向けに提供しているアプリのネイティブ化を推し進めて,よりリッチで使い勝手のよいものをユーザに提供しようという動きが社内で広まりました。⁠Amebaアプリ」もその流れを受け,それまでWebViewで作っていた部分をJavaに置き換えることを決めました。

─⁠─実際に手を付け始めて,たいへんだったのはどういった部分でしょうか。

写真1 藤原 聖氏

写真1 藤原 聖氏

藤原:Android版で言えば,最初に決めたクラスや方針を変更して根本的なクラスを書き換えるという作業を2?3回行うことになってしまいました。ListViewと呼ばれるクラスにネイティブのUIパーツを格納しているのですが,最初のやり方ではアプリの規模が大きくなると,管理のしかたやコードが煩雑になることが見えてきたんです。それで⁠この形ならどうか⁠と根本的に改めたのですが,それでも処理が煩雑だったのでもう1回書き換えました。1日程度の作業ですが,影響範囲がすごく大きかったのでたいへんでしたね。

写真2 藤田 琢磨氏

写真2 藤田 琢磨氏

藤田:もう1つ苦労したのが,dexファイルのメソッド数が65536を超えるとAndroid 2.x系の端末にはインストールすらできなくなるという問題で,65K問題などと呼ばれているものです。もともと機能をかなり増やそうとしていたところだったので,何とか65Kに納めるために不要なライブラリを削ったり,一部でしか使われていないライブラリの切り出しやメソッドの簡略化などを行ったりしました。バージョンアップしたけれど,メソッド数が増えることからバージョンダウンしたライブラリもあります(笑)⁠ここもけっこう苦労したポイントです。

iOS版「Amebaアプリ」はSwiftで開発

─⁠─iOS版の「Amebaアプリ」はどのように開発が進められたのでしょうか。

田坂:実はWebViewからネイティブ化する前に,動画投稿の機能を追加してリリースした際,対応OSをiOS7以上にしました。そうした背景もあり,言語をそれまでのObjective-CからSwiftに移行したんです。今回の新しい「Amebaアプリ」もSwiftで開発していますが,去年のWWDCで公開されたばかりの言語ということもあり,全然情報がないんですね。それで週1回程度でSwiftの勉強会を実施し,みんなが持ち回りで発表しながら,まずこの言語に対する理解を深めることから始めました。

そういった苦労はあったのですが,Swiftを選択したこと自体は後悔していません。ただ実際に開発している中でつらいのは,ビルドが遅いことです。Objective-Cと比べると,100倍ぐらい違います。Objective-Cでは変更箇所だけ再ビルドがかかるのに対し,現状のSwiftのコンパイラでは一部を修正してもすべてが再ビルドの対象となるためです。現在,がんばってObjective-Cで開発した部分をSwiftに置き換える作業を進めていますが,作業が進むほどビルドが遅くなるというジレンマが発生しています(笑)⁠

ギア:デバッグモードとリリースモードの動作が違うことにも驚きました。デバッグモードでは問題がなかったので,リリースモードでビルドしてQAのメンバーにテストを依頼したところ,こういうバグが発生していますとレポートが送られてくるんです。でも,私たち開発メンバーがそれを確認しようとしても再現できない。その原因はデバッグモードとリリースモードの違いだったわけですが,最初はそれがわからず,ちょっと苦労しました。

─⁠─Android版「Amebaアプリ」はLollipop(5.x)にも対応したのでしょうか。

藤原:がんばって対応しました。マテリアルデザインにして,Rippleなどのエフェクトも使っています。Rippleを使おうとすると,5.x系と4.x系でUIパーツを読み分けるような実装となるのでめんどうな部分もありましたが,やっぱり楽しかったです。これからのAndroidはマテリアルデザインの5.x系が主流になっていくので,そこに前もって対応するのはエンジニアとして良い経験になりました。

─⁠─ちなみに,アプリをLollipopに対応させる場合,どういった点に注意すべきでしょうか。

藤原:できるだけ早いタイミングで,デザイナーと擦り合わせをすることでしょうか。UIでどのようなアニメーションが使えるかなどといったことは,やっぱりエンジニアしかわからないと思いますし,マテリアルデザインではカラーパレットも決める必要があります。それで早めにエンジニアとデザイナーで一緒に議論しながら,お互いに足りない知識を補ってプロジェクトを進めていく必要があります。

著者プロフィール

川添貴生(かわぞえたかお)

株式会社インサイトイメージ代表取締役。企業サイトの構築及び運用支援のほか、エンタープライズ領域を中心に執筆活動を展開している。

メール:mail@insightimage.jp

コメント

コメントの記入