0
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?

【Android×Google Calendar】APIキーだけで日本の祝日を取得するまでの道のり.md

Last updated at Posted at 2025-04-25

【Android×Google Calendar】APIキーだけで日本の祝日を取得するまでの道のり

はじめに

Androidアプリ開発初心者がGoogle Calendar API の扱いでハマったので、その顛末と解決方法を共有します。

  • やりたいこと
    • Google が提供する「日本の祝日」カレンダー(ja.japanese.official#holiday@group.v.calendar.google.com)から祝日情報を取得
    • OAuth2 認証は不要。API キーだけでシンプルに実装したい

ハマりポイント

  1. 公式の QuickstartにはKotlinのサンプルがない+ユーザー認証込みのサンプルしかない(Java×OAuth2を参照)
  2. Retrofit2 で叩く案も検討したが、レスポンスのデータモデル定義が煩雑で断念
    (データモデル定義を明示的にしなくてもいい方法があるのであれば誰か教えてください。)
  3. 公式ライブラリを「API キーのみ」で動かす方法がWebで見つけられない

解決のポイント

  • Google の提供するクライアントライブラリで認証不要ならBuilder()の認証情報(Credential)を null にすればいい。
  • events().list(ja.japanese.official#holiday@group.v.calendar.google.com) のようにカレンダーIDを指定できる。

実装

  import com.google.api.client.http.javanet.NetHttpTransport
  import com.google.api.client.json.gson.GsonFactory
  import com.google.api.services.calendar.Calendar

  // アクセスするカレンダーIDを定数として定義
  companion object {
      private const val CALENDAR_ID = "ja.japanese.official#holiday@group.v.calendar.google.com"
  }

  private val transport = NetHttpTransport()
  private val jsonFactory = GsonFactory.getDefaultInstance()

  private val calendar = Calendar.Builder(transport, jsonFactory, null)
    .setApplicationName(BuildConfig.APPLICATION_ID)
    .build()

  val events = calendar.events().list(CALENDAR_ID)
      .setKey(BuildConfig.GOOGLE_API_KEY) // APIキーを指定
      .setTimeMin(timeMin)
      .setTimeMax(timeMax)
      .setOrderBy("startTime")
      .setSingleEvents(true)
      .execute()

開発環境

  • Kotlin: 2.0.0
  • Android Studio: Ladybug Feature Drop | 2024.2.2 Patch 2
  • minSdk: 24
  • targetSdk: 35
  • 使用ライブラリ:
    • com.google.api-client:google-api-client-android:2.0.0
    • com.google.apis:google-api-services-calendar:v3-rev20220715-2.0.0

おわりに

初めての Android アプリで Google Calendar を扱うのは結構大変でしたが、
公式ライブラリ+API キーだけでも祝日取得できるということがわかってスッキリしました。
この記事が、同じところで詰まっている誰かの助けになれば幸いです。

GCP 側の API Key 制限やセキュリティ設定については別記事でにします。

参考

GoogleCalendarAPIの日本の祝日が国民の祝日以外も祝日扱いするようになった件
Google Calendar API クイックスタート

0
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
0
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?