DP-420 合格体験記

Microsoft Certified: Azure Cosmos DB Developer Specialty を取得したのでその体験をレポートしてみようと思います。ポエムの一種だと思って読んでください。  
あと、字が多いです。読みづらくて申し訳ないです。

# 認定資格および試験概要

## 認定資格

- 公式ページへのリンク  
  [認定資格 Microsoft 認定: Azure Cosmos DB Developer Specialty](https://learn.microsoft.com/ja-jp/certifications/azure-cosmos-db-developer-specialty/)
- 認定資格の詳細から抜粋
  > この認定資格の受験者には、Azure 向けアプリの開発と Azure Cosmos DB データベース テクノロジの使用に関する確かな知識と経験が求められます。Azure Cosmos DB for NoSQL の API を使用するアプリケーションの開発に習熟している必要があります。この API に対して効率的な SQL クエリを記述し、適切なインデックス作成ポリシーを作成できる必要があります。JavaScript でサーバー側オブジェクトを作成した経験が必要です。さらに、Azure でのリソースのプロビジョニングと管理に精通している必要があります。JSON を解釈できること、C# または Java コードを読めること、PowerShell を使用できることが求められます。

### 筆者の所感

- **怯まないことが重要**  
  認定資格の受験者に求められることを読むと大仰に見えますが、**確かな経験**とか**習熟**などという言葉に怯む必要はありません。  
  実際のところ、ラーニング パスやドキュメントに出てくる情報をしっかり理解できていればそれほど困難を極めるような試験レベルではないと感じました。  
  そもそも、Specialty カテゴリの試験は中級相当なので、レベル的に鬼ムズイってことはないです。
- **初心者には相対的に難易度が上がることは事実**  
  NoSQL の経験がない方や Azure が初めての方などには覚えることや理解しなければならない概念等が多く登場するため相対的な難易度が高く感じられるとは思います。
  - 初心者に難しそうな概念の例
    - Azure Cosmos DB アカウント
    - 論理設計から物理設計に落とし込む際の非正規化
    - パーティション分割と水平スケーリング
    - 整合性レベル
    - マルチリージョン書き込み

## 試験概要

- 公式情報  
  [試験 DP-420: Microsoft Azure Cosmos DB を使用したクラウドネイティブ アプリケーションの設計と実装](https://learn.microsoft.com/ja-jp/certifications/exams/dp-420/)
- 試験時間は 120 分
- OpenBook 対応試験  
  [Microsoft Learn Blog](https://techcommunity.microsoft.com/t5/microsoft-learn-blog/introducing-a-new-resource-for-all-role-based-microsoft/ba-p/3500870?s=09)で案内されているように、試験中に Microsoft Learn サイトを閲覧できる機能です。  
  これにより、「ちょっと忘れた」「あれ何だっけ？」というような問題を解決できますので、暗記テストに辟易している方には朗報かと思います！

# 試験について

## 筆者の成績など

- 受験日: 2023/09/12
- 言語: 日本語
- 合格点: 700
- 得点: 811/1000
- 分野別(スコアレポートのグラフを目測した値)
  1. データ モデルの設計と実装 (35~40%): 約 90%
  1. データ配布の設計と実装 (5~40%): 約 80%
  1. Azure Cosmos DB ソリューションの統合 (5~10%): 約 63%
  1. Azure Cosmos DB ソリューションの最適化 (15~20%): 約 70%
  1. Azure Cosmos DB ソリューションの保守 (25~30%): 約 64%
- テストの完了まで、Microsoft Learn の検索時間を含めて 98/120 分程度の時間がかかりました

## 自己分析

- 他ソリューションと組み合わせて回答する必要がある[3.]が伸び悩んでいるのは想定通りでした。
- [5.]はあまり興味が強く持てていない分野なので、伸び悩んでいるのは想定通りでした。
- [1.]については、NoSQL の経験が浅いので失点するかと思っていましたが、想定よりも多く得点できました。
- トータルソリューションをどうやって構築し、その中で Cosmos DB がどのような位置付けなのか、という理解が必要だと思いました。
- 保守に関しては Cosmos DB に限った話ではないので、これからクラウドテクノロジを学ぶ中で全体的なスキルアップが必要だと思いました。

## 試験のエクスペリエンス

- 他の試験と同等で、特別 Cosmos DB だから、という点はなかったように思います。強いて言えば、ドキュメントのサンプルやインデックス作成ポリシーを示すために JSON がよく出てくるように感じるぐらいでしょうか。
- OpenBook 形式の試験に初めてチャレンジしましたが、このエクスペリエンスは少し慣れが必要です。
  - 画面分割、または、全画面表示で Microsoft Learn サイトのコンテンツを閲覧・検索可能です。
    - 事前に説明が出ますが、許可されているドメインとコンテンツにしかアクセスできないため、自由な Web 検索ができる機能ではありません。  
      たとえば、Microsoft Learn サイト内でも QnA と 自分のプロファイルにはアクセスできません。
    - 横にそれほど広くないモニタだったので分割表示だと試験画面のレイアウトが崩れて元に戻せず、Yes/No 形式の問題でラジオボタンが領域外に出てしまうなどして焦りました。  
      これは試験会場の設備によるかなと思います。
    - 上述の問題が発生しても、試験問題のレイアウトは内部で領域が分割されていてドラッグでサイズを変更できるものがあり、この機能を使ってレイアウトを変更するとそれにつられて元に戻るようでした。
  - 通常のブラウジング操作はできないので、サイト内の検索ボックスを使って必要な情報を効率的に見つけ出す必要があります。
  - 筆者が選んだテストセンター固有の問題かもしれませんが、キーボードのタイプ音がめちゃくちゃ響き渡るので(笑)、タイプするのが憚られて、あまり積極的に検索しようと思えませんでした。
  - 全部検索していると時間が足りなくなると思います。  
    ケーススタディなどで正確な情報が必要な場合のリファレンスといった使い方が基本になると思います。  
    出題されている問題も、その用語や概念を言葉として覚えているだけでは解けないような問題ばかりで、OpenBook で調べたら答えが載っているというようなことはほぼありません。  
    概念を理解して、しっかりソリューションとして検討できる力が必要です。

# 学習方法

筆者が実践した方法をまとめておきます。  
というのも、この認定試験には後述のとおり公式のもので試験問題の出題感を確認する術がなく、何をどのようにやってこれぐらいの得点ができた、という情報は一定程度価値があると考えているためです。

## 最初の躓き

- この認定試験には「無料の練習用評価」が用意されていませんでした。
- Measure Up などの公式教材も販売されていませんでした。
- つまり、公式のもので試験問題の出題感を確認する術がありません。何かないか探すことにしました。

## その後の対応

- 特に代替となる決定的なものは見つからなかったため、ラーニング パスとドキュメントを勉強して当たって砕けろ精神で臨もうと考えました(つまりほぼ正面突破ということですね！)。

### Microsoft Cloud Skills Challenge: 30 Days Learn It の活用

[Microsoft Cloud Skills Challenge 30 Days To Learn It](https://developer.microsoft.com/ja-JP/offers/30-days-to-learn-it) は常設型のクラウドスキルチャレンジで、これを活用して下記の事項を達成することにしました。

- 50%off バウチャーチケットの入手  
  → 筆者が期間を勘違いしており、チャレンジを達成したもののバウチャーチケットは**入手できませんでした**！(笑)
- 必要なラーニングパスのパッケージを入手
  - [Azure Cosmos DB for NoSQL を使ってみる](https://learn.microsoft.com/ja-jp/training/paths/get-started-azure-cosmos-db-sql-api)
  - [Azure Cosmos DB for NoSQL の計画と実装](https://learn.microsoft.com/ja-jp/training/paths/plan-implement-azure-cosmos-db-sql-api)
  - [SDK を使って Azure Cosmos DB for NoSQL に接続する](https://learn.microsoft.com/ja-jp/training/paths/plan-implement-azure-cosmos-db-sql-api)
  - [Azure Cosmos DB for NoSQL SDK を使ったデータへのアクセスと管理](https://learn.microsoft.com/ja-jp/training/paths/access-manage-data-azure-cosmos-db-sql-api-sdks)
  - [Azure Cosmos DB for NoSQL でクエリを実行する](https://learn.microsoft.com/ja-jp/training/paths/execute-queries-azure-cosmos-db-sql-api)
  - [Azure Cosmos DB for NoSQL のインデックス作成戦略の定義と実装](https://learn.microsoft.com/ja-jp/training/paths/define-implement-indexing-strategy-cosmos-db-sql-api/)
  - [Azure Cosmos DB for NoSQL を Azure サービスと統合する](https://learn.microsoft.com/ja-jp/training/paths/integrate-azure-cosmos-db-sql-api-azure-services)
  - [Azure Cosmos DB for NoSQL のデータ モデリングとパーティション分割の方法を実装する](https://learn.microsoft.com/ja-jp/training/paths/implement-modeling-partitioning-azure-cosmos-db-sql-api)
  - [Azure Cosmos DB for NoSQL のレプリケーション戦略を設計および実装する](https://learn.microsoft.com/ja-jp/training/paths/design-implement-replication-strategy-cosmos-db-sql-api)
  - [Azure Cosmos DB for NoSQL でクエリと操作のパフォーマンスを最適化する](https://learn.microsoft.com/ja-jp/training/paths/optimize-query-performance-azure-cosmos-db-sql-api)
  - [Azure Cosmos DB for NoSQL ソリューションの監視とトラブルシューティング](https://learn.microsoft.com/ja-jp/training/paths/monitor-troubleshoot-azure-cosmos-db-sql-api-solution)
  - [DevOps プラクティスを使用して Azure Cosmos DB for NoSQL ソリューションを管理する](https://learn.microsoft.com/ja-jp/training/paths/manage-cosmos-db-sql-api-solution-using-devops-practices)
  - [Azure Cosmos DB for NoSQL でサーバー側のプログラミング コンストラクトを作成する](https://learn.microsoft.com/ja-jp/training/paths/create-server-side-programming-azure-cosmos-db-sql-api)

上記の内容を達成した後は、知識チェックを 4 周くらいして、誤答しない状態になるまで復習を繰り返しました。  
誤答した場合は、都度関連ラーニング パスとドキュメントを確認しました。

### 公式ドキュメントの活用

下記のドキュメントをさささーっと斜め読みして、引っかかりがあった用語や内容などを見つけた時に、それに関するドキュメントを深掘りするということをやっていました。2 周くらいしたと思います。

- [Azure Cosmos DB のドキュメント](https://learn.microsoft.com/ja-jp/azure/cosmos-db/)
  - 概要
- [NoSQL のドキュメント](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/)
  - 概念
  - 方法

### 実践演習

- ラーニング パスに含まれるラボの内容は正確に理解するように努めました。  
  何の目的でどんな操作をしているのかをよく理解しないと、ケーススタディなどで答えられないためです。
- ドキュメントとラーニング パスに取り組む中で、読んでるだけではよくわからない点やラーニング パスに含まれるラボの内容だけでは不十分に感じた点は、自分で環境を構築してやってみました。  
  取り組むためには基礎的な内容を理解している必要があるため理解度も深まり、知りたいことも知ることができ、一石二鳥でした。

# まとめ

総論として、今回の学習方法で合格できましたがめちゃくちゃ手間がかかりますので、資格をゲットしたいだけの人はもっと効率のいい方法を探した方がいいと思います（筆者は、公式なものでは見つけられませんでしたが）。  
でも、きちんと理解したい人にとっては、理解度・定着度という意味ではとても意義のあるやり方だと思います。
（記事が英語じゃないので）日本語を理解してもらえる誰かにとって、何かのお役に立っていれば幸いです。