【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) アプリから進みます。


設定とプライバシー

 ↓

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

 ↓

連携されてるアカウント

 ↓

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




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

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



【iPhone】Yahoo天気アプリ 「現在地ボタンが変わりました」は「現在地ボタンは無くなりました」では?

現在地ボタンが消えた!???

現在地に戻るのボタンが表示されなくなった

バージョンは「9.0.0」

調べてみると、

Yahoo天気アプリの雨雲表示画面で、「現在地ボタンが変わりました」と出ているのですが、どう変わったのかがわかりません。
以前は現在地ボタン(“的”のようなアイコン)があり、そこをタップすると自分の現在地が地図の中心になったのですが、バージョンアップされたものだと現在地ボタンは見当たらず、どうすれば自分の現在地が中心にくるのかわからないです。「現在地ボタンが変わりました」ではなく、「現在地ボタンは無くなりました」のような気がします。
現在地を中心にする方法がわかる方がいれば教えて頂きたいです。

アプリのアップデートで解決しました。
私も半日程悩んでました(−_−;)

👉 Yahoo天気アプリの雨雲表示画面で、「現在地ボタンが変わりました」と出ているのですが、どう変わったのかがわかりません。 - Yahoo!知恵袋 hatena-bookmark

ということで、Yahoo 天気アプリをバージョン「9.0.1」にアップデートします。

表示されるようになりました!!

ということで、

現在地ボタンが表示されなくなったのは、バージョン 9.0.0 のバグ

といったところでしょうか。

👉 「Yahoo!天気」をApp Storeで hatena-bookmark


【Mac】絵文字 や GitHubショートコード は「GitHub Emoji Picker」で入力する 😀

 

😀 Mac内蔵 絵文字ビューア

普通に絵文字を入力する場合は以下でいけます。


- Control+Command+スペースバー を押します。

👉 Macで絵文字と記号を使用する - Apple サポート (日本) hatena-bookmark

 

【Mac】GitHub 絵文字ショートコードは「GitHub Emoji Picker」で 😀

絵文字ビューアが開いたら好きな絵文字をダブルクリックすると入力できますね。
【Mac】GitHub 絵文字ショートコードは「GitHub Emoji Picker」で 😀

しかし、この方法で入力しているのはショートコードではありません。生絵文字です。

 

😀 GitHub ショートコード

Unicode 絵文字のうち、頻繁に使うであろう絵文字を厳選したものの中から、「GitHub ショートコード」をクリックでクリップボードにコピーできます。

GitHub Emoji Picker
👉 GitHub Emoji picker hatena-bookmark

WEBサイトですので Chrome や Safari などブラウザアクセスできます。

ショートコードでなく、生の絵文字をコピーしたい場合は、「Shift を押しながらクリック」します。

Unicode 絵文字のうち、頻繁に使うであろう絵文字を厳選したものの中から、「GitHub ショートコード」をクリップボードにコピーできます。

ということで、このサイトでは、ショートコード と 生絵文字 の両方を入力できます。

ただし、先程も言ったように、すべての絵文字ではなく「厳選された絵文字」のみです。

 

😀 Dock に入れておく

便利なよく使うツール系WEBサイトは、アプリのように Dock に入れておくと便利です。

【Mac】GitHub 絵文字ショートコードは「GitHub Emoji Picker」で 😀

「GitHub Emoji picker」をブラウザで開いた状態から、
ブラウザのURLバー内の「open this link, choose an app」→ 「Open」して、

【Mac】絵文字 や GitHubショートコード は「GitHub Emoji Picker」で入力する 😀

Dock 内に表示されたら、「Keep in Dock」で Dock 内に保存する。

【Mac】絵文字 や GitHubショートコード は「GitHub Emoji Picker」で入力する 😀

これで、Dock からアプリのようにサイトを表示して使用できます。

表示サイズは、ブラウザと同様の操作で変更しておけば記憶され、起動時にそのサイズで起動表示されるようになります。

 

😀 まとめ

ショートコードは、サービスやアプリケーションで異なるのが面倒っちゃあ面倒です。

生絵文字を貼っても、実質、サービス側で変換されるようなので、Mac内蔵の絵文字ビューアでもいいような気もしますが、「厳選された絵文字」なので不必要に絵文字選択を悩むことがない、のがいいように思えたりもします。

👉 【Kotlin】絵文字を含む Unicode 文字列の文字数をカウントする方法と文字ごとの構成要素 hatena-bookmark
👉 絵文字が意図しない白黒で表示される ➡️ - Unicode Variation Selector hatena-bookmark