未熟学生エンジニアのブログ

TetsuFeの個人開発ブログ

TetsuFeはテツエフイー と読みます。FlutterやWeb周り全般、チーム開発について語るブログ

iPhoneがプッシュ通知を受け取る仕組み

IP通信の基本

Webサーバをインターネット上に公開する際、サーバに固定IPアドレスを割り当てる必要があります。

クライアントはそのIPアドレスを頼りにインターネット上につながったルータをたどり、そのWebサーバにいき着くことになるからです。

参考: https://www.vwnet.jp/Windows/Network/WhatIsNetwork.htm

疑問

しかし、プッシュ通知の場合はどうか?

こちらは逆に サーバからモバイル端末(iPhoneなど)へ通知(=情報)を送っているように見えますが、モバイル端末側には固定IPなど割り振られていないことが一般的なはず。ではどうやってモバイル端末に情報を送ることができるのだろうか?

そんなふうにふと疑問に思ったので調べてみました。

調査

iPhoneなどのiOS端末の場合は、APNs(Apple Push Notificaction Service)というAppleが提供するサービスを介して、アプリ開発者が端末にpush通知を送ることができます。

AppleのAPNs解説記事に、以下のような記述がありました。

On initial launch of your app on a user’s device, the system automatically establishes an accredited, encrypted, and persistent IP connection between your app and APNs. This connection allows your app to perform setup to enable it to receive notifications, as explained in Configuring Remote Notification Support.

意訳:ユーザのデバイス上の(あなたが開発した)アプリの最初の起動時、永続的なIPコネクションがアプリとAPNsの間で確立されます。このコネクションがpush通知をアプリが受け取るためのセットアップを(可能に)します。

ということだそう。

おそらく、persistent(永続的な)ということなので、 アプリを一度起動してからは基本的にずっと端末上のアプリとAPNsがコネクションを貼り続けている のでしょう(端末がインターネットにつながる状態になるたびに繋ぎ直すなどして)。

この時のコネクションは端末側からリクエストを送り、固定IPに紐づいたAPNsサーバにつないでいるのでしょう。そして、コネクションが一度張れる状態になってしまえばサーバからも通知を送ることができる。 そういうことだと思います。間違っていたら教えてください。

補足

ちなみにApple公式ではありませんが、日本語の記事もありました。

https://www.bizmobile.co.jp/tech_mdm_02.php?id=3564

こちらではよりAPNsだけでなくGCM(Google Cloud Messaging)の説明もされていました。

active recordパターンについて調べてみた

active recordパターンとは

  1. データ、2. ドメインロジック、3. データベースアクセスをカプセル化したメソッドの3つを一つのクラスとして作成するパターン。

RailsではActiveRecordという名前のクラスがありますが、これはActiveRecordパターンという一般的なパターンに基づいたもので、DjangoなどでもActiveRecordパターンは用いられています。

https://docs.djangoproject.com/en/3.0/misc/design-philosophies/

オブジェクトがそのままデータベースと一体化しているような形で操作できるため、非常に便利です。

ただし、オブジェクトのフィールドがデータベースのカラムに一致していないような場合にはかえって一部のフィールドだけ別で管理する必要が生じて複雑になってしまうため、万能とも言い切れません。

原典?

https://www.martinfowler.com/eaaCatalog/activeRecord.html

また、PoEAA(エンタープライズアプリケーションアーキテクチャパターン)で詳しく解説があります。

もう少し詳しい記事

https://www.techscore.com/tech/Ruby/Rails/other/designpattern/2/

2019年のオススメ漫画・ラノベ・ゲームを3つ

2019年の個人的学びとオススメ漫画・ラノベ・ゲーム - 未熟学生エンジニアのブログ に入れようかと思ってやめた部分です。

1. しゅごキャラ!

小学生時代見ていたアニメ。少女漫画「なかよし」で連載している少女漫画ですが、「なりたい自分」を探す主人公たちを見ているとこの歳になってからの方が心に刺さるシーンが結構あります。全12巻揃えたので借りたい人いたら貸します。ファンでなければ正直最初の3巻だけ読めば十分です。

就活と関連づけて考えてる記事もあるようです。実際就活生にはオススメの作品です。

http://amsm10lc.hatenablog.com/entry/20160720/1469019588

