大規模Androidアプリの新規開発
2022年11月 〜 2023年12月(13ヶ月)
国内の一部エリアにて提供していたコンビニデリバリーサービスを全国に拡大するにあたり、業務の効率化と利便性向上が検討されていた。その解決策の一つとして、顧客向けサービスをWebサイトだけではなくネイティブアプリでも提供することが求められた。
- 顧客が使用するショッピングアプリを開発する
- ウォーターフォール形式で開発
- iOS/Android共通で作成された設計を基に、設計者(他社メンバーの場合もあり)と連携・確認しながら実装
- フルJetpack Compose、マルチモジュール、MVVMで実装
- 実装
- 共通部分の基盤構築
- モジュール分割、DI機構の作成
- DBセットアップ、外部APIとのやりとり部分の構築等
- UI
- カルーセル、水平・垂直スクロールビュー
- ドロップダウンリスト、ダイアログ等
- ビジネスロジック
- APIコールのエラーハンドリング
- セッショントークン再取得〜再呼び出し等
- 各種APIの並列コール、APIレスポンスの加工
- アニメーションのロード
- etc
- APIコールのエラーハンドリング
- テストコード
- 複雑なビジネスロジックに焦点を絞り作成
- CI構築
- CIマシンの環境構築、CIスクリプトの作成
- レビュー
- 自分含め2名で手分けして全レビューを実施
- 共通部分の基盤構築
- 保守
- 故障対応
- 言語・フレームワーク・ライブラリ
- Kotlin, KTS, YAML
- Jetpack Compose, Android SDK(30-33)
- Hilt, Retrofit2, Room, Coil
- etc
- アプリケーション
- Amazon CloudFront, S3
- Firebase Cloud Messaging, Crashlytics
- AppsFlyer, KARTE, Salesforce Marketing Cloud
- etc
- DevOps
- GitLab, GitLab CI
- 設計・コミュニケーション
- Teams
- Redmine
- フルJetpack Compose、マルチモジュールでのAndroidアプリ開発
- 各種ライブラリ(Room, AppsFlyer SDK等)の活用
- Deep Linkを利用したWeb〜ネイティブアプリを相互横断する遷移処理
- GitLab CIによるアプリのビルド、単体テストの実施
Androidアプリチームとしては20〜40名程度(開発フェーズにより変動)、実装メンバーは7〜20名程度
- 開発メンバー1:本人
- 実装、レビュー担当
- 開発メンバー2:20代・有識者
- 実装、レビュー担当
- その他開発メンバー:20-30代
Androidアプリ開発の有識者の1人として、実装の雛形作成や、実装方針の相談役・レビューを担当した。 フルリモートでの勤務につき、他メンバーに心的コミュニケーションコストをかけないよう、入退場自由の通話スペースを積極的に開設。 Jetpack Composeやマルチモジュール開発の経験者はチーム内に(自分含め)いなかったが、もう1人の有識者と協力してキャッチアップし、 他メンバーの実装をサポートできるよう立ち回った。
WebアプリのAndroidアプリへのリプレース
2022年03月 〜 2022年10月 (8ヶ月)
国内の一部エリアにて提供していたコンビニデリバリーサービスを全国に拡大するにあたり、業務の効率化と利便性向上が検討されていた。その解決策の一つとして、店員が各店舗で使用するWebアプリをネイティブアプリ化することが求められた。
- コンビニ店員が使用する業務用Androidアプリを開発する
- 業務の基本的な流れは以下の通り
- 顧客がWebサイトから商品を注文する
- 注文情報が店舗端末(スマホ)に届き、通知が表示される
- 店員がアプリを用いて商品をピッキングする
- 作業結果をアプリからサーバに送信する
- サーバ側で注文と配送員のマッチングが行われる
- 店舗に到着した配送員に商品を渡す
- 配送員の評価をアプリ上で実施
- サービス利用者向けサイトに表示する商品の種類や価格をアプリ上で変更する機能を持つ
- 対応忘れの注文がないか監視し、再通知する機能を持つ
- MVVM+UseCase+Repositoryで開発
- 設計
- 商品ピッキング機能
- テーブル設計
- 実装
- UI
- 画面操作による商品数量変動時のUI更新(状態管理)
- ビジネスロジック
- 読み取ったバーコード番号のバリデーション
- カスタムステータスバーのための、通信状態の取得
- レビュー
- 全実装メンバー間での相互レビュー
- etc
- UI
- テスト
- 内部結合テスト
- システムテスト
- 保守
- 故障対応
- 言語・フレームワーク・ライブラリ
- Kotlin, Android SDK(29-32)
- Jetpack Navigation, Coroutines
- Hilt, Retrofit2, Coil, Realm
- MLKit
- アプリケーション
- AWS AppSync
- Amazon CloudFront, Cognito, S3
- Firebase Cloud Messaging, Crashlytics
- etc
- DevOps
- GitLab
- 設計・コミュニケーション
- Teams
- Redmine
- MVVM+UseCase+RepositoryによるAndroidアプリ開発
- 各種ライブラリ(MLKit, Realm等)の活用
- AndroidアプリにおけるFirebaseの基本的な扱い
約20名(フェーズに応じて変動) うちAndroidアプリ開発メンバーは主に5名
- 開発メンバー1:30代・有識者
- 開発メンバー2:30代・有識者
- 開発メンバー3:30代・有識者
- 開発メンバー4:本人・実務歴4年
- 開発メンバー5:20代・実務歴1年
- その他システム全体のアーキテクチャ、サーバサイドの開発や各種テスト担当メンバー:15名前後
アーキテクチャ構築、大枠の実装は有識者である他メンバーが整えていたため、それをベースとして詳細な処理の実装を行った。 また、実装メンバー同士で週次で技術的な意見交換を行う場を設け、アプリの品質向上とメンバーの意識向上に貢献できた。
AWS、Serverless FrameworkによるWebシステムのスクラム開発
2021年05月 〜 2022年02月 (10ヶ月)
既存のEDIシステムは各店舗の在庫をリアルタイムで把握できず、適切な発注・在庫管理に多大なコストを要していた。 またサーバ自体も老朽化しており、今後の事業展開にも耐え得る新しいシステムの構築が求められていた。
- 本社・店舗・仕入先の三者が共通で使用するシステムを開発する
- ユーザの種類によって利用可能な画面・機能を出し分ける
- 既成の販売管理システム(スマレジ)と連携する
- スマレジから発注情報を受け取る
- 本システムで受注〜出荷〜検品業務等を管理する
- 適宜スマレジに対して更新情報を送る
- 各店舗の在庫状況を基に自動で発注登録を行う機能を持つ
- CSVファイルを使って複数の発注データを一括で処理する機能を持つ
- 発注書や支払明細書等の帳票を出力する機能を持つ
- スクラム開発を採用し、概ね1ヶ月程度のサイクルで開発とリリースを順次実施
- Microservice+Monorepo構成で開発
- 設計
- 各APIのI/Oの検討
- エラーハンドリング(リトライ・メール通知の方法やタイミング)の検討
- 実装
- バックエンド
- 発注情報受信〜変換〜システムへの登録/更新
- CSVを用いた一括出荷処理機能
- 画面から入力されたデータのバリデーション・変換処理
- pytestによるテストコード
- インフラ
- Serverless Frameworkに基づいたAPI作成
- CloudFormationでのSQSキュー等の作成
- レビュー
- フロント、バック、インフラそれぞれの実装のレビュー
- バックエンド
- テスト
- Swagger UIを使用したAPIのテスト
- 外部システム連携部分のパフォーマンステスト
- 言語・フレームワーク・ライブラリ
- Vue.js
- Python, peewee(O/RM), pytest
- Serverless Framework
- MySQL
- アプリケーション
- AWS Step Functions, Lambda
- Amazon API Gateway, S3, SES, SQS, EC2
- DevOps
- AWS CloudFormation
- GitHub, Docker
- Swagger UI, LocalStack
- GitHub Actions
- 設計・コミュニケーション
- Jira, Confluence, Cacoo, Qast, Slack
- Serverless Framework
- API Gateway + PythonによるREST APIの開発
- SQS等のインフラリソースの管理
- スクラムでの開発
6名
- プロダクトオーナー:30代
- リーダー:30代・有識者
- スクラムマスター:30代・有識者
- 開発メンバー1(フロントエンド):20代・実務歴6年
- 開発メンバー2(バックエンド):20代・実務歴5年
- 開発メンバー3(バックエンド):本人・実務歴4年
Pythonによる開発経験がメンバー内で最も豊富だったため、率先してモジュール構成や記述方針、テスト方法の提案を行った。 一方でAPI GatewayやSwagger等の経験はなかったが、他メンバーのサポートも貰いながらキャッチアップして、担当可能な領域を絞ることなく柔軟に動くことを心がけた。
設備運用管理業務の自動化に伴うスクリプト開発
2021年04月 〜 2021年04月 (1ヶ月)
某通信キャリア会社が提供している通信環境は、様々なネットワーク機器同士の連携により成立している。そのため障害発生時には各機器に対する多様なコマンドを駆使して原因特定、解決を図る必要があるが、従来はこれを多数のオペレータによる煩雑な手順書実行によって実施していた。 そこで、各障害に対応する手順実行スクリプト群を作成し、業務効率化を行うことが検討された。
手順実行スクリプトから各機器を操作することを簡易化するためには、共通的なインタフェースを各機器に用意するのが有効である。そこで、開発チームを「手順実行スクリプト作成チーム」と「共通インタフェース作成チーム」に分け、連携しながら開発を行った。
- 特定の機器の状態をリセットする機能
- 特定の機器のステータスを取得する機能
- etc
- 開発(実装、テスト)
- 言語・フレームワーク・ライブラリ
- Python, Netmiko, TextFSM
- DevOps
- Git, GitLab, VSCode
- 設計・コミュニケーション
- Confluence, Teams
- Netmikoを用いたネットワーク機器の操作
- TextFSMを用いた、CLI出力文字列に対するパース
- Git及びGitLabを用いた開発
共通インタフェース作成チーム:15名
- リーダー:30代・有識者
- サブリーダー:30代・有識者
- 開発メンバー1:本人・実務歴3年
- 開発メンバー2-13:20-30代(直接的な交流があまりなかったため詳細不明)
チーム全体としては、メンバー各人がそれぞれ別の機器のインタフェースの開発を行うスタイルで実施。 実装者によって表記方法の揺れが生じてしまわないよう、コーティング規約の確認だけでなく、他メンバーの実装状況も並行で確認し、必要に応じて開発メンバー間で連携しながら開発を進めた。
AWS Step Functionsを用いたバッチ処理の開発
2021年03月 〜 2021年03月 (1ヶ月)
AWS上で構築されたバッチ処理群の追加開発を担当。 設計から試験までを一貫して実施。
日々更新される様々なデータ(天気データ、電力データ等)をAWS環境下で効率的に収集し活用可能な状態にするバッチ処理の開発が求められていた。
特定のWebサイト等からデータを定期的に取得して、活用しやすい形に加工してクラウドストレージにアップロードする処理の開発を行った。
- 特定のWebサイトからのスクレイピング
- データ編集ロジック
- クラウドストレージへのアップロード
- インフラ構築の設定ファイル作成
- 開発(設計、実装、テスト)
- 言語・フレームワーク・ライブラリ
- Python, pandas, dask
- アプリケーション
- AWS Step Functions, Lambda, Batch, Glue
- Amazon Athena, DynamoDB, S3
- DevOps
- AWS CloudFormation, CodeBuild
- Git, GitHub, VSCode
- 設計・コミュニケーション
- Slack
- boto3を用いたS3の操作
- CodeBuildによるStep Functions等のデプロイ
- CloudFormation設定ファイルの作成
- Step Functionsの構築
- PythonによるLambda関数の実装
- daskを用いた大容量データの編集
- Git及びGitHubを用いた開発(リポジトリのFork〜ローカル作業〜自分のリモートリポジトリへのPush〜Pull Request作成)
プロジェクト人数:3名
- リーダー:40代・ベテラン
- 開発メンバー1:本人・実務歴3年
- 開発メンバー2:20代・実務歴1年
メンバー各人がそれぞれ別のバッチ処理開発を行うスタイルで実施。 自分のみAWS周りの経験が不足していたため、もう1人の開発メンバーにサポートをもらいつつキャッチアップを実施。 一方でPythonの経験は比較的豊富だったため、コーディング周りで積極的にメンバーの相談に乗って開発を進めた。
連携処理資材作成ツールスクラッチ開発
2020年11月 〜 2021年02月 (4ヶ月)
システム間の連携処理の資材を生成するCLIツールの開発を担当。 設計から単体テストまでを実施。 前半1ヶ月はアジャイル、後半はウォーターフォールで開発を実施。
ETLツールで構築しているデータ連携基盤について、連携するIFを300ファイル程度追加することとなった。 今回は追加するIFの仕組みが単純であることから生産性の向上を目的として、本来ETLツールで作成する連携処理の資材(XMLファイル)をCLIツールを使ってテーブル定義書から一括生成することが提案された。
テーブル定義書(Excelファイル)を読み込み、定義値によって異なる編集処理を加え、ETLツールに取り込み可能なフォーマットのXMLファイルを出力する。
- Excelファイル読み込み
- データ編集ロジック
- XMLファイル書き出し
- 開発(設計、実装、単体テスト)
- PowerCenterに取り込み可能なXMLファイルの仕様調査
- 言語・フレームワーク・ライブラリ
- Python, pandas, ElementTree
- Sphinx
- アプリケーション
- Informatica PowerCenter
- DevOps
- PyCharm, Git
- 設計・コミュニケーション
- Teams
- pandasを用いたデータ分析、表データの入出力
- ElementTreeを用いたXML形式データの処理
- Sphinxを用いたドキュメント作成
プロジェクト人数:11名
- CLIツール開発チーム:3名
- リーダー:20代・有識者
- 開発メンバー1:本人・実務歴3年
- 開発メンバー2:20代・実務歴1年
Pythonの実務的な開発経験を持つのが自分のみであったため、開発環境の構築方法や実装方針の策定を率先して実施。 リーダーと交渉してPython経験の少ない他メンバーにも実装タスクを積極的に割り振り、開発メンバー全員が主体的に成長できるよう心がけた。
パッケージを用いたウォーターフォールでの開発
2019年01月 〜 2020年04月 (1年4ヶ月)
地方自治体の某申請情報管理システムについて、紙申請(窓口受領した申請書の情報を手動登録するパターン)のみの取扱いであった従来システムに代わり、電子申請(他システムと連携して自動で情報が登録されるパターン)にも対応した新システムの導入が全国的に推し進められていた。そこで、その自治体においても導入が決定したため開発を行った。
- 全体のスケジュール管理
- お客様、協力会社等との調整
- 要件定義、総合テスト
13名
- リーダー:50代・ベテラン
- サブリーダー:60代・ベテラン
- メンバー:本人・実務歴2年
- +各ソフト/ハードウェアベンダ10名
各ソフト/ハードウェアベンダや、システムの連携先外部機関等、最大10団体と並行して連絡を取りながらプロジェクトを進行。 対面や電話のやり取りに当たっては、議事録や要約メールを用いて確認を欠かさず行い、認識齟齬による手戻りの発生を防止。
地方自治体の業務効率化のためのソリューション提案活動
2018年04月 〜 2020年04月 (2年1ヶ月)
デジタル・ガバメントの推進が求められている中で、各地方自治体もその対応を検討する必要性を抱えている。そこで、現業務状況を踏まえた上での適切なソリューション提案を民間から主体的に行っていくことで、新規案件創出に繋げていくことが計画された。
デモンストレーションに活用するためのプロトタイプの作成
- ドローンを操作するデスクトップアプリ
- 写真管理アプリ(Androidアプリ+Webアプリ)
- 某申請情報管理Webアプリのモック
- 言語・フレームワーク・ライブラリ
- Python, wxPython, Tkinter, Numpy, OpenCV
- Kotlin, PHP
- DevOps
- PyCharm, Android Studio
- Git, Docker
- wxPythonを用いたデスクトップアプリの作成
- Kotlinを用いたAndroidアプリの作成(写真撮影、マップ連携、サーバ連携)
- Linuxサーバの構築
3名
- 営業メンバー1:40代・ベテラン
- 営業メンバー2:40代・ベテラン
- 開発メンバー:本人・実務歴2年
提案用のサンプルの開発という特性上、綿密な作り込みではなく、最小限の機能を短期間で作り上げることが求められた。そこで、目的に応じた適切な技術の選定、優先度の検討・取捨選択を通して効率的な開発を心がけた。
Webシステムの保守
2018年04月 〜 2019年01月 (10ヶ月)
地方自治体向け申請情報管理システムを導入している全国40余りの団体からの質問・不具合等の問い合わせに的確に対応するため、本システム専門の問い合わせ窓口業務を行った。
- システムに関する質問・不具合等の問い合わせ対応(電話対応・試験環境での検証・駆け付け対応)
- 問い合わせ情報を蓄積・管理するためのDB作成
Access VBAによる開発(データ登録、タグ付け、検索)
3名
- メンバー1:20代・有識者
- メンバー2:20代・有識者
- メンバー3:本人・実務歴1年
自分を除くメンバー2名は同システムの開発業務を経験した直後であったため、システムに対する知識量に大きな差がある状態での開始となった。 そこで、開始1ヶ月は先輩方の問い合わせ対応方法を徹底的に見て聞いて覚え、翌月からは全ての問い合わせを担当する姿勢で取り組み、素早いキャッチアップに努めた。
ウォーターフォールによる連携基盤開発
2017年10月 〜 2018年03月 (6ヶ月)
DWHに蓄積した旅行予約データ等を経営上の意思決定に活用するため、データ連携基盤システムの開発が提案された。
ETLツールを用いて複数テーブルの情報を組み合わせ、BIツールで利用可能な形式に加工する。
基本設計(テーブル定義書・データフロー図等)、詳細設計(ビュー定義書等)、実装、単体テスト、結合テスト
- 言語・フレームワーク・ライブラリ
- Java
- アプリケーション
- Talend
- Amazon Redshift, WorkSpaces
- Redshiftにおけるテーブル、ビューの設計
- Talendを利用したETLロジックの製造
プロジェクト人数:7名
- PM:40代・ベテラン
- メンバー1:30代・有識者
- メンバー2:30代・実務歴10年
- メンバー3:20代・実務歴7年
- メンバー4:20代・実務歴6年
- メンバー5:20代・実務歴3年
- メンバー6:本人・実務歴3ヶ月
本プロジェクトは、お客様自身の持つ完成イメージが定まらないまま開発が始動し、曖昧な要件定義を基に基本設計を行う必要があった。 そこで、必要に応じて定例の打ち合わせ外でもお客様へのヒアリングを実施することで、軌道修正を細かく繰り返すことを心がけた。 その結果、手戻りの発生も小規模なものに抑えられ、予定通りのリリースを行うことができた。
ウォーターフォールでの機能追加開発
2017年07月 〜 2017年09月 (3ヶ月)
旅行予約サイトの利用者から電話問い合わせを受けるにあたり、コールセンターでは負荷が特定のオペレータに集中しない工夫が求められる。 そこで、Webサイトからの要求時点での状況に応じて、動的に問い合わせ先番号を表示させる機能の開発が提案された。
Webサイト上の問い合わせボタン押下をトリガーにコールセンター側システムへの状況照会を行い、最適な電話番号情報を取得して画面に表示する。
- 画面(問い合わせボタン、照会結果画面)
- モーダルダイアログ表示ロジック
画面設計、実装、単体テスト
- 言語・フレームワーク・ライブラリ
- ASP.NET
- JavaScript, jQuery
- C#
- ASP.NETを利用したWebシステム開発
- jQueryによるダイアログ表示ロジック開発
3名
- メンバー1:30代・実務歴10年
- メンバー2:20代・実務歴6年
- メンバー3:本人・実務歴0年
メンバー内では最も実務歴が浅いながらも、先輩方の配慮もあり、実装から単体テストまでを全面的に担当。 実装方法の調査、進捗状況の報告、課題発生時のエスカレーション等を実施。