37
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

「一人で書いて、一人で使うコード」しか書いたことがない新卒web系開発エンジニアがだいたい必要な技術領域をつかむ

Last updated at Posted at 2016-10-19

はじめに

情報科学系の大学+大学院に6年通って,web系のエンジニアになったはいいものの、いわゆる「web系」のエンジニアは知らなければならない、あるいは使えなければならない技術領域が広すぎて呆然としながら、なんとかなんとか勉強しながら失敗しながら前進する・・という方は意外と多いのではないかと思っています。まさにぼくです。よく企業紹介のスライドとかで出てくる技術スタックも全く知らないソフトウェア・ライブラリばかり…学生時代からweb技術に多く触れてきた同期に引け目を感じながら、なんとかついていっております…。

そこで,今まで科学技術計算系の「プログラミング」さらに言えば自分で書いて、自分で動かすコードしか書いてこなかったし教科書的な知識しかない!という学生の方に、web系で必要な技術領域に関して名前ベースで大雑把にまとめて、ググる指針になる記事を書こうと思い立ちました。

web系開発エンジニアの技術領域

計算機科学一般

応用情報技術者試験くらいのレベルの知識はもっていたほうがいい.OSなど,ある程度低レイヤの知識があるとデバッグで助かったりする.非同期処理やGCなどは,高級プログラミング言語より低レイヤーな知識がないと理解しきれない部分もある。

インフラ

サーバ構築の自動化

サーバの設定テスト

  • Serverspec

VM/仮想環境

  • Vagrant (サーバクライアント型)
  • docker (コンテナ型)
    • Kubernetes (Docker オーケストレーションエンジン)

このあたりは様々なソフトウェアのハンズオンでよく利用されるので勉強しておくと良さそう。
特に Docker や Kubernetes (i18n などと同じノリで k8s と略されることが多い) は現代的なソフトウェアエンジニアリングでは多用される技術スタックの一部である。スケールアウトの容易性からアプリケーションを k8s に乗せて本番運用するようなケースも多くあります。後述の Cloud サービスでも Amazon EKS (AWS), GKE (GCP) などで利用可能。

IaaS, PaaS, SaaS

  • AWS (Amazon Web Services)
  • GCP (Google Cloud Platform)
  • Azure (Microsoft)

必ずしもインフラを自社で持たない企業も増えています。

ネットワーク

  • 知識
    • OSS基本7レイヤー
    • TCP/IPの基本
    • L7
  • ソフトウェア/ツール
    • GUI
      • wireshark(パケットキャプチャツール)
    • CUI
      • ping/nslookup等の基本コマンド

ネットワークエンジニアとしてというweb上の資料がよくまとまっていて勉強に良さそう。

セキュリティ

  • 暗号化基礎
    • 共有鍵暗号・公開鍵暗号
  • SSL, HTTPS
  • Web アプリケーションにおける様々な脆弱性
    • XSS
    • CSRF
    • OSコマンドインジェクション
    • SQLインジェクション
    • ...

このあたりを体系的に学びたいなら、いわゆる徳丸本がおすすめ。

開発

プログラミング一般のトピック

  • (Web開発における)プログラミング言語
    • 筆者は Java はじめとした JVM 系の言語を利用する Web エンジニアだが、世間一般では Ruby, Perl, PHP, Python などのスクリプト言語もよく使われる。
    • 関数型言語
      • Haskell, Scalaとか。
  • KISS, DRY, YAGNIなどの基本原則
  • 非同期プログラミング
    • リアクティブプログラミング
      • RxJava, Reactor..
    • コルーチン

アプリケーション(共通)

設計

  • デザインパターン
    • 一般的なものは知識として知っておくと便利
  • UML (Unified Modeling Language)
    • 設計を図にするための共通プロトコル的なもの
    • クラス図・シーケンス図あたりは頻出
    • PlantUML という UML 言語があるのでそちらも合わせて覚えよう.
  • MVC, MVVM等のMV*アーキテクチャ
    • 最近は Flux も流行り。

SCM

  • git
  • subversion

バージョン管理ツール.これは大学でも使ったことがあるひとが多いかも.gitがだいぶ一般的ですが,subversionも今だ現役です.ホスティングサービスとしてはGitHubやBitbucketがよく知られます.オンプレで動作するGitLabやGitHub enterpriseもあります。

SCM on web

  • GitHub
  • GitLab
  • Bitbucket

ビルド自動化/CI/CD

  • Jenkins
  • CircleCI
  • TravisCI
  • Drone

参考になるページ:Java製アプリを Eclipse から実行したことしかない新人に「ビルドツールとは?」を説明してみる…そして CI へ