気になった方はまずこちらからあらすじを読んでみてください。

https://honcierge.jp/articles/shelf_story/5098

普通にオススメできる作品なので、以下に当てはまる人は一度しゅごキャラ!を読んでみましょう。なりたい自分になるための勇気をもらえるかもしれません。

  • 周りの目を気にして「外キャラ」を作っている
  • なりたい自分がいくつもある
  • いい歳だし今更「キャラチェンジ」なんてできない…

何歳でも遅くはありません。30くらい?の先生がなりたい自分を見つけるエピソードもあります。(3巻)

2. やはり俺の青春ラブコメはまちがっている。

www.amazon.co.jp

この節で紹介する3作品の中では一番薦めやすい作品になります。ひねくれた主人公とクールな女の子と明るい女の子が織りなす 三角関係部活もの です。 シナリオが敢えてぼかして書かれている(語弊あるかも)ために考察が捗る作品 なのが他と違うポイントですね。後は主人公がすごいリアルなひねくれオタクって感じで共感できる部分も多いところが見どころですね。普段ラノベは読まないので、久しぶりの作品ですがかなり良かったですね。ちなみに14巻だけ読みました。他はアニメと考察ブログで補完しました

読んだきっかけ

ゆらりー。という昨年まで大学生YoutuberをしていたYoutuberがいて、その配信で絶賛されていたのがこの作品でした。そして考察ブログを見てみると、考察でいろんな解釈がされていて面白い作品だと思ったのでした。あと、昔アニメ研究会に2ヶ月ほど在籍していたときに上映されていたのがこれでした。

hyohyolibrary.com

感想

自分の予想をいい意味で裏切った切ない余韻を残す作品でした。三角関係という性質上、どうやっても切ない部分はあるに違いないということはわかっていたのですが、可哀想過ぎる。作者は切ない物語を書きたくて、そういう役割をもったキャラクターだったのだなと思うと・・っと書いていて思ったのですが、結構この作品は(最後まで)不遇なキャラが何人かいるので、その兆候はすでに見えていたのかもしれませんね。

春からアニメ化もされるようです。このタイミングで一気見してもいいかもですね。見たら泣きそう・・

www.tbs.co.jp

3. マブラヴマブラヴ オルタネイティブ

ギャルゲー・18禁ゲーをプレイしたことがない方はここは伝わらないので無視してください。また、これを最後に本記事は終わりなのでブラウザバックしてください。

store.steampowered.com

プレイ(視聴)したきっかけ

Youtubeの垢バレが怖いのでぼかしますが、とあるエンジニア系配信者さんが「シュタゲよりマブラヴの方が面白い」と言っていたのがきっかけでした。そして某サイトの評価をみてみると上位10件くらいに入っていて、こんなに評価高かったんだと思ってやることにしました。

マブラヴ」多分ネタバレなし感想

マブラヴ」はYoutubePSP版のプレイ動画が上がっていたのでそこで見ました(本当はよくないのですが)。

 泣ける ゲームです。個人的には過去最高シナリオのゲームでした。個人的には一番の見どころは「幼馴染キャラの一途な恋心と理不尽な運命」 なのですが(過ごした時間の長さを感じる演出がヤバイ)、 それ以外の要素も一級品です。ちなみにかわいいキャラを愛でるタイプのゲームではないので注意です。絵も古いですしね

  • パラレルワールド要素
    • 量子力学理論(もはやセット?)が出てきます
  • 地球外生命体とのロボットバトル
    • バトルは熱くなれる。ご都合主義ではなく、しっかりキャラが死にます。
    • ただし機体を操作するタイプのゲームが遊べるわけではありません
    • 無敵のラザフォード場、厨二心をくすぐられます。アクションが苦手なノベルゲーと相性いいなと思いながら見てました(まあこのゲームではアクションのアニメーションもあるんですが)
  • 先生が最高に悪カッコいい

ちなみに2020年にアニメ化もするようなので、そちらを見るのもアリかと思います。

animebu.com

話し始めると長くなるのでここら辺で終わりにします。

今年読んだ本の感想

年末までにちゃんと書きます。

お金2.0 自分の価値を上げることが重要になってきているという話が印象的。 また、価値とは何か、良いコミュニティの要素なども参考になった。何度か読み返したい本。 なんとなくSNS時代多くの人が感じていることをわかりやすく言語化されていて、かなりオススメです。

