Afternoon Log

日々のことや、技術的な備忘録を吐き出していくつもり

web系僕視点での、働く前に

前起き

社会人になるまでに何勉強したら良いっすかねと聞かれて、
うまく答えられなかったのでちょっとしたお詫びに書こうと思う。
で何を書くかなんだが、ビジネスマインド的なことはネットにお任せして
自分からは技術寄りで発信しよう。
技術と言っても幅広いが、
自分は今社内のwebアプリケーション開発に携わっているのでそれを軸に綴っていく。

勿論、全て正しいことを伝えられるとも思ってないし、抜け漏れも当然あるだろう。
なので気楽にお願いしたい。

結論

先に言っちゃうと、
「手元のPCから、システムがユーザーに使われるまでの過程」を知っておくと良いと思う。
序でに、QCD(Quality, Cost, Delivery)のことも頭の隅に残しながら。

さて、それじゃあ順番に書き殴っていこう。


設計

1人で趣味開発していると割とおざなりになりそうだなって思う。
サーバはフロントバック混合みたいな形にするのか、フロントとAPIを分けるのかとか、そういったサーバ構成。
サーバレスも全然あるだろう。
データの永続化は行うのか?それならばRDBかNoSQL、それともファイルで直接か?
キャッシュは?オブジェクトストレージは?
何のフレームワーク/アーキテクチャを使う?ディレクトリ構成は?
などと様々な粒度で色々言いだしたらキリが無いだろうが、
どういった手段があるのか知っているだけで検討の幅が広がる。

開発

どんな感じに作っていくか決まった後で、コーディングに移っていくだろう。
とりあえずgit入れて、masterにpushしながらの開発は勿体ないだろう。
gitを使うならgithub flow/git flow 辺りをベースにするのが良いと思う。
加えて、進捗やチーム開発においては誰が何をしているか見えた方が良いので、タスク管理ツールを使うだろう。
お手軽に試すなら、github projectsあたりか。

だー!って処理を書いていると、ついつい単体テストを忘れてしまう。
実際自分は入社してからテスト書くようになった。
品質の話は後でしようと思うが、まぁテストはあった方が良いよね。

CI/CD(Continuous Integration/Continuous Delivery)

例えば、nginxの設定をして、ソースコードを直接サーバに移して、起動用のコマンドを叩けばアプリケーションは動くだろう。
したくない。
CI/CDを導入すれば、設定次第なところもあると思うが、テスト/パッケージ作成/デプロイと自動化できる。
これは品質やコストの話になるが、手作業をなくし自動的にアプリケーションを起動できれば単純に手間が減るだけなく、
設定ミスによって起動しないということが防げたり、スケールアウトが容易に行えたりと、
CI/CDの名の通り継続的に価値を提供出来ることになる。
ツールとしては、jenkinsとかCircleCI、gitlab CIとかか。

品質

個人的には結構重要視していることであるが、如何せん広すぎて何を書けば良いのかも迷ってしまう。
パッとイメージするのは、セキュリティだろうか?
どんな攻撃があって、どう防ぐのか。
攻撃を受けた際に、データを守るために何が出来るのか。
ただ、品質=セキュリティでもなく。
綺麗なコードというのも高品質だし、テストにおいてコーナケースなどしっかり書けているのも高品質だろう。
そんな中で個人であまり行わないなぁと思ったのは、冗長化あたりかなと思った。
大量のリクエストを捌くためにLBによる負荷分散したり、DBをマスタースレーブ構成にしたり。
勿論、他にも色々あるだろうし、これまたキリが無い。
だからといって、過度に損なって欲しくない。

終わり

疲れた。
書きすぎもアレかなと思ったので、このくらいで。
何の勉強をしたら良いかと聞かれたら、なりたい姿に至る勉強が一番だと思うが、
それが不明瞭であるのが往々にしてあるだろう。
なので、web系で働いている自分からはこんな感じと。
しつこいが、これが全てじゃないし、足りないところばかりかもしれない。
なので、ご参考程度になれば幸い。