株式会社ジャステック / ソフトウェアエンジニア
Vue.js、Node.js、PostgreSQl勉強
新しい配属先でVue.js、Node.js、PostgreSqlを使うと聞いていたので、自分で書籍を購入し独学し、簡単なCRUDアプリを作成することができるレベルまで、短時間で到達することが出来た。
400万人が利用する会社訪問アプリ
株式会社KMC / ソフトウェアエンジニア
■最大の強み 私の最大の強みはデバッグ力であり、特に原因箇所を迅速に特定する能力に自信があります。これまで、品質の低いコードやテストコードが導入できないようなひどい状態のコードベースを相手にしてきましたが、その経験を通じてバグ修正能力を高めてきました。
手を動かすエンジニアとしてのスキルをさらに向上させ、最終的には顧客折衝から開発、運用までをすべて回せるエンジニアになることを目指しています。企業により大きな利益をもたらすエンジニアとして成長し続けたいと考えています。
製造業のDXを推進するソリューションを提供しているベンチャー企業のソフトウェアを作成しています。Java, JavaEE, JQuery, VB.NET, MySQLを使用してバックエンド、フロントエンド、windowsアプリの作成をしております。 人数の少ない会社なので、バックエンド、フロントエンド、windowsアプリのすべての作成を行っております。
## チーム構成 - プロダクトマネージャー(PdM):1 名(主に指示‧監督) - 開発者:1 名(私) ## 技術環境 - 使用技術:Java, JavaEE, VB.NET, JavaScript, jQuery, MySQL, JPA, Linux, AWS - 業界:製造業 ## プロジェクトの背景 - 既存コードの品質低下により、機能追加が困難な状況 - 単独での開発と設計責任 ## 課題と解決策 - 新規機能や追加機能の開発に際し、既存コードの改善が必要となったため、あまり一般的には良くないが、既存コー ドのリファクタリングと新機能開発を並行して進めた。 - 既存の処理に同様の処理がある場合でも、その質が良くないことが多かったため、ゼロベースでコード品質を評価 し、劣ったコードから学ばないよう注意しながらコーディングを行った。 - 既存の機能では、エラーメッセージの数を減らすために共通のエラーメッセージが使い回され、エラーメッセージが 具体的でない場合や、ユーザーが操作しても反応しないように無効化されている箇所が多かった。そのため、ユーザー フレンドリーなバリデーションエラーメッセージを実装し、エラー発生時にユーザーが取るべき次のアクションを示す ような設計に努めた。 - 標準的でない方法を取っている処理に対するコメントが少なかったため、その処理内容がなぜ書かれたのかを示す意 図コメントを残し、後でコードを見ても理解しやすくした。 - 既存のコードではコピー&ペーストが頻繁に行われ、同じ処理が多くの場所に散在しており、保守性と可読性が低下 していました。これを解決するため、コードの共通化を進め、メソッドを適切に分割しました。 - Backlog の運用方針が定まっておらず、本番環境での障害発生時に問題の原因となった修正を特定するのに多くの時 間を要していた。これを解決するため、課題とコミットログを関連付け、ステータスなどを Backlog で適切に管理する 運用方法を文書化し、プロジェクトに適用した。 ## 成果 - 予定よりも大幅に早い開発進捗 - 予定されていた 4 名の開発チームにも関わらず、単独での開発を成功させる - コードの共通化により開発速度の向上 - 同様の処理の重複を減らし、効率的な開発を実現
### 既存機能のバグ修正 - 複雑で品質の低い巨大コードベースのバグ修正 ### 学んだこと - 低品質なコードの場合、デバッガーを早期に使用してバグを特定する方が効果的 - バックエンド、フロントエンド、Windows アプリケーションに分散したロジックを扱う際は、API リクエストの JSON 内容を早期に確認 ## 結果 - バグ修正速度が 3 倍に向上。以前は 1 つのバグ修正に要していた時間で、3 つのバグを修正可能に。
Spring Batch Java PostgreSQLを用いたバッチ処理システムの開発
## チーム構成 - プロダクトマネージャー(PdM):1 名 - 開発者:5 名 - 他部門スタッフ(Web 部分とデータクレンジング担当):6 名 ## 技術環境 - 使用技術:Java, Spring Batch, PostgreSQL, MyBatis, Linux, Bash (Shell) - 業界:エネルギー業界 ## プロジェクトの背景 - 参画時点でのプロジェクトの遅延 - Spring Batch と Java の専門家不在 - メンターや技術指導者の不在 ## 役割と責任 - エンジニアリングとマネジメントの兼任 - 一部技術選定 - Spring Batch のフレームワーク部分の実装 - 協力会社のマネジメント - ビジネスロジックの実装方針の立案 - コードレビュー ## 課題と解決策 - 技術選定の未確定問題の解決。フレームワークとして Spring Batch の使用は既に決まっていたが、ORM などをどれ を使用するか決まっていなかった。チームメンバーのスキルを確認したところ誰も ORM を使用したことがなかったの で、厳格な ORM である JPA の使用は早期に選択肢から外した。その中で Spring JDBC と MyBatis が候補に残ったが、 SQL に長けた開発者がいる場合は、SQL の部分が別ファイルに分かれていた方がコードの競合が起きないため便利か もと思い、MyBatis を採用した。→ 結果、SQL がとても得意で Java が全く書けない開発者が途中からジョインしたが SQL の部分だけを効率的に書いてもらうことができた。 - Java を扱える開発者がチームにいなかったため、本来はコードの可読性や保守性の観点から Java の方で処理するべ き問題でも SQL の方で処理した方が今回の開発ではよいかと思い、SQL 側に処理を寄せるようにしました。 - 詳細設計の段階でも基本設計レベルのテーブル定義が揺らいでいたので、エンティティクラスをテーブル定義から動 的に生成できる仕組みを MyBatis Generator で作成した。さらにテーブル定義だけではなく、CSV の変更を管理できる 方が便利だと考えたので、CSV の構造を一度 SQL で DB に入れて、そこからリバースで CSV のエンティティクラスを生 成するようにしてエンティティクラスの実装時間を短縮した。 - 運用は別の会社の運用部隊が行うことが決定していたので、リランとリカバリーを容易にする必要があった。そのた めには一つのトランザクションで処理する必要があった。Spring Batch ではチャンクモデルとタスクレットモデルの 両方があるが、タスクレットモデルでは、1 トランザクションでの処理機能のみを提供している。タスクレットモデル では自由度の記述が高い書き方だが、読み込みや書き込みの処理を別のファイルに分割することはできない。そこでド キュメントなどには載っていなかったがチャンクモデルコンポーネントをタスクレットモデルの中で呼ぶ処理をライブ ラリのコードを読みながら実装した。 - Web チームとのコミュニケーション不足を解消するためには、まずはランチなどを行ったりして、業務外での交流を 通じて関係を築くべきだと考え、ランチを一緒によく行った。 ## 成果 - 2 ヶ月の遅延を最終的に 2 週間に短縮。 - 四半期 360 度評価で 5 段階中 4 の評価を 2 期連続で獲得。
VBAで書かれた既存の社内会議室予約システムが非常に重く使いにくかったので、上長に相談して工数を確保してもらい、新規開発した。新規開発にあたり同僚にヒアリングを行った。 皆動作が重いことに不満を感じていたので、動作を軽くすることを第一目標に作成した。仕様を固めてからコーディングするのではなく、すぐにサンプルを作成して、見てもらい、修正するアジャイル的な方針で開発し、使用者が欲しいものとずれがないように意識しながら作業に取り組んだ。 その現場を離任した後、社内の正式な改善活動の一環として、他の人に引き継がれ運用されている。
新しい配属先でVue.js、Node.js、PostgreSqlを使うと聞いていたので、自分で書籍を購入し独学し、簡単なCRUDアプリを作成することができるレベルまで、短時間で到達することが出来た。
専門分野の経営学に関して、履修するだけではなく、面白いと思った他学部の授業も積極的に履修した。
株式会社ジャステック / ソフトウェアエンジニア
新しい配属先でVue.js、Node.js、PostgreSqlを使うと聞いていたので、自分で書籍を購入し独学し、簡単なCRUDアプリを作成することができるレベルまで、短時間で到達することが出来た。