更新日時 : 2019/10/01
名前 | 守屋洋平 |
住所 | 東京都中野区弥生町 |
エンジニア歴 | 2年 6か月 |
GitHubアカウント | ya-mori |
大学で画像処理の研究を専攻した後、現職の特定派遣会社へ新卒で入社し機械学習エンジニアとして勤めています。入社して、1年半は サーバサイドやフロントエンド の Web開発を行いました。その後、3か月ほど機械学習を学び、現在は広告の売り上げ予測を行うシステム開発を行う業務をお客様先で行なっています。
業務経験のあるものを列挙しています。
Python3, Java8, Kotlin, TypeScript, GraphQL, SQL, HTML, CSS, JavaScript, Coffee Script, shell script(Linux)
Server
: Flask, Spring Boot(Spring MVC, Spring JDBC, Spring Security), Ktor, Servlet/JSP, JSP(JSTL), Node.js, grahpql-java-tool, Gradle, Maven
Machine Learning
: Pandas, Numpy, matplotlib, seaborn, scikit-learn, TensorFlow, Keras, LightGBM, HypterOpt, Pipenv, direnv, Make
Front
: Vue.js, AngularJS, PhantomJS, jQuery, Tymeleaf, Ajax
Test
: Junit, Test Cafe, Pytest, Selenium, JMeter
AWS
: ES2, ECS, DynamoDB, SQS, S3, RDS(MySQL), Aurora
GCP
: AI Platform, Cloud Storage, Cloud Build, BigQuery, DataStore, Pub/Sub, DataFlow, GKE
Other
: MySQL, PostgreSQL, ClickHouse, CircleCI, Nginx, Tomcat, Apache Beam
Git Hub, Bit Bucket
Docker, Docker-Compose, Anaconda, Jupter-NoteBook, Swagger, Trello, IntelliJ
2017年4月にWebエンジニアとして入社し2017年9月までJava, JavaScript, RDB, SQLなどWeb開発に必要な技術を研修として学びました。
下記は研修後、客先常駐として携わった案件です。
概要
経済情報を配信するBtoC向けのプロジェクトに参加して、サービスのサーバーサイドとWebフロントエンドで、バグの改修や新機能の要件定義・開発・テストまでを行った。
タスクの粒度が大きく、細かい仕様を決めることは自身で決めるなくてはならなかったので、ユーザー視点になって、UXを損なわないように努めた。
使用技術
Java8, Kotlin, SQL, HTML, CSS, JavaScript, Coffee Script, shell script(Linux)
Spring Boot, Gradle, Maven, jQuery, Tymeleaf, AngularJS, Bit Bucket, Docker, Docker-Compose, Swagger, Trello, IntelliJ , ES2, DynamoDB, SQS, S3, Aurora, Nginx, Tomcat
担当業務
-
RESTAPI・DB・フロントの設計・実装の実施
サーバーサイド Kotlin, Spring Boot(Java8) などを使ってWebアプリケーションの開発を行なった。
機能の追加を行うために、要件と画面デザインを元に、データベースのスキーマからフロントエンドまでの設計・実装を行った。本格的なシステムの設計や実装は未経験であったが、既存のシステムの設計や実装を良く理解してアーキテクチャに従った実装を行うことを意識した。その結果、ソースコードの可読性や拡張性を損なわなずに拡張することが出来た。 -
要件定義 → デザインドック・ユースケースの作成
ビジネスサイドの要求をヒアリングして、デザインドックを作成した後、ユースケースまで落とし込んだ。技術的に可能な事項とビジネスサイドの要求を吟味して、落とし所を決めることで、スムーズな開発が可能になった。 -
結合テストの実施・仕様書の作成
画面定義書や、動作の仕様書を取りまとめて、仕様の明示化に努めた。
また、テストケースを元に、ネイティブアプリとWebアプリの双方の結合テストを実施した。バグを発見した際には、そのまま報告をするのではなく、開発担当者のデバック時間をなるべく減らすように、動作やログを分析して原因の切り分けをしたうえで報告を行った。 -
プロモーション用のランディングページの作成
イベントのプロモーション用に HTML + SCSS を使って、ランディングページを作成した。成果物
複雑なレスポンシブルなデザインを短い期間で実装することを要求されたが、素早くキャッチアップを行い、デザイナーと綿密な連携をすることで、スピード感をもってリリースを行うことができた。
概要
ASPシステムの開発を行うプロジェクトの立ち上げフェーズに参加した。
そこで、Kotlin + Ktor を使ってGraphQLAPIサーバーの開発をメインで行った。
使用技術
Kotlin, Ktor, TypeScript, GraphQL, SQL, Python3, ECS, DynamoDB, S3, RDS(MySQL), Vue.js, Junit, Test Cafe, Git Hub, Docker, Docker-Compose, IntelliJ
担当業務
-
GraphQL APIの基本設計・詳細設計・実装・デバック・テスト・コードレビュー
Ktor + graphql-java-tools を利用して GraphQLサーバーを実装した。
GraphQLを業務で取り扱うのは初であったが、手を動かしながら素早くキャッチアップを行なったことで、設計を任せていただき、GraphQLスキーマの設計から実装、テストフェーズまでを一括で担当した。その設計では、GraphQLを使う利点を活かす為に、ドメインモデル同士の依存をなるべく疎にすることで、拡張がしやすい設計を意識をした。
また、 CI上の自動テストとCleanArchitectureを採用することで、それぞれのレイヤーで単体テスト自動実行することが可能になり、コードの品質を担保することができた。さらに、Test Cafe を使ったE2EテストをCIに導入して、よりシステムを安定して提供する環境を整えた。 -
開発環境の構築 および自動化 新規で立ち上げのプロジェクトであったために、環境構築などにトイルがとても多かったので、実装の空き時間を利用して、それらをなくす業務にも取り組んだ。
まず、 Localの開発環境用にシステムで使用しているミドルウェアの DockerImage を導入することで、Localの開発環境の仮想化を行なった。また、開発用のデータが統一されていなかったので、Localのデータベース用にコンテナを起動した後にマイグレーションを自動的に実行するため仕組みを実装した。
こういった取り組みによって、チーム全体が本来の開発に集中できる環境を整えることが出来た。
概要
大手広告代理店で、広告の売り上げを予測するプロジェクトに参加した。
売上予測のAPIの開発や、前処理用の分散処理を実装したりなど、MLOpsやDevOPSといった業務を中心に行った。
使用技術
Python3, Flask, Pandas, Numpy, TensorFlow, Keras, Pipenv, direnv, Pytest, Make, Apache Beam, AI Platform, Cloud Storage, Cloud Build, BigQuery, DataStore, Pub/Sub, DataFlow, GKE, Git Hub
担当業務
-
予測APIの開発
Flask + CCP AI Platformを使って、機械学習モデルの予測結果を返すAPIの開発をした。
既存のシステムでは、リクエストを同期的に処理するAPIが運用されていた。そのAPIでは、しばしばメモリーがオーバーフローしたり、リクエストがタイムアウトになってしまうことがあるのが課題であった。そこで、キューを使用して予測の処理を非同期化することを提案した。しかし、実際に実装をしてみたところ、データをベクトル化するための前処理もボトルネックになっていることが判明した。なので、前処理を Apache Beam と GCP DataFlow を使った分散処理で実装することにした。こういった検証と実装を繰り返すことで、現実的に利用できるオンライン予測を行うAPIを構築することができた。 -
CIの導入
チームに参加したタイミングでは、ビルドやデプロイなどが手動で運用されており、属人化されている状態だった。この状態では、長期的に考えてとても効率が悪いと考えたので、 Cloud Build を使ったCIの導入を提案して実際に実装も行なった。このように、システム全体のビルドとデプロイを自動化することで開発効率がとても向上した。
自ら進んで業務を遂行する 自走力 に自信があります。
これまでの業務でも、現在のチームの状況を俯瞰的に整理して、今必要なことを提案して遂行することで、お客様に評価をしていただいてきました。また、常に技術的な情報を収集するようにしているので、そのチームにとって最適な技術的な提案と業務の遂行ができるようになっていると考えています。
多くの人に影響があるサービスに携わりたいです。
人々の生活にある課題を技術を使って解決することがエンジニアという仕事の一番のやりがいだと思っています。なので、人々の生活の基盤になるようなシステム開発に携わりたいと考えています。