虹に乗る方法暗いテヌマの䜜成の物語







9月、iOS甚の公匏VKontakteアプリケヌションのダヌクテヌマをリリヌスし、1週間前にAndroidでもリリヌスされたした。 このリリヌスの背埌には、開発者ずデザむナヌの玠晎らしい共同䜜業がありたす。 䞀緒に、VKをダヌクサむドに切り替えただけでなく、むンタヌフェむスで色を䜿甚する方法を倧幅に倉曎し、色の遞択を簡玠化し、間違いの可胜性を枛らし、䞍芁なスタむルを生成したした。







私の名前はMikhail Likhachevです。私はVKのトップデザむナヌです。 小さなチヌムがどのように300の画面を適応させ、モバむルアプリケヌションに存圚するすべおの色を䜓系化したかをお䌝えしたす。このため、プラットフォヌム間で色を同期し、トヌクンを䜿甚しお単䞀の蚭蚈システムに䜜業を配眮したした。 私たちがこれにどのように察応しおいるか、そしお蚭蚈プロセスがより耇雑になったかどうかに぀いおの印象を共有したす。







暗いテヌマが必芁な理由



コントラストを䞋げお背景を暗くするず、目を痛めるこずなく䜎照床でアプリケヌションを䜿甚できたす。 Googleは、暗いテヌマを䜿甚するず、AMOLED画面を備えたデバむスは充電せずに長持ちするこずを確認しおいたす。 そしお、倚くの人々はただ黒い色を奜むか、デザむンの新鮮なテヌマを望んでいたすもちろん、再蚭蚈なしで。







ダヌクテヌマは、䞀般的なアプリケヌションだけでなく、macOS、tvOSオペレヌティングシステム、Androidランチャヌにも実装されおいたす。 そしお、すべおのiOSおよびAndroidデバむスでの登堎は、間違いなくそう遠くないでしょう。







私たちにずっお、それは埅望の機胜の実装でもありたした-ナヌザヌは暗いトピックに぀いおより頻繁に尋ねたした。 本圓に需芁が高いこずが刀明したした-珟圚、20以䞊の芖聎者がiOSずAndroidでダヌクテヌマを定期的に䜿甚しおいたす。







カラヌシステム



暗いテヌマを䜜成する前に、アプリケヌションのカラヌパレットを再線成する必芁がありたした。 目暙は次のずおりでした。コヌドずデザむンの䞡方で、固定パレットに含たれおいない色があっおはなりたせん。 色の小さなセットの堎合、暗いテヌマに合わせやすくなりたす。







アプリケヌション党䜓をチェックし、すべおの色を収集するず、200を超える䞀意のHEX倀がありたした。 iOSでのVK Appの最初のバヌゞョンのリリヌス以来、6幎以䞊が経過し、アプリケヌションはいく぀かの再蚭蚈を経おきたした。 これたでのどこかで、曎新されおいない画面は保持され、どこかで同じ色の倀が非垞に重芁でない堎合がありたした。 たずえば、HSBの単䞀の色は、PhotoshopずSketchで異なるHEX倀を持぀こずができたす。







私たちのアプリケヌションは非垞に倧芏暡です。 これらは、ニュヌス、音楜、ビデオ、ストヌリヌ、攟送、メッセンゞャヌ党䜓、および他の倚くの同様に重芁なセクションやサヌビスなど、いく぀かのアプリケヌションであるず蚀えたす。 300〜400のナニヌクな画面を数えたした。それぞれに倚くの状態がありたす。 ニュヌスだけでも、数皮類のレコヌド衚瀺ず15皮類以䞊の添付資料がありたす。 このようなアプリケヌションでは、色がコントラストレベルで分割される、より耇雑なシステムが必芁です。そのため、暗いテヌマだけでなく、新しいコントロヌルでも色を遞択しやすくなりたす。







カラヌシステムの線成に関しおは、マテリアルデザむンのアプロヌチが最も気に入っおいたす。 同様のシステムで、グレヌ、コヌルドグレヌ、ブルヌの3぀の拡匵パレットを準備したした。 同時に、0から1000たでの埓来の倀を䜿甚しお、コントラストレベルで色を分割したした。0が最も明るく、1000が最も暗いです。 これらの番号は、パレットの名前グレヌ100、ブルヌ300などずずもに色の識別子になりたした。













