日々の振り返りを便利にするwebサービスを作りました

概要

なお、振り返りの項目と内容については、yuzutas0さんの記事を参考にしています。

どんなサービスか

  • YWTによる振り返りをテーマごとに時系列で一覧表示してくれるサービスです
  • YWTとは
    • Y(やったこと)
    • W(分かったこと)
    • T(次にやること)
  • 振り返りのフレームワークとしてはKPTが有名ですが、YWTは試行錯誤して行う経験学習に関して、より振り返りがしやすいとのこと

どうやって使うのか

まずはじめに、振り返るテーマを作成します

f:id:shibe23:20190129092627j:plain
frikaテーマ入力

テーマが一覧で表示されます。各テーマに対して、YWTを登録していきます

f:id:shibe23:20190129092622j:plain
frika_テーマ一覧

登録したYWTを一覧で見ることができます

f:id:shibe23:20190129092616j:plain
frika_YWT一覧

なぜ作ったのか

  • 日々の振り返りを管理する方法にしっくりくるものが無かった
    • メモ帳ではテーマごとにまとめづらい
    • evernoteのようにテーマごとにページを分けると、管理が煩雑になる
  • 個人の振り返りとしてはYWTの方がしっくり来る
  • 入力がしやすく、一覧で確認しやすいツールが欲しかった

どうやって作ったのか

システム構成

企画

  • 最初は3ヶ月単位で目標を設定して、それに対して振り返りを書き込む形式でしたが、仕様を整理していく中で、「PDCAを回したいこと」と、それに対しての日々の振り返りが一覧になっていた方がわかりやすいことに気づきました
  • 目標に対して、継続して改善ができていない感じ、振り返りがうまくできていない感じを解決したい、というのが開発の発端です

ペルソナ

どんな利用者を想定しているか。
こちらは基本的に自分が利用する想定なので、ざっくりと設定しました

  • 中小企業に勤める30才前後のマネージャー候補
  • 仕事量も増え、これまでの作業型の仕事から目標設定が仕事が増えてきた
  • 業務内容が高度化し、これからどのように改善していけばいいか悩んでいる

課題

どんな痛みを抱えているのか。

  • 日々の振り返り、改善がうまくいっていない
  • PDCAを回したいが、どうすればいいのか分からない
  • PDCAを自分で回すのが面倒なので、レールに乗っかりたい

解決策

なぜ既存の製品では駄目なのか。

  • 従来のプロジェクトマネジメントツールはタスクベースで、目標とそれに向かうアプローチを管理しづらい
  • 目標管理ツールはエクセルなどで提供されていることが多いが、スマーフォンでは入力しづらい
  • webでデイリーの入力を楽にして、整理した状態で振り返りたい

開発

要件定義

業務要件

  • 目標設定→デイリーでのYWT記入→振り返り

機能要件

  • ユーザ認証
  • テーマ入力
    • 例)運動の習慣をつけたい
  • YWT入力
    • やったこと
    • わかったこと
    • 次にやること
  • 一覧表示(テーマごと)
  • テーマのCRUD処理
  • YWTのCRUD処理
  • ユーザーのCRUD処理
  • Action MailerでGmailを使って自動メール送信

非機能要件

  • セキュリティについては、最低限実装時に注意するべきポイントは押さえる(SQLインジェクションXSSCSRF)
  • その他は保守しながら随時検討

設計

  • 画面遷移を紙に書いて、それをベースに必要な処理やDB構造を考えました
  • 普段はフロントエンドエンジニアなので、画面がないと作るものがイメージしづらいのですが、サーバサイドメインの方がどう作ってるのか気になります

フロントエンド

  • 今回はRailsのViewをそのまま使用
  • フロントはRailsの仕組みと密結合している部分が多く、開発が辛かったです
  • Railsを覚えるだけで1人でフルスタックに開発できる強みがある一方で、フロントエンドエンジニアがいるなら、RailsのViewはヘルパータグを使わず、変数だけにするか、いっそSPAにしてもいいかなと思いました
  • CSSはSprocketsを使ってSCSSをビルドしました
  • Vue.js等のフレームワークは使用していないので、CSS設計を行いました
  • 記法はBEMベースで、SMACSSのルールを混ぜた独自設計にしました。覚えることが少なく、ちょっとした開発に使いやすい感じになったので、個人的に気に入っています
    • base: reset.css/normalize.css、タグに適用するCSS
    • layout: レイアウト構成に汎用的に使用するもの。接頭辞l-をつける(例:l-container__block)
    • module: 各コンポーネント。moduleの中に他のmoduleは入らない。接頭辞はなし
    • utility: moduleを横断して使用するコンポーネント。moduleの中に入れてもいい。接頭辞u-をつける(例:u-button--link)
    • helper: テキストの右寄せなど、部分的に適用したいCSS。接頭辞h-をつける(例:h-align--right)
  • アイコンはGoogleのmaterial iconsを使いました
    • FontAwesomeは他のテキストと並べた際に縦位置の調整が面倒になる事が多く、デザインも個人的に相性が良くないので、あまり使っていません

デプロイ

  • CircleCI 2.0を使いました
  • GitHubのプライベートリポジトリからmasterへのpushをトリガーhookにして、CircleCIのコンテナ内から本番環境にsshで接続してデプロイするようになっています

リリース

  • Google Computed Engine(GCE)を使用しました
  • 開発環境はdocker-composeを使って構築しましたが、本番環境はそのままCentOSにnginx等を手動でインストールして構築しました
  • メモリが600MBほどしかなく、そのままだとbundle installができないため、swap領域を追加
  • Let's EncryptでSSL証明書を発行し、インストール
  • GCPで静的IPを取得、Cloud DNSDNSを設定アーカイブ化のため、Herokuに移動しました

感想

  • Railsより、サーバの構築で詰まることが多かったです
  • How Toにかかれていないような部分で詰まることが多く、同時にそれらを自力で解決したことが、とても良い経験になりました
  • 個人で開発するための環境構築や作業フローもまだまだ小慣れていないため、今後どんどん効率化していきたいです