職務スキル内訳
主な職務内容の説明
iOS開発者は、Appleのモバイルエコシステム向けアプリケーションの設計、開発、および保守を担当します。彼らの主な役割は、デザインモックアップや製品要件を高品質で機能的なコードに変換することです。彼らはクロスファンクショナルチームの重要な一員であり、プロダクトマネージャー、UI/UXデザイナー、バックエンドエンジニアと密接に連携し、シームレスなユーザーエクスペリエンスを創造します。コードを書くだけでなく、直感的で堅牢な高品質のユーザー向け機能を開発することが求められます。彼らの仕事の重要な部分には、バグの特定と修正、およびアプリケーションのパフォーマンスと安定性を継続的に確保することが含まれます。彼らはまた、App Storeでのアプリ提出とリリースプロセスも管理します。最終的に、iOS開発者の価値は、ユーザー満足度を高め、ビジネス目標を達成する魅力的な信頼性の高いモバイルエクスペリエンスを構築する能力にあります。
必須スキル
- Swiftプログラミング言語: オプショナル、ジェネリクス、プロトコルなどのSwiftの機能について深い理解を示し、モダンで安全なアプリケーションを構築する必要があります。
- UIKit & SwiftUIフレームワーク: これらのフレームワークに習熟していることは、ユーザーインターフェースを構築するために不可欠です。複雑なレイアウトを作成し、ユーザー入力を処理し、ナビゲーションを効果的に管理できる必要があります。
- アーキテクチャパターン (MVVM, MVC): スケーラビリティ、テスト容易性、保守性のためにコードを構造化するために、MVVMやMVCなどのデザインパターンを適用し、説明できる必要があります。
- ネットワーキングとAPI統合: RESTful APIを扱う能力は、データのフェッチと送信に不可欠です。これには、JSON解析、非同期操作の管理、およびネットワークエラーの適切な処理が含まれます。
- 並行処理 (GCD & Operations): Grand Central Dispatch (GCD) またはOperation Queuesを使用して、ユーザーインターフェースをフリーズさせることなくバックグラウンドタスクを実行し、スムーズで応答性の高いアプリを確保する方法を理解している必要があります。
- メモリ管理 (ARC): 自動参照カウント (ARC) をしっかりと理解していることは、メモリリークやリテインサイクルを防ぐために不可欠であり、これらはアプリケーションのパフォーマンスと安定性にとって重要です。
- Gitによるバージョン管理: ソース管理にGitを使用する能力は標準的な要件です。チーム環境でブランチ、マージ、および競合の解決に習熟している必要があります。
- データ永続化: Core Data、UserDefaults、またはファイルシステムなどのツールを使用してデータをローカルに保存する方法を知っており、異なるユースケースに適したツールを選択できる必要があります。
- テスト (XCTest): XCTestを使用して単体テストおよびUIテストを作成することは、コード品質を確保するための鍵です。これは、信頼性が高くバグのないアプリケーションを構築することへのあなたのコミットメントを示します。
- Xcode IDE: 主要な開発環境であるXcodeに高度に習熟している必要があります。これには、デバッガー、パフォーマンスプロファイリング用のInstruments、およびInterface Builderの使用が含まれます。
ボーナスポイント
- Combineフレームワーク: 宣言型、リアクティブプログラミングのためのCombineの経験は、あなたを際立たせることができます。これは、非同期イベント処理に関する最新のSwiftパラダイムを熟知していることを示します。
- モバイル向けCI/CD: 継続的インテグレーションおよび継続的デリバリーパイプライン (例:Jenkins、GitHub Actions、fastlaneなど) のセットアップに関する知識は、大きなプラスとなります。これは、テストとデプロイメントを自動化し、チームの効率を向上させる能力を示します。
- 高度なSwiftUI: 基本的なレイアウトを超えて、SwiftUIでカスタムビュー、アニメーション、複雑な状態管理を実装することは非常に価値があります。これは、AppleのUIテクノロジー進化の最前線にいることを示唆します。
よくある面接質問10選
質問1: Swiftにおけるstructとclassの違いを説明してください。それぞれをいつ使用しますか?
- 主な評価ポイント:
- Swiftの型システムの基礎知識を評価します。
- 値型と参照型の理解度を評価します。
- これらの違いに基づいて実用的な設計判断を下す能力をテストします。
- 標準的な回答: 「主な違いは、それらがどのように保存され、受け渡されるかにあります。`class`は参照型であるのに対し、`struct`は値型です。これは、クラスインスタンスを代入または受け渡すときに、同じメモリロケーションへの参照を渡していることを意味します。ある参照を介して行われた変更は、他の参照にも影響します。対照的に、structを受け渡すときは、完全なコピーが作成されるため、コピーへの変更はオリジナルには影響しません。私は、`Coordinate`ポイントや`Configuration`モデルのように、永続的な識別子を必要としないデータをモデル化するために、デフォルトで`struct`を使用します。これらは、並行環境でよりシンプル、高速、かつ安全です。共有状態、継承が必要な場合、またはObjective-Cとの相互運用性が必要な場合、たとえば`UIViewController`や`UIView`のサブクラス化を行う場合は、`class`を使用します。」
- よくある落とし穴:
- 概念を混同し、どちらが値型でどちらが参照型かを間違えること。
- コアとなる値型と参照型の区別について議論せず、一つの違い(例:継承)のみを述べること。
- 3つの潜在的な追加質問:
- 「コピーオンライト」とは何ですか、そしてそれはArrayやDictionaryのようなSwiftのコレクション型とどのように関連していますか?
- 同一性演算子 (
===) が何をするものか、そしてそれが参照型にのみ機能する理由を説明できますか? structの配列があり、その要素を1つ変更した場合、配列全体がコピーされますか?
質問2: Swiftにおける自動参照カウント (ARC) とは何ですか?強い参照サイクル(リテインサイクル)について説明し、どのように解決しますか?
- 主な評価ポイント:
- Swiftのメモリ管理モデルの重要な理解度をテストします。
- 一般的なメモリリークの問題を特定し解決する能力を評価します。
weakおよびunowned参照に関する知識を評価します。
- 標準的な回答: 「自動参照カウント、略してARCは、アプリのメモリ使用量を管理するSwiftのシステムです。不要になったクラスインスタンスが使用していたメモリを自動的に解放します。各クラスインスタンスには「参照カウント」が保持されており、それがいくつプロパティ、定数、または変数がそれを指しているかを示します。強い参照サイクル、またはリテインサイクルは、2つ以上のクラスインスタンスが互いに強い参照を保持しているために、それらの参照カウントが決してゼロにならない場合に発生します。たとえば、`Person`クラスが`Apartment`インスタンスへの強い参照を持ち、`Apartment`がその`tenant`(`Person`)への強い参照を戻している場合、それらは互いにメモリ内で生き残り続けます。これを解決するには、いずれかの参照を`weak`または`unowned`にしてサイクルを断ち切ります。私は通常、寿命が短いか`nil`になりうるプロパティ(例えば、アパートのテナントへの参照のように、テナントが引っ越す可能性があるため)には`weak`参照を使用します。」
- よくある落とし穴:
- ARCの仕組みを誤って説明すること(例:ガーベージコレクションと説明する)。
- リテインサイクルの明確で具体的な例を提示できないこと。
- 3つの潜在的な追加質問:
weak参照とunowned参照の違いは何ですか?unownedをいつ使用しますか?- クロージャが強い参照サイクルをどのように作成し、キャプチャリストを使用してそれらをどのように解消しますか?
- Xcodeのメモリーグラフデバッガーを使用して参照サイクルを見つける方法を説明できますか?
質問3: UIKitとSwiftUIを比較対照してください。それぞれの主な長所と短所は何ですか?
- 主な評価ポイント:
- AppleのUIフレームワークに関する認識を評価します。
- 命令型UIプログラミングと宣言型UIプログラミングの理解度を評価します。
- プロジェクトのニーズに基づいて技術的な選択を行う能力をテストします。
- 標準的な回答: 「UIKitはAppleの伝統的な命令型UIフレームワークであり、SwiftUIはモダンな宣言型フレームワークです。UIKitでは、UIビューオブジェクトを手動でステップバイステップで作成し、変更することでUIを構築します。SwiftUIでは、与えられた状態に対してUIがどのように見えるべきかを宣言し、状態が変更されるとフレームワークが自動的にUIを更新します。 SwiftUIの主な長所は、より簡潔で読みやすい宣言的な構文、ライブプレビュー、およびAppleのエコシステム全体でのクロスプラットフォーム性です。主な短所は、新しいフレームワークであるため、より高い最低OSターゲットが必要であり、UIKitで成熟している特定の高度な機能やコントロールが不足している可能性があることです。 UIKitの長所は、その成熟度、安定性、そして豊富なコミュニティリソースです。事実上、何でも実現できます。主な短所は、必要な定型コードの量と、状態管理の複雑さであり、これがバグにつながることがあります。最新のiOSバージョンを対象とする新しいプロジェクトではSwiftUIに傾倒しますが、深いカスタマイズが必要なプロジェクトや古いOSバージョンをサポートする必要がある場合は、UIKitが依然として不可欠です。」
- よくある落とし穴:
- SwiftUIがUIKitを完全に置き換えたと述べること(これは間違いです)。
- 核となる哲学的な違い(命令型と宣言型)を明確に説明できないこと。
- 3つの潜在的な追加質問:
MKMapViewのようなUIKitビューをSwiftUIビュー内でどのように使用できますか?- SwiftUIで状態をどのように管理しますか?
@State、@Binding、@ObservedObjectについて説明できますか? - SwiftUIでの作業中に直面した課題は何ですか?
質問4: MVVMアーキテクチャパターンについて説明してください。どのようにMVCを改善しますか?
- 主な評価ポイント:
- 一般的なiOSアーキテクチャパターンに関する知識をテストします。
- 関心の分離の理解度を評価します。
- 異なるアーキテクチャの長所と短所を分析する能力を評価します。
- 標準的な回答: 「MVVMはModel-View-ViewModelの略です。Modelはデータとビジネスロジックを表します。ViewはUIレイヤーであり、データの表示とユーザー入力の受け取りを担当します。ViewModelは仲介役として機能し、Modelからデータを受け取り、それをViewが簡単に表示できる形式(整形された文字列やブール値など)に変換します。また、Viewのロジックも処理します。 MVVMは、Appleの古典的なMVC(Model-View-Controller)における「Massive View Controller」問題を解決することで改善しています。MVCでは、Controllerがビュー関連ロジックとビジネスロジックの両方で肥大化することがよくあります。MVVMでは、ViewModelがControllerからプレゼンテーションロジックを引き継ぎ、View Controllerははるかにスリムになり、ビューのライフサイクル管理のみに集中します。これにより、ViewModelはUIKitに依存しないため、UIをシミュレートすることなく直接テストできるため、プレゼンテーションロジックのテストも容易になります。」
- よくある落とし穴:
- ViewModelの責任をModelやControllerと混同すること。
- MVVMがMVCを実用的な意味で(例:テスト容易性)どのように改善するのかを明確に説明できないこと。
- 3つの潜在的な追加質問:
- UIKitベースのアプリでViewとViewModel間のデータバインディングをどのように実装しますか?
- VIPERやTCAなど、iOSで使用される他のアーキテクチャパターンにはどのようなものがありますか?
- MVVMを使用する際の潜在的な欠点や複雑さは何ですか?
質問5: Grand Central Dispatch (GCD) とは何ですか?シリアルキューとコンカレントキューの違いを説明してください。
- 主な評価ポイント:
- iOSの基本的な並行処理APIに関する知識をテストします。
- タスクとスレッドを管理する方法の理解度を評価します。
- スレッドセーフティとUI更新に関する考察能力を評価します。
- 標準的な回答: 「Grand Central Dispatch、略してGCDは、並行操作を管理するためのAppleの低レベルAPIです。これにより、メインのUIスレッドをブロックすることなく、バックグラウンドでタスクを非同期に実行できます。GCDはスレッドプールを管理し、タスクをそれらにスケジュールします。コアコンセプトはディスパッチキューであり、コードブロックを送信して実行します。 シリアルキューは、タスクが追加された順序で、一度に1つずつタスクを実行します。前のタスクが完了するまで次のタスクを開始しないことが保証されます。すべてのUI更新に使用されるメインキューはシリアルキューです。 一方、コンカレントキューは、複数のタスクを同時に実行できます。タスクは追加された順序で開始されますが、次のタスクを開始する前にそれらが完了するのを待ちません。実際に同時に実行されるタスクの数は、その時点でのシステムの資源に依存します。」
- よくある落とし穴:
- どのキューでもUI更新を実行できると示唆すること。
- 非同期実行と並行実行を混同すること。
- 3つの潜在的な追加質問:
- ディスパッチグループとは何ですか、そしていつ使用しますか?
syncとasyncディスパッチの違いは何ですか?syncを使用する際の一般的な落とし穴は何ですか?- 競合状態とは何か、そしてそれを防ぐためにシリアルキューをどのように使用できるかを説明できますか?
質問6: iOSアプリでネットワークリクエストを行い、応答を処理し、UIを更新するプロセスを説明してください。
- 主な評価ポイント:
- 非常に一般的な開発タスクの実践的な知識をテストします。
- 非同期プログラミングとスレッド管理の理解度を評価します。
- データ解析とエラー処理に関する知識を評価します。
- 標準的な回答: 「まず、APIエンドポイントの正しいURL、HTTPメソッド、ヘッダー、ボディを含む`URLRequest`オブジェクトを構築します。次に、AppleのネットワークAPIである`URLSession`、特に`URLSession.shared.dataTask(with: request)`を使用してリクエストを実行します。このタスクはデフォルトでバックグラウンドスレッドで実行されるため、UIをブロックしません。データタスクの完了ハンドラは、`data`、`response`、`error`の3つのオプション値を提供します。 完了ハンドラ内では、まず`error`を確認します。エラーがある場合は、適切に処理し、ユーザーにアラートを表示するなどします。次に、HTTP`response`を検証し、ステータスコードが200番台であることを確認します。応答が有効で`data`がnilでない場合は、`JSONDecoder`を使用してJSONデータをSwiftの`Codable`モデルオブジェクトに解析します。最後に、そしてこれは非常に重要ですが、`DispatchQueue.main.async`を使用してUIの更新をメインキューにディスパッチします。これにより、ラベルの更新やテーブルビューのリロードなど、UI要素への変更が正しいスレッドで実行されることが保証されます。」
- よくある落とし穴:
- UIを更新する前にメインスレッドに戻るのを忘れること。
- ネットワーク障害や無効なJSONなどの潜在的なエラー処理を怠ること。
- 3つの潜在的な追加質問:
- 再利用可能でテスト可能なネットワーキングレイヤーをどのように設計しますか?
- JSON解析に
Codableを使用する利点は何ですか? UITableViewで画像のダウンロードとキャッシュをどのように処理しますか?
質問7: アプリの主要な画面が、長いリストをスクロールすると遅くなります。この問題を診断し、解決するためにどのような手順を踏みますか?
- 主な評価ポイント:
- 実践的なデバッグとパフォーマンス最適化スキルを評価します。
- 問題解決への体系的なアプローチを評価します。
- Instrumentsなどのパフォーマンスツールに関する知識をテストします。
- 標準的な回答: 「最初のステップとして、XcodeのInstruments、特に「Time Profiler」と「Core Animation」ツールを使用してアプリをプロファイリングします。Time Profilerは、スクロール中にどのメソッドが最もCPU時間を消費しているかを特定するのに役立ちます。Core Animationツールは、フレームのドロップを検出し、オフスクリーンレンダリングや画像のズレなどの問題を強調表示できます。 発見された問題に基づいて、スクロールの遅延の一般的な原因としては、`cellForRowAt`内でメインスレッドで過剰な作業を行うこと(複雑な計算、同期I/O、ブロッキングネットワーク呼び出しなど)が挙げられます。もう1つの一般的な問題は、大きすぎる画像や画像キャッシュの欠如により、セルが常に画像を再ダウンロードおよびリサイズすることです。また、非効率なセルレイアウトや、計算コストの高い透明度と影の過剰な使用も確認します。 これらの問題を修正するためには、重い処理をバックグラウンドスレッドに移動し、画像キャッシュ戦略を実装し、セルレイアウトを簡素化し、`UITableView`のセル再利用が正しく機能していることを確認します。」
- よくある落とし穴:
- 診断プロセスを最初に説明せずに解決策に飛びつくこと。
- Instrumentsのような特定のツールに言及しないこと。
- 3つの潜在的な追加質問:
UITableViewにおけるセル再利用とは何ですか、そしてなぜパフォーマンスにとって重要ですか?- 「オフスクリーン」レンダリングとは何を意味し、どのように回避できますか?
UITableViewDataSourcePrefetchingを使用したことはありますか?それはどのように役立ちますか?
質問8: iOSにおけるデータ永続化の選択肢にはどのようなものがありますか?それぞれを他の選択肢よりもいつ選択しますか?
- 主な評価ポイント:
- プラットフォームで利用可能なデータストレージソリューションに関する知識をテストします。
- 特定のタスクに適したツールを選択する能力を評価します。
- 異なる永続化方法間のトレードオフの理解度を評価します。
- 標準的な回答: 「iOSには、データ永続化のためのいくつかの選択肢があります。主なものは`UserDefaults`、ファイルシステム(例:`Codable`データをファイルに書き込む)、`Core Data`、そして`Realm`のようなサードパーティデータベースです。 私は、ユーザー設定や「ダークモード有効」フラグのような小さなユーザー設定を保存するために`UserDefaults`を選択します。これは、大量または複雑なデータには適していません。 ユーザープロファイルのような、より大きく、構造化されているが自己完結型のデータオブジェクトを保存するために、`Codable`オブジェクトをJSONファイルにシリアル化してファイルシステムに直接保存することがあります。 クエリ、アンドゥ管理、データ移行が必要な複雑なリレーショナルデータには、`Core Data`を選択します。これは強力なオブジェクトグラフ管理フレームワークであり、大規模で相互接続されたオブジェクトセットを管理する必要があるアプリに最適です。 `Realm`のようなサードパーティの選択肢は、Core Dataよりも設定が容易で、高速でモダンなクロスプラットフォームデータベースソリューションが必要な場合に良い選択肢となります。」
- よくある落とし穴:
- 大量の機密データや複雑なデータを保存するために
UserDefaultsを推奨すること。 - 「データを保存する」以外の
Core Dataのユースケースを明確に説明できないこと。
- 大量の機密データや複雑なデータを保存するために
- 3つの潜在的な追加質問:
- Core Dataを扱う際の課題にはどのようなものがありますか?
- 認証トークンなどの機密情報を安全に保存するにはどうしますか?
- アプリのサンドボックス環境とその主なディレクトリ(DocumentsやCachesなど)について説明できますか?
質問9: あなたがこれまでに携わったiOSプロジェクトの中で最も挑戦的だったものについて教えてください。どのような課題があり、どのようにしてそれを克服しましたか?
- 主な評価ポイント:
- 実世界の例を通して問題解決スキルと技術的な深さを評価します。
- コミュニケーションスキルと複雑な状況を明確に説明する能力を評価します。
- あなたの回復力、当事者意識、および協調性に関する洞察を提供します。
- 標準的な回答: 「前回のプロジェクトで最も挑戦的だったのは、複数のユーザーが共有ドキュメントを同時に編集できるリアルタイムコラボレーション機能を実装することでした。主な課題は、競合なしにデータの整合性とスムーズなユーザーエクスペリエンスを確保することでした。当初、単純に更新を送信するだけのアプローチでは、競合状態やデータの上書きが発生しました。 これを克服するために、私はコンフリクトフリー複製データ型(CRDT)モデルをテキスト編集に採用することを調査し、チームを主導しました。まず、その実現可能性を示すための小さな概念実証を構築しました。その後、バックエンドチームと密接に連携して、データ構造とWebSocket通信プロトコルを定義しました。私は、UIをロックすることなく、サーバーからの変更とローカル編集をマージするためのクライアントサイドロジックの実装を担当しました。これには、並行処理と慎重な状態管理に関するかなりの作業が含まれました。最終的な結果は、アプリの主要機能となったシームレスなGoogle Docsのような編集体験でした。」
- よくある落とし穴:
- あまりにも単純すぎる、または技術的でない課題を選択すること。
- 問題にのみ焦点を当て、取られた手順と最終的な成功した結果を明確に説明しないこと。
- 3つの潜在的な追加質問:
- その実装中にどのようなトレードオフをしなければなりませんでしたか?
- これを解決するために、他のチームメンバー(例:バックエンド、QA)とどのように協力しましたか?
- もしもう一度構築するとしたら、何か違うことをしますか?
質問10: iOS開発の世界における最新のトレンドや変化にどのように対応していますか?
- 主な評価ポイント:
- この分野への情熱と積極性を評価します。
- 継続的な学習へのコミットメントを評価します。
- 情報源と専門能力開発の習慣に関する洞察を提供します。
- 標準的な回答: 「iOS開発のような急速に進化する分野では、継続的な学習が不可欠だと考えています。私の主な情報源は毎年開催されるAppleの公式WWDCセッションです。基調講演やプラットフォームの一般教書演説を視聴し、SwiftUIやSwift自体の更新など、自分の仕事に関連するセッションを深く掘り下げるようにしています。また、Hacking with SwiftやSwift by Sundellのような有名なiOSコミュニティブログを定期的にフォローし、実践的なチュートリアルや洞察を得ています。さらに、iOS Dev Weeklyのようなニュースレターを購読して、その週の最も重要な記事やニュースの厳選された要約を受け取っています。最後に、Stack Overflowのような開発者フォーラムで活発に活動し、GitHubのオープンソースプロジェクトに貢献したり、そこから学んだりして、他の人が現実世界の問題をどのように解決しているかを見ています。」
- よくある落とし穴:
- 「オンラインで記事を読んでいます」のような漠然とした回答をすること。
- 具体的なリソースを挙げることができず、真の関与の欠如を示唆すること。
- 3つの潜在的な追加質問:
- 前回のWWDCで最も興味深かったことは何でしたか?
- 最近興味深いと思ったオープンソースライブラリについて教えてください。
- プロジェクトで新しいテクノロジーやフレームワークを採用するかどうかをどのように決定しますか?
AI模擬面接
模擬面接にはAIツールの利用をお勧めします。プレッシャーに適応し、回答に対する即時フィードバックを得るのに役立ちます。もし私がこの役割のために設計されたAI面接官であるならば、次のようにあなたを評価します。
評価1: 技術的な専門知識と深さ
AI面接官として、私はあなたの技術的知識の深さを評価します。Swiftの言語機能、ARCやリテインサイクルなどのメモリ管理の概念、MVVMなどのアーキテクチャパターンについて具体的な質問をします。たとえば、weakとunowned参照の違いを説明したり、プロトコル指向アプローチの利点を説明するように求めたりして、あなたの技術的な説明の正確さと明確さを評価します。
評価2: 問題解決と実用的な応用
AI面接官として、私は知識を実用的なシナリオに適用するあなたの能力をテストします。「アプリが断続的にクラッシュしています。どのようにデバッグしますか?」や「ソーシャルメディアのフィードのデータモデルをどのように設計しますか?」といった架空の問題を提示します。あなたの問題解決プロセス、エッジケースを考慮する能力、および提案された解決策の背後にある論理を評価し、あなたが日常業務でどのように行動するかを確認します。
評価3: コミュニケーションとプロジェクト経験
AI面接官として、私はあなたの過去の経験を深く掘り下げ、あなたの影響力とスキルを理解します。「大規模なレガシーコードベースをリファクタリングする必要があった時のことを説明してください」や「あなたが誇りに思っている機能を、構想からリリースまで説明してください」といった行動質問をします。私の焦点は、あなたがどのように回答を明確に構成し、技術的な詳細を技術的な聴衆に明確に伝え、過去の仕事で当事者意識と協調性を示したかになります。
模擬面接の練習を始めましょう
シミュレーション練習を開始するにはここをクリック 👉 OfferEasy AI Interview – AI Mock Interview Practice to Boost Job Offer Success
🔥 主な機能: ✅ トップ企業 (Google, Microsoft, Meta) の面接スタイルをシミュレート 🏆 ✅ リアルな体験のためのリアルタイム音声インタラクション 🎧 ✅ 弱点を改善するための詳細なフィードバックレポート 📊 ✅ 回答の文脈に基づいた追加質問 🎯 ✅ 内定獲得率を30%以上向上させることが証明されています 📈
あなたが新卒🎓であれ、キャリアチェンジ🔄を考えているのであれ、夢の企業🌟でのポジションを目指しているのであれ、このツールはあなたが賢く練習し、あらゆる面接環境で自分を際立たせる力を与えます。
このプラットフォームは、ライブ音声ベースのQ&A、文脈に応じた追加質問、そして包括的な面接分析レポートを提供します。このフィードバックループにより、あなたは自分の弱点を特定し、体系的にスキルを向上させることができます。多くのユーザーが数回の練習ラウンド後に内定獲得率の顕著な向上を報告しています。