ハートドリブン 起業家の自伝は読んだことがなったので楽しんで読めました。と言っても3割くらいしか読んでいないけど。経験的な要素が強く、理論的な本ではないですが、いろんな失敗も赤裸々に語られているので、失敗から学ぶことができる本です。相談できる人の大切さや周りの人から意見を取り入れやすくすることの大切さなど、割とハートドリブン以外の部分で再認識した点が多かったです。

Running LEAN

起業の科学   これはちょっとしか読んでません。読みやすいんですけどね

つい体験の作り方

iOSアプリ設計パターン入門

アジャイルソフトウェア開発の奥義

リファクタリング

ルサンチマンの哲学

比較して学ぶRxSwift 学会中に読んだ、割と思い出深い本。新潟の図書館のベンチと机でコード書きながら何となく理解。

テスト駆動開発 これも学会中に読んだ思い出

Docker/Kubernetes

現場で使えるDjango REST Framework リファレンスとして使用。ネットにサンプルが少ないDjangoではかなり重宝しました。認証周りの実装とかシリアライザ、カスタムビューの使い方が参考になりました。スタマチが素早くできたのはこの本のおかげです。

小林さんちのメイドラゴン8 最近深い話が多くなってきてるメイドラゴン。1期はぼーっと見るアニメでしたが、2期は内容にも期待です!

しゅごキャラ!

やはり俺の青春ラブコメは間違っている

app store以外からXcodeをインストール・アップデートする

qiita.com

ダウンロード

https://developer.apple.com/download/more/ からダウンロードできる。

インストール

  1. 普通にダウンロードしたxipファイルを解凍し、あとは適当にdmgからインストールする
  2. Xcode.appをアプリケーションフォルダに移動させましょう。

2をしないと、

Cannot find "xcodebuild". Xcode 9.0 or greater is required to develop for iOS.

などのエラーが発生することになります。

アップデート

macOS 10.15.1 11 -> 11.2.1 で試しました

  1. 既存のXcodeを削除
  2. 新しいxipを解凍し、dmgからインストール(上記のインストールと同じ)
  3. Xcode.appをアプリケーションフォルダに移動させましょう。

REST、GraphQL、gRPCの使い方中心のまとめ

僕はRailsで初めてRESTでCRUD APIを作ったのですが、その後いろいろなバックエンドアプリを実装したり、他の方の記事や実装をみたり、チュートリアルをこなしたりするうちに GraphQL、gRPCというものもここ数年普通に使われるようになってきているということを知り、そろそろそれらを選択肢として考えた上で採用する必要がある ように感じています。

この記事は、REST、GraphQL、gRPCの3つのAPI設計手法(思想?)を使い方中心に調べたことのまとめです。

ちなみに、詳しくはこちらの記事が詳しそうです。このブログ記事を書く際にも一部参考にしました。逆に詳しすぎて読む気があまり起こりません。次に新しいサービスを作る際や、新しい構成を考える際に読もうと思っています。(OpenAPIがRESTにあたるようです)

employment.en-japan.com

REST

  • HTTPメソッド(GET, POSTなど)とエンドポイント+リクエストボディ+αの組み合わせ
    • 例1: GET /api/users
    • 例2: POST /api/users リクエストボディ={'name': 'hoge', 'email': 'fuga@fuga.fuga'}
  • サーバー側の実装
    • 上記の組み合わせに応じてアクセスを受け取れるようにし、アクセスに対してレスポンスを返すように実装
  • フロントエンド側の実装
    • サーバ側の実装に対応するようにHTTPリクエストを送り、受け取れるように実装

RESTはrailsなどでおなじみという方は多いと思います。

railsを例にしたREST概念の説明についてはこちらがわかりやすそうです。

www.slideshare.net

実際にRailsAPIを作ってみる手順

qiita.com

GraphQL

