3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

関西の金欠学生が、約4.4万円でiOSDC Japan 2026に行ってきた話

3
Posted at

はじめに

私は近畿大学 情報学部 2回生の上野 愛翔(うえの まなと)と申します! 大学に入学してから初めてパソコンを買ってコーディングを始め、2025年12月からSwiftを触り始めて、iOSエンジニアを目指しています。

1回生のときはハッカソンに出たり、Swift Student Challengeにアプリを提出したりといった活動を頑張っていました。ほかにも、近畿大学 情報学部のPR動画に出演したり、Apple on Campusに学生スタッフとして参加したりしています!

参考:Mac Fanに掲載していただいた記事 https://macfan.book.mynavi.jp/business/article/112103/

今回は、私にとって人生2回目のカンファレンスとなる iOSDC Japan 2026 に参加した経験や感想を残したいと思い、この記事を書いています。 ちなみに、人生1回目のカンファレンスだった try! Swift Tokyo 2026 の参加レポートはこちらです。

カンファレンスに、もっとたくさんの、いろんな学生に参加してほしいという思いがあります。なので、カンファレンス参加が不安な方や迷っている方にはぴったりの記事だと思います!! ぜひ最後まで読んでいただけると嬉しいです。

iOSDC Japan 2026 いく?いかない?いかな、、、いく!!

iOSDCには、企業が学生の参加を支援してくれる制度があります。私はSTORESさんの学生向け参加支援制度(交通費・宿泊費を支援していただけるもの)に応募しましたが、残念ながら落選してしまいました。

こうした制度を用意してくださる企業があること自体、学生にとって本当にありがたいことです。気になる方は、毎年夏前ごろに出る各社の告知をチェックしてみてください。

一度は見送ろうと思っていた

実は、iOSDCの1週間前までは、金銭的な面で今年の参加は見送ろうかなと思っていました。でも、一緒に参加する同級生と電話しているときに「やっぱり行こう!」と急遽決まり、参加することになりました笑

救いだったのはチケット代です。iOSDC Japan 2026には、開催日時点で23歳以下の人が買える U-23チケット(2,750円) があり、学生にはとてもやさしい価格でした。

問題は、関西在住の私にとっての交通費、宿泊費、食費、、、どこを削ろうかと考えました。

夜行バスか、カプセルホテルか

夜行バスは、前回利用したときに信じられないくらい体がバキバキになって命の危険を感じたので、今回は使いませんでした。 移動は新幹線・バス・電車を乗り継ぎ、新幹線は 学割 を使いました。

そして宿は、人生初の カプセルホテル。五反田のほうにあるカプセルホテルに泊まりながら参加しました! 宿泊費は2泊で7,000円。かなり浮かせることができました!

でも結局、寝て起きたら「寝ぼけてペックフライ(胸の筋トレ)でもしたのか?」と勘違いするほど胸筋が筋肉痛で、体全体もバキバキでした。次はどっちを削るか迷いどころです。これもカンファレンスの楽しいところ(?)ですね!

結局いくらかかったの?
項目 内容 金額
チケット U-23チケット 2,750円
行き 新幹線・バス・電車(学割) 約14,000円
帰り 新幹線・バス・電車(学割) 約14,000円
現地の移動 電車(410円×6回) 2,460円
宿泊 カプセルホテル 2泊 7,000円
食費 3日間 約3,000〜4,000円
合計 約43,000〜44,000円

交通費だけで全体の6割以上。関西から参加する学生にとっては、ここが一番のハードルだと感じました。

Day0(9/11・金)

この日は前夜祭的な立ち位置なのかなーと感じました。16:00からプレオープニングがあり、その後セッションが始まりました。

会場の過ごし方

通常のトークは20分または40分で、各トークの後には15分の空き時間があります。Day2の夕方には、5分で強制終了する「LT」という形式のトークもありました。 3つの会場(トラック)で同時進行しているので、興味のあるセッションに行くもよし、行かずに企業のブースに行くもよし。すごく自由に選べます。

「そんなの選べないよ〜〜」となったあなた、朗報です。 トークはリアルタイムでオンライン配信もされていて、アーカイブも残ります。なので、見ていて理解できなかったところを後から見直したり、見られなかったセッションを見返したりできます。東京に行けなくても、セッションは聴くことができます。

