詳解 Jetpack Compose: 第1章レビュー

まずは私の専門分野でもあるAndroidの書籍である、「詳解 Jetpack Compose」から、章単位でレビューをしていきたいと思います。

第1章は「なぜ宣言的UIなのか」。

宣言的UIが命令的UI(従来のXMLを利用したレイアウトの実装)に比べて何が嬉しいのかについてまとまっています。
メリットがいくつか挙げられているのですが、その中で心に残っているのはやはりコードの記述量が大幅に減るというところ。
従来のコードから69%減って生産性が向上する点が魅力に映るかなと思います。

メリット以外にも課題もまとまっていて、
– プログラミング初心者への学習のハードルがある
– パフォーマンスの改善
– APIが変更される可能性がある
あたりも、これからJetpack Composeを取り組む方には有益な情報になるのではないかと思います。

「詳解 Jetpack Compose – 基礎から学ぶAndroidアプリの宣言的UI」を献本いただきました

先日 [改訂新版]プロになるためのWeb技術入門 を献本いただいたと報告させてもらいましたが、もう1冊技術評論社さんから献本いただいたのでご報告。


https://gihyo.jp/book/2024/978-4-297-14488-3

詳解 Jetpack ComposeとというAndroidエンジニア向けの書籍となります。
クライアント側のUI実装はWeb/iOS/Androidといずれも宣言的UIに切り替わる過渡期となっており、この書籍でJetpack Composeの基本的な組み方が読み取れるのではないかと思います。

一通り読んでレビューを書いていこうと思います!

インフラで分散処理に使われているKafkaについて調べる

Kafkaというキーワードは聞いたことがあるような状態で、詳細はよく分かってませんでした。
そこで、ChatGPTに問い合わせをしてみたのがこの記録です。
それではどうぞ。

“インフラで分散処理に使われているKafkaについて調べる” の続きを読む

Androidで権限を確認しながら位置情報を取得する

Androidで位置情報を取得するためのKotlinのサンプルコードを教えてください。

以下は、Androidで位置情報を取得するためのKotlinのサンプルコードです。

import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat

class MainActivity : AppCompatActivity() {
    private var locationManager: LocationManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager

        // 位置情報を取得するためのパーミッションを取得する
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1)
        } else {
            // 位置情報を取得する
            locationManager?.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
        }
    }

    private val locationListener = object : LocationListener {
        override fun onLocationChanged(location: Location) {
            // 位置情報が更新された時の処理
            val latitude = location.latitude
            val longitude = location.longitude
            // 取得した緯度経度を使って何かする
        }

        override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {}
        override fun onProviderEnabled(provider: String) {}
        override fun onProviderDisabled(provider: String) {}
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
        when (requestCode) {
            1 -> {
                if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 位置情報を取得する
                    locationManager?.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
                }
                return
            }
        }
    }
}

上記のコードでは、 LocationManager を使用して位置情報を取得しています。また、 LocationListener を使用して、位置情報が更新された時の処理を記述しています。

また、位置情報を取得するためには、ACCESS_FINE_LOCATIONとACCESS_COARSE_LOCATIONのパーミッションが必要です。そのため、パーミッションのチェックや取得のコードも記述されています。

このサンプルコードは、GPSプロバイダーから位置情報を取得していますが、他にもネットワークプロバイダーやPassiveプロバイダーなどがありますので、必要に応じて使い分けることができます。

位置情報を取得するために、ACCESS_FINE_LOCATIONとACCESS_COARSE_LOCATIONのパーミッションを取得する方法を教えてください。

  • AndroidManifest.xmlにパーミッションを記述します。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  • アプリが実行される際に、パーミッションを取得するためのダイアログを表示します。
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1)
}
  • ユーザーがパーミッションの許可/拒否を選択した際の処理を記述します。
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
    when (requestCode) {
        1 -> {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // パーミッションを取得できた場合の処理
            } else {
                // パーミッションを取得できなかった場合の処理
            }
            return
        }
    }
}

上記のようにして、ACCESS_FINE_LOCATIONとACCESS_COARSE_LOCATIONのパーミッションを取得することができます。


実際に実装する際には、パーミッション周りを便利に使えるライブラリを導入することが多いです。

インフラで使われているKubernetesの概要を調べる

最近はサーバーサイドに関わることが増えており、インフラ周りで使われている技術についても知識を吸収する必要が出てきています。
今回はその中で、Kubernetesについての概要をざっくりと知りたいと思います。
それではどうぞ!

“インフラで使われているKubernetesの概要を調べる” の続きを読む

Android SDKポケットリファレンスの評価を聞いてみた

ChatGPTとの触れ合いが多くなってます。
今回は著書の評価を聞いてみました。
結果は手厳しいものに・・・
それではどうぞ!

“Android SDKポケットリファレンスの評価を聞いてみた” の続きを読む

ChatGPTでGitHub Actionsでできることについて調べてみた

今回はGitHub ActionsについてChatGPTに聞きながら調べてみました。
それではどうぞ。

“ChatGPTでGitHub Actionsでできることについて調べてみた” の続きを読む

ChatGPTでAndroidのデータベースの暗号化について調べてみた

今回はAndroidのデータベースを暗号化する方法についてです。
誤った情報が混ざることがあることがわかりました。
また、今回から質問文も載せるようにしています。
それではどうぞ。

“ChatGPTでAndroidのデータベースの暗号化について調べてみた” の続きを読む