📖

【Web App 01】開発日記 Part 1:背景・目的

2024/09/08に公開

【Web App 01】の概要

記事のスコープとなる個人開発webアプリケーションを指します。01は別のwebアプリを作成することがあった時用に一応。「Web App 01」作成にあたっての記事をざっくばらんに書きたいと思います。

本記事の概要

webアプリケーションを個人開発するに至った背景や全体の方針を書きます。

1. 背景・目的

モチベーション

そもそも、なぜ個人でwebアプリを作ろうと思ったかの背景を書きます(そこまで大した理由はありません)。
普段はとある会社でデータサイエンティスト(弱)をしていますが、ふと自分のスキルを見返した時に

  • 開発能力(データエンジニアリング力)が無さすぎる
  • サービスにデータ分析のソリューションを組み込む際にもMLOpsやそれを実現するための環境(クラウドサービスなど)について知らなさすぎる
  • プロダクトを作ってサービス提供する(ものを作って、使ってもらって、メンテナンスしての一連)を経験したい
  • ちょうど開発に良さそうな題材(プロダクト案)が社内で見つかった

などなど思ったり感じたりしたため、プロダクト・サービスを作る体験を一通りやってみることにしました。
会社からも様々なバックアップ(アドバイザーや環境など)を頂いたこともあり、1人では決して動き出さなかった私もモチベーション高く取り組むことができます。

開始時の技術

下記、開発開始時のスキルセットになります。

  • pythonは3年間くらいデータ分析業務を通じて使っている
    • とはいえ、ソフトウェアやアプリ開発のためのオブジェクト指向やコーディングルールなどの知識はほぼ皆無
    • アプリ開発のためのフレームワークも使ったことはない
    • pandas, matplotlib , scikit-learnとかデータ分析でよく使うモジュール・パッケージはそこそこ分かる
  • Dockerは少し触れていた
    • データ分析(Jupyter)環境をDokcerコンテナを使用して作るなどは経験済み
    • コンテナ、イメージ、ボリュームとかの概念はなんとなーく知っている
  • フロントエンドの知識は無い
    • HTML, CSSは書いた事ない
    • GAS(Google Apps Script)とかでjavascript少し書いた経験はある、でもほぼ皆無
    • ReactとかNode.jsとかやめて、わかんないから
  • データ分析環境としてGoogle CloudのBigQueryを使用しているが、Google Cloudのその他のソリューション・サービスについてはほとんど分からない(GCSとか、その辺はまだ分かるけど...)
  • linuxのコマンドとかは多少わかる
  • httpの仕組みとか、webサーバーの仕組みとか、あまりよくわかってない
    • HTMLとCSSでwebサイトって成り立ってんでしょ?
    • httpリクエストって実際何?
    • 同期処理とか非同期処理とかやめて、わかんないから
  • 公私含め、プロダクト開発に携わった経験は一度もない

2. 開発STEPの整理

開発を進めるにあたり、何から取り組むべきか、を整理しました。
これはプロダクトの開発経験の無い私だけではどうにもならないため、社内のエンジニア(すごい人)に手伝ってもらいました。

  1. 何を目的に開発を行うか
  2. アプリケーションの意義(ユーザー、課題)
  3. 仕様
  4. 技術選定
  5. 環境構築
  6. コーディング/デプロイ
  7. テスト(一旦後で、作りながら考える)
  8. 運用(PDCRサイクルに乗せる)

ここで「アプリケーションの意義(ユーザー、課題)」については多くのアドバイスを頂き、改めて、「作るものが何を果たすべきものなのか」、「ユーザーは誰でどんな体験を実現すべきか」等を固めることができました。具体的なユースケース(いつ、どこで、誰が、どうやってプロダクトを使うのか、のケース)をいくつか挙げることで詳細な仕様や懸念を着手前に洗い出すことができます。

3. 開発の方針

1. 何を目的に開発を行うか

  1. 自分のスキルアップ(未知の領域を学ぶ)
  2. できたサービスを活用(社内活用、外販等)できたらいいね
    という2軸を目的に据えます。
    (もちろん、2の方はもう少し具体的に練って挑みますが、本記事の中では割愛します)。

3. 仕様

「まずは動くモノを作ろう」というアジャイル的な考え方で最小限の要件を定義し始めることにしました。やりたいこと(WebSocket通信でより高度な実装等)はたくさんあったのですが、初めから高度な技術や盛り沢山にすると、中途半端になってしまい目的が達成できなくなるのでは、という懸念からMVPを作って良くしていく方向性になりました。最終的に作成するものはデータベースのCRUD処理で動く非常にシンプルななwebアプリケーションになります(できれば機械学習など高度なロジック、ソリューションが入ったものにしていきたい)。

4. 技術選定

開発言語

Goなど、新しい言語を学ぶ機会にしようと思った時期もありましたが、新しい言語を学びながらプロダクトも作るとなると、気が遠くなってしまうのでpythonを用いて作ることにしました。

フレームワーク

pythonにも

  • Django
  • Flask
  • FastAPI
  • Stremlit
    など、たくさんのフレームワークがあり、正直どれがいいか分かりませんでした。
    が、とりあえずFastAPIを勉強してみることに(Fastなので早く作れるみたいなイメージがあった)。

環境

スタート時はデプロイの環境など、正直よくわかってなかったので、
「とりあえずDocker使っとけばローカルで開発してても柔軟にデプロイできるっしょ」
という感じでローカル環境でDokcerを使って開発を進める、ということだけ決めて臨みます。

ちなみにメインで使うツールは下記想定

  • VSCode
  • Docker Desktop
  • Github
  • Nortion(タスク管理)
  • GoogleSpreadSheet / GoogleSlide / GoogleDocs
  • Google Cloud
    • 開発環境は個人プロジェクトで
    • 検証(ステージング) / 本番環境は会社のプロジェクト?
    • 詳細なサービスは決まってない

終わりに

続きは【Flask Web App 01】開発日記 Part 2 へ。

Discussion