通話はつながれば終わりじゃない ― CallKitで通話機能の裏側

私は、難易度よりも「Swiftでこんなことができるのか!」と衝撃を受けそうなセッションを優先して見に行くことにしました。 そこでDay0は、金 瑠加須さんの「通話はつながれば終わりじゃない ― CallKitで通話機能の裏側」を聴講しました。

このセッションが気になったのは、CallKitという存在を知らなかったのと、通話機能の開発方法を一度も聞いたことがなかったからです。

この記事はiOSDC全体のレポートにしたいので、セッション内容の解説はこのセッションだけにしておこうと思います。 以下は、私がセッションを聴いて理解した内容を自分なりに整理したものです。正確な内容は、ぜひ金さんの発表本編をご覧ください。

セッションの概要

iOSアプリで、CallKit・VoIPプッシュ・Agoraを使って通話機能を実装した実例をもとに、「つながる」だけでは終わらない、切れ方や異常終了への対応を順番に説明していただきました。

ここで出てくる Agora は、音声・ビデオ通話を実装するためのSDKです。 SDK(Software Development Kit)について、私はふんわりした理解しかなかったので軽く説明すると、名前の通り、ソフトウェア開発に必要なプログラムやAPI、その使い方を解説した文書やサンプルコードなどを一つにまとめた「開発のためのツールキット」のことです。目的別に用意された部品セット、という認識で大丈夫だと思います。 つまりAgoraは、音声通話を実装するための部品がまとまったツールキット、ということですね。

実装の構成
状態管理:サーバー側で通話を pending → active → ended の3状態で管理し、クライアント側ではenumで扱う
API:発信・応答・終了・通話一覧の4つ
着信できる状態を作る:PKPushRegistry を用意し、受け取ったVoIPトークンをサーバーに保存する
通話への参加:トークン・チャンネル名・uidを渡して、Agoraのチャンネルにjoinする
VoIPプッシュの受信時:必ず reportNewIncomingCall を呼んで、CallKitに着信を報告する。着信画面の発信者表示には、アプリ側で渡した文字列が使われる
注意点:Info.plistにマイク権限の説明文(NSMicrophoneUsageDescription)がないと、マイクにアクセスした時点でアプリがクラッシュする

ここまで聴いていて、私が分からなかったのは次の3つです。

VoIPとは?
CallKitと reportNewIncomingCall ってなんだ?
PKPushRegistry とVoIPトークンとは?
VoIPとは?

VoIP(Voice over IP)は、電話回線ではなくインターネットを使って音声通話する技術のことです。LINE通話やZoomなどがこれにあたります。

VoIPプッシュ は、APNs(Apple Push Notification service:Appleが運営するプッシュ通知の配信サービス)が届ける通知の中でも、着信専用に特化したものです。

普通のプッシュ通知には、次のような制限があります。

OSの判断で、届くのが遅れることがある
アプリが完全に終了していると、アプリのコードは動かない(通知のバナーが出るだけ)

でも電話の着信は、「今すぐ」「アプリが閉じていても」着信画面を出す必要があります。そこでVoIPプッシュを使うと、アプリが終了していても、iOSがアプリをバックグラウンドで起動して、コードを実行させてくれます。

この特権は強力なので、Appleは悪用を防ぐためのルールを設けています。

VoIPプッシュを受け取ったら、必ずCallKitに「着信が来ました」と報告しなければならない

報告しないとアプリは強制終了され、これを繰り返すと、iOSはそのアプリにVoIPプッシュを届けなくなっていきます。

なので、通話終了の合図をVoIPプッシュで送ってはいけません。終了の合図は着信ではないので、報告すべき着信がなく、ルール違反になってしまうからです。

さらに厄介なのが、登壇者の方の経験では、開発中のビルドでは違反してもクラッシュしないことがあり、リリース後に初めて問題に気づくことがある、という点です。

CallKitと reportNewIncomingCall ってなんだ?

CallKit は、Appleが提供する「iPhone標準の電話画面を自分のアプリで使える仕組み」です。これを使うと、ロック画面に普通の電話と同じ着信画面が出たり、通話履歴に残ったりします。

reportNewIncomingCall は、CallKitに「着信が来たので、着信画面を表示してください」と伝えるための命令です。上のルールの通り、VoIPプッシュを受けたら必ずこれを呼ぶ必要があります。