参考:「GraphQL」徹底入門 ─ RESTとの比較、API・フロント双方の実装から学ぶ - エンジニアHub|若手Webエンジニアのキャリアを考える! など

  • エンドポイント+クエリ
  • エンドポイントは一つでも複数でも良い。リクエストボディに任意のクエリを指定することでそれに応じたレスポンスが返る。
  • サーバー側の実装
    • (一般に)単一のエンドポイントを用意。クエリに応じてレスポンスを返すように実装
  • フロントエンド側の実装
    • GET/POST + エンドポイント + クエリ とのセットを送り、返ってきたレスポンスを処理できるよう実装
  • クエリは二種類に大別され、それぞれ Query と Mutation という。これは言い換えると GET と POSTだけでいいということらしい。
    • RESTよりもいい感じにシンプルでわかりやすい
  • クエリがわかりやすいこと、クエリとレスポンスが同じような形式で返ってくることから、エンドポイントが一つでもクエリの意味が十分わかりやすいとのこと。
    • RESTよりもいい感じにシンプルでわかりやすい
  • クエリが柔軟に表現できるため、複数のテーブルからの情報をまとめたりといった複雑な参照系処理が得意。
    • 単純な表現しかできないRESTに比べて、ここが差をつけるポイントとなる

実例に関しては、先ほど上で挙げたブログ記事用のリポジトリが参考になりました。

https://github.com/gfx/graphql-blog/blob/master/frontend/App.tsx

https://github.com/gfx/graphql-blog/blob/master/frontend/client.tsx

gRPC

  • RPCという方式を使っているらしい。
  • エンドポイントが仮想的。パス指定自体をしないかのように利用できる
    • HTTPの1行目のリクエスト行は GET / または POST / になるということ
  • 全てPOSTという実装も全然OK
  • HTTP API の設計方向 - V - Medium
  • GraphQLも2種類になったとはいえ、それを凌駕するシンプルさ
  • Protocol Buffersというスキーマを定義して、そこからクライアント・サーバーのコードを自動生成可能
  • JSONを使わない。バイナリによる通信で高速。
  • Google系のライブラリを使っている場合は、意図せずgRPCを使っているかも・・。Firebase(Firestoreなど)はまさにそう

CRUDの実装は以下が参考になります。エンドポイントのパスが本当に一つしかありません(というか設定していません)

medium.com

github.com

導入事例

クックパッドがgRPCを採用するまで サービス間通信で抱えていた課題と、RubyでgRPCを運用するための工夫 - ログミーTech

比較ポイント

  • エンドポイントの数について
    • エンドポイントが一つだと、ログやキャッシュが特殊な方法になる場合がある。RESTはその点で従来の知見がたまっているため有利な印象。

その他見つけた記事

Googleによる比較記事 https://cloudblog.withgoogle.com/ja/products/api-management/understanding-grpc-openapi-and-rest-and-when-to-use-them/amp/

個人的最強キャラソンバンド「プラズマジカ」曲紹介

今回の話

プラズマジカとは

www.youtube.com

  • SHOW BY ROCK!! というソシャゲ(を筆頭としたメディアミックス作品群)に登場する4人組バンド。
  • ボーカル&ギター「シアン」、ボーカル&ギター「チュチュ」、ギター「レトリー」、ドラム「モア」の4人組。
  • キャラソンが多い。ポップでノリのいい、王道(?)キャラソンがメイン。
  • 曲数が多い
  • 実はサンリオがやってるソシャゲだったりする。アニメは2014年と2015年で合計2クール放送されてる。海外人気があるのは、多分ミニキャラとか獣耳とかが海外人気が高いからかな?

詳しくはwikipedia参照

SHOW BY ROCK!! - Wikipedia

曲がいい

王道な青春謳歌ソングが多く、恋愛や友情がテーマの曲が多い。ラブライブとかけいおん!のようなリアル高校生というよりは少しファンタジーなキャラクターたちが歌っているので、いい感じに幼げな雰囲気が出てます。

何度もいいますが、曲数が多い のが魅力です。キャラソンで曲数が多いことは珍しいんですが、プラズマジカはほんとに曲が多くて飽きません。

さっそくオススメ曲を紹介します。

My Pace!!

www.youtube.com

一番最初はキャラソン成分弱目のこの曲から。この曲は主人公「シアン」(藍色の髪で猫耳つけた子)が歌ってます。キャラソン系でこういういい感じにかわいくてまとまりのある曲って少ない気がする。あんまり詳しくはないけど、多分ラブライブとかバンドリ、けいおんとかでもあんまりないんじゃないかな?(「じゃじゃ馬 Way To Go」とかが好きな人には合いそう)

