こんにちは、ヤプリでサーバサイドエンジニアとして1ヶ月間インターンに参加した青山(@small_onions)です。 普段は競技プログラミングや大学で研究などをしています。 今回はヤプリのインターンが最高だった、というインターン体験記を書きます。
伝えたいこと
- ヤプリのインターンは最高
- やるべきことと成長チャンスが無限にあるので全人類に来てほしい
ヤプリのインターンに決めたきっかけ
私はサポーターズという就活サービスの1on1イベントで雰囲気が抜群によかったことから決めました。 他社も考えていたのですが、かなりフランクで親しみやすい雰囲気だったのが決め手となってヤプリさんに決めました。 結論から言うとこの予想は大当たりで、インターン中もメンターの中川さんをはじめとして親切な社員さんに助けていただき充実したインターンとなりました。
もう一つの理由として、学術研究から少し離れてビジネスのことを学ぶ上でヤプリが良さそうだという理由がありました。 Yappliはノーコードでアプリを作成するサービスであり、作成したアプリを実際に利用するのは個人ユーザー様です。 したがってヤプリはヤプリ -> 企業クライアント様 と企業クライアント様 -> 個人ユーザー様の2段構造でサービスを提供しており、YappliはBtoBtoC SaaSということになります。 この2段構造を持っているヤプリでインターンをすることで、インターン前は持っていなかったBtoBとBtoCの両方の知識を学ぶことができ有意義なインターンになりました。
インターン中の研修
主要な研修として以下の2種の研修がありました。
- アプリ研修
- ビジネスモデル研修
これらの研修ではYappliというサービスの面白さと、面白さを顧客様と共有するための方法について学びました。 アプリ研修ではその名の通りYappliのユーザ目線で実際にアプリをノーコード開発し、素早く簡単にアプリが作れるというYappliの良さを学びます。 ビジネスモデル研修では、Yappliの良さを顧客様に共有して契約していただき、作ったアプリを個人ユーザに使っていただいてWin-Win-Winの関係を築くために必要なことを学びます。 こういった研修があることで、ビジネス視点からエンジニア部門の貢献を考えることができ非常に勉強になりました。
インターンでの取り組み内容
私はインターン期間において、2つの課題に取り組みました。
オートプッシュ機能の改善
1つ目の課題として、オートプッシュ機能をアプリ公開終了時に停止する処理の実装に取り組みました。 オートプッシュ機能は、ユーザが起こしたアプリ起動や会員登録などの行動に応じて自動的にプッシュ通知を送信する機能です。 アプリ公開終了後にプッシュ通知が届くことを防ぐために、このオートプッシュ機能をアプリ公開終了時に同時に無効化する必要があります。 そのため、ヤプリ社内用アプリ管理ツールのアプリ公開終了ボタン押下時にオートプッシュ機能を無効化する処理を追加しました。
この課題の難しい点は、図1に示されるように修正が広範囲となる点です。 今回は社内用アプリ管理ツールから中間サーバを通ってプッシュ通知用サーバまでオートプッシュ停止の指示を届け、プッシュ通知用サーバの方でオートプッシュ停止を実施する必要がありました。 この内、中間サーバ -> プッシュ通知用サーバへの通信時は諸般の事情から既存の認証方法が使えないため認証部分を自作する必要がありました。 修正が広範囲になるため、E2Eテスト用環境の準備も大変でした。
この難しさに対して、競技プログラミングで培ったコードリーディング力で立ち向かいました。 競技プログラミングのコンテストサイトの一つであるCodeForcesにはHackと呼ばれる他人のコードのバグを指摘することで得点が得られるシステムがあります。 バグ指摘は早い者勝ちで、間違った指摘を行うと得点が減ってしまうためHackには他人のコードを高速かつ正確に読む力が要求されます。 このHackで培ったコードリーディング力を活かして、Yappli社内のコードリポジトリを読み全体像を把握しました。 Yappli社内ではconfluenceと呼ばれるwikiサービスを使ったドキュメント整備がされているため、高速にキャッチアップすることができました。
この課題で学んだことは、整理されたコードを書き、ドキュメントとコードを対応付けさせることが大切だということです。 ドキュメントが揃っており、DDDの考え方をベースに書かれている中間サーバやプッシュ通知用サーバについては比較的簡単に機能改善を加えることができました。 一方で社内用ツールはどうしてもメンテナンスが滞りがちで、コードはシンプルに書かれていてもドキュメントが歯抜けになっていたためキャッチアップに時間がかかってしまいました。 コードとドキュメントとをきっちり対応付けして開発を進める、というのは難しいことではありますが後々の開発スピードに大きく影響するため力を入れるべき点になるというのを身をもって実感しました。
ローカル環境構築フローの改善
2つ目の課題として、ローカル環境構築フローの改善に取り組みました。 1つ目の課題が終わりかけてきた頃に、環境構築の方法を整備したいとメンターの中川さんに伝えたところ快諾していただきこの2つ目の課題に取り組むことになりました。 Yappliのシステムは長年の運用によって構成が年々複雑化しています。 そのため環境構築のドキュメントが各所に乱立しており、設定用パスワードが微妙に違うなど整合性が取れていない部分が各所にありました。 結果として環境構築が困難となり、各々が「秘伝のタレ」のようなチューニングをしてローカル環境を作っているという状態になっていました。 そこで社内のminiyと呼ばれる環境構築ガイドをもとに、統一的な環境構築フローを構築しようと試みました。
1つ目の課題をこなして信頼していただけたのか、作業丸ごと任せていただいたのでのびのびと開発することができました。 既存の環境構築ドキュメントを元に、取り組みの目標だけ決めておいて実装は手をつけやすい部分から進めました。 細かい部分で整合性が取れずに何回も作業を繰り返していましたが、完成させるという強い意志で進めることでなんとかインターン最終日に間に合わせました。 社内では「難しいよw」と言われていたのですが、某所でのkenkooooさんの発言通りに競技プログラマの狂気の実装力を体現できました。
kenko4さん「競プロerの狂気の実装力を買ってる。ビジネスの場で実装が遅いが故に、企画・計画段階で手戻りが無いように無駄なコストをかけている。さっさと作ってしまえばいい。」
— ツカモ (@tsukammo) 2023年3月29日
chokudaiさん「いくつかの会社は、高度なアルゴリズムが不要なように要件定義・設計しがち。」
実装した主要な機能は以下の3点です。
- air によるGo言語のホットリロード機能: ソースコードを編集した時に自動的に再ビルドが走ると便利です。
- DBの差分バックアップとリストア機能: 壊れてもすぐにデータを巻き戻すことができると、リソース削除系の操作も気軽に実行できます。
- 内部proxyを使った本番環境さながらのローカル環境構築機能: デバッグのため各サービスに直接繋ぐ以外に、実際の利用ケースと似たインターフェースで作業できると操作イメージが湧きやすく嬉しいです。
問題点のヒアリングや課題の洗い出しから実装まで、全ての工程を担当させていただいたというのもあり非常に多くの学びがありました。 1on1ミーティングやランチミーティング、Slackなどでのコミュニケーションが盛んなため困りごとの共有も簡単にでき、ヤプリに開発組織としての強さを感じました。 開発環境の整備は比較的すぐに成果が出やすい内容で、なおかつわかりやすく貢献できる内容だったのでインターン中の課題として選んでよかったです。
インターンの振り返り
インターンを通じてヤプリの社風や課題感を理解し、課題解決に取り組むことができました。 サービスを提供する上で、サービスを他の人に使っていただき持続可能な事業としていくことは必要不可欠です。 そのためにはサービス開発などの技術的な面も重要ではありますが、ビジネス部門などと協働して顧客に価値を届けていくことがとても大切です。 1ヶ月と短い期間ではありましたが、ヤプリのチームドリブンな働き方を通じてチーム開発の楽しさや良さを実感することができました。
学業に活かせるスキルとして、研究費の獲得に必要な社会的インパクトの記述を具体的に書くスキルがインターンで身につきました。 研究費の申請書では、研究の方法論などの他に研究の意義を書き他の研究者や社会に与える影響を説明する必要があります。 インターン中に別件で研究費の申請書を書く機会があったのですが、ヤプリで学んだビジネス視点のおかげで研究成果が与える社会的インパクトが具体的に記述でき成長を実感しました。 研究と開発は一見関係なさそうな分野ですが、このヤプリのインターンで予想外の知見が得られて大変良かったです。
感想
インターン、とても楽しかったです! 作業中はハマりどころも多く結構苦戦したのですが、Slackで質問するとすぐに返信してくださるというのもあり楽しく作業できました。 インターンを振り返って、競技プログラマーや実務開発大好きエンジニアなどなど様々なエンジニアにとってヤプリは大きな学びを得られる場だと感じました。 興味がある方はぜひインターンや本選考に応募してみてください! yappli.co.jp