ネイルの工程をプログラミングで書いてみる〜その1〜

ネイルの工程をプログラミングで書いてみる〜その1〜

らぼろぐ

    イハ

    最近ようやくプログラミングをかじれてきました。見習いのイハです。
    PCが突如としてお亡くなりになったり、IDとパスワードを忘れたりしてて、
    投稿しないまま放置してしまった半年前に書いた記事の処遇をどうするか悩んでいる今日この頃です。

    ようやくプログラムが書けるようになってきて楽しいんだけど、
    動くんだけどオブジェクト指向じゃないんだよね〜と指摘を受けたので、
    いくつかその手の本を読んでみたんですね。

    例とかあって分かりやすいんだけど、なんとなく分かるんだけど、イマイチピンとこない。
    そもそも例が自分にとっては全然身近じゃなくて、よく分からないんだなと気付きました。

    私に読解力がないのではないかという説はありますが、分からないんだから仕方ない!
    自分で自分に分かるように書いてみるしかない!

    ので、身近なことをプログラミングしてみるよ!

    普段は何も考えずにただ推しを追いかけているだけなので、
    身近なことで何をプログラミングしてみるのがいいか考えたら、
    唯一趣味と言えるレベルでやってたのがセルフネイルだったので、
    セルフネイルの工程をプログラミングしてみることにしました。

    どこの層に刺さるのか全くもって不明ですがそもそも刺す気はないのでいいです。

    大体のネイルの手順(ざっくり)

    1.爪の形を整える
    2.ベースコートを塗る
    3.ベースの色を塗る
    4.ラインを引く
    5.パーツを乗せる
    6.トップコートを塗る

    とりあえずざっくり

    class Nail
      def apply
        ['hand_right', 'hand_left'].each do |_parts| # 右手と左手
          5.times do # 指の数分繰り返す
            爪の形を整える
            ベースコートを塗る
            ベースであるネイビーを塗る
            ゴールドのラインを引く
            白のストーンを乗せる
            トップコートを塗る
          end
        end
      end  
    end
    

    これは敢えてただやることを並べたので、悪意はあります。
    さすがにここまでやばいことはしません。

    問題点を考えてみる

    class Nail
      def apply
        ['hand_right', 'hand_left'].each do |_parts| # 右手と左手
          5.times do # 指の数分繰り返す
            爪の形を整える
            # 毎回形を変えたくなるかも?
            ベースコートを塗る
            # これはほぼ不変だろう
            ベースであるネイビーを塗る
         # 全部の指が同じ色じゃないこともあるしそもそも全体塗らなかったりするかもね
            ゴールドのラインを引く 
         # 違う色にしたいかもしれない・そもそもラインは不要な場合があるかも?
            白のストーンを乗せる
            # 不要な可能性・逆に一つの爪に対して複数乗せるかも
            トップコートを塗る
          end
        end
      end  
    end
    

    親指だけちょっと違うデザインとか、指ごとに色が違うとか、一口にネイルと言ってもいろんなデザインがあるので対応できないですね。
    いろんなデザインに対応できるように、いろんな指定ができるように、リファクタしていきます。

    とりあえずメソッドに分ける

    class Nail
      def apply
        ['hand_right', 'hand_left'].each do |_parts| # 右手と左手
          5.times do # 指の数分繰り返す
            format(square) # 爪をスクエア型に整える
            fill_basecort # ベースコートを塗る
            paint_basecolor(navy) # ネイビーでベースのカラーを塗る
            add_line(gold) # ゴールドでラインを引く
            add_object(white_stone) # 白のストーンを乗せる
          end
        end
      end
    
      # 爪の形を整えるメソッド
      def format(type)
        typeの形に爪を整えるよ!
      end
    
      # ベースコートを塗るメソッド
      def fill_basecort
        ベースコートを塗るだけ
      end
    
      # ベースのカラーを塗るメソッド
      # カラーは指定できる
      def paint_basecolor(color)
        colorで色を塗るよ
      end
    
      # ラインを引くメソッド
      def add_line(color)
        colorでラインを引くよ
      end
    
      # 装飾物を乗せるメソッド
      # 乗せる装飾物は引数で渡す
      def add_object(object)
        objectを乗せるよ
      end
    end
    

    とりあえず色違いのデザインは流用して作れるようになりました。

    でもそもそも1つの指ごとに全行程を実行するこの構造微妙じゃない?
    全ての指で同じ作業はまとめてやった方が楽じゃない?

    ということでまた次回。

    この記事はいかがでしたか?

    writer
    イハ
    イハ

    エンジニア

    最年少・唯一の新卒というオイシイポジションに甘えているゆとり世代です。優しく指導してくださる先輩方によって生かされています。常にメモリが足りません。人生をかけて、推しにお金を振り込む推し事をしています。Photoshopが少しできます。Railsが書けません。

    関連記事

    ページトップへ