Fusicってなんしようと?What is Fusic doing?

2019/12/02 OJTレポート「Kainetz(経費精算システム)のご紹介」#ウ・宮川レポ

2019年度新卒入社のウ ソク宮川 直也が、当社のOJTで作成した社内システムをご紹介します。

※Fusicでは、エンジニアの新入社員に対し、約半年間の教育制度を導入しています。
 その期間のうち数ヶ月間は、エンジニアとしての技術力向上や、
 一人でクライアントとやり取りができるようになることを目的とし、OJTを実施しています。


================================================


【システム名】
「Kainetz」
「(精算で)懐に熱を」という想いをのせて、カイネツ(懐熱)と名付けました。
「懐が暖かい」という慣用句がもとになっています。

【システム種別】
業務系システム
 


【セールスポイント】

①経理担当者の申請確認作業を圧倒的に効率化するUIデザイン。
②ワンクリックで帳票出力。圧倒的な簡単さ。
③Slack通知で申請状況&金額が分かる圧倒的な安心感。


社内で使用していた「交通費精算システム」を機能改善しました。
「交通費精算システム」とは、いわゆる経費精算システムです。
経費立替申請から申請管理、帳票出力までの一連業務を電子化したシステムです。
しかし、リリースから数年経過し、非効率な仕様や新たな要望があがってきたため、リプレースに至りました。
具体的な課題の一部を紹介いたします。

・登録した申請の最終確認作業に長時間掛かっていた。
・「月締め日」や「申請の差し戻し」の連絡を、個別に手作業でしなければいけない。
・申請者は申請登録後、内容を編集することができない。

主な機能は以下です。


■ 申請/締め以降一覧
作成した申請内容を一覧表示します。
管理側には、申請確認のための検索機能や確認機能を設けました。
また、申請一覧を色分け表示し、視認しやすいようにしました。
・「青:管理者が作成した申請」
・「白:ユーザーが作成した申請」
・「灰:管理者が確認した申請」
 




■ Slack通知
下記タイミングにて、Slackで通知する機能を設けました。
「月次締日前」「月次締め時」「月の全申請確定時」「申請差し戻し時」
通知対象は全社員・個人宛てそれぞれ可能です。
 




■ Excelデータ出力
帳票をExcelデータにて出力する機能を設けました。
シートを分けて、全社員の経費総額、および社員ごとの経費一覧を出力することができます。






【開発期間】
5ヶ月 (6月~10月中旬)


【技術】
Front : HTML, CSS, Materialize(design template), JavaScript, jQuery, jQuery UI
Back : PHP, CakePHP3
DB : PostgreSQL
Tools : Github, Docker, Scrutinizer, Circle CI
API : Slack Web API


ウの感想


【難しかったこと】

困難なことは数多くありましたが、印象に残ったのは次の2点です。


まず、顧客との打ち合わせの進め方です。
システム開発では、顧客の求めているものが明確ではないこと、必要ではない機能を求められることもあります。
その状態のまま、聞いた内容を反映して開発を進めると、開発をするエンジニアも苦しくなります。
また、顧客も満足できない結果になります。
打ち合わせは、単純に顧客の要求を聞いて終わりではないこと。顧客と共に目標を明確にし、必要な機能を考えること。
さらにより良いプロジェクトになるよう顧客に提案することが重要だと学びました。

2つ目は全体スケジュール作成です。
チームで1つのプロジェクトを担当し開発を進めた経験がありませんでした。
自分だけではなく、チームメンバーの能力を想定し、スケジュールを作成することが難しかったです。
実際に開発をしている時、想定より時間がかかったり、技術調査に時間をかけすぎたりしました。


【頑張ったこと】
「20分悩み」を意識して行いました。
新しい技術を学んで使う時に、調査する、悩む時間は20分のみにするというルールです。
それでも解決できなかった時は、先輩に聞いて解決しました。
一人で悩み調査して問題を解決する力をつけることも重要です。
しかし、簡単なことに時間を無駄使いすることは非効率的だと思ったため、意識的に行いました。

また、積極的にチームメンバーとコミュニケーションを取るようにしました。
開発中に苦慮した点を、同じプロジェクトの開発メンバーに相談し、目的を見直しました。
解決方法を探すためには、とても重要なことでした。

【OJTを通して学んだこと】
チーム開発の進め方を学びました。
他のメンバーと一緒に同じ開発環境を構築し、Githubを利用してプロジェクトを管理する良い機会となりました。
メンバーと互いにコードレビューすることにより、きれいなコードを考え、知らない部分を教えあうことができました。
それが自身の成長に繋がったと思います。

また、顧客打ち合わせの重要性を学びました。
求めているものを具体化し、必要なプログラムを作るために、多くの対話が必要であることを学びました。


宮川の感想


【難しかったこと】
設計が難しかったです。
開発前の画面/DB設計と開発中のControllerの切り分けに苦戦しました。
特に、画面/DB設計については、チューターから「既存のシステムに引っ張られすぎ」と何度も指摘を受けました。
「殻を破る」こと、「ユーザーが本当に求めているものは何か」を熟考する良いきっかけとなりました。
また、このタイミングで各ドキュメントを作っておいたことが、開発中、功を奏しました。

【頑張ったこと】
思った以上に難しかった、「報告」と「相談」です。
最初は「内容がまとまっていない」、「タイミングが遅い」もしくは「聞かれてやっと打ち明ける」
という救いようもない状態でした。
常に現状を整理することを意識し、[質問→実行→報告]の流れを徹底しました。
それに伴い、課題発見から解決までのサイクルを短縮することができました。

【OJTを通して学んだこと】
要求定義からリリースまでの一連の流れを経験し、1つのプロダクトを送り出すことができました。
痛感したのは、「何をするにしてもコストがかかる」ということです。
今まで「いかに実装するか」にのみ着目していました。しかし、「何を提供するか」も大切です。
顧客が要求していることは何なのか、本質を見抜き、最短距離で提供できるよう、
今後も意識していきたいと思っています。