「なぜ内定者のカレンダーを企画したのか?」の理由と感想を書いていきます。合わせて専用アプリの実装の解説も付けました🙌また、この記事は@tocknとの合作記事です。「内定者で何かをしたい!」という思いと、「採用に貢献したい!」という思いが合わさった結果です。2年以降のキャリアを一部ですが表現でき、DeNAという会社のことをより知ってもらえる機会になると考えました。学生にとっては、どういう人が入社し、1年後の成長、その後のキャリアが見えるのは非常に有益な情報になると考えてます。採用イベントで知ることが可能ですが記事という、より自然体で個人の思想がでる媒体での情報から感じ取れるものがあると私は思ってます。(就活中は各社の技術ブログはチェックしてました)以上のような思いから企画をしました。今回は「内定者vs社員!?」という企画をしたように、普通のカレンダーとは違う楽しみ方を提供できると考えています。企画して本当によかったです。内定者同士で交流が生まれたのは勿論ですが、「この子(サービス)知ってる!」となる機会も多く、同期をより知るきっかけになりました。記事の中で研究内容や興味ある分野などを知ることもできて交流が増えました。個人的にはイベントを企画する際のフローを今回で知れたのも良かったです。言っていただきましたが、本当にその通りだと感じました。本当にいいカレンダーになったと思います。申請など協力していただいた社員の方々、執筆者のみんな、読者の皆さん、本当に本当にありがとうございました。専用アプリ作成の発端vsの企画をしていた時にみんなに意見を募ったのが発端でした。何気なく送信したメッセージが始まりでした...。...3時間後にtocknがAPIを作りました...!?APIができたことでハッカソンが突如始まりましたw(だって、APIあったら作るしかないじゃん)専用アプリ作成のバックエンド実装バックエンド実装を担当した@tocknです。naroのアイデアを見た時自分は地元のケンタッキーでお昼を食べていたのですが、すぐに実装したい衝動に駆られ、残っていたチキンフィレサンドを急いで口の中に突っ込みました。ケンタッキーから家までの徒歩10分で、サーバーの構成を考えていました。自分はJSONを返すAPIだけ提供して、フロントは得意な人に実装してもらう形にして開発に柔軟性を持たせることにしました。Qiitaには公式でAPIが提供されていますが、アドベントカレンダーに関するAPIは公開されていないようでした。案を見た感じ、アドベントカレンダーの内定者の総イイね数、社員の総イイね数をイイ感じに取得するAPIが必要になりそうです。そこで、カレンダーページをスクレイピングする事で総イイね数を取得する事にしました。Datastoreを使う事に決めました。(昨年度参加したDeNAのサマーインターンでGoを使ってスクレイピングを実装したのを思い出し、少しエモい気持ちになりました)今回実装したコードはGitHubで公開しています。qiita.goシンプルな構成になっていると思います。層も少ないのでそれぞれ簡単に説明していきます。modelレスポンスのモデルおよびデータベースのモデルを定義している層です。レスポンスもデータベースも同じ構造で対応しています。`json:"updated_at"`}model/repositoryデータを永続化するためのインターフェースをここで定義しています。これによって永続化の実装を抽象化できるので、後述するサクッとローカルデバッグが実現できたりします。error}qiitaQiitaのスクレイピングおよびAPIを叩いて値を取得する層です。以下は年、カレンダー名を引数に、そのカレンダーの総イイね数を返す関数です。64)}api/handlerHTTPハンドラーをここで定義します。このHandler構造体はメンバにmodel/repositoryで定義したrepositoryインターフェースを持っており、New関数で生成します。インターフェースなので、Handler生成時に何を持たせるかで永続化の手法を変えることができます。likes)}persistence/datastoreGCPのDatastoreを使って永続化するための層です。model/repositoryの実装になっています。nil}appengine/mainGAEで動かすためのmain関数です。ここでHandlerを生成し、Datastoreの実装を注入しています。nil}サクッとローカルデバッグAPIとしてイイ感じに値を返せるか、手元でサクッとデバッグを行えるようにしたい。そこで活きてくるのがrepositoryによる永続化の抽象化です。今回persistence/memoryにも、model/repositoryの実装があります。これを使うと非常に簡単にデバッグできます。実装は以下の通りです。datastoreの実装ではclientをメンバに持っていましたが、memoryでは普通のmapを持っています。これを簡易DBとして扱います。nil}そして、ルートにあるmain.goが手元デバッグ用のmainです。r)}このようにmemoryの方を注入しているので、手元で簡単にデバッグができます!便利!(書こうと思えばテストも綺麗に書けますね🦁)Cronで定期実行リクエストのたびにQiitaをクロールしてはパフォーマンス悪いしQiitaにも申し訳ないので、Qiitaのクローリングは定期実行してGCPのDatastoreに保存します。Asia/Tokyoこんな感じで定義すれば、10分おきにクロールしてくれます。以上、バックエンド実装のお話でした。専用アプリ作成のフロント実装フロントエンド実装を担当した@naro143です。「毎日記事を見るきっかけになる」ということでアプリであることは必須だったのですが、いい機会なのでPWAを初めて触るNuxtで実装することにしました。汚かったり無駄な実装があると思います。アドバイスください本当に基礎的なことしかしてないので、基礎的でないところに絞って解説をします。今回実装したコードはGitHubで公開しています。}}ポイントはgithubpagesで公開する為にbuildで吐き出すディレクトリをdocsと指定しています。$color-primary</style>いいね数の棒グラフの描画にはvue-chartjsを使用しました。使用法はchart.jsと同じです。ラベルと、データ、グラフの色を設定します。グラフの最大値と間隔はいいね数の最大値から計算をして設定しています。グラフの色はDeNAカラーを参照しました。https://dena.com/jp/company/policy/logoguide.htmlさいごに戦略はありましたが、勢いで始めた企画でした。前例もなく、申請のフローもわからないので質問をしまくって動きまくって、人を巻き込むだけ巻き込みました。同期にも全体で参加を募って、個人でもメッセージを送って誘いました。みんな快く承諾してくれて、忙しい中で最高の記事を書き上げてくれました。多くの方が記事に反応して、盛り上がってくれました。社員さんからも「順調だね」と言っていただけました。本当に大変でしたが最高の1ヶ月でした。一生の思い出になると思います。「早く行くなら一人でいけ、遠くまで行きたいならみんなと行け」を体感しました。本当にありがとうございました。requestStockLike69@naro143https://blog.naro143.com/Follow株式会社ディー・エヌ・エー1999年に創業した株式会社ディー・エヌ・エーはゲームを中心に、オートモーティブ、ヘルスケア、スポーツなどの事業分野にも進出し、インターネットや人工知能(AI)を活用した新しい挑戦を続けています。upLoginユーザーは見つかりませんでした。