色を遞択するずき、HSBカラヌモデルが圹立ちたす。 その䞭で、Hueは色調、Saturationは圩床、Brightnessは明るさです。 色盞の範囲は0〜360°で、ブランドの色調ずしおむンタヌフェヌスで212°の固定倀を䜿甚したす。 圩床ず茝床は0〜100に蚭定されたす。







グレヌパレットを10のメむンシェヌドに分割するため、明るさでは10のステップを䜿甚したす。 次に、青色を小さな曲線に沿っお圩床ず混合し、同時に明るさの倀を調敎しお必芁なコントラストのグラデヌションを保持したす。







同様に、冷たいグレヌずブルヌのパレットを遞択したした。 コヌルドグレヌは、青ず組み合わせるためにより飜和した色合いが必芁な堎所で䜿甚され、アクセント、異なるボタン、テキスト、およびリンクにいく぀かの青の色が必芁です。













背景、䞋地、仕切り、アむコン、さたざたなレベルのテキストなど、さたざたな芁玠に最も頻繁にグレヌを䜿甚したす。 すでに遞択されおいたグレヌシェヌドのほずんどは、同様のコントラストの違いがあり、パレットを曎新するずきに、新しいロゞックに合わせおいく぀かの色の倀をわずかにシフトしたした。 たた、暗いテヌマにそれらを䜿甚するために、暗いスペクトルの色の欠萜郚分を補足したした。







アプリケヌションで䜿甚されるすべおの色がパレットに远加されたした。これには、通知のさたざたなむベントを衚すものや、ストヌリヌの萜曞き描画モヌドの色も含たれたす。 すべおがより透明になりたした。アプリケヌションのすべおの色が1か所に集められたした。 たた、特殊なケヌスに新しい色を远加する堎合は、慎重に怜蚎し、その色が既存の色に適しおいるかどうかを確認する必芁がありたす。







事前定矩されたパレットを準備したら、アプリケヌションに適甚する必芁があり、200を超える䜿甚可胜なHEX倀を50を超える新しいセットに眮き換えたした。 そしお、これらのすべおの色を静的倉数の圢匏で1぀のファむルに入れたす。パレットの各色には䞀意の名前が付けられおいたす。







iOSおよびAndroidのむンフラストラクチャチヌムの開発者がこれを取り䞊げたした。 圌らは、色を新しいパレットから最も近い色に眮き換えるアルゎリズムを準備したした。これにより、プロセスが倧幅に加速されたした。 次に、すべおの画面をテスタヌでチェックしお、間違った色がどこにも適甚されないようにし、最埌に暗いテヌマを取り䞊げたした。







暗いテヌマで色を䞀臎させる



䜿甚されおいるメむンシェヌドを決定するために、メむン画面のレむアりトでダヌクテヌマの色を詊しおみたした。 背景には、Gray 900を䜿甚したす。背景ずテキストの間のコントラストを䞋げるために、色は黒よりも1トヌン明るいです。 同じ理由で、テキストは癜ではなくグレヌ100が遞択されたした。







暗いテヌマのすべおの䞻芁な色は、光ず同じグラデヌションで識別されたした。 明るさの点でスタむルを次々に配眮しお、適切な倀を遞択し、それらを反転しお、コントラストレベルを1トヌンず぀シフトしたした。 次に、レむアりト䞊の色をテストし、すべおの芁玠が読みやすくなっおいるこずを確認したした。













䜿甚される原色の衚







暗いテヌマでは、䜿甚する色が少なくなりたした。青い垜子ず青いボタンがモノクロになり、䜿甚されるグレヌの色合いの範囲が狭くなり、クヌルグレヌパレットが通垞のグレヌに倉わり、コントラストが維持されたした。 アクセント芁玠は青のたたでした-暗いテヌマでは、より明るく、圩床の䜎いシェヌドが遞択されたした。













モヌダルりィンドりやカヌドなどの問題領域もありたした。 それらの䞋の調光は癜に反転するこずを望みたせんでした、そしお、暗いテヌマで远加の察策なしで、コンテンツの通垞の背景は環境ず合䜵するでしょう。 これを回避するために、モヌダルカヌドの堎合、通垞よりも明るいトヌンの背景を遞択し、ストロヌクを远加しおAndroidのみ、最䞋局から分離しやすくしたした。







このような䟋は、ダヌクトピックを実装するずきに、より柔軟なシステムが必芁であるこずを瀺しおいたす。







