職務経歴書
基本情報
- 名前: 南 貴博(みなみ たかひろ)
- 性別: 男性 (1984年うまれ)
- Twitter @tMinamiii
- GitHub @tMinamiii
- Qiita @tMinamiii
- Zenn @tminamiii
- Lapras
開発歴
OS使用歴
OS | 使用歴 | レベル |
---|---|---|
Linux | 10年以上 | プロダクトのサーバーとして利用 / 開発用のマシンのデスクトップとしても使用 |
Windows | 10年以上 | 個人的なデスクトップ環境 / 開発用のマシンのデスクトップとしても使用 |
macOS | 8年 | 個人的なデスクトップ環境 / 開発用のマシンのデスクトップとしても使用 |
プログラミング言語使用歴
仕事や実現したいことに応じて使用する言語を変えています。 一番実現しやすくモダンで情報入手しやすい言語を使う傾向があります。
Java 1.4 - 7.0 (使用歴 8年)
- 大学で使用したのがきっかけ(Java1.3)
- 学士論文・修士論文の研究にもJavaを使用(Swingを用いてGUIアプリを作成)
- 新卒入社した会社にて全文検索システムの開発にて約6年間使用した(Java5.0 - Java7.0)
- Hadoop/Solrを用いた分散検索システムの開発に使用した
Python3.7(使用歴 3年)
- TypeHintで型を記述した開発を実践
- 単体テストにはpytest、パッケージ管理にはpoetryを使用
- APIGateway + Lambdaを使用してAPI開発
- SQLAlchemy(ORM) + MySQL + Elasticsearch を用いてAPI開発
- Linterにflake8/black/isort/mypy/pre-commitを使用
TypeScript (使用歴 2年)
- ヘッドレスブラウザを使用したクローラー実装に使用
- PM2 + Expressを使用してクローラーのAPIサーバーをEC2上に構築
- Lambda上でPuppeteerを使用ヘッドレスブラウザクローラーを実装した
- Nuxt.jsを用いてフロントエンドのSPAのロジック実装
- Linterにeslint/prettierを使用
PHP (使用歴 1年)
- 他社の社内システムの開発にて使用
- Laravel + Eloquent + MySQL + CloudSearch を使用した開発経験
- LinterにPhpcs + PhsStanを使用
Go (使用歴 1年)
- 趣味で使用する言語
- ゼロから作るディープラーニング1をGoで実装した https://github.com/tMinamiii/deep-learning-from-scratch-go
- Pocketに保存した記事をCLI検索するtoolを実装した https://github.com/tMinamiii/pick
- Linterにgolangci-lintを使用
職務・案件経歴
期間 | 会社名 | 案件 | 役割 |
---|---|---|---|
2019年6月 - 現在 | エディプレックス株式会社 | スマホアプリのサーバーサイド開発 | バックエンド・インフラエンジニア |
2019年2月 - 2019年6月 | 同上 | 社内情報管理システム | 同上 |
2018年12月 - 2019年1月 | 同上 | 画像解析システム | 同上 |
2018年2月 - 2018年11月 | 同上 | Webクローラー開発・保守画 | 同上 |
2015年3月 - 2018年1月 | - | - | - |
2009年4月 - 2015年2月 | 株式会社日立ソリューションズ | 文書検索パッケージソフトの開発 | パッケージプロダクトエンジニア |
エディプレックス株式会社
スマホアプリのサーバーサイド開発 (2019年6月 - 現在)
主な取り組み
- APIサーバーの設計と実装
- サーバーレスインフラ構成
- CodePipeline CloudFormationやGitHub Actionsを用いてCI/CD環境の構築
- エンジニアとしてMTGなど顧客と仕様検討したり、スケジュール調整したり、顧客情シスと連携したりとフロント業務も兼任
APIサーバーの設計と実装
- APIのロジック実装
- 言語はPython3.7
- 単体テストは1000ケース以上、カバレッジ85%以上を達成
- MySQLの使用
- ORM(SQLAlchemy)+MySQL(Aurora)を用いてRDBを使用した
- データ構造を意識して、テーブル設計をしたことで、クエリの複雑化を防いだ。
サーバーレスインフラ構成
このインフラ構成はAWSが推奨するベターな構成ではない。 しかし、顧客要望を突き詰めていった結果たどり着いた構成です。 正しいアーキテクチャが、顧客の要望にマッチするとは限らないのが辛いところでした。
- API Gateway + Lambda + RDS + Elasticsearch で APIサーバー構築
- Elasticsearch Serviceでシノニム作成、カスタム辞書作成
- MultiAZ / Public+Private Subnet / NAT Gateway
- AWS SAM / CloudFormation を利用してインフラ構築・Lambdaデプロイのコード化
OpenAPIによるドキュメント化
- APIを一つ追加するたびに必ずOpenAPIを記述
- ドキュメントのスキーマとPythonの実装が一致するようテスト実装
- VSCodeの拡張を活かして、yamlを分割管理することで保守しやすくした
- OpenAPIにAWSのデプロイコードを埋め込みAPI Gatewayとも連携させた
CI/CD
- Pull Request時にGitHub ActionsでLinterや単体テストを実行(テストをパスしないとmasterにマージできない)
- 各ブランチにマージすると, dev/stg/prod環境に自動デプロイされる仕組みを構築
成果・実績
- 単体テストを拡充することでリリース後大きな問題もなく稼働し続けている
- デプロイを自動化やIaC化したことで手作業によるデプロイミスを0にした
- OpenAPIのドキュメントを継続維持することでフロントエンドやPMへの説明資料にもなり、納品物にもなり、外部のセキュリティ診断時の提出資料にもなり作業の効率化を図れた
- データ構造を意識して、テーブル設計をしたことで、クエリの複雑化を防いだ結果、リソースを消費を抑えてバッチ処理を実行できた
社内情報管理システム (2019年2月 - 2019年6月)
主な取り組み
- Laravel + Vue によるフロントからバックエンドまで実装
- バラバラの資料から要件を整理
- 要件にあったデータベースのテーブル設計
- データ集計のバッチ処理実装
成果・実績
- 長年ストップしていた開発を始動させプロトタイプ開発まで完成させた
- 実現したいことを整理し、それに則したテーブル設計をおこなったことで、ばらばらになったデータをRDBに収めることができた
- さまざまなサービスやインフラを利用しており、フロントもシステムも開発に苦戦していたのでローカルで議事環境を構築した
- 極力手作業をしないため繰り返し行う作業は全てコード化した
画像解析システム (2018年12月 - 2019年1月)
主な取り組み
- Python, Nuxtjs, TensorFlowによる物体検知
- デモ画面のフロントエンド実装
- 機械学習・ディープラーニングの技術調査
- TensorFlowAPIを使った物体検出の転移学習
成果・実績
- 実現できるかわからない研究的な案件に対して、進行方法を提案しプロトタイプ製作まで取り組むことができた
- 動作するプロトタイプ実装まで達成できた(画像をアップロードすると、物体検出し、画像を抜き出してOCRし、文字を抜き出す)
- ただしスケジュールや予算が会わずプロジェクトは中断・譲渡となった
Webクローラー開発・保守 (2018年2月 - 2018年11月)
主な取り組み
- ヘッドレスブラウザをつかったスクレイピングを実装
- ロジックやインフラ、DBテーブルを見直して安定化
- AWS Lambda化によるコスト削減、スケールアップ
- 管理画面の高速化
成果・実績
- 以前は、毎日のように不具合報告が来ていたいけれど、1-2年おおきなトラブルはなくなった
- 非対応だったWebページも取得できるようになり、デイリー5万件だったデータが、15万件まで取得できるようになった
- クリックすると固まってしまう状態だった管理画面を、正常に使えるようにした
- バックエンドエンジニアですがTypeScriptの社内初導入
空白期間 (2015年3月 - 2018年2月)
- エンジニアとしても社会人としても自信を失い自分を見失った期間
- それと同時に自分を見つめ直した期間
- 精神的に不安定になった期間
復職と心療内科への通院開始 (2017年9月 - 2018年2月)
- 現在も月1ペースで通院中
- 病名を言われたことはなく、環境・性格など、長年積み重なって不安定な状態になった
- 風邪のように急な完治はなく、徐々に緩和するけれど一生のおつきあいと言われている。また自分もそれを受け入れてバランスを保てている
- 通院とお薬で基本バランスはとれており、こまったら直ぐ相談できる環境を保っている
- 復職後に無断欠勤したり、長期間仕事ができなくなったり、仕事に支障をきたしたことはない
株式会社日立ソリューションズ
文書検索パッケージソフトの開発 (2009年4月 - 2015年2月)
主な取り組み
- 大量のバグ修正を行った
- Javaのヒープメモリ不足を解消。
- 複数の検索エンジンのクエリを生成するフレームワークの実装
- Jenkinsによる単体テスト自動化、ビルドジョブの作成
- Hadoopを使用したクローラーのエラー処理実装・バグ修正
成果・実績
- 影響範囲を調査しながら慎重にバグ修正するスキルを身に着けた
- 生存期間の長い変数に大きな値を設定しないなど、GCを考慮したプログラミングができるようになった
- クラス図を用いた設計ができるようなった
- 分散処理に関する基本的な知識が身についた
自己PR
待たない姿勢
自分に作業が割り振られるのを待つのではなく自分から考え、行動することを心掛けています。悪手でも、下手でも、変な目でみられても、放っておいたら仕事が止まると判断したら声をかけたりフォローしたりして、円満に進むよう心掛けています
作ると決めたものは手を尽くして完成させる
自分の中でやると決意したことは、様々な手を尽くして完成に導きます. アドバイスをもらうために自分の意見をぶつけてみたり、顧客に質問したり、MTGを設定したり、やれることを全部やるよう心掛けています。
他人説明できるよう心掛けて実装しています
技術選定、各種設計、実装などをする際は、顧客や社内の人間にたいして説明できるだけの理由を添えて仕事するよう心掛けています。 「なんとなく」、「いつもどおり」、「流行っているから」といった適当な理由で物事をすすめないようにしています。 かっこいいコードやすごい設計をすることではなく、とにかく名前付けに注意しています。名前で嘘をつかないことが一番リーダブルだと思っています。
新しい技術で開発した経験
スケーラビリティを求められる案件に関わったことから、AWSのLambdaなどサーバーレス環境の開発をしました。 またフロントエンドの開発にも多少関わることがあったため、Vue/Nuxtを会社に導入しました。PythonではTypeHintやpoetryをつかい、Node.js開発ではTypeScriptを用いるなど、時代遅れにならないよう心掛けています。
やれること・やりたいこと
得意な業務・技術
- バックエンドのシステム開発が得意です
- バッチ処理の実装
- APIの実装
- ビジネスロジックの実装
- AWSを使ったクラウドインフラ構築の経験が得意です
- MultiAZ / Public+Private Subnet / NAT Gateway
- API Gateway + Lambda + RDS + Elasticsearch で APIサーバー構築
- S3 + CloudFrontいよる静的サイトホスティング
- CodePipelineによるデプロイ自動化
- Nuxt(Vue)+TypeScriptでフロントのロジックの経験もあります
- HTMLとCSSは用意してもらい、そこにロジックを加えて動的する
経験がすくない業務・技術
- HTML/CSS描画関係の経験
- Webサービスの開発経験
- 健全なチーム開発経験
このさき(3-5年)やってみたいこと・挑戦してみたいこと
- チームを強く意識して働き、そしてチームビルディングに挑戦したい
- エンジニアとして強みになる技術の軸を1つ作る
- エンジニアに軸足をおきつつ、多くの人とかかわり、多くのドメイン知識を学びたい
- 技術的負債を返済していく業務
チーム開発の経験とチームビルディング
- 健全なチームで同じゴールをみつめて一丸となって仕事をしたい
- 知識・考え方の偏り、体力的・精神的の限界など一人の限界を感じた
- 自分のチーム、他のチーム、多くの人と関わり知見を得たい、尊敬できる人・相談できる人と出会いたい
- その経験や知見をいかして自分のチームビルディングをしたい。インターンのメンターなどやってみたい
エンジニアとして強みになる技術の軸を1つ作る
スポットで手伝うことが多かったため器用貧乏です。確信をもってこれが強いというスキルがぱっと思い浮かばない。そこで色々なことをやってきた経験をベースに何か一つ強みとなる技術を身に着けたい。
- 高トラフィックなシステムに挑戦してみたい
- 社内システム、バッチ処理、イントラネット内システムなど、低トラフィック・ユーザー数が限定されるシステムが多かった
- インフラの性能をすべて引き出すような高トラフィック環境にチャレンジしてみたい。
- 検索技術に回帰して知識を深めたい
- 社会人スタートが検索システムの開発だったが、つねにバグFixだったので深堀りできなかった
- 大量の情報から、欲しいものを絞り込むというのはどんな場面でも欠かせない技術だと思っている
- 仕組みを学びつつチューニングや、検索インフラ基盤の構築してみたい
エンジニアに軸足をおきつつ、多くの人とかかわり、多くのドメイン知識を学びたい
- 私たちの作るシステムは世の中の写し鏡であるため、システムを適切につくるには現実を知る必要があると思っています
- 多くの人と関わり話し合い、意見や経験談を聞き、ドメイン知識を深めたり広げたりすることで設計力をたかめていきたい
- 豊富なドメイン知識をもとに様々な開発に関わり役立てる良ような人物になりたい
技術的負債を返済していく業務
- 技術的負債という単語はマイナスイメージだけど、焼け野原だと思っていて、筋さえ通っていれば何でもチャレンジできる環境
- 関係者と調整したり、相談したり、よい返済方法を模索したりと、チャンレンジがうまっている
- 負債を返済することで、若い人が仕事したいと思えるような環境を整えたい
好きなこと・嫌いなこと
好きなこと
- 自分が作りたいと決めたらなんでもやるよう心掛けている
- 自主的に問題を見つけて、解決していくことが好き
- 研究よりもプロダクトを世に出すこと。価値をだすことがすき。
- お客さんと会って話すことに抵抗はないです。時には顧客と直接話して知見を深めたい。
- 不安定なものを、安定化させるのがすき(ひたすらバグ修正やっていたから)
- 整理したり、整備したり、改善したりってのは好き
- チームを大事にしたい。頑張る人のために頑張るのが好き。
- プログラミング言語の強いこだわりはない(ただし、なにか一つ軸になる言語が欲しい)
- バックエンド・インフラ好き
- なるべく長く働きたい
嫌なこと
- 余裕がない、過度なマルチタスク
- 日中: 顧客の窓口 / 仕様に関するMTG / プロジェクト管理 / チーム管理
- 夜:フリーランスの対応
- 夜中: 日中の指摘事項の修正 / 追加機能開発
- 過度な命令・過度な管理
- 孤独に作業するリモートワーク
- しばらく2次受けの仕事を一人で行っていた(1次の会社のSlackでゲストとして作業していた)
- コロナ前は、それでも出社して雑談などできていたので孤独は感じなかった
- しかしリモートになってから完全に孤立してしまい、社内の人間と話をする機会が完全に絶たれてしまった
- このような環境で働くのは辛いなと最近感じました
- 人の出入りが多い環境
- 中途半端に終わらせる仕事(結果もフィードバックもなくやりっぱなしで終わる仕事)
- 何も手を加える機会が一切なく、現状のシステムを延々と保守するだけの仕事
- 誰かを不幸にしたり、誰かを騙したり、誰かが不利益を被るようなコンテンツを扱うシステム開発
学歴
奈良先端科学技術大学院大学 情報科学研究科 情報処理学専攻 2007年4月 - 2009年3月
ユーザの動作類似度に基づく共通鍵生成法(加速度センサーを用いて、似たている動作からパスコードを生成する研究) https://ci.nii.ac.jp/naid/110007338494
会津大学 コンピューター理工学部 (2003年4月 - 2007年3月)
資格
- TOEIC 650点 2014年2月
- 応用情報技術者 2009年6月
- 基本情報技術者試験 2005年5月