経歴書
基本情報
key | value |
---|---|
名前 | Kotaro Kamashima |
居住地 | 埼玉県 |
最終学歴 | 埼玉大学 教養学部 哲学歴史専修 |
Github | Kotaro666-dev |
@Kotaro666_dev | |
Kotaro666 | Kotaro666 |
保有スキル
- 技術
- Flutter でのクロスプラットフォーム開発・見積もり・設計・保守/運用
- Android ネイティブでの新規開発
- Next.js / TypeScript でのフルスタック開発
- レガシーコードでの開発(Flutter1 系/ CodeIgniter2 系)
- 複雑性の削減と保守性を意識したコーディング
- MVVM/MVC を使った開発
- 予定工数見積もり、基本/詳細設計
- ソフト
- 未知の技術に対するキャッチアップスピードとスキル
- 開発リーダーとしてのマネジメント業務経験
- プロジェクトリーダーとしてのプロジェクト管理経験
- 社外 MTG でのクライアント折衝
- 社内での勉強会・輪読会の企画と開催を通じたコミュニティ形成
- 小規模 MTG(最大 10 名)でのファシリテーション
- 1on1 でのメンタリング(担当メンティー数: 3 名)
- エンジニア採用業務(採用実績: 2 名)
技術スタック
プログラミング言語
- Clang
- C++
- Dart
- Kotlin
- TypeScript
- PHP
- Golang
- Swift
フレームワーク・その他
- Flutter
- Android ネイティブ
- Jetpack Compose
- CodeIgniter
- Redis
- MySQL/MariaDB
- Next.js
- React
- Docker
自己PR
- 技術に対する飽くなき好奇心を持って、自己研鑽できます
- どんな未知の技術でも自己学習からキャッチアップして開発できます
- 開発現場では、口頭/文章でのコミュニケーションと雑談をもっとも大切にします
- 「エンジニアこそエンジニアリング以外の業務もやるべき」をモットーに、ソフトスキルも意識して取り組みます
- 常にトレードオフを意識して、開発できます
- 担当するサービスに対して、常に当事者意識を持って対応します
求めている環境
- ドキュメント作成と管理を行っている、または推奨している
- 複数人が参加して、フィードバックを活発に行うコードレビュー文化がある、または推奨している
- 技術に対する関心を持つ人が多い
- 社内外で活発に勉強会を行っている
- エンジニアのスキルアップをサポートする制度がある(例:技術書の購入支援制度)
- 以下の開発現場に従事してみたいです
- Moblile: Kotlin での Android ネイティブ開発
- Web: Golang でのバックエンド開発
興味・関心
- 低レイヤーから基礎的な知識を知りたいという興味があります
- どんな技術でも、内部構造を理解したいという関心が強いです
- 言語やフレームワークに対する強いこだわりはなく、常に新しい物事を学ぶことに楽しさを感じます
参画プロジェクト一覧(2020/11 ~ 2022/11現在まで)
スポーツ動画配信サービス(Mobile/Web)
プロジェクト概要
約 10 万人 MAU のゴルフ動画配信サービスの開発と保守・運用を主に行なっています。
本サービスは、以下の 3 つの主な機能をユーザーに提供しています。
- テレビ:24 時間スポーツ番組を配信する
- VOD :7, 000 本以上のオンデマンド動画を視聴できる
- LIVE 配信:大会を中継して配信する
2022 年 3 月に前任の開発リーダー退職を契機に、私が開発リーダーを務めています。
詳細
- チーム規模
- 5 名(PjM :1, TL: 1, Engineers: 3)
- 期間
- 2020 年 11 月 ~ 2021 年 2 月
- 2021 年 6 月 ~ 2021 年 11 月
- 2022 年 3 月 ~ 現在まで
- 使用技術
- Mobile: Flutter, Android, iOS
- アーキテクチャ: MVU, MVVM
- 業務内容
- 保守・運用および新機能開発
- プロジェクトマネジメント(開発課題の整理と進捗管理)
- クライアント折衝業務(クライアントとの MTG や日々のチャットによるやり取り含む)
- 要件定義書と画面設計書からの工数見積もり、基本設計、詳細設計、実装
- システム適格性確認テスト仕様書の作成と運用改善
- サービス品質の最終責任の担保
- 手順書や方式設計などのドキュメントの改善と作成
- 参画メンバーの育成
工夫した点
私が参画した当初は、サービス開始当初の背景により保守運用に多大な工数が発生したり、機能開発するたびに新たに致命的な不具合が生まれてしまうという状態でした。
その原因は、初期開発時のシステム設計や外部サービスのドキュメントが不足しており、過去の担当者の引き継ぎが十分に行われていない状態で開発が続いていたからだと認識しました。
ドキュメント不足による引き継ぎ失敗を目の当たりにしていたため、開発依頼が少ない閑散期を利用してシステム設計や外部サービス連携している箇所のドキュメント作成を地道に進めました。
開発リーダーになってから現在までに毎月リリースを行いましたが、リリースによる致命的な不具合の発生は 0 件です。
直近の目標
現在は、以下の目標に注力しています。
- 開発リーダー不在でも開発エンジニアのみで開発を円滑に進められるようにする
- 属人化を作らないために、権限移譲をする
- チームメンバーの技術力を育成をする
- チームメンバーが当事者意識を持って開発に臨む運営を進める
上記を達成するために、以下の取り組みを行なっています。
- 開発リーダーのみでのレビュー体制から、複数人での相互レビュー体制を構築する
- メンバーの能力やスキルに対して難しい課題であっても、信頼して任せる
- コードレビューのフィードバック時に、「なぜ」という背景と知識の共有機会を常に作る
- チームメンバーがクライアントとの接する機会を作る
マッチングアプリ(Mobile)
プロジェクト概要
準委任契約で、 Tinder や Tapple に類似したマッチングアプリの開発および保守・運用を行いました。
既存アプリの改善を行う保守・運用と既存ユーザーからの課金を促進する新機能開発、そして Flutter2 へのバージョンアップ作業が主となりました。
Flutter2 バージョンアップ後に、サービス運営会社の内製開発意向によりプロジェクト参画が終了しました。
詳細
- チーム規模
- 4 名(TL: 1, Engineers: 3)
- 期間
- 2021 年 3 月~2021 年 11 月
- 使用技術
- Flutter
- 状態管理手法: Redux, Provider
- アーキテクチャ
- MVU, MVVM
- Flutter
- 業務内容
- 保守・運用
- 新機能開発
- 発注者の要求からの要件定義
- 詳細設計
- Flutter2 へのバージョンアップ作業
工夫した点
保守・運用開発では別会社で開発している API サーバとの連携が重要であり、文章や VC でのコミュニケーションを通じて円滑な開発を行えるように注力しました。
また、発注会社のエンジニアが実装するコードも含まれるため、プロジェクト全体で統一性のあるコードを書くように意識しました。
本プロジェクトを通じて習得したもの
本案件を通じて、小規模な機能開発時に開発リーダーを担当させてもらったことで、今後の別プロジェクトでの開発リーダーとしての基礎を作ることができました。
金融サービス(Mobile)
プロジェクト概要
大手国内銀行と大手小売店がコラボレーションした金融サービスの Android ネイティブ開発を行いました。
プロジェクト初期の段階で、詳細設計を担当していた Android ネイティブ開発予定者が退職したために、 Android 側は私一人で開発していく形となりました。
上流工程での考慮漏れや度重なる仕様変更、用意された SDK に問題がある等で典型的なウォーターフォール開発のデスマーチ状態となりましたが、最終的に納品まで辿り着きました。
詳細
- チーム規模
- 4 名(PjM 兼 TL: 1, iOS: 2, Android: 1)
- 期間
- 2021 年 12 月 ~ 2022 年 2 月
- 使用技術
- Kotlin, Data Binding, Kotlin Coroutines
- アーキテクチャ: MVVM + Coordinator + Repository pattern
- 業務内容
- クライアント折衝業務(MTG や日々のクライアントとのチャットによるやり取り含む)
- UI は XML 、ロジックは Kotlin で、マルチアクティビティ設計による開発
- 外部ベンダーが作成した金融サービス接続の SDK 連携
- プッシュ通知連携
- FirebaseAnalytics 連携
工夫した点
- 本プロジェクトで初めて Android ネイティブ開発かつスケジュールの余裕がないため、プライベート時間を使ってキャッチアップして開発を進行したこと
- 各レイヤーの責務に則した保守性の高い実装
- ユニットテストの実行しやすさを意識した実装
- Kotlin Coroutine を使用した並列処理のデータ通信によるパフォーマンスを意識した実装
本プロジェクトを通じて習得したもの
- Android ネイティブ開発の知見と経験
- 未知の技術スタックの開発でもキャッチアップすれば対応できる自信
業務効率化サービス(Web)
プロジェクト概要
既存顧客の要望から、業務効率化サービスを開発しました。
私が開発/プロジェクトリーダーとして、開発チームのマネジメントとバックエンド開発を行いました。
参画メンバーの技術力・経験が未熟な状態でしたが、メンバーの成長を期待して「任せる」こと意識してプロジェクトを進行させました。
詳細
- チーム規模
- 6 名(PjM 1, TL 兼 BackEnd: 1, FrontEnd/Backend: 4)
- 期間
- 2022 年 6 月 ~ 2022 年 9 月
- 使用技術
- FrontEnd: Next.js, React, TypeScript, TailWindCSS
- BackEnd: Next.js, TypeScript, Prisma, MariaDB
- インフラ: Docker, AWS サービス(EC2/Amazon S3)
- アーキテクチャ: レイヤードアーキテクチャ(Controller + Service + Repository Pettern)
- 業務内容
- 要件定義書からの技術選定と基本設計、工数見積もり
- 開発リーダーとして開発全体のマネジメント
- プロジェクト初期の導入
- API 仕様書の設計と開発
- DB 設計と開発
- GoogleAPI との連携
- システム適格性確認テスト仕様書の作成
- サービス品質の最終的責任の担保
- サービスの納品作業
工夫した点
- メンバーの得意・興味関心、技術の将来性を考慮した技術選定を行ったこと
- メンバーの技術力・経験が未熟な状態でも、メンバーの成長を期待して「任せる」こと意識してプロジェクトを進行したこと
- メンバーの課題進捗度や詰まり具合に応じて、ペアプログラミングを実施して、技術的知見や開発手法のノウハウを共有したこと
- 将来的な保守運用と開発工数のトレードオフを考慮した DB 設計と API 設計を行ったこと
反省点
- TailwindCSS の導入するうえで、プロジェクトのデザインから判断を熟慮すること
- インフラ側の知見のなさから、インフラ担当エンジニアとのコミュニケーションに齟齬が発生したこと
- 開発途中に要件定義段階での要件・仕様漏れに気づくことが複数あったこと
本プロジェクトを通じて習得したもの
- アーキテクチャと技術選定の経験
- Web アプリ開発の経験
- データベース設計
- API 設計
- メンバーへのタスクの委譲
- プロジェクトマネジメント
クラウド配信プラットフォーム(Mobile)
プロジェクト概要
iOS 端末またはカメラ機器で撮影した映像をクラウドプラットフォームを経由して、登録ユーザーにライブ配信を行ったり、過去の映像を再生する機能を提供するサービスです。
現在は、前任者が作成した既存アプリからの機能追加開発を行っています。
今後は、継続したサービス開発や Android 端末でのサービス提供も期待されていいます。前任者が実装した箇所のドキュメント化を行い、継続的な開発が行いやすい環境を整えることを目標としています。
詳細
- チーム規模
- 4 名(PjM 1, Mobile: 2, Web: 2)
- 期間
- 2022 年 10 月 ~ 現在
- 使用技術
- Flutter, Swift
- 状態管理手法: Riverpod, Flutter hooks
- Sora SDK(WebRTC SFU)
- Flutter, Swift
- 業務内容
- 静的 UI 画面の作成
- 外部 API との連携と動的繋ぎこみ
- Flutter 側と iOS ネイティブ側との連携
- iPhone 内蔵カメラへの命令処理実装と繋ぎ込み
- SDK を通じた映像の描写や音声データの繋ぎ込み
その他
エンジニアとしてのバックボーン
42Tokyo
プログラミングの基礎は 42Tokyo で学びました。 2020 年 1 月の入学試験 Piscine に合格し、2020 年 6 月に入学した 1 期生の一人です。
学んだこと
- Libft
- 標準 C ライブラリ関数作成による自ライブラリを作成しました
- 車輪の大発明をすることで、必要な便利関数は自前で作って対応することを学びました
- 提出コード
- network
- TCP や UDP 等のプロトコルやサブネットマスクについて学びました
- get_next_line
- 渡されたファイルを 1 行ずつ読み込み、渡した引数に格納する関数を作成しました
- static 変数の役割や要件を理解してコードに落とし込むことができるようになりました
- 提出コード
- ft_printf
- 7 つのファイルフォーマット、フィールド幅と精度、複数のオプションに対応した printf の再実装課題です
- 機能や役割に応じたファイルと関数分割、そしてリーダービリティを意識したコードを書くように心がけました
- 提出コード
- ft_server
- 1 つの Docker コンテナ内に、LEMP 環境を作り、WordPress を立ち上げる
- Docker による仮想化技術と LEMP 環境設定方法を学びました
- 提出コード
- cub3d
- libasm
- 標準 C ライブラリ関数の一部をアセンブリ言語で実装する
- 使用するメモリとレジスタの概要に触れることができました
- 提出コード
- push_swap
- 2 つのスタックを操作して、渡されたデータをソートする
- 極力少ない回数でソートができるようにアルゴリズムを工夫しました
- 提出コード
- minishell
- 機能が制限された Bash を再実装する
- Bash の仕様、構文解析やプロセスを学ぶことができました
- 提出コード
- inception
- docker-compose を使って、LEMP 環境上に Wordpress を立ち上げる
- 42Tokyo で最初に課題をクリアした称号をゲットしました
- 提出コード
- pipex
- パイプラインを再実装しました
- 提出コード
- philosopher
- 並行/並列処理(Pthreads)を駆使して、食事する哲学者の問題を解きました
- 本課題を通じて、並行/並列処理の基礎的な使い方を学習できました
- 提出コード
- cpp
- C++ の基礎を学ぶ課題群です
- C++ でクラスを作るところまで進めました
- 提出コード
技術投稿
- Zenn
- 2022 年 12 月現在 15 記事
- kotaro666
- Note
- 2022 年 12 月現在 5 記事
- kkamashi
- Stack Overflow
- 2022 年 12 月現在 61 reputations
- kotaro666
勉強会での登壇資料
- Flutter Redux の内部構造を考える(2021/3)
- パイプラインによるプロセス間通信を理解する(2022/3)
影響を受けている書籍
技術
- 「リーダーブルコード ―より良いコードを書くためのシンプルで実践的なテクニック」
- 「UNIX という考え方 ―その設計思想と哲学」
- 「Clean Architecture 達人に学ぶソフトウェアの構造と設計」
- 「A Philosophy of Software Design」
- 「ソフトウェアアーキテクチャの基礎 ―エンジニアリングに基づく体系的アプローチ」
ソフト
- 「マネジャーのもっとも大切な仕事──95%の人が見過ごす」
- 「サーバント・リーダー「権力」ではない。「権威」を求めよ」
- 「HIGH OUTPUT MANAGEMENT(ハイアウトプット マネジメント)人を育て、成果を最大にするマネジメント」
- 「ソフトウェア見積り 人月の暗黙知を解き明かす」
- 「エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング」