アプリ開発を学ぶ上で知っておくべき基本的な知識を問うクイズを10問ご用意しました。スマートフォンアプリの構造やライフサイクル、メモリ管理、HTTP 通信、プッシュ通知、セキュリティなど、実際の開発現場で活かせる重要なポイントを網羅しています。スマホアプリ開発の基礎から応用まで幅広くカバーする内容となっておりますので、ぜひ挑戦してみてください。開発の理解を深めるための良い機会になると思います。
Q1 : 部分的なリソース更新(部分更新、PATCH)を行うのに用いられる HTTP メソッドはどれか?
HTTP の仕様ではリソースの完全置換は PUT、部分更新は PATCH で表現することが一般的です。POST はリソースの作成や非冪等な処理に使われます。PATCH は変更したいフィールドだけを送って部分的に更新でき、サーバ実装側でも差分適用の扱いになります。DELETE はリソース削除を表します。部分更新には PATCH が適しています。
Q2 : Android Oreo(API 26)で導入された背景実行制限に対して、バックグラウンドでの繰り返しタスク実行に推奨される実装はどれか?
Android 8.0 (API 26) 以降、バックグラウンドでのサービス起動やネットワーク実行に制限が入り、従来の常駐バックグラウンドサービスは動作制限を受けます。繰り返しや遅延実行、リソース制約に配慮したタスクは JobScheduler や互換レイヤーである WorkManager を用いるのが推奨です。これにより OS の最適化と協調して効率的に実行できます。
Q3 : iOS においてプッシュ通知を配信するために Apple が提供している公式のサービスはどれか?
iOS のプッシュ通知配信は Apple が提供する Apple Push Notification service(APNs)を通じて行われます。開発者は自分のサーバや外部サービスから APNs に対して通知を送信し、APNs が各デバイスへ配信します。FCM や GCM は Google のサービスで主に Android 向け、MQTT は汎用の軽量メッセージングプロトコルです。
Q4 : Android アプリをインストールする際にアプリに署名が必要なのは主に何のためか?
Android のアプリ署名は APK の配布元を識別し、インストール時に改竄が行われていないか検証するために使われます。署名はパブリックキーと秘密鍵に基づき行われ、アップデート時に同一キーで署名されていることが確認されると同一アプリとみなされます。署名はセキュリティとアップデートの整合性維持が主な目的です。
Q5 : Android でスクリーンリーダー(TalkBack など)にアイテムを読み上げさせる属性として正しいのはどれか?
Android のビューがスクリーンリーダーに読み上げられるためには、主に android:contentDescription 属性を設定します。ImageView やカスタムビューに対して視覚的な内容の代替テキストを与えることでアクセシビリティ対応が可能になります。iOS では accessibilityLabel、Flutter では semanticLabel などプラットフォームごとに対応する属性名が異なります。
Q6 : モバイルアプリで TLS 証明書検証を強化し、中間者攻撃などに対処するために用いられる手法はどれか?
TLS の基本的な証明書検証に加えて証明書ピンニングを行うと、アプリが許可するサーバ証明書や公開鍵をあらかじめ限定でき、中間者攻撃や不正な CA を介した偽証明書の影響を軽減できます。ただしピンニングは鍵更新や証明書ローテーション時の運用コストが増えるため、運用設計を慎重に行う必要があります。
Q7 : Activityが画面に表示され、ユーザとやり取りできる状態になるのはどのライフサイクルメソッドか?
AndroidのActivityライフサイクルでは onCreate → onStart → onResume の順で呼ばれます。onStart はビューが表示される準備が整った段階で、onResume が呼ばれるとアクティビティは前景にありユーザと直接やり取りできる状態になります。onPause はフォーカスを失う際に呼ばれ、ユーザ操作の受け付けは停止されます。したがってユーザ操作が可能になる最終段階は onResume です。
Q8 : ARCにおける 'weak' 参照の特徴は?
Swift の ARC(自動参照カウント)において weak 参照は参照先の参照カウントを増加させません。さらに参照先が解放されたときに自動的に nil に設定されるため循環参照の回避に有効です。ただし weak は参照先が optional 型である必要があり、参照先が解放されたことを明示的に検出できます。強参照(strong)はカウントを増やす振る舞いをします。
Q9 : Kotlin のコルーチンで CPU 集中型の重い計算を行う際に推奨される Dispatcher はどれか?
Kotlin コルーチンでは Dispatcher によって実行スレッドやスレッドプールの性質が変わります。CPU 集中型の重い計算はスレッドを多用するため専用のスレッドプールを使う Dispatchers.Default が推奨されます。Dispatchers.IO はブロッキングの I/O を扱うための最適化、Dispatchers.Main は UI スレッド、Unconfined は限定的用途向けです。
Q10 : SwiftUI で View 内の小さなローカル状態を保持するために使うのはどれか?
SwiftUI では状態管理のために属性プロパティを使います。@State は単一の View にローカルに所有される小さな状態を保持するのに用いられ、状態が変化するとその View が再描画されます。@Binding は親子間で状態を参照するため、@ObservedObject は ObservableObject による外部オブジェクトの変更監視、@EnvironmentObject は環境依存の共有オブジェクトに使います。
まとめ
いかがでしたか? 今回はスマホアプリ開発クイズをお送りしました。
皆さんは何問正解できましたか?
今回はスマホアプリ開発クイズを出題しました。
ぜひ、ほかのクイズにも挑戦してみてください!
次回のクイズもお楽しみに。