btn_arrowcmn-facebookcmn-tiktokcmn-twittercmn-xcmn-youtubecorroborationengineerEngineerhamburgericon-angleicon-arrow-bottom-lineicon-arrow-diagonal-01icon-arrow-diagonal-02icon-arrow-next-01icon-arrow-next-02icon-arrow-strokeicon-arrowicon-close-btnicon-externalicon-facebookicon-fukidashi-01icon-fukidashi-02icon-fukidashi-03icon-fukidashi-04icon-fukidashi-05icon-fukidashi-06icon-fukidashi-07icon-fukidashi-08icon-fukidashi-09icon-fukidashi-10icon-fukidashi-11icon-fukidashi-12icon-fukidashi-13icon-fukidashi-14icon-fukidashi-15icon-fukidashi-16icon-fukidashi-17icon-fukidashi-18icon-fukidashi-19icon-hatebuicon-instagramicon-is-index-illust-01icon-is-index-illust-02icon-is-index-illust-03icon-lineicon-linked_inicon-pinteresticon-rank-dash-offseticon-rank-frameicon-rank-no-frameicon-rank-trophy-item-01icon-rank-trophy-item-02icon-rank-trophy-staricon-triangle-01icon-triangle-02icon-twittericon-xicon-youtubeis-bg-book-01is-bg-book-02is-bg-book-03is-bg-book-04is-bg-book-05is-bg-book-06is-bg-boxis-bg-cupis-bg-desktopis-bg-flagis-bg-glassis-bg-hatenais-bg-human-01is-bg-human-02is-bg-human-03is-bg-human-04is-bg-pcis-bg-plusis-bg-smartphoneis-feature-01-lineis-font-daiis-font-gokuis-font-jiis-font-senis-footer-illust-01is-footer-illust-02is-nav-arrowis-prologue-boxlicense-foreignlicenselogo-gree

【TECH BLOG #45】DADAN株式会社でお手伝いをしてきました

グリーエンターテインメント株式会社 技術戦略チーム、シニアエンジニアになりましたTAです。
昨年(2022年)のことではありますが、グリーグループの DADAN株式会社 で開発のお手伝いをしてきました。
今回はそこで感じたことについて書こうと思います。

DADAN

まずはDADANについて紹介させてください。
DADANは国内外の人気マンガ作品を多数取り揃え、縦読み・横読み、フルカラーなどそれぞれの作品に最も適した形でお届けする総合マンガプラットフォームです。
アプリは2022年12月9日(金)より配信開始していますので、ぜひダウンロードしてみてください。

サービスサイトはこちら
https://dadan.me/

DADAN株式会社は上記サービスの開発・運用などのマンガプラットフォーム事業や、マンガ制作スタジオ事業を推進しています。

使用技術について

私はサーバーサイドエンジニアなので、お手伝いした部分としてはバックエンドのAPI処理やバッチ処理の開発などでした。ゲーム開発・運用でもバックエンドの実装は主にその2つなので、大枠で見た場合にはそこまで違いはないように思います。クライアントサイドはゲームと全く違うので、それと比べるとバックエンドは作業に入りやすいイメージでした。
それではここで、DADANの開発で使用していたバックエンドの技術を列挙します。

・開発言語: Go
・クラウド: Google Cloud (GCP)
・コード実行環境: App Engine
・データベース: Cloud Spanner
・API: GraphQL

対して、現時点でグリーエンターテインメントで主に使用されている技術はこちら。
・開発言語: PHP
・クラウド: Amazon Web Services (AWS)
・コード実行環境: EC2
・データベース: Amazon Aurora
・API: RESTful

全然違う。1つも合ってない。

そんなわけで、お手伝いと言いながらも技術的な部分を随時学びながら作業しようと思っていました。
補足として、自身のスキルと照らし合わせると、
・Go: ツール作成などで少し扱ったことはあるが、サービス開発などの経験はなく、チームでの開発もしたことがない。
・GCP: E.G.G. Japan というプログラムに参加して Professional Cloud Architect の資格を保持しているが、業務経験はほぼなし。
・App Engine、Cloud Spanner: 同上。
・GraphQL: APIをコールする側として GitHub Appsで使ってみた ことはあるが、コールされる側の実装経験はなし。
という状態でした。

感じたこと

Go

元々C/C++での開発経験が(かなり昔ですが)あったこともあり、あまり抵抗感もなくコードを書くことはできました。ただスライスやメモリ管理周りは注意が必要で、わかりにくいバグを埋め込んでしまった箇所もありました。


// これはNG
// counter.PointerOpenAtが指すアドレスはすべて同じになってしまう
for _, content := range contents {
counter.PointerOpenAt = &content.OpenAt
}

// これならOK
for _, content := range contents {
openAt := content.OpenAt
counter.PointerOpenAt = &openAt
}

チーム開発という部分だと、モジュール分割して別リポジトリにしたときコンフリクトしがちなgo.modやgo.sumの更新ルールなどは、早い段階で整理しておくと良さそうだと感じました。今回の開発ではそこまで問題にならなかったので良かったです。

Cloud Spanner

SQL書けばいいだけだしAurora(MySQL互換)との差はそこまでないだろうと思っていましたが、想像よりクセが強かったです。ただSpanerそのものに関してはグリーグループの知見もあり、それを参考にすることができました。
実装部分ではGoでSpannerモジュールを使うということもあり、PHP+MySQLとのギャップがかなりありました。私がチームに参加したタイミングですでに他のメンバーの実装例もあったので良かったですが、何もなかったら苦労したかもしれないです。
ミューテーションとDMLの混在には気をつけたいですね。

GraphQL

やはり呼び出す側と呼び出される側では大分事情が違いました。パフォーマンスを意識した実装だったり、オブジェクトの解決順問題だったり……。単純にデータを返す処理では問題が起きにくいですが、複雑な処理や仕様変更によるテーブル設計とリクエストの乖離が発生すると、悩ましい部分が出てくる印象でした。
とはいえ、GraphQLのクエリ自体は軽く知っていたこともあり、作業には比較的入りやすかったです。

まとめ

普段の業務とは全然違う技術に触れるというのも、色々な発見があり楽しかったです。また、それを業務として、チーム開発としてできたというのも、とても良かったと思います。もちろん一つの技術を深く理解するというのも大事ではありますが。
GoやSpannerの知識が今後のグリーエンターテインメントでの開発で活躍するかもしれませんし、GraphQL使って行きましょう!なんてことも、もしかしたらあるかもしれませんしね?
今回得られた知識をどこかで活かすことができればいいなと思います。

最後までお読みいただきありがとうございました。
DADANのご利用もよろしくお願いします!

グリーエンターテインメント株式会社 広報担当

東京都港区六本木6-11-1 六本木ヒルズゲートタワー

E-mail:info-ent@ml.gree.net