PKPushRegistry とVoIPトークンとは?

PKPushRegistry は、「このアプリはVoIPプッシュを受け取ります」とiOSに登録するための道具です。

登録すると、iOSから VoIPトークン(VoIPプッシュ専用の宛先のようなもの)がもらえます。これを自分たちのサーバーに保存しておくことで、後で誰かが電話をかけたときに、サーバーが「この人の宛先はこれ」とAPNsに依頼できます。

VoIPトークンの受け取りやVoIPプッシュの受信は、PKPushRegistryDelegate(「イベントが起きたらこのクラスに知らせてね」と担当を決めておく仕組み)を通して、アプリに伝えられます。

電話がかかるまでの流れ

ここまでの部品をつなげると、電話がかかる流れはこうなります。

準備:受信者のアプリが PKPushRegistry でVoIPトークンをもらい、サーバーに保存しておく
発信:発信者が発信APIを呼ぶ。サーバーは通話を pending(呼び出し中)として記録する
通知:サーバーがAPNsに、受信者のVoIPトークン宛てのVoIPプッシュを依頼する
着信:受信者のiPhoneでアプリが起動し、PKPushRegistryDelegate 経由でVoIPプッシュを受け取り、reportNewIncomingCall で着信画面を出す
応答:受信者が出ると応答APIを呼び、状態が active(通話中)になる。両者がRTCトークン(Agoraのチャンネルに入るための認証用トークン)を使ってチャンネルに入り、会話が始まる
終了:どちらかが切ると終了APIを呼び、状態が ended(終了)になる
なぜ「つながれば終わりじゃない」のか

問題は終了時です。アプリが強制終了(キル)されると、終了APIを呼ぶチャンスがありません。 するとサーバー上ではずっと「通話中」のままになり、その人に二度と電話がかけられない、といった不具合が起きます。

そこで登壇者の方は、アプリに頼らず、外側から「いなくなった」ことを検知する方法を用意していました。

通話中にキルされた場合:Agoraは切断を知っているので、Webhook(何か起きたときに外部サービスが自分のサーバーへ知らせてくれる仕組み)でサーバーに教えてもらう
チャンネルに入る前にキルされた場合:まだAgoraのチャンネルにいないので、Agoraは知らない。そこで、WebSocket(サーバーと端末がつなぎっぱなしで双方向に通信する仕組み)の接続が切れたことで検知する

つまり、「正常に終わるケース」だけでなく、「ユーザーが予想外の行動をとったケース」まで設計して、初めて通話機能は完成する、というのが、私がこのセッションから受け取った一番の学びです。

こんな感じでまとめてみましたが、「ここは実はこうなんだよ」「ここが間違っているよ」というところがあれば、バンバン指摘していただけると嬉しいです!

ここからは感想文のような内容になっていきますが、ご容赦ください。

Day1(9/12・土)
聴講したセッション

この日は次のセッションを聴講しました。

Swiftで作って学ぼう!データベース自作入門
誰一人取り残されないサービスを作る。行政アプリとしてのアクセシビリティとの向き合い方。
スマホアプリ開発におけるハーネスエンジニアリングの取り組み
ワンバンクのApple Pay対応の裏側:PassKitで作るカード追加体験

どれも内容がとても新鮮で、登壇されたエンジニアの方がそれぞれ何を信念にして開発されているのかが伝わってくるセッションでした。

とにかくブースを回りまくった

この日は、とにかくブースを回りまくりました。

前回のtry! Swiftと違って、今回は大学の友達以外にも知り合いがいて、とても楽しかったです。 私がiOS界隈でつながりを持てたきっかけは、Swift Student Challengeのイベント、try! Swift、インターン先のどれかなのですが、たくさんの方に覚えていていただけたり、新しく仲良くなれたりして、すごく温かい気持ちになりました。

ブースでは、インターン先を探していることもあって、「どんな勉強をしたらいいか」をメインに聞いていました。 みなさん本当に親身に答えてくださり、

ご自身が就職活動のときにどうしていたか
その企業に合うのはどんな考え方の人か
今の時代の流れを踏まえると、どんな考えを持って、どんな活動をしていくと強いか

