your3i’s blog

iOSエンジニア。頑張る⚉

ベタ書きは絶対に悪いではない

最近、アプリのiOS版とAndroid版のスタイル整理のためのカラーパレットの作成を行った。Androidの方が辛いすぎて、以下の感想を得た⬇︎

ベタ書きは絶対悪いではない。
すごい仕組みでも絶対使わないといけないことではない。
すべて状況によって、効率のいい方を選ぶべきである。

ちなみに、自分はAndroidの技術レベルは低い。スタイル整理とかもドキュメントをみつづやる感じだった。理解不足の感想かもしれない。

アプリの状態

今メンテしているアプリは、いままでデザイン側と約束したカラーパレットやコンポーネントライブラリーがなかった。

iOSアプリはスタイル全部そのままIBで作った。(ベタ書きと近い)

そしてAndroidは完全に開発者の気分でfreestyleになってた。styleを作って設定してるところもあって、themeを定義してやってるところもある。さらに、文字色やサイズをデザインと合わせてないところもある。

やったこと

アプリ内使われてる色をデザインと統一するように、名前と値が決めたカラーパレットを作る。今後コンポーネントライブラリーを作るとき便利になるように、これは第一歩。

理想のやり方

① カラーパレットを作る
② 現在コード内適当に定義したカラーパレットを新しいカラーパレットに書き換え
③ 新しい画面やコンポーネントを作るとき、カラーパレットからとるようにする
④ すでに作った画面は、スタイルが崩さなければほって置く(今後必要であればリファクタリング

なぜ④がいいというと、まずスタイルを全部作り直すのはすごくコストかかる。そして、スタイルは見た目、コードが汚くても見た目が正しいであればたいした負債はないだろう。

現実

カラーパレットを作ることだけで。

項目 iOS Android
いままでのスタイル設定し方 ほとんどIBで設定 theme, style, スタイル設定してない、ベタ書き混在
画面ごとにスタイル独立してるか? YES NO。theme使ってるから、themeをいじったらいろんな画面に影響を与えた
既存画面のスタイル変化のチェック NO YES
かかった時間 3時間以下 3日間以上

反省点

  • カラーパレットを作るだけで、なぜAndroidiOSよりそんなに時間かかるだろう?

違いは既存画面への影響だね。

iOSはベタ書きと近いから、各画面のスタイルが独立している。カラーパレット定義されても、使うかどうか各画面ごとに選択肢があるし、リファクタリングするかどうかも各画面ごとに自由である。現状既存画面になんの影響もないので、全部放置してる。

Androidはthemeを使ってるが、スタイルとカラーパレットに合わせて設定してなかったので、設定する必要がある。そして、ベタ書きが嫌でテキスト色とかちゃんと設定してないから、themeをいじることでいろんな画面に影響を与えた。そういうことで、全部の画面に意図してないスタイルの変化があるかどうかチェックする必要があった。本当に辛くて泣きそうになった😇

結論

カラーパレットやコンポーネントがない状態で、(今後スタイルの整理が行う予定があるとき)、画面ごとのスタイルの独立性が重要だと思う。全部画面のスタイルを内部の仕組みによってリファクタリングするという膨大な無意味な作業を避けれるという利点があるからである。そいうことで、そんな状況でベタ書きが全然いいと思う!

Androidのthemeやthemeのoverrideや、styleや…うまく使うと多分便利でいい仕組みかもが。どうな状況でも、絶対ことを使うべきだよ!ということではないだ!使い方やルールがまだ決めてないとき使うと、ただ今後のリファクタリングするときの影響範囲を広めてるだけだと思う。見えない把握しづらい連続している地雷のように。

まとめると、いいものを使うではなく、ものをうまく使うといいのだ!