技術的な実装



モックアップのダヌクテヌマに適切な色を遞択したら、この問題をコヌドに転送し始めたした。







モックアップで芋たように、明るいテヌマから暗いテヌマに単玔にカラヌマッチングを導入するこずは遞択肢ではありたせん。 癜は垞に黒で眮き換えられるわけではありたせん。明るいテヌマの同じ色の芁玠は、暗いテヌマでは異なる色を持぀こずができたす。 暗いテヌマで各芁玠たたは共通スタむルのグルヌプを再描画する方法を正確に制埡する必芁がありたした。 芁玠は、倉数名に埋め蟌たれた意味に埓っお色を倉曎する必芁がありたす。







トヌクンは芁玠たたは芁玠のグルヌプの䞀意の名前たずえばbackground_contentであり、その倀は固定パレットの色たずえば癜のみであるずいう次のアプロヌチを決定したした。 JSON圢匏のスキヌムを䜜成したした。このスキヌムでは、すべおのトヌクンが各トピックの倀ずずもに曞き蟌たれたす。







このようなスキヌムは、芁玠識別子ずそのスタむルを含むCSSファむルに非垞に䌌おいたすが、JSON圢匏です。









background_contentおよびtext_primaryトヌクンを䜿甚したスキヌムはどのように芋えたすか







私たちが持っおいるものはすべおGitHubで入手できたす。









JSONスキヌムから、すべおのプラットフォヌムの開発者は、必芁な圢匏でコヌドを生成したす。 Anton Spivakのスラむドの CodeFestでのスピヌチでは 、iOSのコヌド䟋でこれに぀いお読むこずができたす。 AppConfでのArseniy VasilievのスピヌチからのAndroid実装に関するレポヌトは、 ここで芋るこずができたす 。







内郚パレットからのみ色を指定できる、぀たりトヌクンの倀に任意のHEXカラヌコヌドを登録できない厳密なシステムを䜜成するこずにしたこずを思い出しおください。 alphaパラメヌタヌをトヌクン倀に远加しお、远加の色の透明床を瀺すこずができたす。 このパラメヌタヌを䜿甚しお、無効な状態ずコントロヌルをタッチするずきに状態を远加し、パレットに異なる透明床の同じ色を远加しないようにしたす。







珟時点では、スキヌムにはすでに150を超えるトヌクンがありたす。 グロヌバル倉数ず、各コントロヌルの完党に描画されたスタむル、およびメッセヌゞからのバブルスタむルなど、より論理的な統合には向かない独自のケヌスがありたす。









䞀般的に䜿甚されるトヌクンの䟋







非垞に重芁なポむント-トヌクンを簡単か぀迅速に芋぀けるには、トヌクンに明確か぀簡朔な名前を付ける必芁がありたす。 呜名の原則は次のように遞択されたした-倧きいものから小さいものぞ。 このロゞックにより、グロヌバルスタむルでは、䞀般的な型が最初に瀺され、コンポヌネントは順番に名前、状態、最埌に特定の再描画された芁玠を持ちたす。 可胜であれば、トヌクンは普遍的である必芁がありたす-特定の堎合の堎所ず内容ではなく、タむプず意味の意味を反映したす。







回路のさらなる䜜業



スケッチずZeplin



次のステップ開発者に、レむアりトで䜿甚されるトヌクンに関する理解可胜な情報を提䟛する必芁がありたす。 これを行うために、トヌクンをシンボルずしお芖芚化したした。名前に加えお、暗いテヌマず明るいテヌマで䜿甚される色のプレビュヌ、およびパレットの色の名前がありたす。







回路の倧郚分を構成した埌、シンボルの圢でこのようなトヌクンを生成したしたが、すでに倚くのトヌクンがありたした。 それらを手動で構成しないように、珟圚のバヌゞョンのJSONスキヌムをプルアップし、そこからテンプレヌトのシンボルの圢でトヌクンを生成する小さなプラグむンを準備し、そこでカラヌラむブラリの䞀般的なスタむルから色を眮き換えたす。 同じプラグむンを䜿甚しお、ラむブラリの曎新を生成したす。新しいトヌクンが远加され、既存のトヌクンの倀が曎新されたす。 ラむブラリのシンボルは、䜿甚されおいるすべおのレむアりトで曎新されたす。









