2020-6-20

Dropbox上の画像を直接アノテーションできるサービスを作った。Part 1

個人開発でサービス作りました。宣伝かねて苦労話・モチベーションとか個人開発に興味がある方に向けて公開します。 まずはPart 1ということで、コンセプトだったり動機だったりとメンタル面の話です。(技術の話も少し触れます)

何を作ったの

anntというブラウザ上で動作するアノテーションツールです。

アノテーション画面

特徴としては

  • Dropboxにある画像データを読み込んでアノテーションができる
  • アノテーションですぐに読み込むことができる
  • Dropbox上で動作するので画像を上げればタブレットでも作業できる(予定)

という点でvottとかlabelimgとかとは差別化できてるのかなと思います。開発期間は約1ヶ月+数日です。

作った動機

一番の動機は自分の技術を具体的な形で世に送り出したかったということだと思います。 今まで割と趣味でプログラムを書いてきたんですけど競馬の予測だったり、自分で使うためのAI用のライブラリだったり自分の中だけで完結していました。 そんな中で突如自分が作ってきたものは独りよがりのゴミではとネガティブな感情が湧いてきて気がついたらサービス開発を始めていました。

そんな中、既存のアノテーションツールがイケてないなと思っているうちに(vott使っていました)、気がついたら開発を始めていました。 割と勢いって大事だなとこのとき思いました。あとお金ですね。一発うまく当てたら儲かるんじゃないかという下心です。 思い返してみると100%下心というかドロドロした理由で開発が始まっていました。

当初の構想と開発の流れ

割と勢いで始まったプロジェクトですが、割と最初にコンセプトは考えていました。vott使っていて微妙だなーと思っていたのが、

  • jsonに画像のパスが絶対パスで書かれていて移動しづらい
  • 出力結果のパーサー作るのめんどい(調べてないだけでライブラリがあるかも)
  • iPad買ったので[iPadでも作業したい

というような点でした。じゃあこれ解決した僕の考えた最強のアノテーションツールを作ればいいってことじゃん!って思ってまずはコンセプトをまとめます。

Step.1 コンセプト設計

  • どこでも作業ができて
  • 作業が終わったらすぐにAIの開発に集中できて
  • 一度アノテーションしたらフォルダのコピーとかも簡単にできる!

これでコンセプト完成!やったぜっ!ってなります。 コンセプト考えるのそんなに大事?作りながら考えれば?という意見もありますが、個人的には何をしたいか・譲れない点を明確にしておいたほうが挫折しにくくなると考えています。 一部のスーパープログラマーでも無い限り理想の姿に実装速度は追いつきません。そこで大事になってくるのが機能の実装をいかに上手く諦められるか、だと思います。

例に取るとanntの当初の機能要件は

  • DropboxとOneDriveとGoogleDriveで動作して
  • PC・スマホ・タブレットでも動作して
  • 出力は独自形式はもちろんのことPACAL VOCとかもサポートして
  • BoundingBoxはもちろん他のタスクにも対応して
  • 専用pythonライブラリでは基本的な前処理もサポート etc...

というキラキラの夢物語でした。 実際にはDropboxでしか使えなくて、基本はPC上(一部タブレットも)、出力は独自形式。 というような感じのものになったのでいかに夢に向かって歩く中で要らない機能が切り捨てられたかがわかるかと思います。 人は強くないので最初にコンセプトを明確にして、あとで辛くなったときに必要の無い機能は実装しないという逃げ道を用意しておくのがいいと思います。

Step.2 使用技術の選定

使ったのはfirebase+vueです。すべてjavascriptです。今までjavascriptなんて最低限しか触ったことが無かったので最初は大変でした。

じゃあ何でjavascriptにしたの?って話になりますが、主に作業負荷の軽減です。 まず最初にコスト的な面でfirebaseを採用するのは決めていました。小さいアプリであればスケールもして安いfirebase等のサービスを使うに限ります。 firebase使うとなるとあまり複雑な処理はサーバー側でしたくないなと思ってSPAにすることにしました。 じゃあvueでいいやとノリで決めて、フロントとバックエンドと頭の中で言語切り替えるのめんどくさいのでjavascriptでいいやとなりました。 適当ですね。あまり後悔していないのでまぁいいかと思ってます。

Step.3 もくもくと開発

あとは正直もくもくと開発していくだけです。開発の細かい話はまた今度書けたらと思っています。

モチベーションの維持

完成に近づいてない感覚が一番モチベーションが折れます。 完成に近づいてない気がしてくると、このサービスゴミでは...他の競合があるので使ってくれないのでは...という魔が入り込んできます。 まずは最短で何かしら完成するのがいいのかなと思っています。ちなみに無事公開を終えた今は晴れ晴れとした気持ちです。

感想

考えているだけじゃなくてまずは手を出して作業を進める、何かしらの進捗を出し続けるのがモチベーション維持には必要でした。 終わらない...もうマジ無理...ってなったときは機能をさっさと切り捨てることが大事だと思います。 実はanntの前にサービスを作っていたのですが、割と重めのバックエンドでの処理+画像認識モデル3つが必要になるサービスで70%ぐらい完成したところで諦めました。 まずは現実的なゴールを設定して走り切るのがモチベーション維持のためには大事ですね。