今回のEMoshU Blogでは、2021年12月末に無事リリースできた自社プロダクト(コードネームSina)でどんなことを行ったのかの振り返りと、待望の自社iOSアプリ「ミヤマアユミのイラストアプリ」が実際にリリースされるまでの話をアプリ開発編としてインタビュー形式でお届けします。
今回のEMoshU Blogでは、2021年12月末に無事リリースできた自社プロダクト(コードネームSina)でどんなことを行ったのかの振り返りと、待望の自社iOSアプリ「ミヤマアユミのイラストアプリ」が実際にリリースされるまでの話をアプリ開発編としてインタビュー形式でお届けします。
今回のEMoshU Blogでは、2021年12月末に無事リリースできた自社プロダクト(コードネームSina)でどんなことを行ったのかの振り返りと、待望の自社iOSアプリ「ミヤマアユミのイラストアプリ」が実際にリリースされるまでの話をアプリ開発編としてお届けします。
今回の執筆はしゅんたが担当します。よろしくお願いします!
まず何故、コードネームがSinaなのか。どうしてこのアプリを開発しようと思ったのか。気になった方がいるかもしれません。それは企画編のブログで詳しく紹介する予定です。こちらのブログも近日公開予定なので、興味がある方は是非ご覧くださいね!
このブログを通して、今回のアプリ開発の概要や様々な困難に直面して、どう解決していったのか。そして、EMoshUのアプリチームの雰囲気が伝われば幸いです。
それでは、アプリ開発編スタートです!
是非、ご覧ください!
まさき では、今回はアプリ開発編ということでインタビューを始めさせていただきます。よろしくお願いします!
しょうたろうお願いします!
しゅんたお願いします!
えつしお願いします!
まさき まず最初に、無事アプリをリリースできたということでそれぞれの率直な感想をお聞かせください。
では、えつし君からお願いします。
えつし一番は大変だったなということです。開発スケジュールに対してリソースが全然足りていないという印象で、タスクもたくさんあって、それを捌かないといけないところが大変でした。
ただ、タスクをたくさんこなすことで自分が知らない実装・技術が学べたので、それはとてもありがたい環境でした。
まさきなるほど。しゅんた君お願いします。
しゅんた私の場合は、”やりきったな”というのが率直な感想です。限られた人数と短い期間で開発をしないといけない状況で大変だったのですが、エンジニアとして本気でプロジェクトに向き合ったそんな期間でした。
そして、何より楽しかったです。私の場合は去年の7月から受託開発をしています。その中で、学んだことをアウトプットできる機会があったり、コードの理解が速くなっているなと思う場面もあって、自分の成長を感じることができました。
まさき 素晴らしいですね! しょうたろうさんはどうでしたか?
しょうたろうはい。今回のアプリは無事リリースできたのですが、実は一昨年にも自社アプリを開発していました。しかし、それは途中で頓挫してしまいました。そういう経緯がある中で、今回は初めてEMoshUメンバー全員で開発をし、アプリをリリースできたことはとても嬉しかったです。
まさき待望の自社アプリっていうやつですね!
しょうたろうまさしく、その通りです!
まさきでは続いて、アプリ開発において各自の役割についてお伺いします。
しょうたろう私は、基本的にはリードエンジニアという立場でコードレビューをやりつつ実装を行いました。また、円滑にチーム開発できるようにタスク管理も行なっていましたね。
しゅんた私は、本来であれば機能の開発をゴリゴリ進めていく役割を目指していたのですが...w
蓋を開けてみれば主にデザイン周りの実装を担当しました。また、突発的に発生した細々したタスクを捌いていましたね。
まさきなるほど。えつし君はどのような担当でしたか?
えつし僕の担当はゴリゴリコードを書く人でしたw というのもしょうたろうさんとしゅんたさんは受託開発や日常業務があり、自由に動ける存在が僕だけだったのでひたすら実装を頑張りました。
なので、バグとか発生したら高確率で僕のせいなので少しヒヤヒヤしていますw
まさきバグが見つかったらみんなで対処していきますので、これからも安心してゴリゴリ開発をしてくださいね。
えつしはい! ありがとうございます!
まさきでは次に、アプリ開発を進めるにあたって、どういう設計だったのかをしょうたろうさんにお伺いしていきます。
しょうたろうはい。アーキテクチャに関しては、みんなで話し合ってFluxを採用しました。理由としては、他のアーキテクチャと比べてコードが追いやすいからです。
あと、画面の実装は主にUIKitで実装していて、今はSwiftUIが使えそうならどんどん使って行こうみたいな感じでやっています。そして、リアクティブプログラミングを実現していくためにCombineを使用していますね。
しょうたろうSwiftUIを使用していくにあたって、開発初期はiOS13以降をサポート対象としていました。しかし、iOS13系はSwiftUIやCombineの不具合が多かったので、UIkitメインで画面の実装をしていました。
しかし、途中でiOS13系をサポート対象から外そうという方針になったので、各自対応できそうなところはSwiftUIで実装していこうとなりました。
まさきiOS13系をサポート対象から外そうという意思決定をしたのは何か理由があるのですか?
しょうたろう基本的にiOSは新しいOSに移行する割合が多い傾向にあるので、早々にiOS13系はサポートの対象から外そうと決めました。
iOS13系の不具合に関しては、しゅんた君も苦労しましたよね。
しゅんたそうですね。日々の業務の中でまさしくiOS13系のSwiftUIとCombineの不具合に直面しまして、iOS13系をサポートに含めるならあまり使いたくないなという印象でしたね。
しょうたろうその苦労話は以前の技術ブログでしゅんた君が記事にしているので、気になる方は見てみてください。
【SwiftUI】 iOS13の特定のマイナーバージョンにおいてonDisappearが呼ばれなくてハマった話|Engineering|EMoshU Blog|株式会社EMoshU
EMoshU Blog|今回のブログではSwiftUIのiOS13の特定のマイナーバージョンにおいて、onDisappearが呼ばれなくてハマったので、それの解決方法をまとめてみました。
えつしさらっと宣伝ですねw
まさきちなみに、Combineは側から聞いていて"神"というのを聞くのですが、実際のところはどうなんですか?
えつしそうですね。僕はSinaの開発で初めて触ったのですが、RxSwiftと比べて機能も絞られていてわかりやすくていいなって思いました。
まさきなるほど。初めてCombineを使用してコードを書いたり、見たりしても、わかりやすくとっつきやすさがある感じですかね。
えつしそうですね!
まさきあと、今回のアプリではFirebaseを使用しているということなんですが、使用感的にはどうでしたか?
えつしはい。Firebaseは認証周りを全部やってくれたので、めちゃめちゃ便利でしたね。使っている人が多くて、情報が記事になっていることも多かったので助かりました。
あとは、認証系の実装でミスったら大変なのでドキュメントをしっかり読み込んで、緊張感を持って実装してました。
まさき流石ですね! ありがとうございます。
まさき続いての質問なんですが、アプリチームで心掛けていたことはありますか?
しょうたろうはい。話の冒頭で、開発が途中でストップしたプロジェクトの話をしたんですが、そのストップした原因の一つとして、私自身が日々の業務に追われてコミットできなかったことがあったので、今回のSinaでは私自身もしっかりコミットしていくことを心掛けました。
まさきありがとうございます。しゅんた君はどうでしたか?
しゅんたそうですね。私の場合は開発がスムーズにいくように間をとりもったり、スケジュール調整の段取りを積極的に行うようにして、チーム全体のコミュニケーションが円滑に進むように心掛けていました。
そして、開発においてはPRの出し方を気をつけました。私はデザインの実装をすることが多かったので、どこで何が変わったのかひと目でわかるように、記載する内容だったりスクショの貼り方などを工夫して、なるべくわかりやすいPRを心掛けました。
えつし僕は、作業の進捗状況が見えなくならないように日々の進捗報告や業務日報など、なるべく細かく報告するように心掛けていました。
開発の方では、スピード感を持って仕事をするというのを意識していましたね。
開発期間が短かったので、とにかく手を動かしてタスクをやりきることを意識していました。
まさきありがとうございます!
まさきでは、続いての質問に移ります。アプリ開発において個人でこだわったポイントについてお聞かせください。
しょうたろうしっかりとした仕様書を作る時間がなく、考慮が足りていないところもある状態だったので、その辺を踏まえて使ってくれるユーザーのことをちゃんと考えて実装していきました。
例えば、API通信時はちゃんとロードしていることがわかるようにとか、通信エラー時のことを考えて実装したりと、仕様書にないところも意識して開発に取り組んでいました。
まさきなるほど。ありがとうございます。では、しゅんた君お願いします。
しゅんた私の場合はデザイン周りの実装が多かったので、じゅんさんと連携しながら文言の位置やViewの濃さを何パターンか実装して提示したりして、ユーザーにとってどれが最適解なのかというのを考えながら実装したことですね。
まさきなるほど。えつし君はどうですか?
えつし僕の場合もどういう風に設計したら、ユーザーが使いやすいだろうと考えながら実装したことと、仕様書がないところは積極的に聞いたり、実装していてここはこうしたらいいんじゃないかなって思ったことは共有するようにしていました。
まさき確かに。よくじゅんさんとログイン周りの実装について通話していましたね。
えつしそうですね。ログイン周りの実装は結構話し合いを行いましたね。
まさきなるほど。みんな共通してユーザー目線を大事にして開発を進めていたわけですね。
まさきでは今度は、苦労した点についてお伺いしようと思います。
しょうたろうそうですね。機能の開発においては、自分的には特別苦労したというのはなくて...
これまでの経験で乗り切った感じですね。あえていうならアプリ内課金を久々に実装したので、その辺り少し苦戦したかなっていう感じですw
しゅんた凄すぎる。。。
まさき流石ですね。えつし君はどうでしたか?
えつし僕の場合は広告の実装が一番苦労しましたね。
最初に実装を考えていた某広告配信ツールはもうお手上げ状態でしたw
しゅんたwww
しょうたろうwww
まさきそんなに大変だったんですね。
えつしはい。もう意味がわからなくてw それを解決できたしょうたろうさんは物凄いなと思いました。
しかし、これは運用が難しいということで別の広告配信ツールを導入することになったんですが、これもなかなか大変でした。
まさきほう。大変というのは実装が複雑という感じですかね。
えつし実装のドキュメントは整理されていてわかりやすいものだったのですが、管理画面の設定周りで苦戦しました。
必要な設定がされていなくて実装はできているのに、うまく表示されないみたいなことがあったのでその点は苦労しましたね。
まさきなかなか大変な感じだったんですね。ありがとうございます。
しゅんた君はどうでしたか?
しゅんた私の場合は機能の実装で苦労したというよりは、受託開発と自社開発の両立に苦労しました。
丁度、受託開発のリソースが多くなった時期とSinaの開発が佳境になってきた時期が丸かぶりして、いかに受託開発のタスクをスムーズに終わらせられるかというを常に意識していましたね。
まさきなるほど。ありがとうございます!
まさきあと、苦労系の話だとリリース直前にかなりバタついた記憶があるのですが、その点はいかがですか?
しょうたろうそうですね。iOSアプリは申請の時にリジェクトされるというのは、よくあることなんですが...何回リジェクトされたんでしたっけ?
しゅんた7回とかじゃなかったでしたっけ?
しょうたろうもっとあるような気がするw
毎日のようにリジェクトされていましたからねw リジェクトされた理由はアプリの審査員の環境でAppleのVPNに接続していると、どうやら課金ができなくなることがあるというのが原因でした。
ただ、TestFlight(アプリに申請する1歩手前の状態)では課金ができる状態でしたので、この原因は何だ?という感じで、原因を特定するのに苦労しましたね。その辺どうやって解決したかというのは、しゅんた君の方が詳しいのかな?
しゅんたそうですね。どうやって解決したかというとドキュメントを漁りまくったというのが答えになります。Twitterとかでも情報収集してましたね。
ただ、この内容に関しては割と早い段階に見つけて審査員にメールで、こんな事例もありますよというのを送ったのですが、審査員の人もよくわかっていない感じで一旦この話は流れていました。
しゅんたしかし、その間も全く申請が通らなくて、丁度えつし君とアプリ申請について話している時に、これは、どう考えても審査側の接続環境のせいだろと開き直りました。
えつしなっていましたねw
しゅんたもう一度、直接的にVPNの接続を切って審査してくれと頼みましょうと。じゅんさんにお願いをしましたw
それをメールで伝えたらすんなり審査が通りましたねw
まさき審査のメールに関しては私の方でも見ていたのですが、一方的にバグがあるぜと送られてきて、ひたすらスクショが送られてきたのを思い出しますね。
まさきそんな困難を経て、何とか年内にリリースができたわけですが、実際にリリースされた時はどんな気持ちでしたか?
しょうたろうそうですね。私が起業した目的は、自分達で作ったサービスを多くの人たちに使っていただくことです。その第一歩であるアプリをリリースできたというのはとても嬉しかったですね。
しゅんた私は、ずっと向き合ってきたアプリがApple Storeに並んだというのはとても嬉しかったです。
あと、EMoshUメンバー全員で作っていくプロジェクトは初めてで、メンバー全員すごいなっていう感動もありましたね。
えつし僕もこのプロジェクトは、今までで一番長く関わらせていただいたので、東京でリリースボタンを押すときはうるっときてしまいましたね。
そして、学生の身でありながら一つのアプリを開発してリリースするという経験をさせてもらえたのは本当に感謝しかないです。
まさきそうですね。最後にみんなでリリースボタンを押せて、本当に良かったなと思います!
まさきそんなこんなで。たくさん貢献をしてくれたえつし君が東京に遊びに来てくれたわけですが、その時の思い出話をせっかくなので聞かせてください。
えつしそうですね。オフィスへ遊びに行くにあたって一番最初に思ったことは、緊張するなと思いましたw
まさきそうなんですねw
えつしはい。定例とかで画面越しに毎週顔を合わせるのですが、直接会うのは初めてだったので変な風に思われたらどうしようとか、面白くない奴だなって思われたらどうしようとか思ってましたね。
でも、実際に会ってみて、みなさん良くしてくれて、とても楽しかったです。また行きたいですね!
しょうたろうそう言ってもらえると嬉しいですね。
まさきいつでもお待ちしていますし、まぁ、月1で来てもらってもいいですよw
えつしwww。そこは要相談ですねw
しょうたろうあと丁度、来てくれたタイミングで大苦戦していた申請が通ったんですね。
なので一緒にリリースボタンを押せたのは奇跡でしたね!
えつしそれは、本当に運が良かったと思います。直前まで僕が滞在している間もリリースボタンを押せないのではないかと内心思ってました。
あとは、懇親会も開いて下さり、そこで食べた焼肉が最高に美味しかったです。
まさきそれは良かったです! 結局、何日間東京に居たんだっけ?
えつし2泊3日ですね!
まさきそして、宿泊先がw?
えつしオフィスですね!!
まさきwww
しゅんたこれは、ブログに載せれるんだろうかw?
しょうたろうオフィスの居心地はどうでしたか?
えつしもう最高でしたね! 何泊でもできちゃいます。
まさきすごいw また、どこかのタイミングで会いたいですね。
えつしはい! 是非、お願いします!
まさき少し話がアプリ開発から逸れてしまいましたので戻します。では今後、Sinaの開発において機能追加とかやっていくと思いますが、何か実装してみたい機能だったり、使ってみたい技術はありますか?
しゅんたそうですね。やはり、SwiftUIはどんどん使っていきたいなと思っています。あとは、アプリ内通貨とかを実装できたら面白いかなと思いますね。
まさきほう、ちなみに通貨の単位はどうしましょうかね。
しゅんたえー、通貨ですかw? 何でしょう。1EMoshUとかですかね。
えつし1EMoshU何円なんですかねw?
まさきwwww、とても面白そうなので、是非、実現を目指して下さいね。
しゅんたはいw 頑張ります。
まさきえつし君はどうですか?
えつし僕は、自分で書いたコードを見返してみると汚いなと思うことがあるので、リファクタリングをしたいなと思います。
まさきなるほど。えつし君は機能というよりは中身の方を見直していきたい感じなんですね。
えつしはい。Sinaは今後、何百万、何千万人と使ってくれるサービスになると思います。
その時に汚いコードで運用とかできないと思うので、
動き続けるアプリを作るといった意味でも、綺麗なコードにしていきたいですね。
しゅんた流石だわ。
まさきそうですね。今後Sinaをやりたくて入社したいです。という人が現れるかもしれないですし。そういう人のためにも実現していきたいですね。
しょうたろうさんはどうですか?
しょうたろう私の場合はとにかくリリースまでスピード命だったので、実はテストコードを書けていないのです。なので、そこの部分はやっていきたいと思っていることと、Android版も出したいなと思っています。
誰が実装するんだっけ?という話になりますがw あと、機能的な意味だと追加していきたいものは、まだまだたくさんあるので今後のアップデートに乞うご期待ください!
まさきそうですね!
まさきでは最後に、この記事を見てくれた方に何かメッセージがあればお願いします。
しょうたろう現在、EMoshUではSinaのAndroid版を作ってくれるエンジニアを募集しております。情熱を持ってチーム開発をしたい方は、是非ご応募ください。
しゅんた楽しく、ワイワイしながら開発したいと思っているので、元気でフレッシュな方と一緒に開発したいですね!
えつし学生の内にチーム開発を経験したり、成長したいと思う方はめちゃめちゃいい環境がここにあるので、是非、ご応募してきてください!
まさきでは、本日のインタビューは以上となります。ありがとうございました!
しょうたろうありがとうございました!
しゅんたありがとうございました!
えつしありがとうございました!
今回の自社プロダクトはインタビューの内容にある通り、それぞれ苦戦したことや嬉しかったことがあり、色々な思い出が詰まったとても大切なプロダクトとなりました。
私自身、決して楽しいことばかりだけはなく、辛いこともありました。
それでも、挫けず向き合うことができたのは、EMoshUのメンバーが支えて下さったおかげだと思います。
そして、私自身もっと成長して、今度はチームメンバーを支えられる存在となり、
あらゆる人の人生が好転するプロダクトを創れる。そんなエンジニアになりたいと思っています。
最後までお読みいただきありがとうございました。
EMoshUでは、こういった他では体験できないプロダクトの開発を日々行なっています。
もちろん、Sinaもリリースして終わりではありません。1人でも多くのユーザーに使っていただくために日々追加機能の開発を行なっています。
今回のブログを読んで、プロジェクトやメンバーにご興味を持たれましたら、是非下記の募集要項をご覧ください。
ご連絡お待ちしています。
ESCプロジェクト振り返り 〜 コスパチェッカー開発秘話 前半戦|Project|EMoshU Blog|株式会社EMoshU
今回のEMoshU Blogでは、2021年3月に行ったESCプロジェクト(EMoshU Speed Challenge)でどんなことを行ったかの振り返りと、EMoshU初の自社iOSアプリ「コスパチェッカー」が実際にリリースされるまでの開発秘話についてブログ記事を書いてみました。こちらは前半戦の内容になります。
ESCプロジェクト振り返り 〜 コスパチェッカー開発秘話 後半戦|Project|EMoshU Blog|株式会社EMoshU
今回のEMoshU Blogでは、2021年3月に行ったESCプロジェクト(EMoshU Speed Challenge)でどんなことを行ったかの振り返りと、EMoshU初の自社iOSアプリ「コスパチェッカー」が実際にリリースされるまでの開発秘話についてブログ記事を書いてみました。こちらは後半戦の内容になります。
【SwiftUI】 iOS13の特定のマイナーバージョンにおいてonDisappearが呼ばれなくてハマった話|Engineering|EMoshU Blog|株式会社EMoshU
EMoshU Blog|今回のブログでは、SwiftUIの iOS13の特定のマイナーバージョンにおいて、onDisappearが呼ばれなくてハマったので、それの解決方法をまとめてみました。