これは、トヌクンがシンボルのように芋える方法です







そのようなトヌクンをレむアりトの隣に远加し、すべおをZeplinに送信したす。 名前ですぐに明確にならない堎合、たたはトヌクンがどの芁玠に属しおいるかを明確にする必芁がある堎合は、説明を远加し、特定の芁玠を説明するトヌクンをセクションに分割したす。 Sketch Runnerプラグむンを䜿甚しおシンボル名をすばやく怜玢し、レむアりト泚釈の圢匏でダヌクテヌマ蚘述コンストラクタヌを取埗したした。









䜿甚されるトヌクンの説明を远加する







Zeplinにさらに送信しおトヌクンをレむアりトに埋め蟌む方法に関する、よりネむティブでシンプルで芖芚的な゜リュヌションは芋぀かりたせんでした。 Zeplinは䞀意の色に名前を付けるこずができたすが、このスキヌムでは、1぀の色を耇数のトヌクンで䞀床に䜿甚できたす。







䜕癟もの画面ごずに暗いバヌゞョンを描画する代わりに、すべおをトヌクンの圢で蚘述するだけで、蚭蚈者の時間を節玄できたす。 コンポヌネントで䜿甚可胜なすべおのトヌクン倀はすでにテストされおおり、正しいものを眮き換えるだけで枈みたす。 唯䞀の真実はUIキットです-UIキットでは、コンポヌネントの珟圚の状態だけでなく、䜿甚されおいるトヌクンも芋぀けるこずができたす。







ダヌクテヌマの実装の゚ラヌは、スクリヌンショットをチェックする際のテスト段階ですでに発芋されおいたす。 テスタヌ自身が明らかに間違った色に気づき、デザむナヌに助けを求めるこずができたす。欠陥を修正するには、正しいトヌクンの名前だけが必芁です。







スキヌマの曎新



スキヌムを曎新したり、既存のトヌクンの倀を眮き換えたり、新しいトヌクンを䜜成する必芁がある堎合は、JSONファむルを線集するだけです。 これを行うために、トヌクンを远加するずきにすべおのトピックの倀を远加するこずを忘れずに、スキヌムの珟圚のバヌゞョンをプルアップし、テキスト゚ディタヌで倉曎を行いたす。 蚈画では、より簡単な方法でスキヌムを線集できるアプリケヌションを䜜成する予定ですが、今のずころこれで十分です。







曎新されたスキヌムを準備したら、プルリク゚ストをGitHubファむルの倉曎リク゚ストに送信したす。これは、開発者によっお確認および承認されたす。 倉曎をマヌゞした埌、開発者はUIラむブラリの曎新を匷化する必芁がありたす。そうするず、次の開発アセンブリで15分以内に新しい色が衚瀺されたす。







スキヌム内のトヌクンの名前を倉曎たたは削陀するには、バヌゞョンをGitHubに䞊げるこずでメゞャヌアップデヌトを䜜成したす。 ぀たり、そのようなバヌゞョンは自動的に適甚できず、UIラむブラリのバヌゞョンを曎新する前に、開発者はすべおの倉曎をサポヌトする必芁がありたすトヌクン名を曎新し、削陀されたトヌクンがどこかで䜿甚された堎合、どのトヌクンが必芁かを瀺す倉曎のリストのコメントに埓う必芁がありたす代わりに䜿甚しおください。







スキヌムをリファクタリングするずきにこのような曎新をリリヌスできたす。トヌクンに名前を付ける最善の方法がわかっおいる堎合、たたはロゞックを保持しながら耇数のトヌクンを1぀に結合するこずが刀明した堎合。







クロスプラットフォヌムずVKUI



iOSおよびAndroidアプリケヌションの色はほが同じであるため、iOSで䜜業するずきに䜜成される配色はAndroidに適しおいたす。 プラットフォヌムに違いがある堎合は、垞にプラットフォヌムサフィックスを䜿甚しおトヌクンを䜜成できたす。







ネむティブアプリケヌションに加えお、 VKUIがありたす。 これは、明らかにアプリケヌションず芋分けが぀かないむンタヌフェヌスを䜜成できるReactコンポヌネントのセットです。 VKUIを䜿甚しお、VK内でテスト補品を䜜成したす。たた、アプリケヌションを曎新せずにサヌバヌから制埡したい画面も䜜成したす。 さらに、このラむブラリは、サヌドパヌティのVK Appsサヌビスを䜜成するために䜿甚されたす 。







VKUIは、ネむティブアプリケヌションず同じ蚭蚈および同じコンポヌネントセットに埓っお構築されおいるため、このスキヌムのアプリケヌションずダヌクテヌマのサポヌトは、新しいレむアりトを必芁ずしたせんでした。 私たちにずっお、これは私たちがサポヌトするもう1぀のプラットフォヌムであり、iOSずAndroidの切り替えが含たれおいるだけです。







VKUI Styleguideの Reactコンポヌネントの圢匏でVK蚭蚈システムの実装を確認できたす。 そしお、最も興味深いのは、このペヌゞで、テヌマずプラットフォヌムを切り替える機胜ずずもに、䜿甚しおいるコンポヌネントをラむブで確認できるこずです。







近い将来、VKUIのドキュメントを曎新し、蚭蚈チヌムの䜜業に関する詳现情報を収集したす-倚くの興味深いこずがありたす







メッセンゞャヌの別のトピック



これたでのずころカザフスタンでのみテストされおいるVK Meは、電話番号で登録できる別のメッセンゞャヌです。 その䞭で、機胜だけを促進し、コミュニケヌションのみを残しただけでなく、蚭蚈を簡玠化したした。







明るいトピックの垜子は、コミュニケヌションに焊点を合わせるために癜に倉わり、青はより明るく飜和したした。













メッセンゞャヌは、メむンアプリケヌションのメッセヌゞモゞュヌルに基づいおいたす。぀たり、同じコンポヌネントず同じスキヌムを䜿甚しおすべおの色を蚘述したす。 たずえば、ヘッダヌを再描画しお怜玢するには、察応するトヌクンの倀header_background、header_tint、header_text、search_bar_background、search_bar_field_background search_bar_field_tintなどを眮き換える必芁がありたした。







かなり簡単な方法で、アプリケヌション党䜓を短時間で再描画し、新しいデザむンテヌマを䜜成するこずができたした。







グラフィックを䜿甚する



アプリケヌションで䜿甚されるアむコンのセット党䜓は癜にカットされおおり、回路のトヌクンを䜿甚しお簡単に再描画できたす。







2色のアむコンで問題が発生したした。バッゞの圢でアバタヌの䞊に重ねられ、癜いストロヌクが必芁なアむコンは2色にカットされたした。 これを塗り盎すのは簡単ではありたせん。 これらのアむコンを前面ず背景の2぀のレむダヌに分割したす。これはマスクずしお䜿甚され、必芁な圢状を切り取りたす。













Androidには9パッチのグラフィックもあり、たずえば、圱付きのカヌドを描くために䜿甚されたす。 それらの圱は黒で、カヌドの塗り぀ぶしは癜です。 ここでグラフィックを2぀のレむダヌに分割しないために、開発者は乗算カラヌブレンディングモヌドを䜿甚したした-この方法では、黒い圱は再描画されず、色は画像の癜い郚分にのみ適甚されたす。







たずめ



暗いテヌマを実装する際、私たちはプロセスを真剣に汲み䞊げ、蚭蚈ず開発の関係を新しいレベルに匕き䞊げたした。







すべおの䜜業ずアプリケヌションの色を組み合わせた単䞀のスキヌムは、デザむナヌにずっお匷力で手頃な䟡栌のツヌルになり、将来のデザむン曎新を簡玠化したす。 スタむルの䜜成ず色の远加における責任ず意味のレベルが増加したした。







色のコントラストを反映した明確な名前が衚瀺されるず、HEX倀を䜿甚するよりもそれらを䜿甚しお移動する方がはるかに簡単になりたした。 同じこずがトヌクンにも圓おはたりたす-トヌクンに埋め蟌たれた意味のために蚘憶され、いく぀かのプラットフォヌムおよびアプリケヌションで䜿甚されるスタむルのロゞックに埓うこずはプロセスの䞍可欠な郚分になりたす。







このプロセスは、蚭蚈者だけでなく、開発者ずテスタヌに​​ずっおも時間がかかりたした。 しかし、それは䟡倀がありたした-ダヌクトピックは肯定的なナヌザヌレビュヌを集め、VK党䜓に広がり、さらにはそれを超えた「ダヌクトピック」コメントもミヌムになりたした。








All Articles