テスト

  • TDD
  • Unit test
  • 境界値分析
  • Performance Test / Stress Test

アプリケーション(サーバ)

Webフレームワーク

  • Ruby on Rails (Ruby)
  • Spring (Java)
  • Play (Scala/Java)
  • Laravel, CakePHP (PHP)
  • Django, Flask, Pyramid (python)
  • Express (Node.js・サーバサイドJavascript)

その他のライブラリ・ミドルウェア等

イベントバス
  • Akka
メッセージキュー
  • Kafka
  • RabbitMQ
  • ActiveMQ
  • Redis

他にも分散型メッセージングミドルウェアの詳細比較に例あり。
Push型・Pull型の違いについても抑えておきたい。
資料としてはこちらがよいと思う。

アプリケーション(クライアント)

native

  • Android
  • iOS
ゲームエンジン
  • Unity (C#)
  • Cocos-2dx (C++)
  • Unreal
その他
  • アーキテクチャ。MVVM, MVP, クリーンアーキテクチャ...
  • Flutter などのモバイルアプリケーションフレームワーク

Javascript / HTML / CSS

MV*ライブラリ(フレームワーク)
  • React + Redux
  • Angular2
  • Vue.js
フレームワークのフレームワーク(?)
  • Next
  • Nuxt

Node.js のサーバを内包して、 SSR などに簡単に対応できる。

UIライブラリ
  • bootstrap
  • material-ui
jQuery
  • jQuery
パッケージマネージャ
  • npm
  • yarn
  • bower
タスクランナー
  • Gulp
  • Grunt
トランスパイラ
  • webpack
  • browserify
  • babel

JS方言をブラウザで読めるように変換してくれるツール

linter
  • ESLint
JavaScript方言
  • ES6, TypeScript, CoffeeScript
CSSプリプロセッサ
  • SASS(SCSS)
  • Stylus
  • LESS

データベース

RDBMS

  • MySQL
  • PostgreSQL
  • SQLite
  • Oracle (商用)

NoSQL

  • Key-Value
    • Redis, memcached
  • Row oriented
    • HBase, Cassandra
  • Document DB
    • MongoDB
  • Graph DB
    • Neo4j

原則として RDBMS を使うことが多いと思うが、スケールアウトの容易さや処理の複雑性が上がったことなどから NoSQL も重要性が増している。

TSDB (Time Series DB)

  • InfluxDB
  • OpenTSDB
  • Druid
  • Prometheus

ログ解析

ログ解析は少し特殊で、これだけで関わってくるミドルウェアが多いので別途項目分け。
こちらのスライドにある図がとてもわかり易いです。

アグリゲータ、ストリーム処理

  • Fluentd
  • Apache Flume
  • Logstash

比較はこちらなど。
こちらの記事では push / pull の比較も。

ログデータストア

  • Elasticsearch
  • Prometheus
  • InfluxDB

時系列処理に特化したものが使われることが多い。結果としてTSDB(Time-Series Database)が多い。

ストリームプロセシング

  • Apache Spark (Spark Streaming)
  • Apache Flink
  • Apache Storm
  • Apache Samza
  • Kafka Streams

分散ストリーム処理エンジンは乱立しているらしい。
こちらのスライドIoT時代におけるストリームデータ処理と急成長の Apache Flinkもわかりやすい比較。
というかなんで同じ Apache Foundation でこんなにあるんや。。

ログ可視化 / BI tools

  • Kibana (from Elastic Stack)
  • Grafana
  • Tableau

Elasticsearch + Logstash + Kibana = ELK stack
Elasticsearch + Fluentd + Kibana = EFK stack (日本で流行しているとされる)

SaaS for Logging

  • Newrelic
  • Mackerel

データ分析

Web 系の話じゃないの?と言われそうだが、最近はビッグデータ解析を迫られるエンジニアも多そうなので大項目として分離した。

Hadoop エコシステム

大規模データ解析のための技術の集合体。

Hadoop コア

  • YARN
    • リソース管理
  • HDFS
    • ファイルシステム
  • MapReduce
    • 分散データ処理

その他

  • Apache Spark
    • 高機能な分散データ処理。MapReduce を置換する。
  • Apache Impala / Apache Hive
    • SQL による HDFS 上のデータの分析
  • Apache Zeppelin
    • Spark などの処理を web 上で記述できる notebook アプリケーション。
  • Apache Kudu
    • HDFS と HBase の間を補完するカラムナ(列志向)ストレージエンジン。
    • Cloudera 製。

その他の分析環境

  • R
  • Python

といった言語がデータアナリストが多く利用する言語と言われる。CV界隈では MATLAB もよく利用される。

37
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?