初めてのホームページ開発手記 part0

## 経緯
- 知り合いが農業をやっており、事業拡大を今後考えるためにホームページを作成したいという話をされた。

- 自分は普段画像処理ミドルウェアの開発なのでWeb系はHTML, CSS, javascriptが読み書きできるくらい、node.jsはちょっと触ったことあるレベルだから正直わからん、、、けどスキルアップしたいということでまずはモックを作ってみるよ！ということにした。

## 開発環境

### 開発マシンどうする
- とりあえず自分のPCを汚したくなかったので、virtual boxで仮想マシンを構築して開発する方針にする  

- virtual boxにubuntu18.04を入れてみたところ重い・・・自分のPCはメモリが8GBしかないためちょっときついか、、、→ xUbuntuは軽い、という記事をみたので virtual box + xUbuntu18.04 で開発してみることにする。
 
### なにつかって開発すればいいの？
- 調べてみたところ、WordPressを使用してホームページを作ることが多いらしい、ブログとかは特に。 
 CMS(Contents Management System)というらしい、専門的な知識がない人でも簡単にホームページを作れるようになる、というところが目的らしい。

- でも自分は、javascriptコードとか書いてガチャガチャ動かせるようにしたかったのでちょっと違うかな、という感じ。一応WordPressでもできるみたいだけど、、、webアプリっぽい感じで開発したかった。 
 あとWordPress自体がPHPベースで作られているみたいで、PHPかぁ～という感じであった。会社であんま使われているの聞いたことないから勉強してもなぁと。

- 有名どころのweb開発フレームワークとしては<br>PHP Laravel<br>Ruby on Rails<br>あたりが有名みたいだった。

- 個人的にjavascriptを極めていきたかったのでサーバーサイドもjavascriptでやっていきたいということで調べたところ出てきたキーワード node.js, Express, jQuery, Angular, vue.js, React...沢山あるけど微妙に役割が違うみたいよくわからん、、、<br>どれがフレームワークで、どれがライブラリ？サーバーサイド？クライアントサイドで動作？ということで整理する？

- というかそもそもWebサイトを作りたいのか、Webアプリを作りたいのかにもよって使うものが違う気がするのでそこも整理したい。

#### 私はWebサイトとWebアプリどっちつくるの？
今回やりたいと考えたこと    

- 情報の発信<br>生産者のこだわりとかアクセスマップとか、そういう情報を閲覧者に伝えたい。
- 問い合わせフォーム、取り扱い商品の販売のようにレスポンシブな感じ

以上を踏まえて以下のサイトを参考にすると、対話成分が入る場合はWebアプリケーションという考えとして設計していった方が良いみたいだ。
[参考リンク: IBM様 Web サイトから Web アプリケーションへの変換](https://www.ibm.com/developerworks/jp/web/library/wa-websiteapp/index.html)  

ということで今回は情報提供を中心としたWebアプリケーション開発をすることにします！！

#### node.jsってなに？
- Node.jsとはサーバーサイドでjavascriptを使用できるようにしたもの、Webサーバーとしても動作する。
- あくまで実行環境を提供するようなイメージであって、これ自体はフレームワークとは言わないようである(フレームワークとしては大きすぎる)。

#### Express
- Node.js上で動作するMVCフレームワーク。これはフレームワーク、ふむ。サーバーサイドにいれるものということか。

- MVCとはModel View Controller モデル・ビュー・コントローラ を意味していて、そういうデザインパターンのこと、UIとロジックを分ける、みたいなイメージですね。

- 「Express」「Meteor」「Sails」がJavaScriptの三大フレームワークらしい。

- Expressを使用したCMSとしてKeyStoneJSというものがあるみたい、本番では使ってみようかな。

#### jQuery
- JavaScriptのライブラリの一つ。ふむ、これはフレームワークではないのね、なるほどね。
- フロントエンド(クライアントサイド)で使用されることが多いらしい、JavaScriptのライブラリなのでサーバーサイドでも使えるらしい。
 
#### Angular  
- シングルページアプリケーション (SPA)の開発に向いているJavaScriptフレームワークの一つ、なるほどこれはフレームワーク。<br> だけどこれはフロントエンドフレームワーク、つまりExpressとは用途が違うということ

- SPAとはクライアント側でHTMLを動的生成するアプリケーションのこと、一々サーバー側には問合せしない、なるほど。

- Angular / vue.js / Reactで比較されることが多い。AngularはGoogleが開発している。 

- ルーティングなど必要な機能が全部入ったフルスタックフレームワークらしい。実はクライアントサイドでルーティングという意味がよくわかってないです、サーバーサイドのルーティングと共存するの？


#### React
- FaceBookが開発

- Angularと同じくフロントエンドで使用されるJavaScriptフレームワークの一つ、として扱われることも多いが、FaceBookはJavaScriptライブラリ、と言っているらしいのでライブラリとして考えたほうが良い。

- UIに特化しているみたいなのでライブラリの方がしっくりくる。


#### Vue.js
- Angularと同じくフロントエンドで使用されるJavaScriptフレームワークの一つ。

- Googleの中の人(エヴァン・ヨー氏)がAngularの前身のAngularJSを開発に携わったが、そこから好ましい部分を抜き出して再構築しなおしたものがVue.jsらしい。<br>エヴァン氏世の中に貢献しすぎ、すごい。

- UIに特化しているようで、ルーティング等は別のライブラリを使用するらしい。じゃあReactと同じでライブラリじゃない？と思ったけど使ってみたら違いがわかるのかもです。

- [こちら](https://qiita.com/gumiTECH/items/13eb7da8224bf93c67b5)の記事に比較がありました、わかりやすいです。


### 最終的に決めた環境
クライアントサイドのルーティングとサーバーサイドのルーティングを混ぜるとちょっと開発が大変そうにみえたので、初学者ということもあるのでまずはサーバーサイドでレンダリングすることに注力したいと思います。
SPAだと機能提供メインのアプリって感じがしますし。
ということで

- サーバーサイド<br> node.js, Express でいきます！DB使う場合はMongoDBと相性がよさそう。

- クライアントサイド<br> CSSフレームワークはbootstrapでレスポンシブデザインなサイトを目指します！