モバイルアプリエンジニアの山下(@yamshta)です。最近はショットを追加したスターバックスラテにハマってます。味の物足りなさとミルクが口に残る感じが解消されてほどよいおいしさに気づきました☕️
さて、皆さん年度末はどうお過ごしでしょうか? プロジェクトが大詰めだったり、評価や目標関連のことで忙しい時期ですね。私も非常に忙しい毎日を送っていて、珍しく今月の残業が15時間を超えそうです。
まとまったブログを書く時間も取れないので、今回はざっくりと月別に今期の振り返りをしようと思います。
※ この記事の内容はあくまでも"私の"お仕事と取り組み方の振り返りです
4月の振り返り
エンジニアチームと個人の目標の計画
全社の目標を達成するためにエンジニアができることは何かをチームで議論し、サービスの成長や精度などいくつかの視点からバランス良く項目を設けて目標を設定しました。個人目標は、チーム目標の項目に対するモバイルアプリのこととチームをサポートすることの2軸で設定しました。
iOS v2.6 リリース
このリリースでは、今までマイページ画面に含まれていた「保存した条件画面」と「お気に入り画面」をタブバーに移設しました。これにより自分が保存した情報を1タップでアクセスできるようになりました!
Before | After |
---|---|
↑タブバーのアイコンが変わってます
モバイル管理画面の作成
PUSH通知の配信や強制アップデート等のシステムパラメータは、長い間スプレッドシート&SQL直インサートで運用されていました。そのため、企画メンバーから度々エンジニアへ依頼がきていたので、モバイルアプリ専用の管理画面を用意してブラウザからPUSH通知の配信や情報の閲覧をできるようにしました。このおかげで依頼も無くなり、自分たちも配信テストがしやすくなったので良い取り組みでした。
しかし、この管理画面も現状は改善するリソースが全く割けていなく、機能追加と改善のIssueが多く溜まっています😓 日常的にメンテナンスできるくらいのリソースがほしいですが、なかなか人が足りていません。
この月に公開した記事
5月の振り返り
iOS v2.7 リリース
閲覧した予約サイトの履歴が見られる「閲覧履歴画面」を追加しました。これまでは前に見たバス便情報がどれかわからなくなることありましたが、この機能によりその心配は無くなりました!
この機能、新規に画面が追加されていたり、履歴を保存するという振る舞いから作業が重そうな雰囲気を漂わせていますが、機能自体の実装期間は1日程度で終わりました。しかし、UIの実装でとても時間が掛かりました。。
この画面で使用しているUI要素は検索結果の便情報の要素と同じデザインで構成されているのですが、元となる検索結果のUI実装が描画パフォーマンスを上げる試行錯誤から非常に解読しづらいコードとなっており、リファクタ&細分化した後に使い回すよりも、新規に実装して差し替えた方が作業コストが低いと判断しました。また、この時期はコードレイアウトがベストな選択だと思っていたこともあり、完全コードベースでのリプレースを始めたのですが、検索結果は一番最初に実装された画面だったことから、当時のデザインカンプが今のデザインとはほとんど違うもので調整に非常に苦労しました😥
後に聞いた話によると、LCLがモバイルアプリを提供するプロダクトは初めてだったため、エンジニアもデザイナーも標準UIをベースに手探りで仕様を詰めたそうです。そして、その過程で諸々の理由からカンプ通りにはならなかった要素がいくつか存在していました。
xibとソースコードを元に実装を進めましたが、至る所で軽微なデザインの差異が発生してしまい、デザイナーと度々の調整が入りました。(ちなみに、企画メンバーとデザイナーも既存の表示のばらつきは気になっていたとのことで、リプレースは理解と応援をしていただけました)
五月雨の調整も続きましたが、協力もいただきながらきれいに実装することができました。この時、ビルドするまでUIを確認できないというデメリットを嫌というほど感じたコードレイアウトは、その後の実装で止めることにしました。※ 私が未熟だっただけでうまく利用する方法はたくさんあると思います
その他にもこのリリースでは以下の機能も追加しました。
- 会員登録不要の予約サイトの絞り込みに対応
- 弱電波・オフライン時のアラートを追加
この月に公開した記事
6月の振り返り
Android v1.6 リリース
このリリースでは、iOSに追随して
- 会員登録不要の予約サイトの絞り込みに対応
- 最安値カレンダーに前次月の料金を表示
Before | After |
---|---|
加えて、targetSdkVersion
をAPIレベル 26以上にする対応を行いました。
Google Developers Japan: 今後の Google Play でのアプリのセキュリティおよびパフォーマンスの改善について
https://developers-jp.googleblog.com/2017/12/improving-app-security-and-performance.html
AndroidはiOSと異なり、最低のサポートAPIレベル(バージョン)に加え、最新のサポートAPIレベルの定義が必要です。これまでは最新のサポートAPIレベルを提供されている最新のレベルに追随していなくてもリリースできていましたが、2018年11月から規定のAPIレベルに追随していないとリリースができないようになりました。
その他、お手伝い
- バス比較なび Web側のRuby on Rails 5 バージョンアップ対応
- 勤怠情報をチャットへ通知
この月に公開した記事
7月の振り返り
iOSのローカルデータ操作のリファクタリング
前回、閲覧履歴機能を実装した際にローカルデータを操作するクラスの設計と呼び出し方法を見直しました。そこでこれを機にViewやController、○○Managerにも実装されていたコードを排除するリファクタリングを行いました。これにより、綺麗な設計に少し近づきました(道は遠い)
iOS開発環境の整備
これまで利用していたSwiftLintに加え、SwiftFormatとxcprojectlintも採用しました。 情報が古くなっているかも知れませんが、詳細は以下の記事をご覧ください。
これにより、一人での開発でも細かいヒューマンエラーやコーディングスタイルのズレを機械的に無くすことができました。こういう仕組みをしっかり用意することと、その時間を確保できる環境であることは大事ですね。
iOSテスト環境用機能「秘密のアクション」に機能を追加
以下の記事でも紹介しました「秘密のアクション」に新しく機能を追加しました。
- ユーザ固有の情報を表示
- ログのトースト表示
- クラッシュレポート送信テスト
企画メンバーから問い合わせがあったり、開発中に何回も発生するような操作はなるべくアプリから1タップでできるようにしています。例えば、PUSH通知をテストするための固有の情報が知りたいという要望や操作履歴がない状態に戻したい場合の操作などです。これらを用意しておくことで開発が捗ります!
その他、お手伝い
- インターンメンター
- バスとりっぷ 管理画面の改修
- バス比較なび Varnish キャッシュヒット率の向上
この月に公開した記事
おわりに
意外と長くなってしまったので3部構成で続けようと思います!
最初の4ヶ月は毎月リリースと他プロジェクトのお手伝いが順調にできていますね! やはり、何回か登場していたように開発基盤を整えることが一番大切だと思っていて、その時間をしっかりと確保できる状態だからこそ一人でも定期的なリリースができています! 残りの8ヶ月もこのペースを維持していてほしいですね。
ここまでお付き合いいただいた方、ありがとうございます。
8月からの第2部も近日公開予定する予定です。よろしくお願いします!
LCLではプロダクトのことや開発の仕方まであらゆる場面で楽しく効率的に仕事を進めたいメンバーを募集しています!
このブログを読んで興味を持っていただけた方は、是非一度お話を聞きにいらしてください。