AWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。

HANDS LAB

HANDS LAB ENGINEERS BLOG

ハンズラボエンジニアブログ

新卒新入社員の仮想プロジェクト、完了しました


大石です。
最近、弊社では専らPokemonGOが流行っています。
23区外にある自宅で何時間もアプリを起動しておくよりも、オフィスで昼休みにササッとプレイする方が捗ります。
うっ、ドードーが捕まえてほしそうな目でこちらを見ている……。

さて、先日、新卒新入社員だけで仮想プロジェクトやってますの中で、研修で行っていた仮想プロジェクトについて書きました。
6月末、仮想プロジェクトを終えましたので、今回はその話を書いていこうと思います。

前回のおさらい

時間と技術面のみの制限だけで自由にシステムを作ることになった新人4名。
自社のオフィスで使える蔵書管理システムをサーバレスで作って、先輩たちをぎゃふん(死語)と言わせてやるんだ……!
バックエンドでAWSを活用してサーバレスに、フロントエンドはPC画面の作成と同時にmonacaを使ってスマートフォンのハイブリッドアプリに挑戦。
果たして、無事に蔵書管理システムは出来上がるのか!?(謎の予告風

蔵書管理システム

誰がどの本を借りたのかを記録し、貸し出し状況を社内で共有できるような「オフィス特化型蔵書管理システム」。
最終的に以下のような機能をリリースしました。

機能

  • 借りる
  • 返す
  • 予約
  • 蔵書の検索・結果の表示
  • 蔵書の新規登録・削除
  • 予約の通知(予約が入るとその本を借りているユーザーへSlackで通知)
  • 人気の本ランキング(1週間に借りられた回数がより多い本を5位まで表示)
  • 本が借りられた履歴
  • ユーザが本を借りた履歴

 

フロントエンド

構成

  • HTML5:マークアップ
  • CSS3/Bootstrap v3.3.6:レイアウトのコーディング
  • jQuery v2.2.4(モバイルはv2.0.3):バックエンドとの通信、DOM処理
  • JavaScript:jQueryでできない処理を行う
  • Monaca:モバイルアプリ(ハイブリッド)の開発プラットフォーム

デザイン

PCの画面↓
BooKing_PC
スマホアプリの画面↓
BooKingiphone
UI・UXに考慮し、操作性に違和感が無いようにボタンなどを既存のアプリと同じような配置にしました。
また、同時に同じ本を借りられないようにするなど、ユーザが通常は行わないような動作をしないようにし心がけました。

バックエンド

AWSの構成

技術要件

  • API Gateway:APIの管理
  • Lambda (Python):DBアクセス、ランキングを定期的に作成
  • DynamoDB:永続データの保存
  • Cognito:ユーザ管理

 

開発方法について

スケジュール

  • 企画立案・決定:4日
  • プロトタイピング・設計:4日
  • α版実装:5日
  • 基本機能実装:8日
  • 付加機能実装:3日
  • テスト:5日
  • リリース・運用:2日

実際に作業できる日数は31日でした。
やはり実装に手惑い、テストが押せ押せな感じに……。
とはいえ、じっくり実装したおかげか致命的なバグはあまり無く、なんとかなったように感じます。

開発での技術的課題 フロントエンド

  • HTML, CSS, JavaScript (jQuery):研修で一切やらなかったため、慣れるまでに時間がかかった
  • OS依存のバグが、iOS、Androidそれぞれ1件ずつ発生した。どちらも実装方法を変えることで対処できた(重大なものは無かった)
  • 時間的制約でユニットテストができなかった

 

開発での技術的課題 バックエンド

  • 当初はAWS SNSも用いたプッシュ通知を予定していたが、時間の制約のため断念

 

チーム開発する上での課題

  • 共有不足:API仕様書の更新時の周知などができなかった。その解決策として朝礼、夕礼、昼休憩後など、細かに共有の時間を設けた
  • レビュー不足:UI設計やAPI設計など、設計者の一存で決まってしまったところが多かった

 

先輩社員の反応

6月末、先輩たちに向けてこの仮想プロジェクトの最終発表を行いました。
無事出来上がった蔵書管理システムを見た先輩たちから、褒め言葉をもらうことができました!1ヶ月半の短い中でこんなすごいものが作れるとは思わなかった!と。
さすがに死語であるぎゃふん!とは言わせることはできませんでしたが……(笑)

研修を終えて

研修を終えた今、私たちはそれぞれチームに配属が決まりました。
情報系卒の2名は既に業務に入っていますが、非情報系2名(うち一人は私)は実際の業務に近いことを演習のようなスタンスで勉強しています。
PythonでLambdaを書く日々が、黒い画面でシェルスクリプトを書く日々に変わりましたが、勉強が大切であることには変わりません。
日々の業務に追われる前に、様々なことを身につけていけたらなーと思います。