オモイノシルシ

こちらから視聴できます。

music.apple.com

この曲は結構熱い曲です!音ゲーの曲だけあって(?)、こんな感じの結構まとまった感じの曲が多いんですよね。

Panoramatic Adventure

クールな曲もあります!

www.youtube.com

この曲はボーカル「チュチュ」の曲になります。ただ残念ながらこういうクールな曲は少ないです・・

Favorite Number

次はいきなりハードルが上がります・・

www.youtube.com

この曲も主人公「シアン」ボーカルの曲になります。このあたりはキャラソンレベルが一気に上がります。ちょっとアニメ好き、みたいなレベルの友人に聞かれたらドン引きされる可能性があります。まあそれ言い出したら一曲目でアウトかもですが・・

Close to you

別れの歌です。卒業シーズンにぴったりですね。少し寂しい感じの曲調で、これまたいいです。

music.apple.com

青春はnon stop!

こちらもイントロで脱落する方がいるかもしれません・・

www.youtube.com

この曲は個人的一番のスルメ曲です。特にイントロが微妙だと思っていたんですが、アニメをみたりしてキャラを好きになってからは一番アガる曲になりました。こういうところがキャラソンの魅力ですね。キャラ一人ずつのソロがあるのも盛り上がる!

流星ドリームライン

こちらは落ち着いた感じの曲です。アニメではバンドメンバー間でのすれ違いがあり、この歌を歌って結束を取り戻すという感動的なシーンの挿入歌として使われていて印象的な曲です。

www.youtube.com

これも普通にいい曲なんですよね・・

まだまだあります!!

プラズマジカ」の最大の魅力は、その曲数です。

ありそうでなかった「あざとさ抑えめのキャラソン」というジャンルかつ曲数が多い。意外と飽きずに回せるんですよね。あざとさ抑えめなので、けいおん!のようなインパクト強すぎの居屋も少ないんですよね

Have a nice MUSIC!!

www.youtube.com

イントロが心に刺さる曲です。

「好きならできるはずさ 好きだからできるんだよ 音楽が好きな気持ち 誰にも止められない・・」 「君ならできるはずさ 君だからできるんだよ 一緒に奏でてみよう 虹色の音符・・」

ハートをRock!

音楽に疎いのでわかりませんが、タイトル通りなんかロックっぽい曲です。

www.youtube.com

サビの合いの手が最高に乗れる曲です!

その他

  • Can't stop DAISUKI !!
  • Joyfulness
  • ハマって☆Rockin' Sweet

等が僕の好きな曲ですが、それ以外にもまだまだあります。ぜひお気に入りの曲を探してみてください!

音楽的な考察?

いわゆる「4つ打ち」の曲が多い気がします。間違ってたら教えてください。

ぜひアニメも観よう

正直自分も流し観しただけですが・・

https://sp.nicovideo.jp/watch/so25941634?cp_in=watch_watchRelatedContents

多分アニメをみると「レトリー」が好きになると思います。レトリーは引っ込み思案なタイプで、バンドメンバーにも心を開けなかったりするのですが、徐々に成長していく姿が微笑ましいです。

アニメは結構勇気づけられるようなエピソードが多く、元気や勇気が欲しい時にピッタリです。もちろん曲も!

最初微妙だなと思ってた曲もキャラが好きになると良さが分かってくる部分があって、何度も聞いているとどの曲も最高の曲に思えてきます。

プラズマジカ以外もいいよ

ロリ少女が好きな方は「クリティクリスタ」

頭をおかしくしたいとき向けですね。こちらはロリ成分多めの中学生バンドです。アニメにも結構出てきます。

  • 「ループしてる」
  • 「放て!どどどーん!」
  • 「Yes!アイドル♥宣言」

個人的に「ループしてる」「Yes!アイドル♥宣言」は一度聞くとなかなか面白いんじゃないかと思います。

音ゲーの曲ってこういうの多いんですかね?結構独特な感じのテンポの取り方(?)というのか、しっかりアガるところを作ってきてる感があります。

個人的オススメ「ドーリィドルチ」

  • 「Heart」
  • 「恋とメリーゴーランド」

このタイプの曲は2曲しかないのが残念です・・