など、貴重な時間を使ってたくさんのアドバイスをいただけました。 名刺をお渡しした方もいたのですが、渡し方をろくに調べていなかったので、失礼な渡し方をしてしまっていたらすみません🙏

ビンゴカードとガチャガチャ

各企業のブースには、ビンゴカードに押してもらえるハンコがあります。カードは2面分あってマスもたくさんあるのですが、この日だけで7割近く回りました。どのブースでもたくさんお話を聞かせていただいたので、我ながら頑張ったと思います。

ビンゴすると、受付の横で行われているガチャガチャ抽選に参加でき、iOSDCグッズが当たります。 イベントに参加するまで知らなかった企業のブースに行くきっかけにもなるし、純粋に楽しいし、本当にいい仕組みだなと感じました。

ランチマッチング

また、私はちょっとハードルを感じて参加できなかったのですが、ランダムにマッチングしたエンジニア同士でランチを楽しめる「ランチマッチング」というプログラムもありました。次はぜひ参加してみたいです。

学生交流会

とあしゃさんが学生交流会を開いてくださり、カンファレンス会場では知り合えなかった学生たちとつながることができました。 Day1とDay2に1回ずつ開催されていて、とあしゃさんご自身も想像していた以上にたくさんの人が参加していたそうです。

学生同士でどんな活動をしているのかを知ることができる貴重な機会で、とても楽しかったです。来年もあったら嬉しいですし、それこそ「iOSDC学生ハッカソン!」みたいなものがあっても面白いなと感じました。

画像を表示

画像を表示

Day2(9/13・日)
聴講したセッション

この日は次のセッションを聴講しました。

ボードゲームの遊び相手をFoundation Modelsで作る
LT(2本)
サイバーエージェントさんのランチ会

お昼は、サイバーエージェントさんのランチ会に参加させていただきました。 ランチの時間をたっぷり使って、就職に関する情報や相談、新卒の方のリアルな声、企業のことなどを知ることができました。参加していた学生も含めて全員がいい人だったので、初対面でも楽しく会話できました。 来年も開催されていたら、ぜひ皆さんも応募してみてください。

LTはほぼフェス

LTでは、もうほぼフェスのようにペンライトを振りまくりました。 技術力はすごいのに内容が面白おかしかったり、大喜利が始まったりと、本当にお祭りのようなはちゃめちゃさで、超楽しかったです。

名刺交換アプリ

iOSDCには、名刺交換の仕組みもありました。 参加者に配られる名札にNFCタグが入っていて、アプリでスキャンするか、スマホをかざすだけで、その人のSNSが載ったforteeのページに飛べます。SNSを交換できるだけでなく、後から見返して「どんな人と交流できたか」を思い出すきっかけにもなります。

私は今回、合計30人の方と交換できました!! Xを見ていると80人以上と交換している方もいたので、次に参加するときは100人を目指したいと思います(たぶん無理)。

スタッフの皆さんへ

3日間を通してずっと感じていたのは、イベント全体を支えてくださっているスタッフの方々や、設営をしてくださった方々の努力が凄まじいということです。

ずっと案内のために立っていてくださったり、みんながちゃんと席に座れるように誘導してくださったり。それを誰も嫌な思いをしないように、楽しく円滑に進められていたのは、スタッフさん一人ひとりの熱量と「このイベントを盛り上げたい」という思いがあったからなんだろうなと感じました。

最後まで楽しく終えられたのは、スタッフの皆さん、スポンサーの企業の皆さん、そして参加したエンジニアの皆さんのおかげです。本当にありがとうございました。

おわりに

スカラシップに落ちて、一度は参加を見送ろうとした iOSDC Japan 2026 でしたが、行って本当によかったです。

チケットは U-23チケットで2,750円。交通費と宿泊費を工夫すれば、関西からでも全部込みで約4.4万円で参加できました
企業のスカラシップ制度もあるので、気になる人は告知をチェックしてみてください
セッションはアーカイブで見返せるので、全部理解できなくても大丈夫です
ブースや学生交流会、ランチ会では、学生だからこそ親身に話を聞いてもらえます

「自分なんかが行っていいのかな」「お金が…」と迷っている学生の方、ぜひ来年のiOSDCで会いましょう!

最後まで読んでいただき、ありがとうございました!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?