【JetpackCompose】 Composable 関数の Modifier について知らなかった3つのルール

【JetpackCompose】 Composable 関数の Modifier について知らなかった流儀

detekt に指摘されながら、ドキュメントを読む。


こんなコードがあったとして。


Column {
    InnerContent()
}

@Composable
private fun InnerContent() {
    Text(...)
    Image(...)
    Button(...)
}

以下、知らなかった流儀。

 

🧩 Composable 関数はレイアウトを一つだけ出力する

A composable function should emit either 0 or 1 pieces of layout, but no more. A composable function should be cohesive, and not rely on what function it is called from.

コンポーザブル関数は、レイアウトのピースを0個または1個だけ発行するべきで、それ以上は発行してはいけません。コンポーザブル関数は結束性を持ち、呼び出される関数に依存すべきではありません。

レイアウトのネストのコストはあまり気にしなくて良い、とのこと。

Nesting of layouts has a drastically lower cost vs the view system, so developers should not try to minimize UI layers at the cost of correctness.

レイアウトのネストには、ビューシステムに比べてはるかに低いコストがかかるため、UIの階層を正確性の犠牲にして最小化しようとしないべきです。

👉 Do not emit multiple pieces of content - Twitter Jetpack Compose Rules hatena-bookmark

ということで、一見不要に見える Column を追加する。


@Composable
private fun InnerContent() {
    Column {
        Text(...)
        Image(...)
        Button(...)
    }
}

 

🧩 デフォルトを持つパラメータ modifier: Nodifier = Modifier は必須

They are especially important for your public components, as they allow callers to customize the component to their wishes.

特に、公開コンポーネントにとって Modifier は非常に重要であり、呼び出し元がコンポーネントを希望に合わせてカスタマイズできるようにします。

👉 When should I expose modifier parameters? - Jetpack Compose Rules hatena-bookmark

Composables that accept a Modifier as a parameter to be applied to the whole component represented by the composable function should name the parameter modifier and assign the parameter a default value of Modifier.

Composable 関数内でコンポーザブル関数を表すコンポーネント全体に適用するための修飾子をパラメータとして受け入れる場合、そのパラメータは "modifier" という名前を付け、パラメータに Modifier のデフォルト値を割り当てるべきです。

👉 Modifiers should have default parameters - Jetpack Compose Rules hatena-bookmark

ということで、親からの Modifier を受け入れるようにします。デフォルト値もつけておきます。


@Composable
private fun InnerContent(modifier: Modifier = Modifier) {
    Column {
        Text(...)
        Image(...)
        Button(...)
    }
}

 

🧩 受け取った Modifier パラメータは最上位のレイアウトにのみ適用する

Modifiers should be applied once as a first modifier in the chain to the root-most layout in the component implementation. Since modifiers aim to modify the external behaviors and appearance of the component, they must be applied to the top-most layout and be the first modifiers in the hierarchy. It is allowed to chain other modifiers to the modifier passed as a param if needed.

Modifier は、コンポーネントの実装内でルートのレイアウトに最初の Modifier として一度適用すべきです。Modifier はコンポーネントの外部の動作や外観を変更することを目的としているため、最上位のレイアウトに適用し、階層内で最初の Modifier である必要があります。必要に応じて、パラメータとして渡された Modifier に他の Modifier を連鎖させることは許可されています。

👉 Modifiers should be used at the top-most layout of the component - Jetpack Compose Rules hatena-bookmark

ということで、最上位ルートの Column で適用します。


@Composable
private fun InnerContent(modifier: Modifier = Modifier) {
    Column(modifier = modifier) {
        Text(...)
        Image(...)
        Button(...)
    }
}

 

🧩 まとめ

@Composable 内のレイアウトに関する Modifier は、親 (呼び出し元) から持ってきて、最上位のレイアウトで一度だけ適用する。

detekt を使うことで、なんとなく記述していた部分がスッキリしてきます。

👉 【AndroidStudio】detekt で JetpackCompose 記述をチェックする hatena-bookmark


【Apple】ヤマト運輸 (クロネコヤマト) の「ADSC支店」は今どこにあるのか

調べてみると、2013年の記事です。

調べてみるとADSC支店は国内だと言うことが判明。どうやら国内まで到着しているようだ。そしてこの謎の支店は「Apple Delivery Support Center」の略だとか。

国内AppleStoreで購入したものは中には海外からの発送される物があり、そういった商品は一度ADSC支店に集められそこから再出荷するのである。ちなみに場所は有明ね。あの倉庫だらけの有明。つまり私が2日に注文した商品は今日ADSC支店から出荷され近々届けられるのである。

👉 アップル製品をオンライン注文時の「ADSC支店」って何? その謎に迫る! | ガジェット通信 GetNews hatena-bookmark

実際、Mac を購入、下取りを Apple 公式サイトでやってみた結果。

以下、購入時の状況経過。注文から、1週間で到着しました。

【Apple】ヤマト運輸 (クロネコヤマト) の「ADSC支店」は今どこにあるのか

「深セン」の次が「ADSC支店」で次が「羽田クロノゲートベース」。

続いて、下取り送付時の流れ。

【Apple】ヤマト運輸 (クロネコヤマト) の「ADSC支店」は今どこにあるのか

「羽田クロノゲートベース」のあと「ADSC支店」で終了。

この時点で、下取り完了のメールを受け取りました。

【Apple】ヤマト運輸 (クロネコヤマト) の「ADSC支店」は今どこにあるのか

なんとなく「ADSC支店」は、「東京ベース」のある有明ではなく、羽田空港近くの「羽田クロノゲートベース」近辺にあるように見えます。



ADSC支店

オンラインのApple Storeで購入した商品が、必ず通るとされるヤマト運輸の支店。

具体的な場所は公開されていないため確定できないが、これを著している時点では羽田クロノゲート外部リンク内に存在し、管轄は南東京主管と予想されている。

👉 ADSC支店 ‐ 通信用語の基礎知識 hatena-bookmark

羽田主管支店 ADSC支店(ロジ)

京急空港線「穴守稲荷」駅 徒歩5分 JR「蒲田」駅より無料送迎バス利用可

👉 ヤマト運輸株式会社 物流センターの作業スタッフ 求人情報:東京都大田区 hatena-bookmark

「羽田クロノゲート」内にありそうです。

配達の方に聞けば良かったわ。

まあ、どっちでもいいか。

👉 羽田クロノゲート | ヤマト運輸 hatena-bookmark


ログインに使っている Twitter (X) アカウントの連携を削除する手順

Twitter (X) のアカウントで連携してログインしているサービスが不正アクセスされて情報が流出してしまうときがあります。


流出してからでは遅いのですが、確認しておくといいです。

 

連携を削除する方法

Twitter (X) アプリから進みます。


設定とプライバシー

 ↓

セキュリティとアカウントアクセス

 ↓

連携されてるアカウント

 ↓

(該当のアプリで)
アプリの許可を取り消す




再度、連携しているアプリを確認しておくといいと思います。

緊急でいつでも削除できるように。