今年の1月、中学時代の友人が結婚するとの連絡がありました。
何かでお祝いできないかなと思い、以前「結婚式でLINE Message APIを使った写真共有サービスを作った」というブログ記事を読んだ事を思い出し、同じマイクロサービスを作れないか考えました。
ブログ記事を書いた人は、そのマイクロサービスをPythonを使って実装していました。しかし、私にはPythonの知識が無かったので、趣味で勉強していたRubyを使って実装できないかを考えました。その時に考えた全体構成イメージは以下の様な感じです。
<全体構成イメージ>
動くものを作る事を優先にして、プロトタイプを作成
私は、LINE Message API、Heroku、Cloudinary、WebSocket、Git/GitHub等、全て初めて扱う超初心者です。
1つ1つの学習コストが大きいので、とにかく動くものを作ってモチベーションを保つ事を優先しました。そのため、当初フレームワークはRailsを使う事を考えていましたが、Railsについての知識が十分では無かったのと、最初からRailsを使って実装すると構造が複雑になり、エラー等の原因分析が困難になると考え、まずはSinatraを使ってプロトタイプを作る事にしました。
1. プロトタイプ作成
クライアントサイド
LINE Message API
参考にさせて頂いたブログ記事にも書いていましたが、とにかくサンプルやドキュメントが充実していたので、殆ど迷うこと無く実装する事ができました。ちょうど「Heroku+Ruby+Sinatraでオウム返しするLINE Botを作った」という記事も見つけたので、こちらも大変参考にさせて頂きました。
qiita.comサーバーサイド
Sinatra
こちらもサンプルやドキュメントが充実していたので、殆ど迷うこと無く実装する事ができました。 RailsのようなMVCモデルを意識せずに作れるので、「とにかく動くものを作りたい」という私の希望にとても合っていました。後から調べてみると、アップル等でも使われている結構有名なフレームワークだったので驚きました。
Heroku
こちらも初めて使わせてもらいました。Herokuへのデプロイ方法は、GitHubへのデプロイ方法と変わらないので、とても使い易いです。Git/GitHubの使い方は不安があったので「わかばちゃん本」で学びました。SourceTreeを使えばデプロイ先を簡単に切り替えられるので、とても簡単に扱えました。
kodak.hatenablog.com Cloudinary
まさにこんなサービスがあったのか。と思ったサービスです。画像をアップロードするタイミングで加工できるので、携帯で撮った画像の解像度を抑える(ファイルサイズを縮小できる)事ができます。これによりファイルサーバーの容量を抑えたりレスポンス速度を向上できるので、この辺りは触っいてとても面白かったです。
WebSocket
一番苦戦したのが、このWebSocketです。Java Scriptを使って実装していますが、詳細な説明を記載している書籍が無かったので、ネットの情報だけを使って実装しました。ネットの情報は、具体例としてチャットを使って説明しているものが多く、ブラウザから入力した情報をトリガーにして、サーバーサイドで処理させるものが殆どでした。
私が実装したかったのは、サーバーサイドの情報をトリガーにして、ブラウザに画像を表示させる事だったので、その方法についてはどこにも記述が無く、1つ1つトライ&エラーを繰り返して実装していきました。どこかのタイミングで記事に纏めたいですね。
2. プロトタイプの完成
約2ヵ月間、試行錯誤してRubyとSinatraフレームワークで「LINE Message APIとRubyを使って写真共有サービスのプロトタイプ」を作る事ができました。
友人に見せた感じだと「LINEに送った画像が瞬時に表示されるのが良いね。」「工夫すれば、色々なところで使えそうだね。」等の感想を頂きました。
3. 今後のサービス改善に向けて
プロトタイプで満足せず、以下機能を実装していく予定です。
1) Railsを使って実装する
2) LINEグループを使った画像送信・表示を可能にする
3) アップロードした画像を振り返る機能を実装する
※ 3)は友人の意見で、今のままだと画像が下に流れてしまうので、振り返る機能を実装した方が良いとの助言をもらいました。
4. 作ったのはいいけど使えるの?
プロトタイプでも使えそうな気はしていますが、果たして反応はどうなのか。色々と気になる事はありますが、例え使われなくても、やってきた事は無駄にはならないですし、今回のプロトタイプ作りで個人的には大変勉強になりました。技術力の無いSEでも勉強すれば「こんなサービスが作れるぞ!」という自信にも繋がった気がします。
今後も、どんどん新しい事にチャレンジして自己研鑽していきたいと思います。
最後に
アイディア参考にさせていたtomoima525さんには、この場を通して感謝申し上げます。
なお、参考にさせて頂いたのはアイディアのみであり、ソースコードのコピー等は一切行っておりませんので、御認識ください。 今後ともブログでの御活躍、応援しております。