#### どのようなプロジェクトだったのか
現在では3,000万UUのスマートフォンアプリダウンロードのアプリ開発基盤、所謂Baasの開発部長を務めておりました。
https://moduleapps.com/
BtoBtoC向けのアプリ構築サービスで、主に企業からの販促向けまたは自治体から地域紹介向けアプリとして複数のスマートフォンアプリをリリースしました。
元々はイマナラ! ( https://imanara.jp/ )というクーポン検索サービスのAPIを基盤を元に、企業向けプラットフォームASPとして販売開始したのが始まりです。
企画〜開発、ローンチ、運用まで、0->1、1->100のフェーズをエンジニアとして携わっていました。
#### どのような機能を開発されたのか
同社、創業期の2007年頃からシステムエンジニアとして在籍しておりましたので、非エンジニアの企画職の方との要件定義〜システム開発・プログラミング、品質テスト、オンプレでのサーバ構築、オンプレからAWS Iaas移行、システム稼働監視、外注管理、マネジメントと、スタートアップでサービスローンチ、及び運用に必要な工程を開発リーダーとして一気通貫して経験しております。
機能開発としては、主にサーババックエンド側の各ドメインに対するCRUD機能およびフロントから利用されるAPIとしてのインターフェース設計、出力、位置情報を軸とした検索機能などを開発してきました。
在籍後期ではBaas導入企業とのシステム間連携に関する要件定義と見積もり、設計概要などのPM業務を主な業務として、行っております。
また、2012年にNTTドコモグループに事業売却を行った為、システム価格のデューデリ対応やそれに伴う必要なドキュメント作成、大きな会社でのシステム監査の対応などの経験もございます。
#### どのような技術を使い、どのように実装をされたのか
バックエンド側は主にPHP、MVC独自フレームワーク、PostgreSQLをベースとして実装していました。
大きな機能として、フロントエンドアプリから利用されるWeb APIとアプリに表示できる、アプリから登録されたデータを管理できるCMSから構成されています。
* PostgreSQL: DBのリードを分散する為のレプリケーション
* Redis: 書き込みプロセスを単一プロセスで処理するようキューイング
* Redis: 読み込みデータのキャッシュ化
* Fluentd: ログの転送と集積、Redshiftへの登録
などの設計や構築の経験もございます。
#### どのような技術的な課題があったのか
##### パフォーマンス、スループットに対する課題
元々、モノリシックなWebシステムだったので、増え続けるトラフィックとステートを持ってるアプリケーションに対するサーバスケールに対する課題がありました。
特に、スマートフォン用アプリケーションで大量のユーザにプッシュ通知を送信した時などに起こるサーバ側の処理性能低下が大きな課題でした。
##### 技術的負債
また、会社としてベンチャー特有のローンチ速度を重視する会社だったので、どうしても
* 構築・設計フェーズを楽にする為、モノリシックな設計になる
* 開発ボリュームの規模に応じて外注エンジニアが入れ替わるので、ノウハウの蓄積が薄い、エンジニアのレベルに応じての品質差異が出てくる
* ただし、スピード優先なので時には保守を犠牲にしてローンチする
などの技術的負債がたまりやすい傾向がありました。
#### どのようにその課題(難しかったことなど)を解決されたのか
##### パフォーマンス、スループットに対する課題
IOに関しましては、上記で示しましたようにスケールアウト、キャッシュ戦略することで読み込みの改善を、特にスケールしづらい書き込みは単一プロセス化することによって、並列処理時に比べてのリソース効率、コンテキストスイッチのコスト削減を測りました。
その他、スロークエリを分析し、SQLの改善またはインデックスの作成、ソート用メモリ割り当て値等、DBAの業務等で解決を図りました。
##### 技術的負債
コードレビューやユニットテストを導入することで、一定の品質にすることを図りました。
在籍時には、まだまだ```テストを書くことを考慮したコード``ではなかった為、完全には解決出来ませんでしたが、徐々に負債の返却を開始していました。`
また、経営陣との保守に対する意識合わせ、時間予算の確保など行い、エンジニアと設計、作業を進めていました。
##### 技術力のアピールに繋がる記載(個人での開発経験などがあれば)
上記、タグ数の問題で記載できませんでしたが、Docker、Kubernetes、機械学習に関しまして、入門書1冊程度の知識と運用経験がございます。
退職後は在籍時に経験できなかったスマートフォンネイティブアプリの開発やVue.jsなどを勉強しています。
また、個人開発でスマートフォンのアプリ(Swift, Kotlin)を開発したり、
Android : https://play.google.com/store/apps/developer?id=Yoshiko+Ichikawa
iOS : https://apps.apple.com/us/developer/yoshiko-ichikawa/id1458472870
※ストアの名義は妻の名義です。
関数型のプログラミングやAWS サーバレスのプログラミング体系的に勉強し直しています。
自ブログ: https://www.letitride.jp/
GitHub: https://github.com/letitride
また、フリーランスとして、
https://jp.smartround.com/
の開発エンジニアとして参入をしたりしていました。