なんだかんだNUTMEGはフロント人材が少し不足しつつあります。 フロントエンドをこれから勉強する後輩に向けて書きました。
~ fin ~
ごめんなさい
人に見える箇所の実装をviewと言います。ザ・フロントな部分です。 これに関しては、しょうみプログラミングというよりはパズルゲームに近いです。
冗談ではなくて、テトリスやパズドラとあまり変わらず、書いて慣れるしかないと思います。逆に慣れたら脳死で書けます。
例えとしてヘッダーを考えてみます。
これはどういうDOMになるか考えてみましょう。 DOMはHTMLとかで見る下のような入れ子構造のことです。
<div>
<p>test</p>
<div>
<p>hogehoge</p>
</div>
</div>
ヘッダーをDOMにしたいので、ざっとそれぞれの要素をタグに置き換えて考えてみましょう。
赤枠がdivタグ、緑枠がpタグやらaタグです。 おそらく大体こんな感じになると思います。(勘) Portfolioをdivで囲むかどうかは任せます。ロゴなので、ロゴ画像などが追加されるのを想定してdivで囲んでいます。 これができたら、あとは書き起こすだけです。
<div>
<div>
<div>
<p>Portfolio</p>
</div>
<div>
<p>About</p>
<p>Work</p>
<p>Link</p>
</div>
</div>
</div>
上のコードの入れ子構造と、ヘッダーの図の入れ子構造が一致しているのがわかるでしょうか。これが僕がview部分をパズルゲームと言っている理由です。
実装したいviewのどの部分がどの塊になっているかを取られることができれば、自然とコードを書くことができます。
あとはCSSを当てるだけですが、これも慣れで、全体の内容を上下左右中央揃えにして、ロゴとメニューは端に寄せて、メニューは1remごとの隙間を開けたらそれっぽくなると思います。 大体はflexやgridが解決してくれます。
実際にコードに起こすと以下のページみたいになります。
https://codepen.io/imaimai17468/pen/GRXPyer
ただひたすら書きまくること
個人開発をしまくる
競プロをやる
「ViewとLogicを分離する」とよく言われるLogicくんです。 apiから受け取った値を処理したり、フォームなどで入力した値を処理したり、フロント側で処理する部分を指します。
フロントは一見人に見える部分を作るだけに思われがちですが、それらを描画するために必要な情報を、裏でapiから送受信して処理するのもフロントの仕事です。
フロントエンドはこいつが沼です。 これに比べればviewなんて赤ちゃんです。 ロジックになると途端に「プログラミングぽさ」が増します。
Logicの例を挙げます。
プログラミングに慣れる
Arrayのprototype関数を知る
型について知る
競プロをやる
僕はこの記事で、HTML/CSSは簡単だぜ〜な旨の文章を書いています。 ただ、簡単だからといって、これを飛ばしてReactやVueを触ることはお勧めしません。
それが簡単であることとなおざりにしていいことは別だからです。
HTML/CSS+JSの知識は、すべてのフロント知識の根底に紐づいています。 なので、これをやらずに先端的な技術を学ぶと、挫折する確率が高いです。
どの技術にしても、チェーンの繋がってない、関係性の薄い技術に急に触れようとすると、挫折率が高くなることを覚えておいてください。
といっても、最近の技術はチュートリアルが充実していて、初心者でも触れやすいようになっているので、とっかかり自体は掴みやすくなっています。
ですが、その技術をより深く潜ろうと思うほど、根底にあるHTML/CSS+JSについての知識量が露呈していきます。
軟弱な地盤に立派な家は立たないので、基礎知識を固めることはとても重要です。
CSSを使わず簡単にスタイルを記述する方法がいくつもあります。
これらのライブラリは、<Card>
とか<Button>
とかのコンポーネントがあり、スタイルを書かなくてもおしゃれなUIを実装することができます。
(TailwindCSSはclassNameに記述するのでちょっと違う)
でも、それらをカスタマイズしたい時、結局はstyleを指定してあげなくてはいけません。 これらのライブラリにはあらかじめ、カスタマイズするために、CSS likeな書き方をするための方法があります。
例えば、中にある要素を縦に中央揃えで整列させたい時、TailwindCSSなら
<div className="flex flex-col items-center">
<div>hoge</div>
<div>huga</div>
</div>
MaterialUIなら
<Box sx={{dispaly: 'flex', flexDirection: 'column', alignItems: 'center'}}>
<Box>hoge</Box>
<Box>huga</Box>
</Box>
のようになります。 CSSに慣れていると1分足らずでかけますが、そうでないと普通に悩みます。 結局、先端的技術であってもCSSの知識は必要であることがわかります。
ちなみにゆめみのフロントエンドコーディングテストでは、CSSの知識を見るために、こういったCSS系のライブラリの使用を禁止されています。
別に、HTML/CSS+JS
もできないのに新しい技術を触るな!😠という訳では全くありません。新しい技術にたくさん触ることは重要ですし、いつまでも足踏みしている暇はないと思います。
基礎は大事だという単純な話だと捉えてください。
サービス開発でReactなんかを学びながら、暇な時に、ポートフォリオなんかをHTML/CSS+JSなんかで書いてみたりして、成長した頃に、それをReactなんかでリプレイスしてみてください。
最初にReactを触った時より基礎ができてきて、少しは書きやすくなってるんじゃないかなと思います。
色々と難しいことをいってきましたが、フロントはそこまで怖いものじゃありません。基本的に結果は視覚的に現れますし、バックエンドより直感的に書けると思います。
それに、量子コンピュータやディープラーニングの最先端よりかは、よっぽど一般人でも挑戦しやすい技術でもあります。
学んで損のある技術はありません。
テストで点を取るために学んだ行列の回転が、ゲームの3D処理の原理と関わっていたり、Pythonが使えるからという理由で適当に採用したFastAPIに、実はSwaggerが標準搭載されているのを後から知ったり、どの技術がどれと繋がっているのかは、とても判断できません。
僕が今フロントエンド1つの技術に特化できているのは、その裏で何十もの技術を殺してきたからに他なりません。
フロントエンドはweb開発の基礎となる技術なので、ぜひ触れてみて欲しいなと思います。
これは技術以外にも言えます。思いつきで加入したバイト先が協賛企業になってくれたり、人やイベントでの繋がりだって何に発展するかわかりません。
NUTMEGという巨大な支援を背に、この先の1年というの短い間も、アクションを起こし続けていきたいなと思います。
NUTMEGに入ったみんなは特急券を持っています。
成功の反対は何もしないことだって、好きな厳ついラッパーが言ってました。 技術に自分から触れることを恐れないでください。
金を稼げるレベルまではいけなくとも、何か1つアウトプット行くところまでは、ある程度の技術は独学でいけるものと思っています。
先輩から振られた技術やタスクだけじゃなく、気になった技術を積極的に触っていって欲しいなと思います。 そして、触れた経験から、こんなものが作れそうだな、活かせそうだなというアイデアを生み出して、個人制作なりNUTMEGのプロジェクトなりに落とし込んでくれたらなと思います。
以上、3000文字以上のポエムを読んでいただきありがとうございました。