SlideShare a Scribd company logo
1 of 69
Download to read offline
※A(ngularJS)は使ってないのでMENstackです
非エンジニアが
MENstackでWebアプリをつくった話
自己紹介
■名前:
 木下 雄策(27歳・福岡出身) @afroscript10
■略歴:
 九州大学で宇宙の研究
 2013年 レバレジーズ入社
■今のお仕事:
 日本のエンジニア業界を最強にすること!!
 →エンジニア特化型Q&Aサイト【teratail】のDevRel担当
 →ITの勉強会【ヒカ☆ラボ】
■その他
 →Gs'ACADEMYでプログラミング修行中…
 →LIGブログ「0エンジニアから0.5エンジニアへ」連載中
おことり
僕、エンジニアでない上に、
プログラミングも超初心者なので、
もし間違ってたらすみません。。。
でも
プログラミングへの愛は
あるんです。。。
はじめたきっかけ
Node.js??
JSでサーバ側も書けるらしい!!
他の言語いらないじゃん!!
超かっこいい!!
JSでサーバ側も書けるらしい!!
他の言語いらないじゃん!!
超かっこいい!!
…で調べてみると、
非同期処理が特徴??
大量リクエストの処理が早い??
C10K問題 (クライアント1万台接続問題 )を解決する??
なんかすごい!
でも、まぁ僕が
1万台接続の負荷対策することないしな…
普通のWebアプリのサーバ側として
使ってみました。
結論
非エンジニアが
MENstackでWebアプリつくろうとしたら
ドットインストールでなんとかなる!
スタート時のスペック
スタート時(1.5ヶ月ほど前)の木下のスペック
・PHP→去年8ヶ月独学で勉強⇒挫折。
・HTML/CSS/JS/PHP→G'sアカデミーで一通り触ったくらい
・Unixコマンド→pwd/ls/cd/vi使うくらい
・Node.js/Express/MongoDB→まったくノータッチ
スタート時(1.5ヶ月ほど前)の木下のスペック
・PHP→去年8ヶ月独学で勉強⇒挫折。
・HTML/CSS/JS/PHP→G'sアカデミーで一通り触ったくらい
・Unixコマンド→pwd/ls/cd/vi使うくらい
・Node.js/Express/MongoDB→まったくノータッチ
今のスペック
今の木下のスペック
1ヶ月半で
Node.js × Express × MongoDBで
ごく簡単なWebアプリ(データのCRUD)は
できるようになった。
これくらいは
つくれた
G’sアカデミーの卒業制作(プログラミング学習サイト)の
サーバ側を書きました。
G’sアカデミーの卒業制作(プログラミング学習サイト)の
サーバ側を書きました。
MongoDBからとってきて表示
一応、Demo
こんな感じで
つくりました
(超神速で解説します)
※あと45枚スライドあります(笑)
ディレクトリ構造は
こんな感じ
ディレクトリ構造はこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
ディレクトリ構造はこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
ってコマンド打つと、
まずはここが読まれる
$ node app.js
ディレクトリ構造はこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
ってコマンドで、
モジュールをinstallしたら
ここにどんどん入ってく
$ npm install ●●●●
ディレクトリ構造はこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
何かやりたいと思ったら、
https://www.npmjs.com/
でモジュール探して、
以下のコマンドでinstall。
$ npm install ●●●●
ディレクトリ構造はこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
最初は気にしない。
(どのモジュール使ってるか
とかの情報が入ってる )
ディレクトリ構造はこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
見たまんま。
画像/JS/CSS等の
静的ファイルが入ってる
ディレクトリ構造はこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
app.jsで使う
関数とか変数とかで
外部ファイルに分けたいやつを
入れる感じ?(多分)
ディレクトリ構造はこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
その名の通り、
view関連のファイル。
今回はejsパッケージ使ってます。
⇒ https://www.npmjs.com/package/ejs
ディレクトリ構造はこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
レッスン受講ページ
レッスン一覧ページ
サーバ側のコードは
こんな感じ
サーバ側のコードはこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
ここを見ていきます!
モジュールの宣言とか
//「このモジュールを使いますよ」宣言
var express = require('express'),
bodyParser = require('body-parser'),
methodOverride = require(‘method-override’),
cookieParser = require('cookie-parser'),
session = require('express-session'),
csrf = require('csurf'),
path = require('path'),
app = express(),
MongoClient = require('mongodb').MongoClient,
mongodb = require('mongodb'),
settings = require('./routes/settings');
モジュールの宣言とか
//「このモジュールを使いますよ」宣言
var express = require('express'),
bodyParser = require('body-parser'),
methodOverride = require(‘method-override’),
cookieParser = require('cookie-parser'),
session = require('express-session'),
csrf = require('csurf'),
path = require('path'),
app = express(),
MongoClient = require('mongodb').MongoClient,
mongodb = require('mongodb'),
settings = require('./routes/settings');
まずは、
「このモジュールを使います〜」って
宣言をつらつら。
必要なモジュールを読み込んでくれる。
モジュールの宣言とか
//「このモジュールを使いますよ」宣言
var express = require('express'),
bodyParser = require('body-parser'),
methodOverride = require(‘method-override’),
cookieParser = require('cookie-parser'),
session = require('express-session'),
csrf = require('csurf'),
path = require('path'),
app = express(),
MongoClient = require('mongodb').MongoClient,
mongodb = require('mongodb'),
settings = require('./routes/settings');
Express使うための
オブジェクトをつくる
モジュールの宣言とか
//「このモジュールを使いますよ」宣言
var express = require('express'),
bodyParser = require('body-parser'),
methodOverride = require(‘method-override’),
cookieParser = require('cookie-parser'),
session = require('express-session'),
csrf = require('csurf'),
path = require('path'),
app = express(),
MongoClient = require('mongodb').MongoClient,
mongodb = require('mongodb'),
settings = require('./routes/settings');
MongoDB使うための
おまじない
モジュールの宣言とか
//「このモジュールを使いますよ」宣言
var express = require('express'),
bodyParser = require('body-parser'),
methodOverride = require(‘method-override’),
cookieParser = require('cookie-parser'),
session = require('express-session'),
csrf = require('csurf'),
path = require('path'),
app = express(),
MongoClient = require('mongodb').MongoClient,
mongodb = require('mongodb'),
settings = require('./routes/settings');
自作の外部ファイルや、
自作のモジュール使うときは
こんな感じ。
「./」を忘れずに!「.js」は省略可!
DBとの接続/静的ファイル読み込み設定
//DBとの接続
var lessons;
MongoClient.connect("mongodb://"+settings.host+"/"+settings.db, function(err,db){
lessons = db.collection("lessons");
);
//静的ファイルの設定
app.set('views', __dirname+'/views');
app.set('view engine', 'ejs');
DBとの接続/静的ファイル読み込み設定
//DBとの接続
var lessons;
MongoClient.connect("mongodb://"+settings.host+"/"+settings.db, function(err,db){
lessons = db.collection("lessons");
);
//静的ファイルの設定
app.set('views', __dirname+'/views');
app.set('view engine', 'ejs');
コレクションを扱うための
オブジェクトを作成
「静的ファイルはデフォルトで
 viewsファイル読んでください」って意味 (多分)
「__dirname」は現在のディレクトリ
外部ファイルからの呼び出し
//DBとの接続
var lessons;
MongoClient.connect("mongodb://"+settings.host+"/"+settings.db, function(err,db){
lessons = db.collection("lessons");
);
//静的ファイルの設定
app.set('views', __dirname+'/views');
app.set('view engine', 'ejs');
外部ファイルの変数 /関数の
呼び出しはこんな感じ
//routes/settings.js
exports.host = '127.0.0.1';
exports.db = 'tsukutta';
外部ファイル側はこんな感じ
「exports.」をつければ外部ファイル呼び出しが
できるようになる。
middlewareを読み込む
//middlewareを読み込む
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser());
app.use(methodOverride('_method'));
middlewareを読み込む
//middlewareを読み込む
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser());
app.use(methodOverride('_method'));
app.useで読み込まれるものを
middlewareという。
リクエストが来ると、
上から順次適用していく。
⇒順番が重要!!
※詳しくはドットインストールで。
http://dotinstall.com/lessons/basic_expressjs/26506
ルーティング
//ルーティング
app.get('/',function(req, res) {
res.render('lesson/index');
});
app.get('/lesson/take/:id([0-9]+)' ,function(req, res) {
var stream = lessons.find({lessonId:Number(req.params.id)}).stream();
stream.on("data", function(item) {
res.render('lesson/take',{lesson:item});
});
});
ルーティング
//ルーティング
app.get('/',function(req, res) {
res.render('lesson/index');
});
app.get('/lesson/take/:id([0-9]+)' ,function(req, res) {
var stream = lessons.find({lessonId:Number(req.params.id)}).stream();
stream.on("data", function(item) {
res.render('lesson/take',{lesson:item});
});
});
HOMEディレクトリ('/')に
アクセス来たら、
views/lesson/index.ejsを読み込む
ルーティング(パラメータを使う)
//ルーティング
app.get('/',function(req, res) {
res.render('lesson/index');
});
app.get('/lesson/take/:id([0-9]+)' ,function(req, res) {
var stream = lessons.find({lessonId:Number(req.params.id)}).stream();
stream.on("data", function(item) {
res.render('lesson/take',{lesson:item});
});
});
./lesson/take/1 とかにアクセスがきたら
views/lesson/index.ejsを読み込む
「:●●」でパラメータを渡すことができる
 ※([0-9]+) は正規表現でパラメータを数値のみに限定
ルーティング(パラメータを使う)
//ルーティング
app.get('/',function(req, res) {
res.render('lesson/index');
});
app.get('/lesson/take/:id([0-9]+)' ,function(req, res) {
var stream = lessons.find({lessonId:Number(req.params.id)}).stream();
stream.on("data", function(item) {
res.render('lesson/take',{lesson:item});
});
});
与えられたパラメータを使って
MongoDBからデータを取ってくる。
※パラメータを使うには、
「req.params.●●」で使える。
取ってきたデータをlessonって変数に入れつつ、
views/lesson/take.ejsを読み込んで表示。
サーバを待機状態に
//サーバを待機状態に
app.listen(3000);
console.log("server starting...");
フロント側のコードは
こんな感じ
フロント側のコードはこんな感じ
参考:http://roudev.blogspot.jp/2012/11/nodejsweb.html
.
├──   app.js
├──  node_modules
├──  package.json
├──  public
│ ├──   img
│ ├──   js
│ └──   stylesheets
│   └──   lessons.css
├──  routes
│ └──   settings.js
└──  views
├──  footer.ejs
├──  header.ejs
└──   lesson
  └──   index.ejs
  └──   take.ejs
ここを見ていきます!
フロント側のコードはこんな感じ
//サーバを待機状態に
<h2 class="mini_title_str">
<%= lesson.lessonContents.Chap1.chapTitle %>
</h2>
ここっ!!
フロント側のコードはこんな感じ
//サーバを待機状態に
<h2 class="mini_title_str">
<%= lesson.lessonContents.Chap1.chapTitle %>
</h2>
・ejsモジュール使っている場合、
 <% %>の中にJSを記述
・値を表示させる場合は、
 <%= %>の中に記述。 ※「=」忘れがち!!
・エスケープしたくなかったら、
 <%- %>
ここっ!!
こうやって勉強した
こうやって勉強した
■15.11.07Node学園祭で NodeSchoolをやった
■ドットインストールで以下3つをやった。
 ・mongoDB入門(この内容をQiitaにまとめました )
 ・Node.js入門
 ・express入門
 →これでほぼつくれます!!
■ドットインストール注意点
 ・3系と4系に注意(動画は3系、この資料で紹介しているのはv4.1.2)
 ・動画下の「この動画について」の「補足情報」に載ってるんだ…
 →あとは以下のサイトでだいたいOK: 
  http://d.hatena.ne.jp/tomute/20140514/1400075607
  ※app.use(methodOverride()); のとこだけうまくいかなかった…
   →そこはここで解決:
   http://chaika.hatenablog.com/entry/2015/10/06/183604
■コマンドライン(ターミナル)が不安な方は…
 ・UNIXコマンド入門
こうやって勉強した
■15.11.07Node学園祭で NodeSchoolをやった
■ドットインストールで以下3つをやった。
 ・mongoDB入門(この内容をQiitaにまとめました )
 ・Node.js入門
 ・express入門
 →これでほぼつくれます!!
■ドットインストール注意点
 ・3系と4系に注意(動画は3系、この資料で紹介しているのはv4.1.2)
 ・動画下の「この動画について」の「補足情報」に載ってるんだ…
 →あとは以下のサイトでだいたいOK: 
  http://d.hatena.ne.jp/tomute/20140514/1400075607
  ※app.use(methodOverride()); のとこだけうまくいかなかった…
   →そこはここで解決:
   http://chaika.hatenablog.com/entry/2015/10/06/183604
■コマンドライン(ターミナル)が不安な方は…
 ・UNIXコマンド入門
非エンジニア的に
困ったとこ
コールバック関数の感覚
が馴染みづらい
コールバック関数の(木下的な)イメージ
■普通の関数のイメージ:
 ・言われたらやりますって感じ
 ・スポーツ格闘技型 (普段から鍛えてるけど、試合の日じゃないと戦わないよ )
function(x,y){ 処理 }
 …関数が呼び出されたら、処理します。
  引数がある場合:関数が呼び出されたら、与えられた x,yって値を使って、処理する
  →「x,yって武器が与えられて、それ使って試合しろって言われたから、それ使って戦います。」
   (x,yは引数なので、基本的に絶対使わなくちゃだめ なものって感じ)
コールバック関数の(木下的な)イメージ
■コールバック関数のイメージ:
 ・言われなくてもいつでも準備万端って感じ
 ・ストリートファイト型 (ケンカにゴングはないからつねに臨戦態勢だよね的な )
●●(’××',function(err,res,req){ 処理 });
 …●●が、××な状態になったらすぐ処理するように待機しています!
  そのときにerrとresとreqを使うかも。
  →「××な状態になった瞬間がゴングだ! errとresとreqって武器は元から隠しもってるから、
   いざとなったら使うぜ!」
   (err,res,reqは引数というより、始めから用意されている使っても使わなくてもいい 道具って感じ)
同期的な書き方と
非同期的な書き方が
混同…
同期的/非同期的な書き方の混同
//ドットインストールはこんな感じ
MongoClient.connect("mongodb://"+settings.host+"/"+settings.db, function(err, db) {
db.collection("users", function(err, collection) {
var stream = collection.find().stream();
stream.on("data", function(item) {
console.log(item);
});
stream.on("end", function() {
console.log("finished.")
});
});
});
ドットインストールは接続〜処理まで一環し
て非同期的に書いてた。
<こんな感じの書き方 >
```
DBに接続できたら…
 →コレクション扱うObjを作成したら…
  →処理()〜
 →接続終了
```
⇒接続部分切り出せないのか …??
 DBの処理書くとこ全部接続から
 書かないといけないのか …??
同期的/非同期的な書き方の混同
//こんな感じで、接続と処理を分けれた
var lessons;
MongoClient.connect("mongodb://"+settings.host+"/"+settings.db, function(err,db){
lessons = db.collection("lessons");
);
app.get('/lesson/take/:id([0-9]+)',function(req, res) {
var stream = lessons.find({lessonId:Number(req.params.id)}).stream();
stream.on("data", function(item) {
res.render('lesson/take',{lesson:item});
});
});
コレクション扱うオブジェクトだけ先に作成
したら、うまくいった。
分かったら簡単でしたが、
けっこう頭こんがらがりました …
まとめ
まとめ
■非エンジニアでもコマンドライン(ターミナル)が大丈夫なら、
 ドットインストール見てやるだけで動くものつくれる!
■普通のWebアプリのサーバ側としてでもOK。(むしろ使っていきたい)
■なによりサーバ側とフロント側の文法が変わらないのがうれしい!!
■なのでJSやってると学習コスト低いと思う。
■バージョンアップによる仕様変更が、初心者としては辛いかも。。
非エンジニアこそ全部JSで書こう!!
ご静聴、
ありがとうございました!

More Related Content

What's hot

2013 08-19 jjug
2013 08-19 jjug2013 08-19 jjug
2013 08-19 jjugsk44_
 
Scala、play初心者が触った感想 share用
Scala、play初心者が触った感想 share用Scala、play初心者が触った感想 share用
Scala、play初心者が触った感想 share用amkt922
 
プログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみたプログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみたHirokiIwanaga
 
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみたJavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみたSatoshi Takami
 
これからフロントエンジニアを目指すあなたへ
これからフロントエンジニアを目指すあなたへこれからフロントエンジニアを目指すあなたへ
これからフロントエンジニアを目指すあなたへMitsuru Ogawa
 
エンジニアが Webを学ぶために やっててよかったこと
エンジニアが Webを学ぶために やっててよかったことエンジニアが Webを学ぶために やっててよかったこと
エンジニアが Webを学ぶために やっててよかったことHirata Tomoko
 
GUIツールで送る快適な Gitライフ@Creators MeetUp #29
GUIツールで送る快適な Gitライフ@Creators MeetUp #29GUIツールで送る快適な Gitライフ@Creators MeetUp #29
GUIツールで送る快適な Gitライフ@Creators MeetUp #29Erina Takei
 
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?Toshio Ehara
 
jQueryで気をつけてほしいこと
jQueryで気をつけてほしいことjQueryで気をつけてほしいこと
jQueryで気をつけてほしいこと良太 増子
 
えっ?まだそのツール使ってるの?
えっ?まだそのツール使ってるの?えっ?まだそのツール使ってるの?
えっ?まだそのツール使ってるの?Daiki Egashira
 
20170722_Dragonboardで買い物メモ
20170722_Dragonboardで買い物メモ20170722_Dragonboardで買い物メモ
20170722_Dragonboardで買い物メモKenzo Nagahisa
 
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13智治 長沢
 
みんなが不幸にならないための要件定義の話
みんなが不幸にならないための要件定義の話みんなが不幸にならないための要件定義の話
みんなが不幸にならないための要件定義の話英明 伊藤
 
Wcan 2013 autumn_trident_mizuno
Wcan 2013 autumn_trident_mizunoWcan 2013 autumn_trident_mizuno
Wcan 2013 autumn_trident_mizunoTRIDENT
 
日曜プログラマーとigoogle先生
日曜プログラマーとigoogle先生日曜プログラマーとigoogle先生
日曜プログラマーとigoogle先生Yuusuke Takeuchi
 
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみようHoriguchi Seito
 
Make TypingGame in JavaScript
Make TypingGame in JavaScriptMake TypingGame in JavaScript
Make TypingGame in JavaScriptundertale1
 
Pythonで始める競技プログラミング
Pythonで始める競技プログラミングPythonで始める競技プログラミング
Pythonで始める競技プログラミングshunki fujiwara
 

What's hot (20)

2013 08-19 jjug
2013 08-19 jjug2013 08-19 jjug
2013 08-19 jjug
 
Scala、play初心者が触った感想 share用
Scala、play初心者が触った感想 share用Scala、play初心者が触った感想 share用
Scala、play初心者が触った感想 share用
 
プログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみたプログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみた
 
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみたJavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
 
これからフロントエンジニアを目指すあなたへ
これからフロントエンジニアを目指すあなたへこれからフロントエンジニアを目指すあなたへ
これからフロントエンジニアを目指すあなたへ
 
Ng mtg#3
Ng mtg#3Ng mtg#3
Ng mtg#3
 
Rnyoutube
RnyoutubeRnyoutube
Rnyoutube
 
エンジニアが Webを学ぶために やっててよかったこと
エンジニアが Webを学ぶために やっててよかったことエンジニアが Webを学ぶために やっててよかったこと
エンジニアが Webを学ぶために やっててよかったこと
 
GUIツールで送る快適な Gitライフ@Creators MeetUp #29
GUIツールで送る快適な Gitライフ@Creators MeetUp #29GUIツールで送る快適な Gitライフ@Creators MeetUp #29
GUIツールで送る快適な Gitライフ@Creators MeetUp #29
 
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
 
jQueryで気をつけてほしいこと
jQueryで気をつけてほしいことjQueryで気をつけてほしいこと
jQueryで気をつけてほしいこと
 
えっ?まだそのツール使ってるの?
えっ?まだそのツール使ってるの?えっ?まだそのツール使ってるの?
えっ?まだそのツール使ってるの?
 
20170722_Dragonboardで買い物メモ
20170722_Dragonboardで買い物メモ20170722_Dragonboardで買い物メモ
20170722_Dragonboardで買い物メモ
 
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
 
みんなが不幸にならないための要件定義の話
みんなが不幸にならないための要件定義の話みんなが不幸にならないための要件定義の話
みんなが不幸にならないための要件定義の話
 
Wcan 2013 autumn_trident_mizuno
Wcan 2013 autumn_trident_mizunoWcan 2013 autumn_trident_mizuno
Wcan 2013 autumn_trident_mizuno
 
日曜プログラマーとigoogle先生
日曜プログラマーとigoogle先生日曜プログラマーとigoogle先生
日曜プログラマーとigoogle先生
 
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
 
Make TypingGame in JavaScript
Make TypingGame in JavaScriptMake TypingGame in JavaScript
Make TypingGame in JavaScript
 
Pythonで始める競技プログラミング
Pythonで始める競技プログラミングPythonで始める競技プログラミング
Pythonで始める競技プログラミング
 

Viewers also liked

Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316septianarul
 
AWS Cloud Kata | Bangkok - Opening Keynote
AWS Cloud Kata | Bangkok - Opening KeynoteAWS Cloud Kata | Bangkok - Opening Keynote
AWS Cloud Kata | Bangkok - Opening KeynoteAmazon Web Services
 
Option Fundamental Fundamental_I_Certificate_10.03.2015
Option Fundamental Fundamental_I_Certificate_10.03.2015Option Fundamental Fundamental_I_Certificate_10.03.2015
Option Fundamental Fundamental_I_Certificate_10.03.2015Golden Gate University
 
Bezinningsteksten
BezinningstekstenBezinningsteksten
BezinningstekstenTrias ngo
 
Гликолим - линия профессиональных кислотных гликолевых пилингов Мирра
Гликолим - линия профессиональных кислотных гликолевых пилингов МирраГликолим - линия профессиональных кислотных гликолевых пилингов Мирра
Гликолим - линия профессиональных кислотных гликолевых пилингов МирраЕгор Белый
 
Интенсивный уход и предотвращение преждевременного старения
Интенсивный уход и предотвращение преждевременного старенияИнтенсивный уход и предотвращение преждевременного старения
Интенсивный уход и предотвращение преждевременного старенияЕгор Белый
 
Tugas 2 rekayasa web
Tugas 2 rekayasa webTugas 2 rekayasa web
Tugas 2 rekayasa webSugianto oo
 
Principles of Taxation in Economics
Principles of Taxation in EconomicsPrinciples of Taxation in Economics
Principles of Taxation in EconomicsSwapanK
 
Marketing and Brand Management 2016
Marketing and Brand Management 2016 Marketing and Brand Management 2016
Marketing and Brand Management 2016 Andrew Pourtov
 

Viewers also liked (20)

F:\gira de observacion a la refineria
F:\gira de observacion a la refineriaF:\gira de observacion a la refineria
F:\gira de observacion a la refineria
 
Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316
 
Rekayasa web
Rekayasa webRekayasa web
Rekayasa web
 
AWS Cloud Kata | Bangkok - Opening Keynote
AWS Cloud Kata | Bangkok - Opening KeynoteAWS Cloud Kata | Bangkok - Opening Keynote
AWS Cloud Kata | Bangkok - Opening Keynote
 
Profile of the Audit Office of Lebanon, SIGMA conference 16 December 2014
Profile of the Audit Office of Lebanon, SIGMA conference 16 December 2014Profile of the Audit Office of Lebanon, SIGMA conference 16 December 2014
Profile of the Audit Office of Lebanon, SIGMA conference 16 December 2014
 
A sniper in Dublin
A sniper in DublinA sniper in Dublin
A sniper in Dublin
 
Alevin d
Alevin dAlevin d
Alevin d
 
Option Fundamental Fundamental_I_Certificate_10.03.2015
Option Fundamental Fundamental_I_Certificate_10.03.2015Option Fundamental Fundamental_I_Certificate_10.03.2015
Option Fundamental Fundamental_I_Certificate_10.03.2015
 
SEXTO AÑO B
    SEXTO AÑO B    SEXTO AÑO B
SEXTO AÑO B
 
Тренды 2016 дизайн
Тренды 2016 дизайнТренды 2016 дизайн
Тренды 2016 дизайн
 
Bezinningsteksten
BezinningstekstenBezinningsteksten
Bezinningsteksten
 
Transforming Rehabilitation
Transforming RehabilitationTransforming Rehabilitation
Transforming Rehabilitation
 
Гликолим - линия профессиональных кислотных гликолевых пилингов Мирра
Гликолим - линия профессиональных кислотных гликолевых пилингов МирраГликолим - линия профессиональных кислотных гликолевых пилингов Мирра
Гликолим - линия профессиональных кислотных гликолевых пилингов Мирра
 
Интенсивный уход и предотвращение преждевременного старения
Интенсивный уход и предотвращение преждевременного старенияИнтенсивный уход и предотвращение преждевременного старения
Интенсивный уход и предотвращение преждевременного старения
 
Tugas 2 rekayasa web
Tugas 2 rekayasa webTugas 2 rekayasa web
Tugas 2 rekayasa web
 
Search refrence
Search refrenceSearch refrence
Search refrence
 
Principles of Taxation in Economics
Principles of Taxation in EconomicsPrinciples of Taxation in Economics
Principles of Taxation in Economics
 
Marketing and Brand Management 2016
Marketing and Brand Management 2016 Marketing and Brand Management 2016
Marketing and Brand Management 2016
 
Introducing SIGMA's Principles of Public Administration, Belgrade, 14 Decembe...
Introducing SIGMA's Principles of Public Administration, Belgrade, 14 Decembe...Introducing SIGMA's Principles of Public Administration, Belgrade, 14 Decembe...
Introducing SIGMA's Principles of Public Administration, Belgrade, 14 Decembe...
 
Concepts of Taxation
Concepts of TaxationConcepts of Taxation
Concepts of Taxation
 

Similar to 非エンジニアが MENstackでWebアプリをつくった話 #nodejs

XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論賢次 海老原
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときRyunosuke SATO
 
Nseg第32回勉強会
Nseg第32回勉強会Nseg第32回勉強会
Nseg第32回勉強会ko ty
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Yusuke Wada
 
Yidev201406.pub
Yidev201406.pubYidev201406.pub
Yidev201406.pubitoz itoz
 
今さら始めるJavaScript
今さら始めるJavaScript今さら始めるJavaScript
今さら始めるJavaScriptAshitaba YOSHIOKA
 
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜Toshio Ehara
 
魔法を使わないプログラミング(web公開版)
魔法を使わないプログラミング(web公開版)魔法を使わないプログラミング(web公開版)
魔法を使わないプログラミング(web公開版)hajikami
 
JavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へJavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へMuyuu Fujita
 
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ拓弥 遠藤
 
DevLove四国_LT_yohhatu
DevLove四国_LT_yohhatuDevLove四国_LT_yohhatu
DevLove四国_LT_yohhatuYoh Nakamura
 
three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現Kei Yagi
 
あたしデザイナだけど"ナントカ.js"と仲良くできたよ
あたしデザイナだけど"ナントカ.js"と仲良くできたよあたしデザイナだけど"ナントカ.js"と仲良くできたよ
あたしデザイナだけど"ナントカ.js"と仲良くできたよmomo yagi
 
goog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生までgoog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生までTeppei Sato
 
テストコードってすごい.pptx
テストコードってすごい.pptxテストコードってすごい.pptx
テストコードってすごい.pptxcistb220msudou
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!Oda Shinsuke
 
XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~
XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~
XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~Atsushi Ono
 

Similar to 非エンジニアが MENstackでWebアプリをつくった話 #nodejs (20)

XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
Nseg第32回勉強会
Nseg第32回勉強会Nseg第32回勉強会
Nseg第32回勉強会
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
 
Yidev201406.pub
Yidev201406.pubYidev201406.pub
Yidev201406.pub
 
今さら始めるJavaScript
今さら始めるJavaScript今さら始めるJavaScript
今さら始めるJavaScript
 
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
 
魔法を使わないプログラミング(web公開版)
魔法を使わないプログラミング(web公開版)魔法を使わないプログラミング(web公開版)
魔法を使わないプログラミング(web公開版)
 
JavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へJavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へ
 
Djangoのススメ
DjangoのススメDjangoのススメ
Djangoのススメ
 
Beginners scala 20121113
Beginners scala 20121113Beginners scala 20121113
Beginners scala 20121113
 
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ
 
Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
 
DevLove四国_LT_yohhatu
DevLove四国_LT_yohhatuDevLove四国_LT_yohhatu
DevLove四国_LT_yohhatu
 
three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現
 
あたしデザイナだけど"ナントカ.js"と仲良くできたよ
あたしデザイナだけど"ナントカ.js"と仲良くできたよあたしデザイナだけど"ナントカ.js"と仲良くできたよ
あたしデザイナだけど"ナントカ.js"と仲良くできたよ
 
goog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生までgoog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生まで
 
テストコードってすごい.pptx
テストコードってすごい.pptxテストコードってすごい.pptx
テストコードってすごい.pptx
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
 
XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~
XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~
XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~
 

More from Yusaku Kinoshita

集まっTail(集まっている)#8
集まっTail(集まっている)#8集まっTail(集まっている)#8
集まっTail(集まっている)#8Yusaku Kinoshita
 
Bridging the Gap for Beginners in Developer Communities@DevRelConTokyo_20170729
Bridging the Gap for Beginners in Developer Communities@DevRelConTokyo_20170729Bridging the Gap for Beginners in Developer Communities@DevRelConTokyo_20170729
Bridging the Gap for Beginners in Developer Communities@DevRelConTokyo_20170729Yusaku Kinoshita
 
集まっtail#7「teratailより」
集まっtail#7「teratailより」集まっtail#7「teratailより」
集まっtail#7「teratailより」Yusaku Kinoshita
 
「ゼロから構築するDev rel体制」20160316@devrelmeetup
「ゼロから構築するDev rel体制」20160316@devrelmeetup「ゼロから構築するDev rel体制」20160316@devrelmeetup
「ゼロから構築するDev rel体制」20160316@devrelmeetupYusaku Kinoshita
 
77枚の資料を5分で発表してみたやつ【G’s academy 卒業制作」発表資料(016.03.02) 】
77枚の資料を5分で発表してみたやつ【G’s academy 卒業制作」発表資料(016.03.02) 】77枚の資料を5分で発表してみたやつ【G’s academy 卒業制作」発表資料(016.03.02) 】
77枚の資料を5分で発表してみたやつ【G’s academy 卒業制作」発表資料(016.03.02) 】Yusaku Kinoshita
 
個人開発アプリのご紹介とあり得ない不具合に対する掲示板の活用事例
個人開発アプリのご紹介とあり得ない不具合に対する掲示板の活用事例個人開発アプリのご紹介とあり得ない不具合に対する掲示板の活用事例
個人開発アプリのご紹介とあり得ない不具合に対する掲示板の活用事例Yusaku Kinoshita
 
G'sアカデミー2期入学式資料(投影資料版)
G'sアカデミー2期入学式資料(投影資料版)G'sアカデミー2期入学式資料(投影資料版)
G'sアカデミー2期入学式資料(投影資料版)Yusaku Kinoshita
 
5分でわかるphalcon php
5分でわかるphalcon php5分でわかるphalcon php
5分でわかるphalcon phpYusaku Kinoshita
 
効率的かつユニークな学習法
効率的かつユニークな学習法効率的かつユニークな学習法
効率的かつユニークな学習法Yusaku Kinoshita
 
Google先生との付き合い方(lightwill氏)
Google先生との付き合い方(lightwill氏)Google先生との付き合い方(lightwill氏)
Google先生との付き合い方(lightwill氏)Yusaku Kinoshita
 
20150226 炎上を防ぐためにフロントエンドエンジニアとしてできること
20150226 炎上を防ぐためにフロントエンドエンジニアとしてできること20150226 炎上を防ぐためにフロントエンドエンジニアとしてできること
20150226 炎上を防ぐためにフロントエンドエンジニアとしてできることYusaku Kinoshita
 

More from Yusaku Kinoshita (13)

集まっTail(集まっている)#8
集まっTail(集まっている)#8集まっTail(集まっている)#8
集まっTail(集まっている)#8
 
Bridging the Gap for Beginners in Developer Communities@DevRelConTokyo_20170729
Bridging the Gap for Beginners in Developer Communities@DevRelConTokyo_20170729Bridging the Gap for Beginners in Developer Communities@DevRelConTokyo_20170729
Bridging the Gap for Beginners in Developer Communities@DevRelConTokyo_20170729
 
集まっtail#7「teratailより」
集まっtail#7「teratailより」集まっtail#7「teratailより」
集まっtail#7「teratailより」
 
「ゼロから構築するDev rel体制」20160316@devrelmeetup
「ゼロから構築するDev rel体制」20160316@devrelmeetup「ゼロから構築するDev rel体制」20160316@devrelmeetup
「ゼロから構築するDev rel体制」20160316@devrelmeetup
 
77枚の資料を5分で発表してみたやつ【G’s academy 卒業制作」発表資料(016.03.02) 】
77枚の資料を5分で発表してみたやつ【G’s academy 卒業制作」発表資料(016.03.02) 】77枚の資料を5分で発表してみたやつ【G’s academy 卒業制作」発表資料(016.03.02) 】
77枚の資料を5分で発表してみたやつ【G’s academy 卒業制作」発表資料(016.03.02) 】
 
Motohashi.#3
Motohashi.#3Motohashi.#3
Motohashi.#3
 
個人開発アプリのご紹介とあり得ない不具合に対する掲示板の活用事例
個人開発アプリのご紹介とあり得ない不具合に対する掲示板の活用事例個人開発アプリのご紹介とあり得ない不具合に対する掲示板の活用事例
個人開発アプリのご紹介とあり得ない不具合に対する掲示板の活用事例
 
G'sアカデミー2期入学式資料(投影資料版)
G'sアカデミー2期入学式資料(投影資料版)G'sアカデミー2期入学式資料(投影資料版)
G'sアカデミー2期入学式資料(投影資料版)
 
5分でわかるphalcon php
5分でわかるphalcon php5分でわかるphalcon php
5分でわかるphalcon php
 
効率的かつユニークな学習法
効率的かつユニークな学習法効率的かつユニークな学習法
効率的かつユニークな学習法
 
150612 middleman(ikuwow)
150612 middleman(ikuwow)150612 middleman(ikuwow)
150612 middleman(ikuwow)
 
Google先生との付き合い方(lightwill氏)
Google先生との付き合い方(lightwill氏)Google先生との付き合い方(lightwill氏)
Google先生との付き合い方(lightwill氏)
 
20150226 炎上を防ぐためにフロントエンドエンジニアとしてできること
20150226 炎上を防ぐためにフロントエンドエンジニアとしてできること20150226 炎上を防ぐためにフロントエンドエンジニアとしてできること
20150226 炎上を防ぐためにフロントエンドエンジニアとしてできること
 

非エンジニアが MENstackでWebアプリをつくった話 #nodejs