入門者必見：Webサービスを作るときに覚えとくと「あ、聞いたことある。」となるツール群まとめ(Node界隈を中心に)


勉強してると、次から次へと新しい言葉が出てきて自分が何がわかって何がわからないかがわからなくなってきてしまう時があります。
はじめに薄く広く知識を持っておくと、勉強が捗ることがあります。
ここでは、サーバサイドJavaScriptを使ってWebサービスを作るときに出てくるツール群を薄く広く取り上げます。

# Webのベースとなる言語
Webとは、様々なファイルをサーバからブラウザにダウンロードしてユーザに画面を提供する仕組みです。ダウンロードされるファイルはここで上げているものと、後は画像くらいです。これを抑えておけば大丈夫です。
## [JavaScript](http://www.ecma-international.org/memento/TC39.htm)
nodeでアプリケーションを作るために主に利用するプログラミング言語です。とても美しく（主観）エレガント（主観）であり、シンプルです。
## [HTML](http://www.w3.org/TR/html5/)
タグ（<hoge></hoge>のような）形式で画面を作ることができます。HTML5というと、HTMLのバージョン5のことです。HTML5はHTMLの次世代企画で、サーバー間通信ができるWebSocketや、お絵書きできるCanvas等、いろんな機能が追加されています。
## [CSS](http://www.w3.org/TR/CSS21/)
HTMLの装飾ができます。色を替えたり、大きさを替えたり、場所を替えたりできます。ちょっと書くのがメンドクサイので、[SCSS](http://sass-lang.com/)のようなCSSを生成するための仕組みもあります。

# 実行環境
# [node.js](https://nodejs.org/)
JavaScriptを動かすための実行環境です。ChromeというブラウザのJavaScriptを実行する仕組みを利用して作られています。

# [nvm](https://github.com/creationix/nvm)
nodeにも、たくさんのバージョンが有ります。同じPCで複数のnodeを使いたいときに、nvmを利用すると、バージョンの切り替えが簡単です。

# [npm](https://www.npmjs.com/)
nodeのパッケージマネージャです。nodeには、その上で動く色々なライブラリ、ツールが有りますが、それをコマンド一発でインストールすることができます。依存性（ツールが別のツールを利用すること）も解決して、必要なソフトを全部入れてくれるので楽ちんです。

# ビルドツール
アプリケーションを自分のパソコンで作った後は、たいていは他の場所、別のパソコンや、サーバ上で動かしたくなります。その際のセットアップ（準備や設定）をするためのツールです。ビルドツールを利用すると、準備や設定をするのを手伝ってくれます。
## [grunt](http://gruntjs.com/)
わりと人気のツールです。
## [gulp](http://gulpjs.com/)
gruntに対抗すべく出てきたツールで、これからもっと人気になりそう（主観）です。

# フレームワーク
アプリを作る上では、「決まったやり方」で作っておくと、他の人と共作するときにもやり方を伝える必要が少なくなりますし、決まりきったやり方であれば他の人が作った物を流用できるので便利です。そのための決まったやり方と、それをアプリケーションにしたものがフレームワークです。
# [express](http://expressjs.com/)
Webサイトを作るためのフレームワークです。
# [sequelize](http://docs.sequelizejs.com/en/latest/)
データベースにアクセスするためのフレームワークです。
# [AngularJS](https://angularjs.org/)
画面を作るために使えるフレームワークです。Google謹製
# [React](https://facebook.github.io/react/)
画面を作るために使えるフレームワークです。Facebook謹製。
# [JQuery](https://jquery.com/)
ブラウザ間の挙動の違いをなくしてくれたり、便利機能を提供してくれます。JQueryは正確にはフレームワークではありません（やり方は提供しない）が、ここでご紹介。

# テストフレームワーク
テストを自動化して、変更が入るたびにテストが行われるようにするのが最近のアプリ開発の主流です。自動化に使えるツールもたくさん出ています。
## [Jasmine](http://jasmine.github.io/)
自動テストを書くためのフレームワークです。老舗。
## [Mocha](http://mochajs.org/)
自動テストを書くためのフレームワークです。人気。
## [Selenium](http://www.seleniumhq.org/)
ブラウザを自動操作するためのツールです。入力やボタン操作を勝手にやってくれるのはオモシロイ。お試しの価値有りです。（主観）FirefoxのSeleniumプラグインを使うとすぐに確認できるのでやってみてください。

# 自動化ツール
何かイベントがあった時に処理を自動で実行してくれるアプリケーションです。イベントとは、ソースの更新だったり、ある時間が来た時です。
## [Jenkins](https://jenkins-ci.org/)
オープンソースの自動化ツールです。人気です。
## [Travis](http://www.travisonline.com/)
自動化ツールをサービスとして提供しています。


# Alt.js
nodeはJavaScriptで動きますが、JavaScriptとは別の言語を使いたいちょっとかわった（主観）人もいます。その人達のために、JavaScriptに変換できる、JavaScriptではない、JavaScriptに似た言語があります。そんな言語のことをAlt.jsといいます。
## [TypeScript](http://www.typescriptlang.org/)
Microsoftが作ったAlt.js、ちょっとお固く、また、ちょっと未来を先どってJavaScriptを書けます。
## [CoffeeScript](http://coffeescript.org/)
手抜きしてJavaScriptが書けます。

# 動かす環境、いわゆるクラウド。
自分のパソコンや、買ってきたサーバ上でもnodeは動きますが、最近の主流はクラウド。リモートにあるサーバを調達してその上で動かすことができます。
## [Amazon Web Services(AWS)](http://aws.amazon.com/jp/)
Amazonが提供しているクラウドです。有名で機能が豊富です。最初に触るなら、こちらが良いです。
## [Heroku](https://www.heroku.com/)
簡単にサイトを公開できます。好き。（主観）
## [Google Compute Engine](https://cloud.google.com/compute/?hl=ja)
Googleのクラウドです。好きだった。（主観） 
## [Microsoft Azure](http://azure.microsoft.com/ja-jp/)
Microsoftのクラウドです。

# Webサーバ
nodeはそれ自体でWebサーバにもなりますが、複数のnodeアプリを立ち上げたり、アクセスするURLによって別のアプリに切り替えたり、通信を暗号化するなどは、Webサーバを使ったほうが機能が豊富です。
## [Apache](http://httpd.apache.org/)
皆知ってます。
## [nginx](http://nginx.org/ja/)
最近人気のWebサーバです。設定が簡単で、早いです。

# データベース
データを保存しておくときに、簡単にデータを追加したり、変更したり、使ったり、削除するために利用するものです。

## RDB
皆知ってます。SQLというデータ取り出し方法が使えます。RDB（リレーショナルデータベース）は規格のようなもので、製品には[PostgreSQL](http://www.postgresql.org/),[MariaDB](https://mariadb.org/),[Oracle](http://www.oracle.com/jp/database/overview/index.html),[DB2](http://www-01.ibm.com/software/jp/info/db2/),[sqlite](http://www.sqlite.org/),等々、た～くさんの物があります。
## NoSQL
RDBは正確にデータを扱うことが得意ですが、（すごく）大量のデータを扱うことは時に苦手です。そこで出てきたのが、NoSQLDBです。RDBではないデータベースの総称で、[MongoDB](https://www.mongodb.org/)やら、[Hadoop](https://hadoop.apache.org/)やら、これもたくさーんの物があります。

# エディタ（IDE）
プログラミングをするときには、それ専用の書くツールを使うと楽なことが多いです。もちろん、ただのメモ帳でも作れますが、見づらかったり、間違って書いた場所が探せなかったりします。
## [Eclipse](https://eclipse.org/)
大好き（主観）
## [Vim](http://ja.wikipedia.org/wiki/Vim)
無言（主観。下手に口を出すと戦争に巻き込まれるため。）
## [Emacs](http://ja.wikipedia.org/wiki/Emacs)
無言（主観。下手に口を出すと戦争に巻き込まれるため。）

# バージョン管理
アプリを作っている時に、あるバージョンのソースコードやドキュメントの一式をとっておきたいことがあります。そんな時に利用するのがバージョン管理ツールです。チームでソースを共有したいときにも使えます。
## [Git](http://ja.wikipedia.org/wiki/Git)
Linuxを作った人が作ったバージョン管理システムです。最近一番人気ではないでしょうか。Gitを使ってサービス提供しているGithubというサービスがあります。無料で使えるので使ってみるといいです。
## [Subversion](https://subversion.apache.org/)
Gitの前には主流でした。

# チケット管理
アプリを作っている時に作業を記録したり、人に作業をお願いするときに作業を「チケット」として管理するツールです。
## [Redmine](http://redmine.jp/)
オープンソースのチケット管理システムです。
## [Track](http://trac.edgewall.org/)
オープンソースのチケット管理システムです。昔からあるプロジェクトでは使われていることが多いでしょう。
## [Jira](https://www.atlassian.com/ja/software/jira)
最近のオープンソースで大人気です。基本有料です。