# 社内技術支援基盤の開発
## 概要
StackOverFlowから着想を得たイントラネット限定の質問投稿アプリの開発に従事していました。スクラッチ開発ではなく、質問投稿WebアプリのOSSを社内用に改修する開発でした。
## プロジェクトの特徴
開発期間が2か月で固定されており、素早い開発が求められていました。そのため、スクラムをベースの考え方に置きつつ、タスク管理にカンバンを運用を行っての開発を実施していました。一般的なスクラム開発の相違点は、開発期間が短くその後チームが解散することが想定されていたため、チームの成長という観点は重要視していなかったことです。各人が効率よく仕事を終わらせることを基本的な考え方としてチームが動いていました。また、保守開発者用のドキュメントを手厚くしておくことも重要視していました。
インフラからデザインまで幅広い分野の知識が求められ、かつ開発チームが5名であったことから一人に求められる技術スタックが幅広かったことも特徴の1つです。
## 自身の担当範囲
チームにおいて自身は主に以下の3つのタスクをメインで担当していました。
* 開発環境構築
* UI・UXの改善
* サーバサイドの開発を含めた機能追加
## 開発環境の構築
開発初期は環境構築を行っていました。開発環境は以下の構成で組まれていました。
* Jenkins(CI/CD)
* Wekan(タスク管理ツール)
* GitBucket
* Apache HTTP(プロキシサーバとして利用)
またこれらの環境は自社のサーバホスティングサービスを利用して構築しておりそのOSはCentOSでした。
環境構築の中で自身はJenkinsサーバの構築とJenkinsパイプラインの記述を行っていました。Jenkinsはスレイブのいない単一の構成でした。
### 自身が突き当たった課題、技術的に難しかった点
Jenkinsパイプライン構築を行う上で、Linux系OSの操作方法やネットワーク周りの基礎的な知識が求められていました。当時は基礎的な知識もなかったため、自身の知識不足が大きな課題となりました。
しかし、チーム内でインフラやOSの知識が豊富なメンバーがいたため、そのメンバーから必要な知識を吸収しながらタスクを実施しました。また、業務内での知識吸収には限界があったため、「チーム開発実践入門」や「CentOS 7システム管理ガイド 」などを読了し知識吸収に努めました。
最終的にGitBucketのdevelopブランチをポーリングし、テストやチェックスタイルを実施、開発用サーバにJar(Webサーバとして組み込みTomcatを使用)をデプロイするJenkinsパイプラインを構築しました。
## UI・UXの改善
本プロジェクトで用いていたOSSではテンプレートエンジンとして、`Apache Velocity`を用いていました。
### 自身が突き当たった課題、技術的に難しかった点
UI・UXの改善には個人やチームで正解を定義することが難しかったため、サービスを部内で限定公開し、改善ポイントの収集を行いました。
短納期のプロジェクトの性質上、改善ポイントに対する改善案の提案を素早く行う必要がありました。そこで、デベロッパーツールを利用しCSSやHTML編集し、スクリーンショットをとり、チャットツールを用いて改善案を提案、改善案の議論が十分にできた段階でコーディング、コミットするという開発のフローをとることで素早いフィードバックを得ながら開発を進めました。上記により、サービスのローンチまでに上がっていた改善ポイントの改善をもう1人の他メンバーとともに8割以上の回収を行いました。その中で自身は半数程度の改善を行いました。