## プロジェクト概要
グループ会社間で利用する発注ワークフローシステムの開発
【主なシステムの流れ】
下記のようにワークフローが流れていくシステムで画面数が24つほど、
他にもメール送信機能や、帳票プレビュー機能、SAP連携機能などがありました。
①発注担当者が発注書に必要な情報を画面ごとに入力していく。
→ 発注するもの・ことを明細単位で入力できる。(納入日や金額、税率や外貨など入力可能)
→ 仕入れ先の入力、必要なファイルの添付 など
②発注登録が完了した後、承認者が承認することができる。(差し戻し、取り戻し、修正などで再度発注登録をやり直すことが可能)
→ 発注書・納品書が取引先に送付される。
③発注に対して納入されたら受入・計上を明細単位で登録することができる。
→ 必要なファイルの添付、納入物の内容が問題ないか(合格・不合格)を選択できる
④受入・計上登録が完了した後、承認者が承認することができる。(差し戻し、取り戻し、修正などで再度受入・計上登録をやり直すことが可能)
→ 支払通知書などの帳票が取引先に送付される。
自分が退場する時には、3つの会社で使用していたが、ゆくゆくはもっと増える予定で月に200近い発注がされるシステムでした。
開発体制は、リリースまではウォーターフォール開発。リリース後はアジャイル開発に近く、月1でバグ修正・新機能リリースを繰り返して行なっていました。
## 担当
バックエンド・フロントエンドエンジニアのメンバーとしてプロジェクトに入り、基本設計書・詳細設計書の作成・修正〜リリース後の運用・保守を担当しました。
他にも新規参画者のフォローや、コードレビュー、不正ログインユーザのログ検知バッチ開発、本番データ修正のSQLパッチ作成なども行いました。
## 使用技術
java8, intra-mart(TERASOLUNA5系, SpringBoot), PostgreSQL, HTML, CSS, JavaScript(jQuery),Git, Linux, MyBatis
## 取り組み
・バグ対応、新規機能追加、機能改修
Backlogチケットで管理されており、1ヶ月で約10~15件ほど対応、
SQL(MyBatis)、バックエンド(java)、フロントエンド(HTML, CSS)、IODBDOC(帳票ツール)、の開発・修正を担当していました。
1人で調査・修正・テスト仕様書作成・単体テストまで行い、内容によってはテーブルを修正することもあり、テーブルの設計からカラム修正・追加、新規テーブルの作成なども行っていました。
新規テーブルの追加やカラムの修正など、テーブルに修正が入る時は必ず既存のデータに影響がないかを調査し、影響がある場合にはデータパッチを作成しリリース後に問題なく動作するようにしていました。
バグの調査には、IDEのデバッグ機能や、GoogleChromeのディベロッパーツールなどを使用し原因を特定していました。
・既存ソースのリファクタリング
既存ではグループ会社間で処理を切り替えるソースコードがif文で分岐されており、自分としては今後会社が増えた時に管理大変・テストが大変、ソースが見えにくい。といったマイナス面が多いように感じた。そのためリーダーに、修正案を提示し採用いただいた。案としては、機能単位でStrategyパターンを使用することでマスタテーブルで機能を管理できるようにし、会社が増えてもソースコードを触らないでマスタテーブルのデータを登録・修正するだけで対応できるように修正した。これによりソースコードのテストも要らなくなり使用する会社を増やす時の対応が容易になった。
・インボイス制度開始による、計算ロジックの追加や、新しい帳票の追加
発注登録時に、担当者が明細の金額を入力することができるため
仕入れ先や税率、外貨(米ドル、台湾ドルなど)、税率(非課税・外税10%・外税8%・内税10%・内税8%・リバースチャージなど)で金額計算が必要でした。
インボイス制度開始に伴いインボイス用の税率計算ロジック(税抜の合計額に税をかける)を新たに追加していました。
計算はJavaScript内でBigDecimalを使用し、明細の金額が入力されたタイミングで計算を行い合計額として画面へ出力していました。
また、インボイス用に新たに帳票が追加されたので、IODBDOC(帳票ツール)を使用して新しい帳票のテンプレートを作成したり、プレビュー機能、帳票作成ジョブなどの追加なども行っていました。
・画面の修正
発注承認後に内容を修正できる機能(「修正」ボタンで対象項目が活性化、「更新」ボタンでバリデーションチェックから更新)や、
発注書などの帳票を送る「メールアドレス」や「送り先の名前」を入力できる画面に新たに敬称を選択できる機能、
送り先の名前を最大10件まで入力できる機能を追加した画面作成など行いました。
「送り先の名前を最大10件まで入力できる機能」に関しては、入力欄にテキスト入力が完了したタイミングで下部に新しい入力欄を出現、逆にテキストを削除したら下部の入力欄が消えるなど動的な対応を行いました。
「発注承認後に内容を修正できる機能」では更新ボタン押下時にバリデーションチェックのAPIを実行後、結果に応じてDB更新のAPIか、元の値に入力欄を戻すという処理をJSで動作するように修正していました。
## 工夫した点
通常5名以上のメンバーが同時に開発をしていたのでGitの管理には気を遣っていました。また、自分以外のメンバーがどのような修正をしているかは自動で入ってくる情報ではなかったので、自分で確認して他メンバーのタスク内容も把握することでコンフリクトやデグレが起きないように気をつけていました。
多い時で100ファイル以上を1チケットで修正する時などあり、他メンバーと修正箇所が重なったり、影響が出そうな時(テーブルのカラム修正・追加、同じAPIを使用している箇所など)にはの会話をしながら認識合わせを行いプルリクエストのタイミングでコンフリクトや手戻りが起きないようにしていました。
新規機能追加やテーブル追加など新しく何かが変わる時も、自分から発信を行い自分がどうゆう修正をこれからするのかをあらかじめ伝えておくようにしていました。
## その他
Gitプルリク時のソースレビューから、基本設計書、詳細設計書の修正・作成、新規参画者のフォロー(システムについての説明や、環境構築のサポート、バグ修正や機能追加のサポートなど)も行っていました。
自分で見つけたバグや・改善余地のある機能などを見つけたときはリーダーに方向しチケットを起票していました。
そのため、自分で起票したチケットはレビュアーとして他メンバーが修正した時に確認などを行なっていました。
ソースレビューは、他機能への影響がないか、改善がちゃんとされるか、不要な処理・無駄な結合がないか、今後見たときに理解できるようなコードを書けているか(変数名、関数名や引数・関数内のコード数、分岐、ループ、コメントの粒度など)、他にも実装できる案はないか、リファクタリングの必要がないかなどを意識して行っていました。