こんにちは。iOSエンジニアの田口です。
最近は某呪いの漫画にハマって週刊誌のサブスクに入りました。
こちらの記事は Gunosy Advent Calendar 2021 の 19 日目の記事です。 昨日の記事は齊藤さんの「アンケートを舐めてかかると死ぬ」でした。
具体例をもとに統計手法を噛み砕いて説明してくれてますので是非読んでみてください!ちなみに彼は無事です。
昨年あたりからサーバーサイドの開発も少しやるようになったので、iOSエンジニアがサーバーサイド開発をやってみた所感やマインドの話をしようと思います。
きっかけ
私は入社してからずっとiOSエンジニアとしてiOSアプリの開発を行ってきましたが、漠然と下記のような事を考える日々が続いていました。
- 新しいことがやりたい
- Appleプラットフォームがなくなったら失業する(半分冗談で半分本気)
- iOSを主軸に別のこともできるようになりたい
多分iOSエンジニアの方々には共感される部分があるかと思います。 そこでちょうどサーバーサイドエンジニアが1人退職した時期だったので、マネージャーやLEに相談してサーバーサイドのタスクをやらせてもらいました。
対応したのは主にAPIの新規エンドポイントの作成や、既存APIの変更などです。
グノシーのサーバーサイドについて
まずグノシーのサーバーサイドについて説明します。
構成
開発言語はGoでEKS上にデプロイしてます。 また、マイクロサービスアーキテクチャを採用しておりメンテナンスしやすいです(と感じてます)。
Goの依存パッケージは定番なのは一通り入っています。
webフレームワークにはgoaを使用しています。クライアントとの仕様の共有にgoaのswagger生成機能を利用しています
goaのviewを修正し goagen
コマンドでswagger.(json|yml)を作成してAPIドキュメントの完成です。
作業フロー
- まず、修正が必要な箇所のAPIのインターフェイスを修正し、前述の通りAPIドキュメントを作成します。
- ドキュメントをもとに、クライアントチームに修正箇所のAPIのインタフェースの共有&レビューをもらいます。
- レビューがOKなら、修正したAPIのインターフェイスに合うようにロジックの修正を行います。
基本的にこのようなフローで開発を行います。 本格的に実装に入る前に、クライアントチームにAPIのインターフェイスの共有を行うことで認識の不一致を防いでいます。
開発してみてどうだったか
はじめは施策の中の小さなタスクから担当しました。 その後、施策のタスクをほぼ全て担当できるまでになりました。
タスクをもらった後は、 まずパッケージ構成の理解や各処理を追うためコードリーディングを行いました。 ネットワーク・DBの基礎知識があればそこまで理解できない概念はなかったです。(ただしKubernetesは理解不能でした)
苦しんだ点は
- goaのインストールで躓いた
- xo(DBへのクエリジェネレーター)のDSLが分からなかった
- SwiftにあるようなCollectionの便利関数がなかった(map, filter, reduce, etc...)
- Kubernetesナニモワカラナイ
などなどです。
便利関数に関してはGo 1.18からGenericsが導入されるので解決されそうな気がします。 Goを書いてみて改めてSwiftは自分にとって記述量が少なく書きやすい言語だと再認識しました
でもパフォーマンスを意識しながら、自分でmapやfilter相当のロジックを書くのは楽しかったです。 競技プログラミングの楽しさの片鱗を見た気がします。
まとめ
普段クライアントをやっている人間としては、刺激的で楽しく開発ができました。 Kubernetesはドキュメントや書籍などでゆっくり学んでいこうと思います。
アプリは個人開発等で割と敷居が低いと認識していますが、サーバーサイドはなかなか個人では手を出しにくいのでチームで開発できてよかったです。
iOSを主軸に別のこともできるようになりたい等、これまで私が考えていたことに道が見えてきた気がします。 とはいえまだ完全に達成できたわけではないので、これからも頑張っていきたいです。
是非皆さんもサーバーサイド開発に取り組んでみてはいかがでしょうか。
明日はサンドバーグさんの「改めてドライブレコーダーを作ってみた」です!おたのしみに!