おはようございます、chotaroです。
我が家のエアコンは、平成最後のお仕事を終えました。
平成最後の秋は音楽の秋にする予定です(๑•̀ㅂ•́)و✧
さてこの夏、2つほどの機能を持つ小規模なWEBアプリケーションを、Playで組んでリリースしました。 Playに関しての詳細は公式ドキュメントや、弊ブログ内の記事が詳しいので割愛します。
何かとはじめてのことばかりで、初々しく甘酸っぱい経験になりました。
本エントリはその甘酸っぱさを忘れないうちに形にしておくための試みです。
概要
つくるもの
メインの画面は2つ。
- URLパラメータをもとに検索結果一覧を表示する画面
- 検索結果の詳細情報を表示する画面 また、詳細情報の画面から、問い合わせを送る事ができる仕組みと、アクセスログを専用のテーブルに保存する仕組みを実装しています。
つくるひと
メイン担当者はこんな感じのスキルセット
- java 2年半
- swift3 1年
- スクラッチでのwebアプリ開発経験なし
- データベース設計の経験なし
こんなことやりました
DB設計
要件から、エンティティ図を出して、そこからEDMに落とし込んで、というプロセスで設計し、edmを作成。
が、一人ではそもそもエンティティ図の段階で限界があったので経験値豊富な先輩にフォローしてもらってなんとか形に。
Scalaの採用
Javaのリリースサイクルが大幅に変更されるにあたり、既存アプリケーションも大きな影響を受けざるを得ませんでした。
(開発リソース上の問題もあり、モジュールシステムの検証も十分にできてない状況ではありますし。)
せっかく小規模なアプリ開発案件なのだから、実験的にやってみてもいいのではないか、ということでscalaを採用してみました。
Play frameworkの採用
公式で提供されているプロジェクトテンプレートを用いれば動くものが手っ取り早く用意できるので、上述のscalaのトレーニング的な意味も込めて、採用しました。
感想
良かったこと
scala
細かいところを詰めるとわからないことだらけではあるが、javaよりも記法に柔軟性があり、どちらかといえばswiftライクで個人的にとても好印象。
(あと単純に新しい言語を学ぶのはすごく楽しい。)
Play framework
最高です。ドキドキしました。
- htmlからscalaのfunctionを呼び出せる
- 実装の柔軟性が高い
- routesによるurl定義がかなり可読性高くわかりやすい
- webpackのように常時実装とコンパイル、画面の表示結果を確認しながら開発が可能なので、上記の確認も高速でできる
今までmavenやらtomcatやらjspやらの世界にいたのでなんかこう、アツいものがこみ上げてきます。最高。
自分一人で組むならこれ以外の選択肢はない、気がします(ただし、実装者に関する課題点は多々あるのと、多人数で進めるときのテスト戦略は別途検討が必要な印象。)
しんどかったこと
DB設計
とりあえず議論しながら作ってみよう、で進めたがうまく議論が回らず時間ばかりかかり、失敗。
泣きそうになりながら「楽々ERDレッスン」を読んで考えたりしてみましたが、一向に具体的な正解が見えませんでした・・・
最終的に原理原則を知った上でたたき台を作って、それをベースに議論を突き合わせる、でなんとかEDMまでたどり着きました。
先輩には多謝です。ありがとうございました
保守性の問題
WEB自体はスムーズにできたものの、自分ひとりで組んでしまったので怪しい部分がいくつかあります。
箇条書きするとこんな感じです。
- 実装の構造がやや煩雑
- コードに他人の目が入ってないので、冗長なコードになっている可能性がある
- 動きを確認しながら進めていたので、現状は問題ないが、単体テストの充実度低めで改修負荷がやや高い
- (私がこっちにほぼかかりっきりになってしまったので、並行しているプロジェクトのコードも同様に属人化してしまっている)
また、playや基盤の問題として次のようなことがあります。
- テンプレートhtmlへの変数の当て込みがControllerのfunctionを把握してないと書けないので、デザイナーさんやフロントエンドの人にとって難しい印象
- ユーザも絞られているため、最低限の実装のみ具備。→セキュリティや次フェーズの改修、となったタイミングで検討が必要
もう少しうまく作ることでそれぞれ解消できるかもしれず、自分の経験値的な壁を感じました。
今後のこと
この夏の経験を踏まえた学びとしてはこんな感じです。
個人
とにかく、より多く0から作ってみる事が必要
- セキュリティ観点
- 例外のハンドリング
- 実装の責務配置、手スタビリティを考慮した構造化
より美しく、かつ強固なアプリケーションを組めるように経験や知識を得る必要がありそうです。
チーム的な話
- 技術的な負債の解消が前提になる
- 改修決定時のタイミングなどでにペアプロでテストコードを充実させるなど、コモンセンスを広げる施策を打つ必要がある
- いくつか輻輳している状況であっても、レビューとテストファーストの文化を大事にしていく必要があるかも(git-flowとか、サイクルに沿った運営を徹底していくべき)
課題点も含め、得られたものが多く、平成最後の夏は良い夏でした。
いざ実践。
それではこのあたりで失礼いたしますm(_ _)m